Salesforce Lighting(面向销售2)

学习目标

完成本单元后,您将能够:

  • 使用Lightning App Builder创建一个自定义主页。
  • 创建一个自定义列表视图。
  • 使用紧凑布局和页面布局更改Lightning Experience记录详细信息页面上的布局。

自定义销售功能

自定义Salesforce的最简单方法是更改​​每个页面上可见的内容。例如,删除您的团队不需要的仪表板,或添加您的团队可以找到有用的功能。

让我们看看Ursa Major的Salesforce管理员Maria Jimenez如何为她的团队优化页面。大熊座做伟大的业务提供太阳能组件和系统。

Logo for Ursa Major Solar, Inc.

但是玛丽亚不能把所有的时间都分配给Salesforce管理员。

她最近与整个Ursa Major的利益相关者合作,为公司的销售团队规划定制。她的代表问,她做了一些改变,回家和领导。 Maria知道用Lightning App Builder调整这些页面是一个很好的选择。

你的朋友,闪电的应用程序生成器

使用我们的点击工具Lightning App Builder自定义Salesforce页面。使用它,您可以添加或删除组件,并使用拖放操作在页面上移动它们。这很容易。尝试一下,然后你可以为你的销售代表,销售经理或其他团体定制页面。

Lightning App Builder支持标准,自定义和第三方组件。

组建 这种闪电组件
标准 来自Salesforce的标准。
自定义 是您或您公司的另一个好友创建的东西。经过一些修改,
自定义Lightning组件可以在Lightning App Builder中工作。
第三方 是可以从Salesforce市场,AppExchange中获取的东西。在其中,
找到包含已经配置的组件的包,并准备在Lightning App Builder中使用。

在这个模块中,我们关注标准组件。但是这个过程对于定制和第三方组件来说都是一样的。在这里完成后,进入Lightning App Builder模块。

主页是心之所在

或者说,家是玛丽亚计划赢得她的代表心中,她给了他们的预定事件的概述。玛丽亚也可以给他们关于他们的客户和快速访问他们的交易的消息。

The default Home page.

在Salesforce中,配置文件确定您的代表可以执行的操作。开箱即用,您将获得多个标准配置文件,例如系统管理员(即Maria)和标准用户(大多数其他用户)。如果你想通过工作职能分组用户,你可以设置更多。玛丽亚,但坚持标准用户配置文件。使用Lightning App Builder,她在登录到Salesforce之后可以在Home上更改销售代表的标准用户配置文件。

玛丽亚用一个自定义的主页替换默认主页,只包含她的代表说他们最需要的。

  • 关于他们客户的最新消息
  • 他们的任务列表
  • 计划的事件
  • 快速访问他们最近使用的记录

她可以决定稍后添加更多,但是她将从这四件事开始。

创建一个新的主页

玛丽亚确定季度表现图不是她的代表每天想要看到的第一件事,所以她把它从家里带走。就是这样。

  1. 从Lightning Experience中的设置中,在快速查找框中输入App Builder,然后选择Lightning App Builder。
  2. 要创建Lightning页面,请单击New。
  3. 选择主页,然后单击下一步。
  4. 选择标准主页,然后单击下一步。
  5. 将您的新闪电页面命名为自定义标准用户主页。
  6. 点击完成。

添加标准组件

玛丽亚做了一个模型,展示了这四个组件的位置,使它们一目了然。

以下是玛丽亚如何设置新的主页。

  1. 从Lightning Experience中的设置中,在快速查找框中输入App Builder,然后选择Lightning App Builder。
  2. 单击自定义标准用户主页旁边的编辑。
  3. 单击“Lightning组件”窗格中的标准Top Deals组件。
  4. Drag Top Deals to the top left rectangle in the Lightning Page Canvas area.

    Add the Top Deals Component

  5. 单击“Lightning组件”窗格中的标准最近项目组件。
  6. 将最近的项目拖到右上方的矩形。
  7. 在“属性”窗格中,单击“选择”。然后,将对象科目,潜在客户和机会从可用拖动到选定。点击OK。

    Add Account, Lead, and Opportunity to the Selected objects.

  8. 在“属性”窗格中,在要显示的记录数中输入一个数字。玛丽亚决定从6开始。她可以稍后改变数字。

    Customize Number of Records to Display.

  9. 单击“Lightning组件”窗格中的标准Today’s Tasks组件。
  10. 将今天的任务拖到Top Deals下的左侧矩形中。
  11. 单击“Lightning组件”窗格中的标准Today’s Events组件。
  12. 将今天的事件拖到今日任务上方的右边矩形中。

    The final layout of Maria's Home page.

  13. 点击 Save.
  14. 点击 Activate.
  15. 选择将此页面设置为默认主页,然后单击下一步。
  16. 点击 Activate.

当您单击“主页”选项卡时,您可以看到新的自定义主页。

The custom Home page as it appears when the Home tab is clicked.

更多的方法来定制页面

Lightning App Builder只是您可以用来自定义页面的工具之一。现在,玛丽亚简化了代理商的主页,她计划优化代理商用来查找和查看记录的其他页面。

每个Salesforce对象都有其自己的主页,供您的代表在单击对象的选项卡时查看。例如,当您单击机会时,您将在主页上寻找机会。或点击帐户,然后登陆主页查看帐户。获取图片?对象主页显示该对象的记录列表。然后,当您的代表选择一个记录,他们看到该记录的详细信息页面。

您可以自由定制家庭和详细信息页面。或者疯狂地使用Lightning App Builder来制作新的页面。

玛丽亚决定,她不需要新的网页。相反,她想调整已有页面上的内容。

创建一个自定义列表视图

玛丽亚的代表想要快速查看某些类型的帐户。她希望通过为每个区域设置自定义列表视图来帮助她的代表。

她先从厨房的锅里拿出一杯热咖啡。然后,她坐在办公桌前找出自定义列表视图。

Full cup of coffee

以下是她如何创建列表视图。

  1. 点击 Leads.
  2. 点击 List View Controls (2).

    List View Controls

  3. 选择 New (3).
  4. 将列表命名为本周的潜在顾客,然后选择所有用户都可以看到此列表视图。然后,点击保存。

    New List View Named This Week's Leads

  5. 在筛选器面板中,选择显示我,然后选择所有线索。点击完成。

    Show All Leads

  6. 点击添加过滤器。选择字段创建日期。选择运算符等于。然后,输入值THIS WEEK。

    New List View to Show This Week's Leads

  7. 点击 Done.

繁荣!创建自定义列表视图非常快,在咖啡变冷之前,Maria又创建了五个线索。

Half cup of coffee

Maria使用页面布局来更改某些项目在其记录详细信息页面中的显示位置。她还使用紧凑的布局来更改记录标题中显示的关键字段。在她喝完咖啡之前她能完成这一切吗?

自定义记录详细信息页眉

因为主角是大多数大客户的来源,所以玛丽亚首先在主客体上工作。

The default header for Lead.

  1. 在安装程序中单击对象管理器。
  2. 点击 Lead.
  3. 点击 Compact Layouts, 然后点击New.
  4. 在“标签”字段中输入一个名称。
  5. 从可用字段中选择这些字段,然后单击向右箭头将其移至选定字段。
    • Name
    • Title
    • Company
    • Rating
    • Lead Status
    • Lead Owner
  6. 使用向上和向下箭头,根据您的偏好更改字段的顺序。我们建议您将名称移到顶部。这样,记录的名称出现在页面的顶部。

    Steps 4, 5, and 6.

  7. 点击 Save.
  8. 点击 Compact Layout Assignment,然后点击 Edit Assignment.
  9. 选择你的新的紧凑的布局。

    Steps 8 and 9.

  10. 点击 Save.

现在,Leads的标题包含Maria的销售代表首先想要查看的信息。

The header layout for Lead after Maria's done.

自定义记录详细信息页面布局

紧凑的布局更改了Lightning Experience和Salesforce应用程序页面顶部显示的信息。要添加,删除或移动标题下的信息字段,Maria会编辑潜在客户的页面布局。

在更改紧凑布局时,Maria添加到标题中的五个字段现在在Lead细节页面上显示两次。一些重复的字段不能从页面中删除。这是因为他们是必填字段,或者因为删除他们会使她的代表难以编辑字段。她可以选择将它们移动到页面的不同部分,例如下面的字段不出现在标题中。

现在,Maria将删除页面布局中不需要的一个字段。她还将添加一个显示她的代表是否他们的线索已经选择不接收电子邮件的字段。

就是这样。

  1. 在安装程序中单击Object Manager.
  2. 点击 Lead.
  3. 要调整潜在客户的默认布局,请单击页面布局,然后单击潜在客户布局。
  4. 向下滚动到“潜在客户”部分。
  5. 点击Lead Lead字段并将其拖到调色板。

    注意

    玛丽亚不能从布局中删除公司和潜在客户状态字段,因为它们是必填字段。她可以删除标题和分级字段,但是这些字段不能从标题中编辑。

    Step 5.

  6. 点击员工数字段并将其拖到年度收入字段下方。
  7. 在调色板中,单击“电子邮件退出”字段,然后将其拖动到“电子邮件”字段下方。

    Step 7.

  8. 点击 Save.

只需点击几下,Maria就会更改Salesforce销售代表所看到的销售线索信息。 现在,她的代表可以跟踪和找到他们最需要的信息,并且很容易地发现他们的线索是否选择不接收电子邮件。 而玛丽亚做完之前,她甚至完成了咖啡!

Near-empty cup of coffee

下午晚些时候,玛丽亚将会进一步改变线索。 例如,玛丽亚计划添加一个选项,让她的代表注意他们的线索是否喜欢在固定电话或手机号码上联系。 为此,她创建一个自定义字段,然后将其添加到页面布局,就像她添加“电子邮件退出”字段的方式一样。

我们没有涵盖这个模块中的自定义字段,但是只要你准备好,了解如何创建自定义字段。 到了一天结束的时候,领导对象将准备好滚动。 这就是为什么Ursa Major的每个人都会把自己的Rock Star管理员叫做Maria。

Salesforce Lighting(面向销售1)

学习目标

完成本单元后,您将能够:

  • 描述如何自定义Salesforce影响采用和项目成功。
  • 确定Sales Cloud产品在销售周期中的位置。
  • 在定制之前先描述研究的重要性。

欢迎!

作为Salesforce管理员,帮助销售团队充分利用Salesforce是非常重要的。我们在这里帮你做到这一点。因为当你的销售团队成功时,你公司的业务就会蓬勃发展,你也是如此。

我们可以帮助您加快速度,以便您了解和设置帮助销售团队的销售功能:

  • 开发新的业务
  • 培育客户以鼓励重复的业务
  • 参与健康的竞争
  • 报告交易中的交易,并报告销售结果

我们也可以帮助您组建一个成功的项目团队,了解您的销售代表需要从Salesforce获得什么,并制定用户采用计划。但是,在您走之前,您是否完成了Salesforce Basics和Lightning Experience功能模块?我们问,因为这些模块提供了一个很好的基础上,你可以建立这个线索,让您从中获得最大的利益。
如果你准备好在这条路上继续下去,太棒了!我们急于帮助您对您的销售团队的成功率产生重大影响。

Salesforce提供什么

即使您使用标准的开箱即用功能,Salesforce也是非常有用的。但是您有机会使Salesforce以一种为您的团队提供量身定制的销售体验的方式工作。

首先,让我们了解一下您的销售团队可用的功能。

重要的地区 我们帮助销售代表和经理做什么 我们称之为 寻找的图标
勘探 工作线索的目标是将其转化为产品和服务购买客户。
亲眼看看主角工作区如何让您的代表走上改善与潜在客户关系的道路。在“参考资料”部分中观看“合格”并高效转换“潜在客户”视频。
潜在客户 Leads icon
通过直邮,研讨会,平面广告,电子邮件和其他类型的营销材料管理出站营销活动。
将广告系列组织到层次结构中,以便于分析,以查看最适合增加公司销售额的工具。
广告活动 Campaigns icon
根据贵公司的销售流程进行交易。
亲眼看看机会工作空间如何让您的代表走上正在进行的交易和管理渠道。在“参考资料”部分中观看“工作机会”和“管理您的管道”视频。
机会 Opportunities icon
让销售代表采用贵公司的销售流程来寻找工作线索和机会。把重点放在线索和赢得交易的重要性上。 销售路径
在舞台上组织的视觉展示中看到代表的交易。 看板
当您将特定的销售团队分配给个人机会时,帮助代表们更高效地一起工作。团队角色显示谁是谁的团队,并帮助团队协调销售更多。
机会所有者可以授予团队成员对机会相关记录的特殊访问权限。
机会团队
管理帐户,客户和产品 存储您销售的商业信息以及在其中工作的人员信息。 帐户和联系人 Accounts icon

Contacts icon

跟踪与多个帐户关联的联系人。 与多个帐户联系
跟踪为自己购买公司产品的人。 个人帐户
管理和组织您的公司销售的产品。附上产品详细信息的机会,以保持代表知道哪些产品是您的代表工作交易的一部分。 产品和价格
简化生产力 跟踪您的代表安排的会议,他们面前的任务,并处理列表和报告中的其他重要活动。 活动
无需离开Salesforce即可使用电话功能。销售代表可以拨打和接听电话,添加通话记录,并记录他们的通话信息,而无需离开Salesforce。 闪电的声音
在您控制的主页上访问有意义的内容。哎呀,你甚至可以为各个销售团队制作多个主页。 主页
做笔记,并与队友分享,给团队销售的背景和洞察力。 笔记 Notes icon
保持清晰准确的数据,做出可靠的业务决策。
控制您的代表是否和何时可以在Salesforce中创建重复记录。自定义Salesforce如何识别重复项;并创建您的代表保存的重复报告。
重复管理
连接,参与并激励您的代表在整个公司内高效工作,无论角色或地点如何。
这个内部企业社交网络使员工能够更轻松地在销售机会,服务案例,活动以及嵌入式应用和自定义操作的项目上进行协作。
Chatter
代表微软电子邮件和Salesforce之间同步联系人,事件和任务时消除冗余。
代表还可以将重要的电子邮件与Salesforce记录相关联 – 直接在Microsoft电子邮件中。
Microsoft®集成
通过让您的销售代表将其Gmail或Office 365帐户连接到Salesforce来简化电子邮件通信。然后,您的代表从Salesforce发送的任何电子邮件都将通过Gmail或Office 365。
这意味着收件人将看到来自您代表的地址而不是Salesforce地址的电子邮件。 Gmail和Office 365处理电子邮件的传递能力和合规性。
Salesforce集成电子邮件
随身携带Salesforce!
我们的企业级移动体验让代表实时访问他们在办公室看到的相同信息。但是移动格式的组织方式可以在客户会议之间更快地完成工作,甚至可以在排队等候的时候等待飞行。

请参阅参考资料部分中的Salesforce Mobile App概述视频,了解您的销售代表如何从我们的移动体验中受益。

Salesforce移动应用程序 Salesforce app
报告销售 提供显示的报告:

  • 什么在管道中
  • 谁生产最多
  • 谁需要教练
Salesforce报表

提前计划,帮助您的销售团队获得闪电般的体验

Salesforce提供大量定制。他们基于坚实的研究和规划。因为您作为管理员的成功取决于销售代表的成功,我们将帮助您使Salesforce成为他们的最佳人选。所以,我们有一些方法可以确保您的销售团队从Lightning Experience的右脚开始。

以下是您如何计划让Salesforce为您的销售团队更加美好地工作的计划。

  1. 建立你的团队
  2. 起草一个发布时间表
  3. 确定您的业务流程的关键方面
  4. 确定并记录痛点
  5. 确定业务目标和优先事项
  6. 定义所需的报告
  7. 制定沟通和培训计划

在Lightning Experience推出模块中,您可以学习更多有关对齐关键球员的信息,并确保您准备好迎接他们。
我们已经组织了一些表单,您可以下载这些表单来捕获我们在本模块中推荐的信息。而因为这些形式是我们之间的秘密,你可以在这里信用。

在下一个单元中,我们将帮助您制定一个计划,以充分利用Salesforce。然后,我们向您展示如何自定义您的代表所见以及Salesforce中的工作方式。我们甚至为这些定制提供了一些建议。但是你决定什么最适合你的团队。

Salesforce Classic迁移到Lightning(6)

在这个项目中你做了很多事情,而且最后一步我们把事情提升到一个全新的高度。我们将通过创建我们的Dreamhouse应用程序的Lightning版本充分利用Lightning Experience功能。

正如我们在前面提到的那样,我们可以升级现有的经典应用程序,通过标准导航创建Lightning应用程序的副本。但我们想要创建一种特殊类型的Lightning应用程序,称为Lightning控制台应用程序。我们从应用程序管理器那里做。

闪电控制台应用程序允许用户一次编辑和引用多个记录。当用户从相关列表中选择一条记录时,它会在控制台中作为一个选项卡打开。当用户打开相关的记录时,它将作为子选项卡打开。控制台应用程序记住标签,这样当用户离开页面时,他们不会在返回时重新打开标签。

Lightning Experience中的控制台应用程序在Salesforce Classic中共享许多相同的控制台功能,例如三列布局和固定选项卡,但是更新为:

  • 闪电体验造型
  • 使用工具栏访问工具和实用程序
  • “闪电体验”专用的选项卡,如“日历”和“便笺”
  • 组件驱动的页面和选项卡。

所以,让我们来创建我们的闪电控制台应用程序。

使用App Manager创建新的应用程序
  1. 点击并选择设置。
  2. 在快速查找中输入应用管理器,然后选择应用管
  3. 点击新的闪电应用程序。

有五个步骤来完成新的闪电应用程序向导。

第1步:应用程序详细信息和品牌

  • 应用名称:Dreamhouse Console
  • 说明:Lightning Dreamhouse用户的控制台应用程序
  • 图片:上传您在第一个单元中下载的应用程序徽标。
  • 原色十六进制值:#C41E1E
  • 点击下一步

第2步:应用程序选项

  • 导航风格:控制台导航
  • 点击下一步

第3步:实用工具栏

实用工具栏可让您的用户快速访问常见的生产力工具,如“笔记”和“最近的项目”。它在控制台中显示为一个固定页脚,用户可以访问停靠面板中的打开实用程序。公用事业利用Lightning组件的力量。您可以将实用工具栏添加到任何Lightning应用,包括标准应用和控制台应用。您可以选择要将哪些Lightning组件添加到实用工具栏并指定其属性。您可以指定实用程序面板的大小以及您要在实用工具栏中显示的标签和图标。

  1. 在实用工具栏项旁边,点击添加,然后选择Chatter Publisher并配置属性:
    • 标签:张贴到Chatter
    • 图标:
      1. 点击删除图标删除默认图标
      2. 点击选择图标
      3. 点击Feed
    • 面板宽度:340
    • 面板高度:480
    • 类型:全局
  2. 在实用工具栏项旁边,点击添加并选择最近的项目并配置属性:
    • 标签:最近的项目
    • 图标:
      1. 点击Delete icon删除图标删除默认图标
      2. 点击选择图标
      3. 点击图层
    • 面板宽度:340
    • 面板高度:340
    • 对象:
      1. 点击选择…
      2. 选择:经纪人,仪表板,组,属性
      3. 点击OK
    • 显示的记录数量:5
  3. 在实用工具栏项旁边,单击添加并选择注释
  4. 点击下一步

第4步:选择项目

现在您可以选择要包含在控制台应用程序中的项目。与Lightning Experience功能(例如“便笺”和“日历”)绑定的项目仅在创建或编辑Lightning应用程序时可用。所以我们可以在这个应用程序中添加额外的元素,我们以前不能添加到我们的经典应用程序。

  1. 更新所选项目列以包含:
    • 主页
    • Chatter
    • 日历
    • 属性
    • 经纪商
    • 帐号
    • 仪表板
    • 报告
  2. 点击下一步

第5步:导航规则

您可以使用导航规则使控制台工作流程更高效。例如,您可以配置导航规则,以便当用户单击以打开代理记录时,它将作为该代理的相关帐户的子选项卡打开。

  1. 保留所有默认值。点击下一步。

第6步:分配给用户配置文件

  1. 更新选定的配置文件列以包括:
    • Dreamhouse用户
    • 系统管理员
  2. 点击保存并完成。

做得好!您已经创建了您的第一个Lightning Console应用程序。所以让我们来看看。

  1. 点击访问应用程序启动器。
  2. 点击Dreamhouse Console。

现在让我们打开一些记录。

  1. 在“主页”选项卡的“最近的记录”下,单击48 Brattle St.请注意它是如何打开一个新选项卡的。
  2. 单击主页,然后再次在最近的记录下单击边缘通信。这将打开另一个新选项卡。

现在让我们试着将选项卡固定到您的控制台。

  1. 单击Edge Communications选项卡旁边的,然后选择Pin选项卡。边缘通信现在固定到您的导航栏。

尝试打开添加到自定义实用工具栏的各种组件,然后导航到您在控制台导航中包含的不同选项卡。

自定义和分配属性记录页面

我们的Dreamhouse控制台应用程序非常棒,但让我们看看我们如何能够更好地定制体验。记住我们在最后一步创建的路径?我们使用Lightning App Builder将其添加到我们的资产记录页面。

借助Lightning App Builder,管理员可以从头开始创建记录页面,或制作现有记录页面的副本。您可以通过添加,编辑或删除组件来更改页面的布局,为用户提供定制的视图,还可以通过创建自定义记录页面并根据应用程序,记录类型和用户配置文件。您甚至可以通过向其属性添加过滤条件和逻辑来控制组件何时出现在记录页面上。

我们使用标准闪电组件对属性页面进行更改。然后,我们将这个自定义的属性记录页面分配给我们刚创建的Lightning Console应用程序。

  1. 从Dreamhouse Console应用程序,返回到48 Brattle St选项卡。
  2. 点击此页面上的相关,详细信息,活动和聊天标签。

现在我们来定制这个页面。

  1. 点击并选择编辑页面。

    screenshot

  2. 将标准路径组件拖到“高亮面板”下方,以跨越整个页面。
  3. 在刚刚添加的路径组件下面的部分中,单击详细信息选项卡以选择它。
  4. 在“选项卡”组件属性中,单击“添加选项卡”。
  5. 点击新标签,然后选择自定义,然后输入Google Analytics并点击完成。
  6. 在“选项卡”组件显示中,单击新的“分析”选项卡以将其选中,然后将标准“报表”组件拖到其上。
  7. 在报表图表属性中,选择属性列表报表。
  8. 点击保存,然后点击激活。
  9. 点击应用默认,然后分配为应用默认。
  10. 选择Dreamhouse Console将其分配给该应用程序。
  11. 点击下一步,然后保存。

现在您已经定制了您的Property记录页面,让我们看看它的外观。

在标题中,单击返回以返回48 Brattle St.的记录页面。请注意页面布局已更新,以包含您的路径组件(A)以及包含属性列表图表(C)的新分析选项卡(B)。

最后,让我们测试页面分配,确保它只出现在Dreamhouse控制台应用程序中。

  1. 点击访问应用程序启动器。
  2. 点击Dreamhouse Classic。
  3. 在最近的记录中,点击48 Brattle St.

注意,Path组件不显示在这个页面上,也没有Analytics选项卡。

做得好!
仅使用点击就能完成将经典应用带入闪电体验的主要阶段。您为Lightning Experience启用了现有的应用和用户,创建了一个新的Lightning应用,其中包含实用工具栏和报告图表等功能,并为特定的Lightning应用分配了自定义的记录页面体验。

希望这给你一个尝试闪电体验的可能性。现在是时候给你的用户带来闪电体验了!

Salesforce Classic迁移到Lightning(5)

作为管理员和开发人员,我们有许多基于点击的工具来帮助我们管理业务流程并创建分析。然后,我们可以使用Lightning App Builder通过标准闪电组件使这些定制对我们的Lightning Experience用户可见。

对于我们的Dreamhouse应用程序用户,我们希望使用Path来定义属性状态的过程。我们来探索一些可以将我们的记录和业务流程可视化的方法。我们还希望修改图表以添加到属性页面,以帮助我们的用户使用属性记录。

让我们开始吧!

导航,列表视图图表和看板视图
Lightning Experience中的导航栏和列表视图具有探索和定制的新功能:

  1. 在导航栏中,单击“属性”。
  2. 点击最近查看的旁边,然后选择热门列表列表视图。

您可以直接从列表视图编辑记录。如果您喜欢键盘快捷键,请使用箭头键+ Enter键代替鼠标进行尝试。

在Lightning Experience中,您的用户还可以使用新的方式访问记录,并在列表视图中查看记录。让我们来看看。

  1. 在列表视图标题中,单击 .
  2. 在图表区域中,选择新图表。
  3. 为您的列表视图创建一个新的图表,如下所示:
    • 名称:按状态平均评估
    • 图表类型:垂直条形图
    • 总计类型:平均
    • 总计字段:评估值
    • 分组字段:状态
  4. 点击 Save.

我们的列表视图看起来不错,但让我们尝试一种新的方式,用户可以查看和交互记录 – 看板视图。

“看板”视图显示选定记录的可视摘要。通过一次查看所有记录,用户可以更有效地监控他们的工作,并保持业务流程向前发展。从对象的列表视图切换到几乎任何对象的看板视图。看板视图在几个对象(例如知识和任务)上不可用,并且在最近查看的对象的列表视图中也不可用。

切换到看板视图:

  1. 在列表视图标题中点击屏幕截图screenshot,然后选择显示为看板。
  2. 选择以下设置:
    • 总结:价格
    • 分组:状态
  3. 点击 Save.

通过将记录拖到不同的状态来玩看板。

日历

在Lightning Experience中,任何人都可以通过选择代表他们想要跟踪的数据的日期字段来从标准或自定义对象创建日历。日历将该字段中的数据显示为日历项目。用户可以通过应用列表视图来自定义大多数日历,并且可以编辑和删除已创建的日历。

让我们为顶级列表创建一个新的日历:

  1. 点击访问应用程序启动器。
  2. 点击日历(在所有项目下)。
  3. 点击“我的日历”旁边的,然后选择新建日历。
  4. 选择Property作为对象,然后单击Next。
  5. 在创建日历表单中输入以下内容:
    • 日历名称:热门列表
    • 开始字段:列出日期
    • 结束字段:无
    • 应用过滤器:顶级列表
    • 要显示的字段名称:属性名称
  6. 点击 Save.
  7. 点击新的顶部列表日历旁边的,然后从面板中选择一个新的自定义颜色。
  8. 我们想一次查看一个月。在日历标题中,单击并选择“月”。
路径

路径是一种可视化显示流程中的步骤,突出显示关键字段的方法,并为每一步的用户提供方便的链接,策略信息和提示等指导。我们可以根据对象上的任何选项列表字段来创建路径。

为属性对象创建一个路径

  1. 点击并选择设置。
  2. 在快速查找中输入路径设置并选择路径设置。
  3. 单击启用,然后单击新建路径。
  4. 完成第1步:名称和记录类型,如下所示:
    • 路径名称:属性路径
    • API参考名称:Property_Path
    • 对象:属性
    • 记录类型: – 主 –
    • 选单:状态
    • 点击下一步
  5. 完成第2步:选择字段并为路径中的每个步骤提供指导,如下所示:
    • 对于“售前市场”状态,请添加“成功指南”:查看资源以帮助您的客户准备好列出他们的房屋!
    • 对于下面列出的每个状态,请单击+添加/更新字段,将为每个状态指示的字段拖动到选定字段框中,然后单击保存。
      状态 要添加的字段
      上市前
      • 评估价值
      • 经纪人
      上市
      • Baths
      • Beds
      • 日期列出
      • 价钱
      合同里
      • 经纪人
      • 日期协议
  6. 点击下一步
  7. 完成第3步:设置状态和保存,如下所示:
    • 选择活动
    • 点击完成

我们已经创建了一个路径,以帮助我们的代理商在每个财产阶段更有效。在我们添加到我们的财产页面之前,让我们看看在Lightning Experience的报告图表。

闪电体验报告图表
在我们的Dreamhouse应用程序中,我们有一个用户喜欢的报告图表。为了让我们的Lightning Experience用户可以继续查看图表,我们需要对报表进行一些小的修改。通过报告图表标准闪电组件,我们可以在Lightning Experience记录页面,主页,应用程序页面甚至实用工具栏中显示报告图表。

让我们回到我们的梦想屋经典应用程序,并检查出添加报告图表。

  1. 点击访问应用程序启动器。
  2. 点击Dreamhouse Classic打开该应用程序。
  3. 点击导航栏中的报告。
  4. 点击侧边栏中的所有报告。
  5. 点击属性列表来运行该报告。
  6. 在图表区域中,单击以访问图表属性。
  7. 单击以将图表类型更改为散点图。单击编辑旁边的,然后选择保存。

我们已经创建了两个新的元素添加到我们的属性页面的标准闪电组件,但我们仍然需要将它们添加在正确的地方。我们将在下一步和最后一步做到这一点,在那里我们将为Dreamhouse高级用户创建全新的Lightning Console应用程序。

Salesforce Classic迁移到Lightning(4)

参观闪电的经验
现在,我们的应用程序在Lightning Experience中可用,让我们来看看这个应用程序的样子。一路上,我们探索Lightning Experience中的一些最终用户功能 – 通过一些基本的用户培训,您的用户可以立即利用这些功能。

闪电体验应用启动器
所有的Lightning应用程序,包括您在Lightning Experience中标记为“可见”的Classic应用程序都列在应用程序启动器中。应用程序启动器也是您的用户可以访问他们有权使用的所有项目的地方,不管它们是否包含在Lightning Experience应用程序中。使用应用程序启动器在Lightning Experience中导航到经典应用程序。

  1. 点击访问应用程序启动器。
  2. 点击Dreamhouse Classic。
Chatter

现在,我们正在Dreamhouse Classic应用程序的Lightning Experience视图中,让我们以Chatter开始,以新的体验和导航为导向。

  1. 点击Chatter标签。
  2. 在侧面导航中,检查以下内容:
    • Company Highlights. 公司摘要显示来自整个组织的趋势,新闻和热门帖子,即使您没有关注相关记录。
    • Chatter Streams. Chatter Streams是您的用户可以创建策划的记录列表和要关注的人员的地方。他们可以创建最多五个Chatter流,将来自不同Feed和不同Feed类型的帖子结合起来。结合来自人员,群组和记录的供稿,如您的客户,机会和案例。

让我们创建一个Chatter Stream:

  1. 点击Streams旁边的+号。
  2. 输入流名称:热门属性和经纪商

接下来让我们添加一些属性和用户到我们的流中:

  1. 在“关注记录”字段中,单击打开菜单并选择“属性”。
    1. 在Search Properties输入121 Harborwalk Drive并选择121 Harborwalk Drive。
    2. 重复这一步,并添加127恩迪科特街
  2. 再次点击以重新打开菜单并选择人员。
    1. 在搜索人员中输入Angela Agent并选择Angela Agent。
    2. 重复这一步,并添加兰迪房地产经纪人。
  3. 点击 Save.

使用全新策划的Chatter Stream,即使您不遵循这些记录,您也可以快速获取特定记录集的相关更新。

搜索

闪电体验扩大了搜索功能。当您知道要搜索哪个对象时,请在搜索框中输入对象的名称。您可以选择将搜索范围限制为该对象。此功能仅适用于最常用的对象,导航栏中的对象和Chatter。您可以一次搜索一个对象。让我们来探索闪电体验中的搜索。

  1. 点击搜索Chatter和更多…请注意,在Lightning Experience中,您最近的项目现在出现在全局搜索栏的下拉列表中。
  2. 在搜索框中输入帐户。您有以下选择:
    • 搜索字符串“帐户”。
    • 在您当前的项目(Chatter)中搜索。
    • 将您的搜索定义到Account对象。
  3. 选择限制搜索到帐户。
  4. 在搜索框中输入边缘。
  5. 单击“边缘通信”查看该帐户记录。

接下来,我们搜索一个属性。

  1. 点击搜索Salesforce。
  2. 在搜索框中输入属性。
  3. 选择限制搜索到属性。
  4. 在搜索框中输入Brattle。
  5. 点击48 Brattle St.查看该房产记录。
最爱

如果您熟悉Salesforce Classic中的自定义选项卡集,则会喜欢使用“收藏夹”来个性化您的导航的方式。 “收藏夹”使您可以快速访问Salesforce中的重要记录,列表,组,仪表板和其他常用页面。它们与网络浏览器中的书签类似,但效果更好,因为无论您使用哪种浏览器或计算机登录Lightning Experience,您的收藏夹都可用。

  1. 查看48 Brattle St.的房产记录时,在标题中单击以将当前记录添加到收藏夹列表。
  2. 您可以从收藏夹菜单中管理收藏夹。单击收藏夹图标旁边的,然后单击编辑收藏夹。从这里您可以重命名,重新排序或删除偏好的项目。
  3. 点击完成。

唷!这是很多功能,但好吧…这是多么伟大的闪电体验。接下来我们卷起袖子,认真地定制我们的业务流程和Lightning Experience的报告图表。

Salesforce Classic迁移到Lightning(3)

现在,Lightning Experience已在您的环境中启用,现在是您的Lightning Experience用户使用自定义应用程序Dreamhouse Classic的时候了。

如果您刚开始使用Lightning Experience并想探索您的经典应用的外观,只需点击几下鼠标即可完成。不过,尽管这是一种在Lightning Experience中使您的经典应用可见的快捷方式,但它仍然有一些限制。稍后,我们将通过为Dreamhouse创建一个全新的Lightning应用程序来完成我们的Lightning Experience迁移。

切换到闪电体验
首先,切换到自己的闪电体验,所以你可以开始探索和建设。当您为自己和您的用户启用Lightning Experience时,所有用户仍然可以选择在配置文件菜单中来回切换Lightning Experience和Salesforce Classic体验:

  1. 在您的Lightning Now DE中,在菜单中点击您的名字,然后选择切换到闪电体验。

screenshot

在闪电体验中创建一个经典的应用程序
现在我们将使我们的经典应用程序在Lightning Experience中可见,并且还将添加一些其他导航栏项目。

这不会影响我们的Salesforce Classic用户的应用程序体验,只会让我们的Lightning Experience在App Launcher中显示当前的经典应用程序。

注意

在应用程序管理器中还有一个选项来“升级”您的自定义应用程序。我们不在项目中使用它,但是这可以让您创建一个新的Lightning应用程序作为您的经典应用程序的克隆。

  1. 点击并选择设置。
  2. 从设置中,在快速查找中输入应用程序管理器,然后选择应用程序管
  3. 点击Dreamhouse Classic App的下拉菜单图标,然后选择编辑。
  4. 选中“在Lightning Experience中显示”框(默认情况下可能已经选中)。
  5. 在选择选项卡框中,选择以下选项卡,然后单击添加图标将它们移动到选定的选项卡框:
    • 仪表板
    • 报告
    • 帐号
  6. 点击 Save.

只需点击几下,您就可以在Lightning Experience中看到您的经典应用程序。在下一步,我们使用这个应用程序来检查闪电体验的功能。

Salesforce Classic迁移到Lightning(2)

在为最终用户推出Lightning Experience并开始构建应用程序之前,让我们花点时间熟悉Lightning Experience界面并定义用户访问权限。在安装程序中提供的Lightning Experience Migration Assistant中,可以找到帮助您的工具。这些工具包括学习路径,功能比较图表,以及在Lightning Experience中预览自定义的方法。此外,还有一些工具可以帮助您启用关键的Lightning Experience功能,如Notes和News,以及如何启用Lightning Experience本身。

在这一步我们回顾我们的DE中的移民助理。但是,您可以在您的生产Salesforce组织中使用所有这些工具,以详细了解Lightning Experience中的功能和自定义内容。 “迁移助理”最重要的部分是预览工具和准备就绪检查:

  • 预览工具可让您在启用Lightning Experience之前查看您的应用程序。
  • 准备就绪检查为您提供准备就绪报告。此报告包含您使用的功能的详细列表以及您创建的自定义。另外,请解释他们如何在Lightning Experience中获得支持,以及是否需要进行额外的审查。
评估你的组织准备好闪电体验
让我们花点时间了解Lightning Experience,为用户定义Lightning Experience访问权限,为您的组织启用Lightning Experience。

在闪电体验中预览你的组织

使用预览工具预览您的组织在Lightning Experience中的样子将非常容易。

  1. 在标题中,单击“设置”。
  2. 在Lightning Experience迁移助理下,单击开始。
  3. 点击预览标签,然后点击预览。
  4. 在Lightning Experience中点击您的环境。使用此预览可查看您的Salesforce应用程序在Lightning Experience中的外观。
  5. 点击导航栏中的商机。
  6. 选择“所有机会”列表视图,然后单击伯灵顿纺织织造厂发电机来打开这个机会。
  7. 点击机会页面来探索Lightning Experience的外观和感觉。例如,使用路径将机会
  8. 阶段更改为价值主张。
  9. 单击退出并返回到迁移助理。

运行闪电体验就绪检查和审查您的准备情况报告

“闪电体验准备报告”可帮助管理员在开启“闪电体验”之前了解更多关于要考虑的事项。此外,根据组织目前使用的功能,“准备情况报告”包含有关下一步工作的建议。虽然闪电体验准备情况报告不能识别Lightning Experience中的所有不受支持的功能和定制,但它可以帮助您了解您的组织如何准备好转换。

要在您自己的生产环境或沙箱环境中运行“闪电体验就绪报告”:

  1. 从设置中,在Lightning Experience迁移助理中,单击检查准备情况选项卡,然后单击检查准备情况。
  2. 单击允许,销售云,然后检查准备就绪,然后关闭窗口。随时等待报告完成后,观看“迁移到闪电体验视频的技巧”视频。
  3. 当您收到准备情况报告电子邮件时,打开它并查看突出显示差异功能的方式。

注意

报告可能需要几分钟才会显示在您的收件箱中。如果您没有看到它,请尝试搜索您的电子邮件“准备就绪”。同时,请等待您的报告完成后,随时观看“迁移到闪电体验的提示”。

建立对闪电体验的访问
现在我们已经探索了Lightning Experience的外观和感觉,让我们继续,打开Lightning Experience,授予对特定用户的访问权限,并为我们的环境启用Lightning Experience。

我们将为用户提供Lightning Experience两个部分:

  • 设置用户权限
  • 启用闪电体验
设置用户权限
您可能想要为您的用户的子集首次实施Lightning Experience。因此,通过配置文件或权限集授予对Lightning Experience的访问权限是最佳做法。所有标准配置文件默认都启用Lightning Experience User权限,所以我们的用户已经被分配到一个自定义配置文件(Dreamhouse用户)。我们将为访问Lightning Experience创建一个新的权限集,并将其分配给我们的用户。

为闪电体验创建一个许可集

  1. 从“设置”中,在“快速查找”框中输入权限集,然后选择权限集。
  2. 单击新建并创建一个新的权限集,如下所示:
    • 标签:闪电体验用户
    • API名称:Lightning_Experience_User
    • 许可证: – 无 –
  3. 点击 Save

接下来,我们将向此权限集添加Lightning Experience User权限。

  1. 滚动到“系统”部分,然后单击“系统权限”。
  2. 点击修改。
  3. 检查Lightning Experience用户框。
  4. 点击保存。

为用户分配权限集

现在你已经创建了一个权限集,现在是审查谁可以访问闪电体验的好时机。

  1. 从安装程序中,在快速查找框中输入用户,然后选择用户(在管理用户下)。
  2. 点击Randy Realtor的用户记录。

您的最终用户Randy Realtor拥有指定的Dreamhouse用户自定义配置文件。看看配置文件,并检查是否启用了Lightning Experience。

  1. 从Randy的用户记录中,点击Dreamhouse User profile链接。
  2. 滚动到“管理权限”部分,注意不会选中“闪电体验”。

这意味着当你为你的组织开启闪电体验时,兰迪将无法使用闪电体验。当然,除非你改变自己的个人资料,或者把他加入到启用闪电体验许可的权限集中。

兰迪是我们最初推出的闪电体验的一部分,所以我们想让他访问它,而不修改他的自定义配置文件。当我们为他分配新的权限集时,它将覆盖他现有的配置文件,并允许他访问Lightning Edition。

  1. 从“设置”中,在“快速查找”框中输入用户,然后选择用户(在管理用户下)
  2. 点击兰迪房地产经纪人。
  3. 滚动到权限集分配,然后单击编辑分配。
  4. 将闪电体验用户权限设置为“已启用权限集”列。
  5. 点击保存。
启用闪电体验
现在您已经查看并授予了Lightning Experience的使用权限,现在是启用Lightning Experience和相关功能的时候了。

screenshot

  1. 从“设置”下的“Lightning Experience迁移助理”下,单击“开始”。
  2. 单击优化与功能选项卡,然后单击以下按钮启用功能:
    • 新闻
    • 笔记
  3. 向上滚动到顶部,点击打开它,然后点击禁用启用闪电体验(这一步可能已经完成了)。
  4. 单击完成启用闪电体验。

您的组织现在启用闪电体验!

Salesforce Classic迁移到Lightning(1)

这个以管理员为中心的Lightning Experience项目向您展示了如何将经典应用程序转换为闪电应用程序 – 所有这些都是点击无法编码的!您将学习如何:

  • 评估您的组织对于Lightning Experience的准备情况。
  • 启用闪电体验。
  • 在Lightning Experience中提供经典应用程序。
  • 为Lightning定制业务流程和报告功能。
  • 创建一个闪电控制台应用程序。
  • 根据应用和用户配置文件向用户显示不同的体验。

令人兴奋的东西对吗?让我们滚动。首先要做的是注册一个特殊的环境,我们将在整个项目中使用。它有你将使用的经典应用程序。

注册Lightning Now开发者版组织
对于此项目,您不能使用现有的开发人员版(DE)组织。您必须注册一个特殊的DE,因为它带有您将在此项目中使用的自定义项。

  1. 注册Lightning Now开发者版(DE)组织。
  2. 用有效的电子邮件地址填写表格。您的用户名也必须看起来像电子邮件地址,并且是唯一的,但不一定是有效的电子邮件帐户。例如,您的用户名可以是yourname@lightningnow.de,或者您可以输入公司名称。
  3. 填写完表单后,请点击“注册”。出现确认消息。
  4. 当您收到激活邮件时,打开它并点击验证帐户。
  5. 填写注册表单 – 设置您的密码并输入安全答案。
  6. 点击更改密码。您将登录到您的DE并重定向到设置页面。
  7. 现在将您的Lightning Now DE连接到Trailhead,以便您可以通过此项目中的挑战:
    1. 滚动到页面底部,然后单击验证步骤旁边的下拉列表,然后选择登录到Developer Edition。
    2. 输入您的Lightning Now DE用户名和密码,然后单击登录。
    3. 点击允许,然后是!保存。
    4. 点击Launch打开您的DE。

注意:要登录到您的Lightning Now DE并随时播放,请转到login.salesforce.com并输入刚刚设置的凭据。

接下来进入这个维基百科页面,右键单击图像,并将其保存到桌面。我们稍后将使用它作为一个新的闪电应用程序的图标。

Salesforce Lightning (Javascript按钮 – 3)

学习目标

完成本单元后,您将能够:

  • 创建Lightning组件并根据用户输入填充字段,并向用户提供反馈消息。
  • 创建与第三方系统集成的Lightning组件和操作。
  • 开始将您的JavaScript自定义按钮功能迁移到适合Lightning的替代方案。

闪电行动:智能,快速和移动

我们已经介绍了在Lightning Experience和Salesforce Classic中都可以使用的几种解决方案,这些解决方案是JavaScript按钮的绝佳替代品。但是我们认识到,这些声明性和程序性解决方案并不涉及每个用例。好消息是有更多的东西可以解决。引入闪电行动:称为闪电组件的快速行动。
闪电行动是建立在你已经采用的现有闪电组件框架之上的。您可以轻松地将您现有的Lightning组件转换为操作,并在Salesforce应用程序和Lightning Experience中使用它们。

通过将两个接口之一添加到组件,您可以将Lightning组件作为操作进行调用:force:lightningQuickAction或force:lightningQuickActionWithoutHeader。第一个界面添加标准的标题与保存和取消按钮闪电动作覆盖,而另一个不。

另一个有用的Lightning动作接口是force:hasRecordId,它从记录页面调用时向组件提供记录上下文。如果您将Lightning操作设置为全局快速操作,则不需要记录上下文。但是,如果要访问记录的数据或元数据,则必须实施force:hasRecordId。

注意

如果您之前没有构建Lightning组件,请访问Lightning开发中心,执行Lightning组件快速启动项目,并完成Lightning组件基础知识模块。

让我们深入闪电行动。接下来,我们将讨论一些可以用Lightning操作来解决的JavaScript按钮功能。

  • 根据用户输入填充字段并在数据输入期间提供反馈消息
  • 集成第三方API

根据用户输入填充字段并向用户提供反馈消息

假设您使用JavaScript按钮来验证或操作数据,并在用户使用记录时为用户提供反馈或说明。下面是一个例子,说明在用户创建或更新记录之前,您可以轻松地验证或操作Lightning组件中的数据。
我们在我们的示例组织中构建了一个名为“案例研究”的自定义对象,我们用它来跟踪不同的研究项目。当我们添加新的测试用户时,我们会捕获他们的姓名和电子邮件地址由于电子邮件地址是我们的主要联系方式,因此我们要确保输入正确。我们也想为测试用户创建一个独特的昵称,以便他们保持匿名。

我们将创建一个闪电操作,显示名称和电子邮件地址字段,验证电子邮件地址,并使用名字和随机数自动创建昵称。

这是Lightning操作调用的组件的代码。

  • CreateUser.cmp – 打开操作时看到的Lightning组件。它包含UI实现,其中包括文本字段,按钮,动作标题等。
  • CreateUserController.js – 监听组件以及发生的所有UI事件(如初始加载,文本输入和按钮单击)的控制器。它的功能是将这些事件委托给辅助类CreateUserHelper.js。
  • CreateUserHelper.js – 处理所有业务逻辑的代码,例如验证密码和电子邮件字段,以及与保存数据的服务器端Apex控制器进行通信。
  • SaveTestUser.apxc – 处理创建测试用户的请求的简单的Apex控制器。

CreateUser.cmp

<aura:component implements="force:lightningQuickActionWithoutHeader,force:hasRecordId" controller="SaveTestUser" >
   <aura:attribute name="user" type="Test_User__c" default="{ 'sobjectType': 'Test_User__c' }"/>
   <aura:attribute name="hasErrors" type="Boolean" description="Indicate whether there were failures or not" />
   <aura:attribute name="caseStudy" type="String" />
   <aura:attribute name="recordId" type="String"/>

   <aura:handler name="init" value="{!this}" action="{!c.init}" />

   <div class="slds-page-header" role="banner">
      <p class="slds-text-heading--label">Case Study</p>
      <h1 class="slds-page-header__title slds-m-right--small slds-truncate slds-align-left" title="Case Study Title">{!v.caseStudy}</h1>
   </div>
   <br/>

   <aura:if isTrue="{!v.hasErrors}">
      <!-- Load error -->
      <div class="userCreateError">
         <ui:message title="Error" severity="error" closable="true">
            Please review the error messages.
         </ui:message>
      </div>
   </aura:if>

   <div class="slds-form--stacked">

      <div class="slds-form-element">
         <label class="slds-form-element__label" for="firstName">Enter first name: </label>
         <div class="slds-form-element__control">
            <ui:inputText class="slds-input" aura:id="firstName" value="{!v.user.first}" required="true" keydown="{!c.updateNickname}" updateOn="keydown"/>
         </div>
      </div>

      <div class="slds-form-element">
         <label class="slds-form-element__label" for="lastName">Enter last name: </label>
         <div class="slds-form-element__control">
            <ui:inputText class="slds-input" aura:id="lastName" value="{!v.user.last}" required="true" />
         </div>
      </div>

      <div class="slds-form-element">
         <label class="slds-form-element__label" for="nickname">Enter nickname: </label>
         <div class="slds-form-element__control">
            <ui:inputText class="slds-input" aura:id="nickname" value="{!v.user.nickname}" required="false"/>
         </div>
      </div>

      <div class="slds-form-element">
         <label class="slds-form-element__label" for="userEmail">Enter user's email:</label>
         <div class="slds-form-element__control">
            <ui:inputEmail class="slds-input" aura:id="userEmail" value="{!v.user.Email__c}" required="true"/>
         </div>
      </div>

      <div class="slds-form-element">
         <label class="slds-form-element__label" for="userPassword">Enter user's password:</label>
         <div class="slds-form-element__control">
            <ui:inputSecret class="slds-input" aura:id="userPassword" value="{!v.user.Password__c}" required="true"/>
         </div>
      </div>

      <div class="slds-form-element">
         <ui:button class="slds-button slds-button--neutral" press="{!c.cancel}" label="Cancel" />
         <ui:button class="slds-button slds-button--brand" press="{!c.saveUserForm}" label="Save User" />
      </div>
   </div>

</aura:component>
CreateUserController.js
({    
   init : function(component, event, helper) {
      var action = component.get("c.getCaseStudy");
      action.setParams({"recordId": component.get("v.recordId")});
    
      action.setCallback(this, function(response) {
         var state = response.getState();
         if(component.isValid() && state == "SUCCESS"){
             component.set("v.caseStudy", response.getReturnValue());
          } else {
             console.log('There was a problem and the state is: '+state);
          }
      });
      $A.enqueueAction(action);
   },
    
   updateNickname: function(component, event, helper) {
      // Update the nickname field when 'tab' is pressed
      if (event.getParams().keyCode == 9) {
         var nameInput = component.find("firstName");
         var nameValue = nameInput.get("v.value");
         var nickName = component.find("nickname");
         var today = new Date();
         nickName.set("v.value", nameValue + today.valueOf(today));   
      }
   },
 
   saveUserForm : function(component, event, helper) {
      var name = component.get("v.user.first");
      var last = component.get("v.user.last");
      var password = component.get("v.user.Password__c");
      var email = component.get("v.user.Email__c");
      var nickname = component.get("v.user.nickname");
        
      var passwordCmp = component.find("userPassword");
      var emailCmp = component.find("userEmail");
        
      helper.validatePassword(component, event, helper);
      helper.validateEmail(component, event, helper);

      if (passwordCmp.get("v.errors") == null && emailCmp.get("v.errors") == null) {
         component.set("v.hasErrors", false);
         helper.save(component,name + " " + last,password,email,nickname);         
      } else {
         component.set("v.hasErrors", true);
      }
   },
    
   cancel : function(component, event, helper) {
      $A.get("e.force:closeQuickAction").fire();
   }
})
CreateUserHelper.js
({
   save: function(component, name, password, email, nickname) {
      //Save the user and close the panel
      var action = component.get("c.saveUser");
         action.setParams({
            "name": name,
            "password": password,
            "email": email,
            "nickname": nickname,
            "caseStudy": component.get("v.recordId")
         });

      action.setCallback(this, function(a) {
         var response = a.getReturnValue();
         var state = action.getState();
         if(component.isValid() && state == "SUCCESS"){
            $A.get("e.force:closeQuickAction").fire();
            var toastEvent = $A.get("e.force:showToast");
            toastEvent.setParams({
                  "title": "Success!",
               "message": "The test user has been created."
            });
            toastEvent.fire();
            $A.get('e.force:refreshView').fire();
         } else if (state == "ERROR") {
            console.log('There was a problem and the state is: '+ action.getState());
         }
      });
      $A.enqueueAction(action);
      },

   validatePassword : function(component, event, helper) {
      var inputCmp = component.find("userPassword");
      var value = inputCmp.get("v.value");

      if (value == undefined) {
         inputCmp.set("v.errors", [{message: "You must enter a password."}]);
      } else if (value.length < 7 || value.length > 15) {
         inputCmp.set("v.errors", [{message: "The password is the wrong length: " + value}]);
      } else if (value.search(/[0-9]+/) == -1) {
         inputCmp.set("v.errors", [{message: "The password must contain at least one number: " + value}]);
      } else if (value.search(/[a-zA-Z]+/) == -1) {
         inputCmp.set("v.errors", [{message: "The password must contain at least one letter: " + value}]);
      } else {
         inputCmp.set("v.errors", null);
      }
      },

   validateEmail : function(component, event, helper) {
      var inputCmp = component.find("userEmail");
      var value = inputCmp.get("v.value");

      if (value == undefined) {
         inputCmp.set("v.errors", [{message: "You must enter an email."}]);
         return;
      }

      var apos = value.indexOf("@");
      var dotpos = value.lastIndexOf(".");

      if (apos<1||dotpos-apos<2){
         inputCmp.set("v.errors", [{message: "Email is not in the correct format: " + value}]);
      } else if (value.substring(apos+1, dotpos) != "gmail") {
         inputCmp.set("v.errors", [{message: "Email must be a gmail account: " + value.substring(apos+1, dotpos)}]);
      } else {
         inputCmp.set("v.errors", null);
      }
      }

})
SaveTestUser.apxc
public class SaveTestUser {
    
    @AuraEnabled 
    public static Test_User__c saveUser(String name, String password, String email, String caseStudy, String nickname) {  
    
        Test_User__c testUser = new Test_User__c(Name=name, Password__c=password, Email__c=email, Nickname__c=nickname, Case_Study__c=caseStudy);

        upsert testUser;
        return testUser;
    }
    
    @AuraEnabled
    public static String getCaseStudy(String recordId) {
        Case_Study__c caseStudyInstance = [SELECT Name FROM Case_Study__c WHERE id=:recordId];
        return caseStudyInstance.Name;
    }

}

在创建Lightning组件之后,我们将其分配给一个动作。在案例研究的对象管理设置中,我们转到“按钮,链接和操作”,单击“新建操作”,然后使用这些参数配置操作。

字段 值Value
Object Name Case Study
Action Type Lightning Component
Lightning Component c:CreateUser
Height 500px
Label Create Test User
Name CreateUser

然后,我们将新的Lightning操作添加到案例研究页面布局。当用户从案例研究记录页面调用它时,他们会看到我们创建的Lightning操作。

Create Test User Lightning action overlay

关于这个闪电行动的好处是,它也可以在Salesforce应用程序中运行。

Case Study action in the Salesforce app

集成第三方API

也许你使用JavaScript按钮来与第三方系统集成。你可以使用闪电行动吗?你当然可以。主要区别在于,使用Lightning操作进行集成时,必须使用服务器端控制器。作为回报,您可以更好地处理安全证书,并能够使用Apex进行异步和批处理API调用。
我们来看看如何与Twilio集成来发送短信。在这个例子中,我们在奢侈旅行业务,我们处理名人和贵宾。我们希望我们的客户服务代理能够与客户沟通,但我们不希望将客户的个人联系信息暴露给任何人。我们在Contact对象上创建一个Lightning动作,这样代理可以在不看到联系人的电话号码的情况下发送消息。

就像在我们的案例研究中,我们将创建Lightning组件和helper类,然后创建一个快速的操作来调用组件。

SMS Lightning action overlay

这个Lightning动作由Lightning组件,JavaScript控制器和Apex控制器组成,它们引用处理Twilio集成的库类。

SendTwilioSMS.cmp

<aura:component controller="TwilioSendSMSController" implements="flexipage:availableForAllPageTypes,force:hasRecordId,force:lightningQuickAction" >
   <aura:attribute name="textMessage" type="String" />
   <aura:attribute name="destinationNumber" type="String" />
   <aura:attribute name="messageError" type="Boolean" />
   <aura:attribute name="recordId" type="String" />

      <aura:handler name="init" value="{!this}" action="{!c.init}" />

   <aura:if isTrue="{!v.messageError}">
      <!-- Load error -->
      <div class="userCreateError">
         <ui:message title="Error" severity="error" closable="true">
            Unable to send message. Please review your data and try again.
         </ui:message>
      </div>
   </aura:if>

   <div class="slds-form--stacked">
      <label class="slds-form-element__label" for="instructMsg">Please enter the message (max 160 char) below: </label>
      <br/>
      <div class="slds-form-element__control">
         <ui:inputText class="slds-input" aura:id="message" label="Text Message" value="{!v.textMessage}" required="true" maxlength="160" size="165" />
      </div>
      <div class="centered">
         <ui:button class="slds-button slds-button--brand" press="{!c.sendMessage}" label="Send Message"/>
      </div>
   </div>
</aura:component>

SendTwilioSmsController.js

({
   init : function(component, event, helper) {
      var action = component.get("c.getPhoneNumber");
      action.setParams({"contactId": component.get("v.recordId")});
      action.setCallback(this, function(response) {
         var state = response.getState();
         if(component.isValid() && state == "SUCCESS"){
            component.set("v.destinationNumber", response.getReturnValue());
         } else {
            component.set("v.messageError", true);
         }
      });
      $A.enqueueAction(action);
   },

      sendMessage : function(component, event, helper) {
      var smsMessage = component.get("v.textMessage");
      var number = component.get("v.destinationNumber");
      var recordId = component.get("v.recordId")

      var action = component.get("c.sendMessages");
      action.setParams({"mobNumber": number, "message": smsMessage, "contactId": component.get("v.recordId")});
      action.setCallback(this, function(response) {
         var state = response.getState();
         if(component.isValid() && state == "SUCCESS"){
            $A.get("e.force:closeQuickAction").fire();
            var toastEvent = $A.get("e.force:showToast");
            toastEvent.setParams({
               "title": "Success!",
               "message": "SMS has been sent woo hoo!"
            });
            toastEvent.fire();
         } else {
            component.set("v.messageError", true);
         }
      });
      $A.enqueueAction(action);
   }
})

SendTwilioSmsController.apxc

/*
* Apex controller that currently contains only one method to send sms message
*/
global class TwilioSendSMSController {

   /*
   * This method uses the Twilio for Salesforce library class and method to
   * send the message using the Twilio api.
   */
   @AuraEnabled
      webService static String sendMessages(String mobNumber, String message, Id contactId) {
         System.debug('the mobNumber is: '+ mobNumber + ' and the message is: '+ message + ' and contactId is: ' + contactId);

         if (mobNumber == null) {
            mobNumber = getPhoneNumber(contactId);
         }

         try {
            TwilioRestClient client = TwilioAPI.getDefaultClient();

            Map<String,String> params = new Map<String,String> {
               'To' => mobNumber,
               'From' => '15555551234',
               'Body' => message
               };
            TwilioSMS sms = client.getAccount().getSMSMessages().create(params);
            return sms.getStatus();
         } catch(exception ex) {
            System.debug('oh no, it failed: '+ex);
            return 'failed';
         }
      }

      @AuraEnabled
      public static String getPhoneNumber(Id contactId) {
         Contact currentRecord = [SELECT Phone FROM Contact WHERE Id = :contactId];
         return currentRecord.Phone.replace(' ', '').replace('-', '').replace(')', '').replace('(', '');
   }
}

创建组件后,我们创建一个Lightning动作。这次我们将其添加到联系页面布局,以便代理可以访问它。

再一次,很酷的是,这个动作也可以在Salesforce应用程序中使用。如果汽车服务提供商试图在机场与客户联系,则驾驶员可以使用移动设备轻松地接触到客户。

SMS Lightning action in the Salesforce app

闪电行动是闪电体验计划行动的未来。我们希望您开始将这套解决方案作为JavaScript按钮的更好替代方案。

如果您依赖于使用JavaScript按钮的合作伙伴应用程序,则很高兴知道我们的许多合作伙伴已经开始将其应用程序迁移并升级到Lightning。您可以在AppExchange上找到更新的Lightning Experience更多应用程序。

超越基础

如果您想自己尝试使用Twilio,则可以在Salesforce Github库中的第三方集成示例中找到用于Salesforce库类的Twilio的非托管包:https://github.com/twilio/twilio-销售队伍

在使用Twilio for Salesforce和Twilio API之前,请创建一个Twilio帐户,设置一个电话号码,并将您的帐户连接到Salesforce。有关更详细的说明,请参阅Github库中的TwilioApi.cls。

Salesforce Lightning (Javascript按钮 – 2)

学习目标

完成本单元后,您将能够:

  • 创建快速操作(而不是使用JavaScript)来验证字段,创建具有预填充值的记录,并重定向到Visualforce页面。
  • 描述如何使用自定义URL按钮来实现与JavaScript按钮相同的导航和重定向功能。
  • 使用Visualforce自定义按钮而不是JavaScript按钮来处理列表中的多个记录。

你有按钮?我们有替代品

以前,我们解释了为什么要迁移到Lightning Experience,那里有很棒的新功能可以让你移动到JavaScript按钮。接下来,我们将解释如何使用Salesforce Classic和Lightning Experience中的解决方案轻松迁移自定义JavaScript按钮功能。
此表将JavaScript按钮的使用情况映射到替代方案 – 在大多数情况下,这些方案是Lightning中更好的解决方案。
JavaScript按钮顶级用例 闪电的选择 声明/编程
验证字段(预存) 快速操作(使用默认值和/或公式) D
Apex 触发 P
用预填充值创建记录 快速操作(使用默认值和/或公式) D
重定向到一个记录页面 自定义网址按钮 D
重定向到Visualforce页面 Visualforce快速操作 P
Lightning 行动 P
根据输入预先填充值 Lightning 行动 P
确认弹出式屏幕 Lightning 行动 P
API调用(Salesforce和第三方) Lightning 行动 P
反馈弹出屏幕 Lightning 行动 P
第三方集成 Lightning 行动 P
列表视图记录上的批量操作 列表视图上的自定义Visualforce按钮 P

如您所见,Salesforce提供了几个用于转换JavaScript自定义按钮功能的声明性工具。

快速操作

快速操作支持JavaScript按钮的许多常见用途。快速操作可以基于特定的对象,也可以是全局的,也就是说,它们更加通用,可以从任何记录或Chatter提要访问。 Salesforce中的任何操作都可以快速执行。这里有些例子。

验证字段值

有时,当用户创建或更新记录时,您需要确保填写特定的字段或填入特定的条件。

假设您想创建一个关闭任务的操作,而不需要用户去完整的编辑页面。但是你也想确保任务有一个截止日期,然后才能关闭。

您可以通过为Task对象创建一个快速操作来满足所有这些要求。

  1. 从安装程序中的对象管理器,单击任务,然后单击按钮,链接和操作。
  2. 点击 New Action.
  3. 对于操作类型,请选择 Update a Record.
  4. 对于标签,输入关闭任务。
  5. 点击 Save.

现在我们选择我们想要在关闭任务快速操作中出现的字段。您可以通过其字段属性轻松地创建所需字段或只读字段。

Action field properties

在动作布局上设置字段后,可以为任务记录上的任何字段添加预定义的字段值。在这个例子中,我们根据需要标记了到期日期字段。我们还为“状态”字段添加了一个预定义的值,将其更改为“已完成”。

Set predefined field value for Status

现在我们已经完成配置操作,我们将其添加到任务页面布局。然后用户可以从Lightning Experience和Salesforce应用程序的任务记录页面访问它。以下是“任务”页面上的“关闭任务”操作示例。

Close Task action on the Tasks page

点击关闭任务会弹出用户可以快速执行并保存的操作。

Close Task action overlay

这是Salesforce应用程序中的外观。

Close Task action in the Salesforce app

用值预填充字段

更高级的用例是当你想让用户创建一个记录,但是你也希望一个或者多个字段能够根据依赖字段中的值自动填充。

例如,假设内部销售团队的典型季度配额是去年客户收入的四分之一,增长了10%。因为这个简单的公式并不总是适用的,所以你想要预先填充机会数量的值,但也让用户修改它。创建一个操作,以便用户可以快速有效地修改该字段,而无需转到完整的机会记录页面。

要创建此示例操作,请按照与之前相同的步骤创建机会快速操作。

  1. 从安装程序中的对象管理器中,单击帐户,然后单击按钮,链接和操作。
  2. 点击新建操作。
  3. 对于“操作类型”,选择“创建记录”。
  4. 对于目标对象,选择机会。
  5. 选择适当的记录类型。
  6. 对于标签,请输入New Oppty。
  7. 点击保存。

选择操作布局的字段后,可以为“金额”字段添加预定义的值。在我们的例子中,我们使用了这个公式:

Account.Last_Year_Revenue_Generated__c  * 1.10  / 4
将此操作添加到帐户页面布局。当用户调用它时,他们会看到一个预填充在他们可以接受或覆盖的字段中的值。

New Opportunity action overlay

关于这个动作的一个很酷的事情是,你可以从机会的客户户中提取数据来创建机会。 Salesforce还支持记录遍历,所以如果您拥有分层客户,则可以像这样从父客户中提取收入:

Account.Parent.Last_Year_Revenue_Generated__c

不要担心回忆公式的格式;快速操作是声明式的,并使用Salesforce公式构建器。

根据输入值重定向到Visualforce页面

您可以创建Visualforce页面来增强您的业务流程。用户可以通过各种方式导航到这些Visualforce页面,例如使用自定义按钮,操作覆盖和选项卡。

Visualforce页面的一个好处是,通过使用标准控制器,您可以创建自定义记录页面并添加预验证,预填充字段,公式等等。

Salesforce Classic中通常使用JavaScript按钮来读取记录中的值并将其传递到URL,然后将用户重定向到Visualforce页面。您还可以通过快速操作让您的用户访问Visualforce页面。创建Visualforce快速操作非常简单,而且与我们已经介绍的过程类似。唯一的区别是您选择自定义Visualforce作为操作类型。

Create a Visualforce action

对于特定于对象的Visualforce快速操作,必须在Visualforce页面中包含该对象的standardController才能访问记录数据,并使Visualforce页面显示在快速操作选项列表中。

自定义网址按钮和链接

也许您使用JavaScript按钮进行导航,用命令window.open(URL)和一些变量将用户重定向到另一个页面。在大多数情况下,您可以使用Lightning Experience中的自定义URL按钮或链接。
以下是不同URL按钮和链接的列表,以及Lightning Experience中的重定向行为。
自定义网址按钮或链接 闪电体验行为
External URL

www.google.com
网址在新标签页中打开
相对Salesforce URL,查看

/{!Account.Id}
Record home page opens in existing tab
相对Salesforce URL,查看

/{!Account.Id}/e
Edit overlay pops up on the existing page
相对Salesforce URL,查看

/001/o
Object home page opens in existing tab
$Action URL, View

{!URLFOR($Action.Account.View, Account.Id)}
Record home page opens in existing tab
$Action URL, Edit

{!URLFOR($Action.Account.Edit, Account.Id)}
Edit overlay pops up on the existing page

Apex 触发器

您可能熟悉Apex触发器;他们已经在我们的平台上得到了多年的支持。可以将Apex触发器配置为在用户单击记录上的保存之前或之后执行。
当您需要预先验证,计算和字段填充时,请考虑使用Apex触发器。它们对第三方集成特别有用,因为这些规则是通过Salesforce API,Lightning Experience和Salesforce应用程序实施的。

有关Apex触发器的更多信息,可以查看“Apex开发人员指南”或获取Apex触发器徽章。

自定义Visualforce按钮

Lightning Experience中的另一个重要功能是支持在列表视图中使用Visualforce按钮。使用此功能,您可以使用Lightning中的现有Visualforce操作,并使用列表中的多个记录。就是这样。
  1. 创建您的Visualforce页面。

    以下是用于编辑多个机会的舞台和关闭日期的示例代码:

    <apex:page standardController="Opportunity" recordSetVar="opportunities" extensions="tenPageSizeExt">
       <apex:form>
          <apex:pageBlock title="Edit Stage and Close Date" mode="edit">
             <apex:pageMessages />
             <apex:pageBlockButtons location="top">
                <apex:commandButton value="Save" action="{!save}"/>
                <apex:commandButton value="Cancel" action="{!cancel}"/>
             </apex:pageBlockButtons>
             <apex:pageBlockTable value="{!selected}" var="opp">
                <apex:column value="{!opp.name}"/>
                <apex:column headerValue="Stage">
                   <apex:inputField value="{!opp.stageName}"/>
                </apex:column>
                <apex:column headerValue="Close Date">
                   <apex:inputField value="{!opp.closeDate}"/>
                </apex:column>
             </apex:pageBlockTable>
          </apex:pageBlock>
       </apex:form>
    </apex:page>
  2. 创建一个引用您的Visualforce页面的自定义按钮。
  3. 将该操作添加到您的列表视图。

    注意

    最近查看的记录列表上不支持批量操作。它们只在列表视图中可用。

例子

这就是闪电体验中出现的动作。

Visualforce custom button in Lightning Experience

从我们的示例中可以看到,Salesforce具有很多功能,允许您迁移JavaScript按钮功能并转到Lightning Experience。

现在,您可能会有很多在您的组织中积累的JavaScript按钮。您可能预期迁移或转换过程需要很长时间。但是这个工作可能不像你想象的那么艰难。我们对Salesforce内部的所有员工使用的JavaScript按钮进行了分析。我们发现许多按钮已经过时或很少被用户调用。其他人只是重复 – 同一个按钮,但在不同的对象。通过列表后,我们发现许多JavaScript按钮可以转换为我们目前所看到的解决方案。其余的,我们可以用新的闪电行动解决不少问题。

您可能注意到了编程解决方案列表中的闪电行为,作为许多JavaScript按钮用例的常见替代品。闪电行动很容易建立,因为他们是基于快速行动框架。您将它们设置为与Visualforce快速操作类似。接下来我们将更深入地介绍闪电行动。