Apex开发人员指南

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
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我头发乱了伢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值