salesforce 零基础学习(三十六)通过Process Builder(进程生成器)以及Apex代码实现锁定记录(Lock Record)...

此贴是转载,并非原创,原创地址  https://www.cnblogs.com/zero-zyq/p/5627563.html

 

上一篇内容是通过Process Builder(进程生成器)和Approval Processes(批准过程)实现锁定记录的功能,有的时候,往往锁定一条记录需要很多的限制条件,如果通过Approval Processes(批准过程)的条件判断写起来可能很麻烦,有些逻辑通过Apex写起来很容易,此篇内容为通过Process Builder(进程生成器)和Apex代码实现锁定记录。

 

需求:对Opportunity表进行判断是否加锁或者解锁。当Delivery/Installation Status这一项的值为'Completed'情况下加锁,为其他的值情况下,如果原来记录加锁,则解锁。

 

一.获取允许在apex中使用Lock(锁上)和UnLock(解锁)记录的权限:Setup(设置)->Create(创建)->Workflow&Approvals(工作流和批准)->Process Automation Settings(流程自动设置)。点进去将Enable record locking and unlocking in Apex(在 Apex 中启用记录锁定和解锁)这一项选中并保存。

 

 

 

二.Apex代码实现加锁解锁

 

写代码之前我们需要先了解一些基础知识。当我们使用Process Builder(进程生成器)选择Action(操作)为Apex的时候,我们需要选择相关Action(操作)执行的类,此类中的方法必须要是InvocableMethod的一个方法,即需要添加@InvocableMethod注解。一个类中仅允许有一个此注解的方法。

 

加锁的类如下所示:

 

复制代码
 1 public class RecordLockController {
 2     @InvocableMethod(label='Lock Opportunities' description='Lock opportunities and return the record ids') 
 3     public static List<Id> lockRecord(List<Id> opportunityIds) {
 4         system.debug('=========opportunityIds=======' + opportunityIds);
 5         system.debug('---------userName-------' + UserInfo.getUserName());
 6         List<ID> alreadyLockedList = new List<ID>();
 7         Map<Id,Boolean> isLockedMap = Approval.isLocked(opportunityIds);
 8         for(Id currentOpportunityId : opportunityIds) {
 9             Boolean isCurrentOpportunityLocked = isLockedMap.get(currentOpportunityId) == null ? false : isLockedMap.get(currentOpportunityId);
10             if(!isCurrentOpportunityLocked) {
11                 Approval.LockResult lockResult = Approval.lock(currentOpportunityId);
12                 if(lockResult.isSuccess()) {
13                     alreadyLockedList.add(currentOpportunityId);
14                 } else {
15                     for(Database.Error error : lockResult.getErrors()) {
16                         System.debug('error message : ' + error.getMessage());
17                     }
18                 }
19             }
20         }
21         system.debug(alreadyLockedList);
22         return alreadyLockedList;
23     }
24     
25     
26 }
复制代码

 

解锁的类如下所示

 

复制代码
 1 public class UnLockRecordController {
 2     @InvocableMethod(label='UnLock Opportunities' description='UnLock Opportunities and return the record ids')
 3     public static List<ID> unlockRecords(List<ID> opportunityIds) {
 4         system.debug('=========opportunityIds=======' + opportunityIds);
 5         system.debug('---------userName-------' + UserInfo.getUserName());
 6         List<ID> alreadyUnLockedList = new List<ID>();
 7         Map<Id,Boolean> isLockedMap = Approval.isLocked(opportunityIds);
 8         for(Id currentOpportunityId : opportunityIds) {
 9             Boolean isCurrentOpportunityLocked = isLockedMap.get(currentOpportunityId) == null ? false : isLockedMap.get(currentOpportunityId);
10             if(isCurrentOpportunityLocked) {
11                 Approval.UnLockResult unLockResult = Approval.unlock(currentOpportunityId);
12                 if(unLockResult.isSuccess()) {
13                     alreadyUnLockedList.add(currentOpportunityId);
14                 } else {
15                     for(Database.Error error : unLockResult.getErrors()) {
16                         System.debug('error message : ' + error.getMessage());
17                     }
18                 }
19             }
20         }
21         system.debug(alreadyUnLockedList);
22         return alreadyUnLockedList;
23     }
24 }
复制代码

 

三.设置Process Builder(进程生成器)

 

1.Setup(设置)->Create(创建)->Workflow&Approvals(工作流和批准)->Process Builder(进程生成器)点击进入后选择右上方的new(新建)

 

 

2.设置相关信息名称

 

 

3.选择要操作的Object(对象),这里选择Opportunity

 

 

4.设置锁定的条件

 

 

5.设置加锁条件所走的Action(操作),我们在Action Type(操作类型)选择Apex代码,并选择相关操作的类,并且要传递参数,程序中传的是ID,这里我们选择Opportunity的ID

 

 

6.在FALSE下添加解锁条件

 

 

7.添加解锁的Action(操作),选择Apex,选择执行此Action(操作)的Apex Class,添加参数,点击save(保存)以后点击右上方activate(启用)将其激活。

 

 

总结:此篇内容仅仅通过很简单的业务逻辑进行加锁解锁,如果业务逻辑复杂,可以自行添加,如果内容有不对的地方欢迎指正,如果有不懂的地方欢迎留言。

 

如果想通过Permission Set(权限设置)来判断是否可以加锁解锁,也可以设置一个自定义的button(按钮),button(按钮)调用apex代码,代码中通过permission set(权限设置)来判断是否拥有加锁解锁权限,如果拥有此权限则可以通过Approval(批准)的lock(锁上)或者unlock(解锁)方法进行操作。

 

转载于:https://www.cnblogs.com/d-yw/p/10288673.html

按排序更改设置,查看全部以及其他信息,例如上次修改日期。允许与其他组织进行比较。 用于改善Salesforce更改可用性的Chrome扩展程序集!验证助手。直接在另一个组织中验证您的更改集,而无需上载或保留您的更改集。请随时向我发送您的反馈,如果您也想进行部署!功能包括:-包括每个项目的最后修改日期以及用户和api名称 -由最新修改的优先顺序自动排序-由任何字段进行过滤/搜索/排序 -设置所有页面以显示1000行。如果一个页面中有1000个以上的项目,则询问您是否要继续检索更多项目 -查看和搜索变更集中的项目。这使您可以查看整个更改集并进行搜索以使删除变得更加容易 -与其他组织进行比较(使用OAuth2.0-此扩展名看不到或存储任何用户名或密码信息) -同时显示所比较的组织的上次修改日期和用户 -点击文件名可查看组织之间元数据文件的差异。请注意,加载大页面时会有延迟,您可能需要禁用其他会更改更改集页面的chrome扩展程序。请随时报告错误,问题或要求新功能! 1.3版已更新,以支持工作流程,报告,电子邮件模板等 1.4版已更新,增加了在页面上获取1000多个项目的功能 (Salesforce一次只能检索1000。)添加了“清除”功能以清除搜索过滤器。在将项目添加到变更集之前会自动调用Clear -这是因为存在一个错误,即除非可见,否则不会添加项目。版本2.02现在可以在组织之间比较文件。登录到沙盒或dev / prod组织。使用Oauth2.0进行授权-在本地看不到或存储任何用户或密码信息。显示比较的组织的上次修改日期和用户。单击名称,然后查看两者的差异比较 2.1.1版修复了没有内容时会挂起的错误。与“ beta”扩展名合并-新功能,例如更改集的下载zip文件。版本2.1.2修复了VF页面上带有“快速链接”的错误,即使已禁用,也存在共享准则规则版本2.2.0的修复错误,现在包括验证帮助器。登录到另一个组织并验证更改集。 支持语言:English (United States)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值