概述
Apex开发人员指南
调用顶点
- 匿名块 : 匿名块是Apex代码 , 他不会存储在元数据中 , 但是可以编译
- 触发器 : 可以使用触发器来调用Apex . Apex触发器使您呢不挂钩在更改Salesforce记录(例如插入 , 更新或者删除)之前或之后执行自定义操作
- 异步Apex: Apex提供了多种异步运行Apex代码的方法 , 选择最合适您需求的异步Apex功能
- 将Apex方法公开为SOAP Web服务 您可以将Apex方法公开为SOAP Web服务 , 一边外部应用程序可以访问您的代码和应用程序
- 将Apex类作为PEST Web服务 : 公开您可以公开Apex类和方法 , 以便外部应用程序可以通过REST体系结构访问您的代码和用用程序
- Apex电子邮件服务 : 您可以使用定在邮件服务来处理入站电子邮件的内容 , 标题和附件 , 例如 , 你可以创建一个电子邮件服务 , 该服务根据邮件中的联系信息自动创建联系记录
那么我们先了解匿名块 :
匿名块是Apex代码 , 它不会存储在云数据中 , 但是可以编译和执行
使用以下之一编译并执行匿名块 :
- 开发者控制台
- 用于Visual Stodio Code的Salesforce扩展的 executeAnonymous() SOAP API调用 :
ExecuteAnonymousResult executeAnonymous(String code)
您可以使用匿名块来快速动态评估Apex,例如在开发人员控制台或Visual Studio Code的Salesforce扩展中,或编写在运行时动态更改的代码。例如,您可能编写一个客户端Web应用程序,该应用程序从用户那里获取名称和地址之类的输入,然后使用Apex的匿名块将具有该名称和地址的联系人插入数据库。
即使用户定义的方法可以引用自身或以后的方法而无需前向声明,但是在实际声明之前不能引用变量。在下面的示例中,整数整型 必须在 myProcedure1 才不是 :
Integer int1 = 0;
void myProcedure1() {
myProcedure2();
}
void myProcedure2() {
int1++;
}
myProcedure1();
匿名块的返回结果包括:
- 调用的编译和执行阶段的状态信息,包括发生的任何错误
- 调试日志的内容,包括对任何调用的输出 系统调试方法(请参阅调试日志)
- Apex堆栈跟踪任何未捕获的代码执行异常,包括每个调用堆栈元素的类,方法和行号
触发器
- 插入insert
- 更新 update
- 删除 delete
- 合并 merge
- 插入 upsert
- 取消删除 undelete
Trigger大体可以分为两类:
1、Before Triggers,Before Triggers是在DML(insert、update、delete、merge、upsert、undelete)数据之前,也就是说数据还没有Commit到数据库,我们可以在这个时间点编写Apex,常用的场景有验证数据合法性、验证业务场景等。
注意在Before Triggers中如果删除或者修改触发该触发器的当前记录,系统会抛异常。
2、After Triggers,After Trigger是在DML数据之后,指的是数据库数据已经发生变化后,执行相应的Apex,常用的场景有关联对象更新、调用异步方法等。
我们在Salesforce写的Trigger默认是批处理的,比如Dataloader批量导入数据也会触发对应的触发器,所以在写代码逻辑的时候,应当考虑处理多条数据的情况。
例如,您可以在将对象的记录插入数据库之前,删除记录之后,甚至从回收站中还原记录之后运行触发器。
注意事项 :
- upsert 触发前后 insert 或之后 update适当触发
- merge 触发前后 delete 对于丢失的记录 , 以及之前和之后 update 触发获胜记录
- undelete 记录后执行的触发器仅适用于特定对象
- 直到触发器结束 , 才记录字段历史纪录 . 如果在触发器中查询字段历史记录 , 则看不到当前事务的任何历史记录
- 字段历史记录跟踪当前用户的权限
- 必须从触发器异步进行标注 , 以便在等待外部服务的响应是不会阻止触发过程
Trigger语法
声明Trigger的包含四部分信息:
1、使用关键字Trigger(What)
2、命名自己Trigger的名称,并指明这个Trigger作用于哪个对象ObjectName(Who)
3、定义执行代码的时间点(When),比如before insert、before update、before delete、after insert、after update、after delete、after undelete等
4、编写触发器Apex代码
想要更具体的了解触发器 , 点击我?
Apex DML 语言
使用数据操作语言(DML)语句在Salesforce中插入,更新,合并,删除和还原数据。
以下Apex DML语句可用:
插入语句 :
插入DML操作将一个或多个sObject(例如单个客户或联系人)添加到组织的数据中。 插入 与SQL中的INSERT语句类似
句法 :
插入sObject
插入sObject [ ]
例句 :
下面插入一个名为 "zhou"的账户 :
Account newAcct = new Account(name = 'zhou');
try {
insert newAcct;
} catch (DmlException e) {
}
更新声明 :
更新DML操作会修改组织数据中的一个或多个现有sObject记录,例如单个客户或联系人发票对帐单。 更新 与SQL中的UPDATE语句类似。
句法 :
插入sObject
插入sObject [ ]
例句 :
以下示例更新了 计费城市 名为“ zhou”的单个帐户上的字段:
Account a = new Account(Name='zhou2');
insert(a);
Account myAcct = [SELECT Id, Name, BillingCity FROM Account WHERE Id = :a.Id];
myAcct.BillingCity = 'San Francisco';
try {
update myAcct;
} catch (DmlException e) {
// Process exception here
}
增补声明 :
upsert DML操作c 在一个语句中创建新记录并更新sObject记录, 使用指定的字段确定现有对象的存在,如果未指定任何字段,则使用ID字段。
句法 :
upsert sObject [ opt_field ]
upsert sObject [] [ opt_field ]
例句 :
要指定MyExternalID自定义字段,该语句为:
upsert sObjectList Account.Fields.MyExternalId__c;
Upsert如何选择插入或更新 :
Upsert使用sObject记录的主键(ID),idLookup字段或外部ID字段来确定是创建新记录还是更新现有记录:
- 如果密钥不匹配,则会创建一个新的对象记录
- 如果密钥匹配一次,则现有对象记录将更新。
- 如果键多次匹配,则会生成错误,并且对象记录不会插入或更新。
例句 :
本示例对帐户列表执行upsert :
List<Account> acctList = new List<Account>();
try {
upsert acctList;
} catch (DmlException e) {
}
删除声明 :
删除DML操作将从组织的数据中删除一个或多个现有的sObject记录,例如单个客户或联系人。 删除 类似于 删除() SOAP API中的语句。
句法 :
删除 sObject
删除sObject []
例句 :
下面的示例删除所有名为“ DotCom”的帐户:
Account[] doomedAccts = [SELECT Id, Name FROM Account
WHERE Name = 'DotCom'];
try {
delete doomedAccts;
} catch (DmlException e) {
// Process exception here
}
取消删除声明 :
取消删除DML操作r 从组织的回收站中存储一个或多个现有sObject记录,例如单个客户或联系人。 取消删除 与SQL中的UNDELETE语句类似
句法 :
取消删除sObject | ID
取消删除sObject [ ] | ID[ ]
例句 :
下面的示例取消删除名为“通用容器”的帐户。的所有行 关键字查询所有行的顶级和汇总关系,包括已删除的记录和已归档的活动:
Account[] savedAccts = [SELECT Id, Name FROM Account WHERE Name = 'Universal Containers' ALL ROWS];
try {
undelete savedAccts;
} catch (DmlException e) {
// Process exception here
}
合并声明 :
合并 语句将多达三个相同sObject类型的记录合并到其中一个记录中,删除其他记录,并重新为任何相关记录创建父项
句法 :
合并sObject sObject
合并sObject sObject [ ]
合并sObject ID
合并sObject ID [ ]
第一个参数表示其他记录将合并到其中的主记录。第二个参数代表应合并然后删除的一个或两个其他记录。您可以将其他记录传递到合并 语句作为单个sObject记录或ID,或作为两个sObject记录或ID的列表。
例句 :
以下示例合并了两个名为“ Acme Inc.”的帐户。和“ Acme”合并为一个记录:
List<Account> ls = new List<Account>{new Account(name='Acme Inc.'),new Account(name='Acme')};
insert ls;
Account masterAcct = [SELECT Id, Name FROM Account WHERE Name = 'Acme Inc.' LIMIT 1];
Account mergeAcct = [SELECT Id, Name FROM Account WHERE Name = 'Acme' LIMIT 1];
try {
merge masterAcct mergeAcct;
} catch (DmlException e) {
// Process exception here
}
最后
以上就是跳跃洋葱为你收集整理的Apex开发人员指南的全部内容,希望文章能够帮你解决Apex开发人员指南所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复