Salesforce Outlook集成(3)

学习目标

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

  • 为Outlook启用和设置Lightning。
  • 启用并设置闪电同步。

卷起你的袖子

设置闪电为Outlook和闪电同步并不困难,但它需要一些时间。如果您不管理Microsoft Exchange,则可以让该管理员在设置Lightning Sync时与您一起工作。

在Ursa Major的管理员Maria Jimenez投入时间进行任何设置之前,她回顾了Lightning for Outlook和Lightning Sync的系统要求。

闪电的Outlook系统要求

为您 你需要
邮件服务器 或者:

  • Exchange 2016或2013内部部署
  • 与Office 365联机
电子邮件应用 或者:

  • 在网络上的Outlook
  • Windows PC上的MicrosoftOutlook®2016或2013的桌面版本
  • Microsoft Outlook for Mac 2016
浏览器 任何允许来自Salesforce的Cookie的浏览器:

  • Google Chrome™,最新的稳定版本
  • Mozilla®Firefox®,最新的稳定版本
  • Apple®Safari®,最新的稳定版本
  • Microsoft InternetExplorer®11(仅限Windows)
  • Microsoft Edge,最新的稳定版本(仅限Windows)

闪电同步系统要求

连接到Salesforce使用 你的公司需要 启用这些设置
邮件服务器
  • 带有Exchange Online的Office365®Enterprise Edition
  • Exchange Server 2016
  • Exchange Server 2013 Service Pack 1
  • 在SSL连接上交换Web服务(EWS)
  • Exchange自动发现服务
  • Exchange服务器和自动发现服务上的基本身份验证
  • 加密协议TLS 1.1或更高版本
OAuth 2.0 for Exchange 带有Exchange Online的Office365®Enterprise Edition 没有其他的

检查,检查和检查!玛丽亚有开始设置过程的绿灯。这是她怎么做的。

为Outlook设置闪电

  1. 点击Setup icon设置图标,然后选择设置。
  2. 在“快速查找”框中输入Outlook的闪电,然后选择“闪电”用于Outlook。
  3. 为Outlook启用闪电。

    Setting to turn on Lightning for Outlook

  4. 让代表将新组成的电子邮件与Salesforce记录联系起来。打开启用增强电子邮件与闪电的Outlook和电子邮件到Salesforce。
  5. 给你的销售代表说明在Microsoft Outlook中设置Lightning for Outlook。

设置闪电同步

这些步骤包括您设置Lightning Sync的高级详细信息。在必要的地方,我们在Salesforce帮助中包含了详细的细节链接。

  1. 启用闪电同步。从“设置”中,在“快速查找”框中输入“同步”,然后选择“同步设置”。点击编辑,选择启用闪电同步,然后点击保存。
  2. 选择你如何连接到你的电子邮件服务器。获取有关如何选择和配置连接到Microsoft Exchange的方法的更多信息。
  3. 要确认它是否可以与Exchange服务器通信,请运行Lightning Sync连接测试。测试将检查Salesforce与Exchange服务器之间的多个连接点。测试完成后,它会提供一个描述连接状态的摘要。请参阅运行此测试的详细说明。
  4. 为您的销售代表定义同步设置。这包括如下决定:
    1. 谁可以同步以及他们可以同步哪些项目
    2. 是否要限制物品
    3. 代表从Outlook或Salesforce中删除项目时会发生什么情况

    获取有关这些决定的指导以及同步设置的详细步骤。

  5. 准备您的代表来管理同步的联系人。根据配置同步选项的方式,您的代表可以将Exchange中的联系人同步到Salesforce或同时进行同步。通过同步过程获得引导您的销售代表的提示。
  6. 告诉您的代表他们如何防止某些事件同步。例如,您的代表很可能希望保持个人事件不会同步到Salesforce。了解如何防止某些事件同步到Salesforce。

为Outlook定制闪电

玛丽亚完成了设置闪电的Outlook和闪电同步的基本知识后,她定制功能,给她的代表最好的销售经验。就是这样。

  1. 从“设置”中,在“快速查找”框中输入Outlook的闪电,然后选择“闪电”用于Outlook。
  2. 考虑启用这些选项来优化您的代表使用Lightning for Outlook的经验。
    1. 使用闪电为Outlook启用增强型电子邮件。销售代表将电子邮件作为任务添加到Salesforce,而不是将其添加为电子邮件。这是一个更好的经验。了解如何使用增强的电子邮件为Outlook配置Lightning。

      Settings for Enhanced Email, App Builder, and email templates

    2. 使用Lightning App Builder自定义内容。 您可以灵活地定制Salesforce内容在Outlook中的显示方式。 了解如何使用Lightning App Builder使您的代表更加高效。
    3. 使用Lightning for Outlook中的Lightning电子邮件模板。 您的代表可以使用模板快速制作电子邮件,而不是从头开始编写邮件。 了解如何在Outlook中使用Lightning电子邮件模板。

将Outlook与Salesforce集成是一个很好的方法,可以让代表们利用最依赖的工具保持高效。 借助Lightning for Outlook将Salesforce体验带入Outlook,减少了您的代表在Outlook和Salesforce之间切换的需求。 而闪电同步保持您的代表联系和事件同步,所以你的代表不会错过一个节拍。

Salesforce Outlook集成(2)

学习目标

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

  • 总结您和您的团队从Salesforce for Outlook转移到闪电Outlook和闪电同步的好处。
  • 发现您是否有资格迁移。
  • 规划迁移过程。

如果您的代表已经使用Salesforce for Outlook

如果您已经在Salesforce平台上工作了一段时间,则很可能您已经使用了本地安装的Outlook集成产品Salesforce for Outlook。它帮助销售代表长期保持高效。

但是,我们已经取得重要进展,提供下一代基于云的Outlook集成产品,用于Outlook的闪电和闪电同步。这就是我们现在正在大力投资开发工作的地方。我们不希望你留下。

如果您的代表不使用Salesforce for Outlook

如果您和您的销售团队是整合Outlook和Salesforce的新手,请休息一下!你不需要通过本单元的步骤。但我们欢迎您一起阅读并参加测验。我们知道你想要那个徽章!

为什么要移动闪电为Outlook和闪电同步?

Salesforce for Outlook一直是帮助您的代表在Outlook和Salesforce中维护数据的一个很好的解决方案。不过,这是已安装的软件。正如您所知,软件需要维护和频繁的版本更新。这些更新需要你,你的公司的可靠管理员,协调软件安装与销售代表,以便每个人都运行最新版本。而且大家都知道,您所有的销售代表都运行相同版本的Salesforce for Outlook,对吧? (眨眼!)

好消息是,闪电的Outlook和闪电同步准备去哪里你的代表去。这意味着闪电的Outlook可供您的本地安装版本的Outlook和在网络上的Outlook的代表。销售代表总是可以访问最新和最好的功能。而最新的功能没有你或你的代表不得不安装更新。这是一笔巨额交易。而且您的IT朋友对于选择维护要求较少的Outlook集成产品更成为您的粉丝。

此外,我们很高兴地告诉你,Outlook的闪电现在支持Mac用户!但在您投入任何时间迁移销售代表之前,请查看参考资料部分中的Lightning for Outlook系统要求。

如何转向闪电的Outlook收益管理员?

闪电为Outlook需要多一点的时间从你的前面,以确保所有移动件连接到对方。但它可以节省您在销售代表之间协调软件更新的麻烦。与已安装的产品相比,将Lightning for Outlook部署到您的销售团队非常简单。这是因为闪电的Outlook是一个真正的基于云的解决方案。总之,转向闪电展望:

  • 简化行政程序, 因为你不维护版本。无论何时我们更新Lightning for Outlook,这些更新都会发生在Salesforce业务方面。这很像您每年获得三次自动Salesforce更新。
  • 消除部署压力, 因为我们已经比以往更容易为您部署过程。您可以选择让代表自己部署Lightning for Outlook加载项。或者你可以为他们部署加载项,这是一个很好的方法,让他们得分。
  • 让你控制同步过程, 因为您的销售代表不再担心确保他们正在同步正确的项目。

什么是功能可用性?

同时,Salesforce for Outlook包含比Lightning for Outlook更多的功能。但事实不是这样的。 Outlook的闪电现在包含一系列比Salesforce for Outlook更丰富和更完善的功能。

计划你的行动

我们建议您使用这些步骤制定测试计划。

  • 确定Salesforce for Outlook和Lightning for Outlook之间的区别。.在“参考资料”部分查看Lightning for Outlook和Lightning Sync系统要求。
  • 将Outlook的闪电展示给一个小测试组。 我们建议使用沙箱环境。把你自己包括在这个小组中,这样你就可以快速地把握出现的任何问题。
  • 建立停用Salesforce for Outlook的时间表。

  • 将停用时间表传达给销售代表。 并告诉他们在实际移动过程中,他们的项目不会同步,并且Outlook中的Salesforce侧面板将不可访问。
  • 在Outlook配置中禁用功能。.稍后我们会告诉你。
  • 与您的IT专家协调,从代表计算机上卸载Salesforce for Outlook。.或者,如果您的代表对其计算机具有管理权限,请将您的代表指向在参考资料部分中卸载Salesforce for Outlook的过程。

为Outlook移动闪电

在这个缩略的过程中,您禁用侧面板和同步功能的Salesforce for Outlook功能,而不是完全卸载Salesforce for Outlook。然后,您打开Lightning Sync,并将Outlook的Lightning部署到电子邮件用户。下一个单位包括更多的设置细节。

  1. 点击Setup icon设置图标,然后选择设置。
  2. 在快速查找框中,进入Outlook,然后选择Outlook配置。
  3. 点击Outlook配置旁边的编辑。

    Available Outlook configurations

  4. 滚动到数据设置,然后取消选择侧面板和添加电子邮件。

    Data Settings for side panel and add email

  5. 对于联系人,事件和任务,请将同步方向设置为不同步。然后,点击保存。

    Settings for sync directions

  6. 在“快速查找”框中输入Outlook的闪电,然后选择“闪电”用于Outlook。
  7. 打开闪电的Outlook。

    Setting to turn on Lightning for Outlook

  8. 从“设置”中,在“快速查找”框中输入“同步”,然后选择“同步设置”。点击修改。

    Lightning Sync settings

  9. 选择启用闪电同步,然后单击保存。

    Enable Lightning Sync setting

  10. 定义您的Exchange服务器的连接方法。

    Setting for communication method

  11. 在快速查找框中输入同步配置,然后选择同步配置。
  12. 点击新的闪电同步配置。然后,给它一个名字,选择活动,并分配成员。

    Settings for new Lightning Sync configuration

  13. 对于联系人和事件,请选择同步方向。然后,点击保存。

现在您已经了解了迁移过程中涉及的内容。但请记住,下一个单位可让您访问更多关于为Outlook和Lightning Sync设置Lightning的详细信息。

Salesforce Outlook集成(1)

学习目标

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

  • 总结您的代表如何依靠Outlook和Salesforce来开展前景和交易。
  • 确定您的销售代表在两个系统中输入销售数据的冗余。
  • 描述如何闪电为Outlook和闪电同步帮助您的代表更有成效。

介绍

在我们开始之前,让我们来谈谈我们在这个模块中的内容。在第一个单元中,我们讨论了集成Outlook和Salesforce来设置代表以取得成功的重要性。

在下一个单元中,我们看看使用Salesforce for Outlook的人们如何转移到我们的下一代基于云的Outlook集成产品:用于Outlook和闪电同步的闪电。

为了使事情变得圆满,我们的最后一个单元向您展示了如何为Outlook和闪电同步设置闪电。

准备好潜入吗?我们走吧!

提高销售代表生产力的一种方法

您的代表使用Microsoft Outlook。他们使用Salesforce。是不是你的销售代表一起使用Outlook和Salesforce?据麦肯锡公司(McKinsey&Company)称,销售代表在电子邮件和日历上花费高达28%的时间。在新兴太阳能公司Ursa Major Solar,Inc.工作的销售代表Erin Donaghue和Lance Park就是这种情况。把Salesforce的数据带到他们花这么多时间的地方对他们来说非常重要。

当您集成Outlook和Salesforce时,您可以帮助您的代表花费更少的时间在两个系统之间输入数据和切换。您还可以帮助销售团队跟踪与Salesforce记录相关的重要电子邮件对话。这些特权帮助您的代表:

  • 消除冗余数据录入两个系统的时间。
  • 在一个地方访问重要的Outlook电子邮件和相关的Salesforce记录,更容易为潜在客户和客户制定有针对性,有意义的电子邮件通信。
  • 更多地关注最重要的事情:销售!

Erin和Lance使用Outlook和Salesforce。让我们回顾一下他们如何使用这两个系统。

为什么销售代表使用Outlook

您的销售代表已经在Outlook中花费时间。这是他们用它做的。

代表做的事情 为什么?
发送电子邮件 电子邮件是一种简单而有效的方式来与潜在客户进行交流,并获得关系。
保持联系 Outlook中的联系人充当您代表的虚拟Rolodex卡文件。
安排会议和约会 您的代表严重依赖日历来规划他们的日子和安排重要事件。

为什么要使用Salesforce

Ursa Major购买了Salesforce是因为它是一个强大的销售工具。荣誉给他们!他们的销售代表使用Salesforce来跟踪他们的潜在客户和交易信息。但让我们仔细看一下销售团队使用Salesforce的情况。

代表做的事情 为什么?
保持线索和联系 您的代表将销售线索和联系人与其他重要的Salesforce记录(例如客户和机会)联系起来。
安排会议和约会 销售代表及其经理依靠Salesforce日历获取有关销售的会议和书籍预约。
您的代表还将这些事件与其他重要的Salesforce记录关联起来。
跟踪管道中的交易 销售人员使用Salesforce机会来跟踪他们的交易,Salesforce机会与您的销售团队相关联(您猜对了)其他重要的Salesforce记录。
了解杰出的案例 并非所有销售都顺利。您的销售代表可以从他们的客户与贵公司所登录的问题中获益。在你的销售代表尝试销售你的销售代表销售之前,了解问题尤其重要。

为什么冗余是一个问题

为什么这很重要?因为您的销售代表在Outlook中执行的操作与Salesforce中执行的操作一样。我们的大熊猫销售代表艾琳和兰斯经常使用这两个系统来跟踪联系人,安排会议和约会,并跟踪任务。

Redundancy between Outlook and Salesforce Venn diagram

让我们来看看这会给你和你的销售代表带来什么问题。

  • 在上下文切换和两个地方维护数据时丢失了时间。单独的上下文切换会将您的销售代表退出销售模式,并将其置于工具管理模式。
  • 数据输入错误的机会更大。当您的代表在Outlook和Salesforce中输入数据时,出错的可能性会增加。我们可以看到,当Erin在Outlook中进入联系人,然后在Salesforce中再次联系时,她无意中引入了一个错误。不好。
  • Misspelled name between Outlook and Salesforce

错误,如Erin的数据录入错误,会影响数据质量,甚至影响公司的声誉。这里最重要的是Erin的销售工作不必与销售数据在Outlook和Salesforce之间保持同步。
这就是闪电的Outlook和闪电同步的帮助。让我们看看如何保持Outlook和Salesforce之间的一致数据,帮助您的代表保持在他们的游戏之上。

闪电为Outlook和闪电同步帮助您的销售代表

以下简要介绍一下您可以提供给销售代表的核心功能。

核心功能 为什么这是有帮助的
在Outlook中查看并关联相关的Salesforce内容 从Outlook电子邮件中,您的销售代表可以了解所销售人员的情况。最重要的是:

  • 销售代表添加与销售周期相关的电子邮件,以便Salesforce的同事知道发生了什么。
  • 您在销售团队中扮演了增加Salesforce采用的重要角色。
在Outlook中访问Salesforce功能 当你的代表没有必要离开Outlook:

  • 根据自定义对象创建Salesforce记录,例如潜在客户,商机,帐户,联系人甚至记录。
  • 将电子邮件消息和一次性日历事件关联到多个Salesforce联系人以及接受任务或电子邮件的任何其他Salesforce记录。
  • 搜索Salesforce记录,包括基于自定义对象的记录。
同步联系人和事件 在后台使用Lightning Sync,您的代表不会为Outlook和Salesforce中的联系人和事件重复数据输入。

  • 联系人:根据您选择的选项,联系人可以在Salesforce与Exchange服务器之间或双向进行同步。
  • 事件:从您的Exchange服务器同步到Salesforce的一次性事件。或者对于满足特定要求的销售代表,一次性事件可以在两个方向上同步。详细了解同步事件的注意事项。

这对于您的销售人员来说是一些重大的胜利。我们很高兴地告诉你更多关于闪电“展望”能帮助销售团队释放管理时间的方式。这样,您的销售团队就可以专注于增加销售。当你的公司销售情况良好时,你们都会受益,对吧?

从产品管理直接听取

闪电的Outlook和闪电同步的产品经理讨论关键组件,并进行演示。在这个视频中,他们还讨论了Gmail的Lightning,我们将在Gmail集成模块中介绍。

接下来,我们介绍准备将销售团队从Salesforce for Outlook迁移到闪电以进行Outlook和Lightning Sync的基础知识。

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。