salesforce 零基础学习(三十六)通过Process Builder以及Apex代码实现锁定记录( Lock Record)
2016-06-30 10:44
1031 查看
上一篇内容是通过Process Builder和Approval Processes实现锁定记录的功能,有的时候,往往锁定一条记录需要很多的限制条件,如果通过Approval Processes的条件判断写起来可能很麻烦,有些逻辑通过Apex写起来很容易,此篇内容为通过Process Builder 和Apex代码实现锁定记录。
需求:对Opportunity表进行判断是否加锁或者解锁。当Delivery/Installation Status这一项的值为'Completed'情况下加锁,为其他的值情况下,如果原来记录加锁,则解锁。
一.获取允许在apex中使用Lock 和UnLock记录的权限:Setup->Build->Create->Workflow&Approvals->Process Automation Settings。点进去将Enable record locking and unlocking in Apex这一项选中。
二.Apex代码实现加锁解锁
写代码之前我们需要先了解一些基础知识。当我们使用Process Builder选择Action为Apex的时候,我们需要选择相关Action执行的类,此类中的方法必须要是InvocableMethod的一个方法,即需要添加@InvocableMethod注解。一个类中仅允许有一个此注解的方法。
加锁的类如下所示:
解锁的类如下所示
三.设置Process Builder
1.Setup->Build->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方法进行操作。
需求:对Opportunity表进行判断是否加锁或者解锁。当Delivery/Installation Status这一项的值为'Completed'情况下加锁,为其他的值情况下,如果原来记录加锁,则解锁。
一.获取允许在apex中使用Lock 和UnLock记录的权限:Setup->Build->Create->Workflow&Approvals->Process Automation Settings。点进去将Enable record locking and unlocking in Apex这一项选中。
二.Apex代码实现加锁解锁
写代码之前我们需要先了解一些基础知识。当我们使用Process Builder选择Action为Apex的时候,我们需要选择相关Action执行的类,此类中的方法必须要是InvocableMethod的一个方法,即需要添加@InvocableMethod注解。一个类中仅允许有一个此注解的方法。
加锁的类如下所示:
public class RecordLockController { @InvocableMethod(label='Lock Opportunities' description='Lock opportunities and return the record ids') public static List<Id> lockRecord(List<Id> opportunityIds) { system.debug('=========opportunityIds=======' + opportunityIds); system.debug('---------userName-------' + UserInfo.getUserName()); List<ID> alreadyLockedList = new List<ID>(); Map<Id,Boolean> isLockedMap = Approval.isLocked(opportunityIds); for(Id currentOpportunityId : opportunityIds) { Boolean isCurrentOpportunityLocked = isLockedMap.get(currentOpportunityId) == null ? false : isLockedMap.get(currentOpportunityId); if(!isCurrentOpportunityLocked) { Approval.LockResult lockResult = Approval.lock(currentOpportunityId); if(lockResult.isSuccess()) { alreadyLockedList.add(currentOpportunityId); } else { for(Database.Error error : lockResult.getErrors()) { System.debug('error message : ' + error.getMessage()); } } } } system.debug(alreadyLockedList); return alreadyLockedList; } }
解锁的类如下所示
public class UnLockRecordController { @InvocableMethod(label='UnLock Opportunities' description='UnLock Opportunities and return the record ids') public static List<ID> unlockRecords(List<ID> opportunityIds) { system.debug('=========opportunityIds=======' + opportunityIds); system.debug('---------userName-------' + UserInfo.getUserName()); List<ID> alreadyUnLockedList = new List<ID>(); Map<Id,Boolean> isLockedMap = Approval.isLocked(opportunityIds); for(Id currentOpportunityId : opportunityIds) { Boolean isCurrentOpportunityLocked = isLockedMap.get(currentOpportunityId) == null ? false : isLockedMap.get(currentOpportunityId); if(isCurrentOpportunityLocked) { Approval.UnLockResult unLockResult = Approval.unlock(currentOpportunityId); if(unLockResult.isSuccess()) { alreadyUnLockedList.add(currentOpportunityId); } else { for(Database.Error error : unLockResult.getErrors()) { System.debug('error message : ' + error.getMessage()); } } } } system.debug(alreadyUnLockedList); return alreadyUnLockedList; } }
三.设置Process Builder
1.Setup->Build->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方法进行操作。
相关文章推荐
- All host(s) tried for query failed (tried: / ip :9042
- iOS UIImage 处理(随时更新)
- vue 组件样式如何不影响全局
- 各种设备的CSS3MediaQuery整理及爽歪歪写法
- 运行maven build报错No goals have been specified for this build.
- 优化UITableViewCell高度计算的那些事
- servlet request getHeader("x-forwarded-for") 获取真实IP
- 347. Top K frequent element
- UI坐标系转换
- LeetCode 063 Unique Paths II
- iOS开发问题----UISearchBarController跳转导航栏闪烁问题
- LeetCode 062 Unique Paths
- error MSB4057: The target "PlatformPrepareForBuild" does not exist in the project
- angular2 quickstart
- leetcode-java-96. Unique Binary Search Trees
- LeetCode 060 Permutation Sequence
- 新手错误——两个USB终端是不能直接通信的
- Kendo UI常用示例汇总(十四)
- The JSP specification requires that an attribute name is preceded by whitespace
- Gradle version 2.2 is required错误解决