此贴是转载,并非原创,原创地址 https://wwwblogs/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://wwwblogs/d-yw/p/10288673.html
此贴是转载,并非原创,原创地址 https://wwwblogs/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://wwwblogs/d-yw/p/10288673.html