经过 Akshay. | 2019年11月26日 | 顶点触发器
您是否正在寻找Salesforce中的Apex触发器的最佳建议,以推出更多价值的Salesforce产品?如果您的答案是肯定的,则在Salesforce Apex触发器上博客触发了。
让我们通过了解触发器来追求这个信息丰富的旅程。
什么是触发?
A 扳机 是在DML中发生的某些事件之前或之后执行的APEX脚本,例如,在将对象记录输入数据库之前或删除记录后。触发器允许您在更改为Salesforce记录之前或之后进行自定义操作。触发器是在以下类型的操作之前或之后执行的顶端代码,例如插入,更新,删除和删除。
两种类型的apex触发器
在触发之前
此触发器用于更新或验证在保存在数据库中的记录的值。
触发后
此触发器用于访问存储在数据库中的记录的值,并使用此值对其他记录进行更改。触发记录以只读格式。
笨重触发器
默认情况下,Salesforce中的所有触发器都是庞大的触发器。这意味着您可以同时处理许多记录。笨重的触发器可以处理 批量操作和单记录更新,例如以下内容:
触发语法
触发帐户(在插入前,在更新之前)触发MyAccountTrigger {
CreateAccount.getAccount();
}
- myAccountTrigger –triggername(它是您想要提供触发的名称)。
- 帐户–ObjectName(它是需要执行操作的对象)。
- 在插入之前,在更新之前– Trigger_events
在插入之前:使用此事件时,在插入新记录之前会执行代码块。
更新之前:使用此事件时,代码将在对象中更新新记录之前执行。
触发上下文变量:
iSexecuting.
如果Apex代码的当前上下文是触发器,而不是VisualForce页面,Web服务或ExecuteanMole()API调用,则返回true。
isinsert.
如果由于插入操作而触发此触发器,则返回true
iSupdate.
如果由于更新操作而触发此触发器,则返回true
Isdelete.
如果由于删除操作而触发此触发器,则返回true。
isbefore.
如果在保存任何记录之前触发此触发器,则返回true。
is..
如果在保存所有记录后触发此触发器,则返回true。
isundelete.
如果从回收站恢复录制,则返回触发器则为true。
新的
返回sobject记录的新版本的列表。此SOBJECT列表仅在插入,更新和取消删除触发器中可用,并且只能在触发器之前修改记录。
纽马图
对SOBJECT记录的新版本的ID映射。此地图仅在更新之前,在INSERT,更新之后和UNDELETE Triggers之后可用。
老的
返回sobject记录的旧版本的列表。此SOBJECT列表仅在更新和删除触发器中可用。
旧版
旧版本的SOBJECT记录的ID映射。此地图仅在更新和删除触发器中可用。
尺寸
触发器调用中的记录总数。
Salesforce的Salesforce触发器与Salesforce的工作流程
工作流程
- 它是一种自动化过程,可以拍摄基于评估和规则标准的动作。
- 执行DML操作 工作流程 不可能。
- 我们可以通过对象获得工作流程。
- 我们无法从数据库创建查询。
扳机
- 它是一段代码在更新或插入记录之前或之后执行。
- 超过15个DML操作可以在单个触发器中使用。
- 可以从触发器中的数据库使用超过20个SOQL。
- 我们可以访问对象的触发器并与该对象相关。
Salesforce中的触发器克服了工作流程的限制
- 工作流无法创建或更新单独的对象。
- 使用工作流时,您无法引用某些字段。
- 您将不会使用您的工作流程,而不是实地更新和电子邮件。
结论
Salesforce中的触发称为Apex触发器。 Salesforce中的触发器是用于在操作记录之前或之后执行操作的APEX代码。
想了解更多有关触发器的信息吗?联系我们 认证的Salesforce顾问 now!
经过 Akshay. | 2019年11月13日 | 顶点触发器
顶点测试框架确保开发人员可以为所有所有的测试编写和执行测试 Apex类和触发器 在Force.com平台中。在测试框架中,测试代码并在沙箱环境中编码测试代码,然后部署到生产org。
顶点测试类最佳实践
1.在顶部使用@istest进行所有测试类。
2.始终为消极和正面测试提供断言陈述。
3.利用@TestSetup方法将测试数据插入到测试类中,该类将在测试类上流动。
4.始终使用test.starttest()和test.stoptest()执行此操作将增加Salesforce的总监限额。我们也用这将增加总督的极限。
5.使用system.runas()方法测试用户上下文中的功能。
6.否则不要在测试类中放置(SeeAllData = True),使用它来实现特殊情况。
7.避免在测试类或任何APEX类中使用的硬编码ID。
8.确保每个班级至少有75%的覆盖范围,也涵盖了主要功能。如果可能会增加码覆盖率高达95%。
9. 必须测试所有类方法至少200条记录,并记住真实方案。
10.只有一个test.starttest()和test.stoptest()语句可以是一种方法,否 test.starttest()和test.stoptest()在任何测试类中的语句取决于测试方法。
测试类示例
@istest.
公共类SetopportUnityowner.
{
Public Testmethod静态void setopportUnityowner_Method()
{
机会opp =新机会();
opp.name = ‘Hello’;
opp.stageName = ‘Prospecting’;
opp.Closateate = date.today();
insert opp;
任务tk =新任务();
tk.WhatId = opp.Id;
tk.Subject = ‘Other’;
tk.status = ‘Not Started’;
tk.description = ‘New Work’;
Test.startTest();
database.saveresult str = database.insert(tk,false);
system.assertequals(true,str.issuccess());
Test.stopTest();
}
}
顶点测试类的优点
- 您可以在代码中使用test.isrunningtest()来识别类的上下文是测试。
- 您可以使用此条件使用或(||)运算符来启用测试类以在代码块内突出显示。
- 利用@TestVisible注释来标识测试类内部的私有成员和方法。
Apex中的Salesforce任务
Salesforce中的任务被定义为已赋予任务的用户所需的分配操作。任务可以与带领,广告系列,联系人和合同有关。
任务所在和谁的差异
在Salesforce中是多么努力– 它代表对象类型的东西。它可以很容易地与AccountID或机会ID相关。 Honid是指账户,广告系列,机会或自定义对象等非人物对象。多么不同的形式发生,这意味着什么等于相关对象的ID。 Handid的标签与之相关。
谁在任务中 –呐喊代表着人的东西。它可以容易地涉及引导ID或联系人ID。它指的是人类的铅和接触。 Whoid等于联系人的ID或领导身份证。 Whoid的标签是姓名。
结论
这 顶点测试框架 是一个创新的工具,您可以编写和执行您的APEX代码。测试类代码是开发的 沙盒环境 并部署到生产组织。 APEX单元测试确保您的APEX类和触发器按预期执行。通过遵循上述实践,您可以轻松编写 Apex触发和课程在Salesforce中 因此,使您的系统可管理和可扩展。
为了了解有关Apex触发的更多信息,请检查我们的 latest webinar video on
更改数据捕获&异步Apex触发器 呈现 Sachin Arora.,Scrum Master和主要解决方案架构师 云类比.
经过 Akshay. | 2017年8月16日 | 顶点触发器, 流程建设者, Salesforce定制, Salesforce开发, Salesforce教程
流程建设者概述
Process Builder是您在构建时的图形表示。它包括
标准,即时 和 预定的操作。
有以下事项可以通过Process Builder完成:
- 创建记录:除了更新记录外,您还可以创建记录并在记录中设置字段值。
- 创建Chatter Post: 将Chatter更新推入组或饲料。
- 创建批准:传统上,您需要一个触发器自动将记录推入批准过程。使用Process Builder,您可以根据过程的标准自动执行此操作。
- 快速整合工作流程:在一个过程中快速整合多个工作流规则。
- 调用apex类:您现在可以调用apex类。
触发概述
触发器是代码,即代码 执行 在记录之前或之后 插入 或者 更新。
通常,A. apex(代码) 基于基于标准的评估,用于提出一系列事件。这些事件执行以下类型的操作
在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触发器上使用或反之亦然,但也取决于各种其他因素,例如:
- 代码的复杂性。
- 程序逻辑。
- 过程建设者中的快速迭代可能是具有挑战性的。
- 单位测试考虑因素。
最近的评论