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

此贴是转载,并不是原创,原创地址  http://www.javashuo.com/article/p-ntqhmnhj-du.htmlhtml

 

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

 

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

 

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

 

 

 

二.Apex代码实现加锁解锁3d

 

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

 

加锁的类以下所示:htm

 

复制代码
 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(进程生成器)blog

 

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(解锁)方法进行操做。

相关文章
相关标签/搜索