DreamForce 2019开发人员和管理员的关键外卖

DreamForce 2019开发人员和管理员的关键外卖

Salesforce的年度 Dreamforce会议 最近在旧金山裹了起来,这是一个巨大的成功,就像以前的所有版本一样。 

为期四天的活动汇集了一些最聪明的思想和有影响力的领导者,并以超过2,500个不同的会议。在 Dreamforce 2019,Salesforce揭开了许多旨在提供个性化客户体验的产品的新更新和功能。

2019年Dreamforce的产品公告

客户360真相 -  一套新的数据和身份服务,使公司能够在销售,服务,营销,商业等方面构建单一的真理来源,以为每个客户创建一个单一的通用Salesforce ID。目标的目标 客户360真理 是提供公司可以轻松访问多种系统的数据和更有效的方式来提供和预测客户的需求。

画报 – Tableau 已宣布基于Netflix风格的可视化建议,以帮助客户快速查找相关的预览和基本更新以询问数据,并做出更好的决策。

画报还推出了指标,让业务领导者轻松而毫不费力地跟踪绩效指标。用户可以轻松创建,跟踪和查看来自多个仪表板的关键性能指示灯。此外,Tableau通过宣布扩大了与亚马逊网络服务的战略关系 现代云分析(MCA)是一项新的倡议,旨在帮助客户利用自助分析的全部潜力。 

Salesforce和Apple伙伴关系

Salesforce和Apple在Dreamforce 2019宣布了三款新产品。

Salesforce移动应用程序,改进的CRM应用程序, 托运人去,iOS和iPados的流行头的移动应用程序,以及 Salesforce Mobile SDK. 为开发人员提供轻松构建和部署iPhone和iPad的本机应用程序。

爱因斯坦呼叫教练 

销售云的新解决方案使管理人员能够获得深入的见解,并确定其销售团队与客户对话中的趋势。

Salesforce和亚马逊合作伙伴关系

  • 最新的服务云语音集成了电话进入 Salesforce服务云 在其代理工作空​​间中提供带有完整工具的联络中心代理,可提供增强的客户服务支持。
  • Salesforce和AWS在流导者中提供AWS内容,Salesforce的免费在线培训平台,旨在教育云上的任何人。

DreamForce 2019年管理员公告

  • Salesforce推出了一个服务云语音,通过Einstein语音助理和爱因斯坦语音技能的帮助,管理员可以为每个用户创建语音助手的自定义版本。
  • 爱因斯坦呼叫教练用于通过会话智能优化销售团队的客户互动。
  • Pardot Envancements包括新的闪电电子邮件建设者和沙箱。
  • 确保您的数据永远不会使用私人连接交叉公共互联网。 
  •  闪电沙箱可以按需焕然一新并在几分钟内创造。
  • 通过安全命令中心,管理员可以管理安全策略和连接,查看趋势,接收主动警报并实现多功能可见性。

DreamForce 2019开发商的公告

  • 通过开放式采购闪电基本组件,您可以开始开发用户界面,具有超过50个闪电基组件。  
  • Salesforce BlockChain现在可以在开发预览中提供。 
  • 数据屏蔽功能可用于保护您的沙箱数据并选择如何加密或删除它。
  • 引入本地开发服务器以创建,运行和测试本地闪电Web组件。
  • 使用新的EINSTEI API和用户界面功能,您可以创建智能链接和连接。您可以使用Einstein Vision和Language应用程序点击Clicks构建自定义模型,并通过Einstein多语言功能分析六种语言的文本。
  • 通过全新的实时事件监视功能,您可以创建有针对性的事务安全策略以防止数据丢失。 

需要任何援助Salesforce开发, CRM实施数据迁移现场服务闪电, 和 Salesforce集成 使用Outlook,MailChimp等第三方工具以及更多?联系云类比 - 世界上最值得信赖的 Salesforce Consulting合作伙伴 和Salesforce开发公司 - 现在!

Salesforce Google地图集成

Salesforce Google地图集成

我们是Salesforce™专家,我们通过记录我们在Salesforce™CRM世界中解决的所有行业特定技术问题来引导能源。在这里,我即将解释其中一个 谷歌地图API与Saleforce.com自定义开发项目 我与Salesforce™开发人员密切相关。在下面,我将为您提供项目的简要描述,基本上是我们帮助我们的最终客户。

要求:-

在,该项目客户端基本上需要一个系统查看器,他可以计算源和其他记录之间的距离。该项目的基本议程,帮助我们的最终客户,他们将帮助客户,他们可以从账户来源识别所有机器。

该项目的原始想法是,来自单个帐户记录来源,我们需要提供其他帐户列表的能力。属于该帐户的某个接近半径范围内的帐户记录是搜索“邻近”帐户中导致的帐户列表。

系统中的帐户可能是源帐户。从源帐户启动搜索的用户首先需要填充显示各种标准信息的屏幕。此类标准将包括“RADIUS”设置,我们将提供初始默认值,但我们将需要覆盖的能力。

其他条件将包括其中存在的两个或三个自定义字段,这些字段目前存在于帐户记录上。它将为每个提供默认值,但我们需要覆盖能力。

它不强制在地图表单中显示邻近帐户列表。如果邻近帐户显示在列表中,而不是在地图上,则重要的是,我们可以看到从每个接近帐户的距离到源帐户的距离。

我们带来了解决方案: -

在此内容中,我们承认从帐户列表中,我们可以从源到估算里程中的某些机器识别,并且可以以不同的成本从源中找到机器列表,从而识别某些机器可以识别某些机器英里列表和它也可以从上一个销售日前识别,我们可以从上面的所有来源过滤,然后单击“搜索”。从这方面,它提供了两个选项 

1 - 生成PDF
2视图地图

生成PDF: -  从此选项客户选择选择其选择后,他们会单击此选项,并会在PDF中获取详细报告。

查看地图: -  它为观众提供了识别产品的所有目标位置,并通过此地图分析某些目的地。

 

 

现在,随着以下屏幕截图,其方法可以理解如下: -

1)使用各种标准搜索过滤器

 

可以通过以下方式理解 代码片段 如下。这些是我们部署到生产的少数组成部分。

1. 在过滤器控制器上显示所有帐户: -

从以下代码中,我们能够区分如何多选过滤器上可用的选项 -

公众与共享类showallaccountonfiltercontroller {

公共字符串RecordId {GET; SET;}

公共帐户SourceAccount {GET; SET;}

public double last_sale_days_ago {get; set;}

公开名单<Account>accountlist {get; set;}

公开名单<Account>accountlistsearched {get; set;}

公开名单<Account>accountlistsearched1 {get; set;} //列表将在地图上显示

公开名单<wrpclass>searchAccountListWither {GET; SET;}

公开名单<String>AccountPickListValue;

公开名单<String>seletectedaccountpicklistvalue;

公共布尔列表空地{GET; SET;}

公共Boolean展示{get; set;}

public string headerdata {get; set;}

下面有上述模型的描述 ER图

 

 

 

 

5错误的Salesforce开发人员可以承诺或应该避免

5错误的Salesforce开发人员可以承诺或应该避免

这款Salesforce博客是开发商在Force.com开发和定制方面的经验。日常开发人员面临的问题以及它们犯下的错误有时对广泛的开发人员和管理员有助于有趣。

所以让我们开始史诗!

不要纠结:

曾几何时 我正在VF页面上开发,并提供了一个报告的链接(VisualForce页面中的标准Salesforce报告:

因此,我在我的vf页面中硬编码了报告的网址。 URL在沙箱中正常工作,我很开心。一旦我完成了开发,我将迁移到生产环境的更改,最后当我在网站上测试了应用程序时,我无法查看单击链接的报告。

但我稍后知道我无法修改生产环境中的APEX类,我需要尽快修复它,所以这一切都是一个大的烂摊子!

在仔细审查障碍之后,我发现我已经硬编码了我的报告网址,因为环境发生了改变了URL已停止工作。

所以我终于想到了使用动态URL的概念,并使用下面的一些代码片段:

“url.getsalesforceBaseURL()。ToexternalForm()+'/'+ ReportId”

最后的判决:> DO NOT HARDCODE!!!

避免SOQL错误:

在开发中,您遇到了错误的错误,例如“system.limitexception:太多SOQL查询:101”?

这个错误 system.Limitexception. :太多SOQL查询:101是由于事实,您正在击中州长限制。

我们尊敬的州长限制说,您可以在上下文中运行总共100个SOQL查询,您正在击中限制。

在对同一个彻底的研究之后,我发现触发的所有触发器将在单个上下文或呼叫中进行计数。我们需要确保触发的SOQL总数应小于100。

为了通过这一点,我多次更改了我的代码,以这样的方式触发必须小于100。

有时我也喜欢如果(只有我们需要更改上下文)在需要异步运行代码时,使用@future注释。

我肯定总是那个我使用的SOQL查询不应该在循环中。

有一些最佳实践,您必须遵循避免此错误(以避免击中调速器限制)。

//wiki.developerforce.com/page/Best_Practice:_Avoid_SOQL_Queries_Inside_FOR_Loops

http://salesforcedeveloperblog.blogspot.com/2011/05/best-practices-of-triggers.htmhttp://www.salesforce.com/us/developer/docs/apexcode/Content/apex_triggers_bestpract.htm

http://wiki.developerforce.com/page/Apex_Code_Best_Practices

//www.salesforce.com/us/developer/docs/apexcode/Content/apex_gov_limits.htm

 始终遵循上述实践,以确保您在工作场所享受微笑..

具有挑战性的部分是人们无法增加总督限制,只能遵循最佳实践。

Streamline在同一对象上的多个触发器

 所以这是一个更棘手的情况:

一旦我在尊重的对象案例上工作(简而言之),可以自动为客户经理分配。所以我写了一个“在插入前的”触发器。

我发现有时分配的客户经理正如预期的那样,有时候不会!

我被困惑了!!

就像始终我开始挖掘检查调试日志,手动测试等等。

最后,调试日志是一个“Maseeha”告诉我,我确实有两个触发器,因为哪个系统无法识别执行顺序。 可能这些代码由其他一些开发商起草(当然是我当前和以前的同事)起草。  我坐在他们身边,最后突出了一个触发器,对象上具有相同的事件。

因此,在实践中,避免对象上具有相同事件的多个触发器,因为它可能有时脱掉您。

ullkify代码

因此,在我的Salesforce发展职业的最初日期,我遇到了非常可怕和良好的学习当然为我。

让我们开始给你一些瞥见我的书面代码,只处理一个记录 :

trigger BeforeInsert_Account on Account (before insert){

//This only handles the first record in the Trigger.new collection but if more than 1 Account initiated this trigger, those             additional records will not be processed

Account objAccount= Trigger.new[0];

List<Contact> contacts = [SELECT ID,salutation,firstName,lastName,email FROM Contact WHERE
 accountId = :acct.Id];

//and something something

} 

我测试了触发器,它的工作正常,我的工作是由我的工作完成的,然后突然有一天触发器击中了调速器的限制。

就像总是我被困惑了。我知道,我的一个甜蜜的同事已经写了一批插入账户,这是整个唯一的原因。

因为我无法问我的甜蜜同事撤消批处理课程,我需要做点什么。

挖掘后,我发现如果一批记录调用我的APEX代码,则所有这些记录都需要作为批量处理,击中调控器限制。

问题是,只有一个帐户记录被处理,因为代码仅在触发器中仅明确访问触发器中的第一个记录.New [0]。相反,触发器应正确处理触发器中的整个帐户集合。

以下是如何从批处理处理所有传入记录的示例:

trigger BeforeInsert_Account on Account (before insert){

//This only handles the first record in the Trigger.new collection but if more than 1 Account initiated this trigger, those additional records will not be processed

Account objAccount= Trigger.new[0];

List<Contact> contacts = [select ID, salutation,firstName,lastName,email FROM Contact 
WHERE accountId = :acct.Id];
//and something something……
}

请注意,该代码的该修订版本如何遍历整个触发器。使用用于循环的整个触发器。现在,如果使用单个帐户或最多200个帐户调用此触发,则所有记录将被正确处理。

所以始终缩小策略来写宽容的代码。这是练习,虽然它不容易但是很好!

遵循申请表现的一般设计指南

根据我在设计VisualForce的经验,您可以使用良好的弹出窗口和图像开发一个非常丰富的UI,但是当用户开始使用它时,它将成为NetTlesome用于单击或导航到按钮。

我已经写了这些一般指导方针以避免绩效影响:

  • 始终在特定任务周围设计页面,在任务之间具有明智的工作流程和导航。该点应在任何地方连接。
  • 切勿使用功能和数据过载页。 VisualForce页面具有无界数据或大量组件,行和字段具有较差的能力和性能,并且它们冒着击中调速器限制的视图状态,堆大小,记录限制和总页面大小。
  • 始终尝试推回请求以包括非基本功能。
  • 必须构建原型以验证疑虑。

 参考:

//developer.salesforce.com/blogs/developer-relations/2015/01/apex-best-practices-15-apex-commandments.html

Salesforce Sandboxes  - 管理中的主要播放器&部署定制

Salesforce沙箱es - 管理中的主要播放器&部署定制

什么是沙箱?

对于开发人员/管理员的沙箱就像一个用于孩子的游乐场,它允许开发人员/管理员自定义,播放和配置应用程序开发环境,而不会影响实际的生产发布版本。 Salesforce中的沙箱用于应用程序开发,代码管理,版本控制,测试和培训,而不会影响Salesforce生产组织中的实际数据和应用程序。

沙箱的类型:

  开发人员沙箱 Developer Pro Sandbox. 部分复制沙箱 全沙箱
他们的用法是什么? 用于孤立环境中的编码和测试 用于孤立环境中的编码和测试 用于测试环境和质量保证任务 用于测试环境和性能和负载测试和分期
它们包括生产环境的内容是什么? 生产组织配置(元数据)副本。 生产组织配置(元数据)副本。它们具有比显影剂沙箱更大的存储限制。 生产组织配置(元数据)的副本,以及Sandbox模板定义的生产数据的子集。 生产组织的复制品。
您可以创建沙箱的许可证  ·完整沙箱·PartialCopy沙箱·开发人员专业沙箱·开发人员沙箱 ·全沙箱·PartialCopy沙箱·开发人员专业沙箱 ·全沙箱·PartialCopy沙箱 ·全沙箱

SDLC过程中的沙箱

在Salesforce App开发生命周期中,采用各个阶段的代码开发,单元测试,UAT等。一个简单的例子是: 

   在不同的团队同时在多个领域工作的情况下,最终必须合并到一个组织中,这是一个单一的生产环境,随着时间的推移变得相当复杂。它克服了这个暂存平台,以压抑地测试性能而不影响生产版本。相同的示例如下所示: 

管理Sandboxes释放管理过程

虽然没有拇指规则或框流程,但在哪些组织依赖于处理其发布管理系统的过程中。但是仍有一些点来考虑运行该过程的沙箱:

  • 每次释放后做出刷新沙箱,以便我们确保利用新功能并确保我们的环境与新的更改兼容。
  • 此外,它’S推荐使用策略使ORG发布与Salesforce版本对齐,以减少刷新沙箱的努力。
  • 应准备好刷新后运行列表,并在新版本后刷新沙箱。很少应该包括的东西是:
    • 数据屏蔽需求
    • 用户配置文件修改
    • 测试数据加载
    • 部署计划
    • 关闭计划的作业
    • 管理出站电子邮件。

希望这可以帮助您概述Salesforce Sandboxes的概述。

Salesforce测试仪的作用

Salesforce测试仪的作用

核心团队

在典型的Salesforce项目交付中,来自核心团队的以下资源:

  • 商业分析师
  • 项目经理/ Scrum Masters
  • 质量分析师/测试人员
  • 开发人员
  • 管理人员

Salesforce Tester的作用是一个完整的工程师,因此它们更常见于质量工程师作为质量保证的替代品。通常,它们是Salesforce.com认证管理员或Salesforce.com认证的开发人员。在Layman条款中,他们拥有遵循敏捷和传统软件生命周期的项目的测试分配的所有技能,可以审查错误的代码,并能够设计,写入,维护和规模复杂的测试框架,以及有时甚至从头开始设置测试环境。

Salesforce测试仪有何责任?

  • Salesforce测试仪的主要功能包括功能测试,单元测试,手动测试,自动化测试,负载测试,部署测试和安全测试等服务。
  • 手动测试,不需要对测试有关的特定类型的经验和技能,主要包括使用具有方法方法的人类的Salesforce.com应用程序的测试
  • 拥有AssureClick,Selenium,QTP等经验的测试人员在Salesforce自动化测试中起着至关重要的作用。
  • Salesforce测试仪需要测试Salesforce.com或Force.Com应用程序功能测试,该测试包含单元测试和过程测试。
  • 有时,测试人员需要在应用程序上工作并获得其功能以创建功能映射。然后,它们使用函数映射来创建和执行测试用例。
  • 其他重要的测试类型包括:
    1. Salesforce.com负载测试
    2. Salesforce.com安全测试
    3. Salesforce.com CRM Ad-Hoc测试

作为职业选择,Salesforce测试仪的增长前景非常迅速。 ADM 201认证可以完全增加其职业发展。在测试中,他们为未来业务分析师的角色作出合格的候选人。 快乐测试!

Process Builder vs apex触发器–选择自动化工具

Process Builder vs apex触发器–选择自动化工具

流程建设者概述

Process Builder是您在构建时的图形表示。它包括

标准,即时预定的操作。

有以下事项可以通过Process Builder完成:

  • 创建记录:除了更新记录外,您还可以创建记录并在记录中设置字段值。
  • 创建Chatter Post:   将Chatter更新推入组或饲料。
  • 创建批准:传统上,您需要一个触发器自动将记录推入批准过程。使用Process Builder,您可以根据过程的标准自动执行此操作。
  • 快速整合工作流程:在一个过程中快速整合多个工作流规则。
  • 调用apex类:您现在可以调用apex类。

触发概述

触发器是代码,即代码 执行 在记录之前或之后 插入 或者 更新。

通常,A. apex(代码) 基于基于标准的评估,用于提出一系列事件。这些事件执行以下类型的操作

  • 插入
  • 更新
  • 删除
  • 合并
  • 颠覆
  • undelete.

在apex触发器中,您必须拥有

  • 需要编写知识。
  • 需要设计测试类以满足所需的测试覆盖范围。

但过程构建器的主要区别在于您无法删除任何记录,并且无法显示任何错误。对于这些,您必须编写触发器代码。例如:

顶点限制

  • 通过SOQL查询检索的记录总数50,000
  • DML 10,000检索的记录总数
  • 100(同步)发出的SOSL查询总数(SYNC)| 200(异步)
  • 发布的SOSL查询总数20
  • 由单个SOSL查询检索的记录总数2,000
  • 150发布的DML陈述总数
  • 触发100万的最大字符数

处理构建器限制

编辑: 用户无法在激活后编辑进程。因此,如同流程一样,需要通过克隆初始进程并对该克隆记录进行修改来创建新的进程。

验证: 进程不触发验证规则,因此可以使数据无效。

删除: 在失活后至少12小时不能删除非活动过程,并且不会出现在回收站中

错误信息: 创建不触发的进程时,您无法指定错误消息,这些进程随着流或验证规则而触发。

公式帮助: 在标准中使用公式时,语法中没有任何功能有助于预览

句法: 选择列表字段被评估为进程构建器中的文本字段,以便它们不支持任何选择列表公式 累积了 or ISNEW.

顶点触发最佳实践

  • APEX代码必须提供异常处理。
  • 查询大数据集使用SOQL循环
  • 不要在内部使用SOSL和SOQL循环。
  • 避免硬编码ID

流程建设者最佳实践

  • 查看:要查看对象上是否有任何工作流,以与过程相同的事情。此外,验证无主动顶点触发。
  • 避免: 采访Apex,工作流程和处理相同的过程。
  • 文档: 使用“描述”字段填充信息,例如何时由谁以及进程创建的信息.Also,如果进程相互作用。
  • 测试: 然后测试更多。例如,当您首次开始使用此时,请先练习沙箱。

如果你做错了,那么在这里有很多影响用户和数据的能力。

现在这个问题是 为什么要处理构建器以及它与触发有何不同?

流程构建器完全自定义。这里没有必需的代码,因为我们需要冗长的逻辑和记录来完成并满足要求或者我们使用流程构建器,所以需要更少的时间来完成要求。

它在触发器上有一些好处:

场景 选项 原因
场景I.

填充记录更新的查找字段:

传统上需要一个触发器,可以使用流程构建器轻松完成。

问题是多层查找逻辑 - 即触发器中所需的相关数据的多个/嵌套地图。

          Process builder 扳机 传统上是需要触发的东西。进程构建器允许管理员可以在不使用代码的情况下执行此操作。
场景II

根据记录标准设置帐户所有者

流程建设者

扳机

进程构建器可用于根据对象的条件分配记录的所有权。
情景III

基于记录标准发布喋喋不休

流程建设者

扳机

Process Builder可用于基于记录标准发布到喋喋不休。
场景IV.

在机会时提交报价进行批准 阶段=提案

流程建设者 扳机 需要2个进程,以便根据机会阶段更新报价,另一个在满足报价标准时提交批准的报价。
场景V.

通过记录标准启动流程VS按钮或链接。

流程建设者

扳机

流程构建器可用于设置记录条件,然后启动触发器就绪流程。
场景VI.

克隆机会并更改现场值

流程建设者

扳机

虽然进程构建器可以创建一个新的记录,但它不能引用来自克隆机会的任何值,而不使用流量来捕获机会值。

让’S查看给定的Process Builder示例:

允许联系人在联系地址和帐户帐单地址中复制当前用户地址,只有在任何地址字段(街道,国家/地区,状态)是空/空的时。

步骤1:

在联系人对象上制作进程 - 构建器。为联系方式提供标准..AIMing街 (null = false) 同样,对于所有地址的联系人和机会。

第2步:

“立即行动” 向Contact.Owner.country提供邮件国家的参考并激活您的进程:

 第3步:

现在通过在ORG中留下任何地址字段空白来测试ORG中的此过程构建器。

第4步:

在留下联系地址后,这里是与联系人的所有者地址相同的地址。同样,您可以为您的联系人帐户进行测试。

这是使用流程构建器而不是使用顶点的原因。 但在某些情况下,您必须编写进程构建器不能的触发码。

例如:

创建一个复选框字段“与用户一样& COMPANY”。当联系人被插入Salesforce时出现错误,该国家与用户国家和公司国家相同。

以上例子 无法通过流程构建器完成,因为这不允许您在插入联系人时丢失错误。
创建  复选框字段名为“与用户一样& COMPANY“联系。

APEX类:
public class SameUserAndCompanyCountryContact {

public static void sameCountry(List<Contact> conList){

   User user = new User();

   user = [SELECT Id , Country , CompanyName from User where Id =:UserInfo.getUserId()];

   System.debug('>>>>>>>>>>RB<<<<<<<<<<<<'+user);

Organization orgDetails = [ SELECT Name , Country , Address from Organization where Name =: user.CompanyName];

System.debug('>>>>>>>>>>>RB<<<<<<<<<<<<'+orgDetails);

for(Contact con : conList) {

  if(con.MailingCountry == user.Country && con.MailingCountry == orgDetails.Country){

   con.addError('Country of Company and User is same as country of Contact trying to insert');

     con.Same_Country_As_User_And_Company__c = True;

         }

      }

   }

}
apex触发:
trigger ErrorOnSameCountry on Contact (before insert){
  List<Contact> conList = Trigger.new;
     if(conList!=null) {
       SameUserAndCompanyCountryContact.sameCountry(conList);

    }
}

虽然Process Builder在Apex触发器上使用或反之亦然,但也取决于各种其他因素,例如:

  • 代码的复杂性。
  • 程序逻辑。
  • 过程建设者中的快速迭代可能是具有挑战性的。
  • 单位测试考虑因素。