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


    上一篇内容是通过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注解。一个类中仅允许有一个此注解的方法。

    加锁的类如下所示:

     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->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方法进行操作。

  • 相关阅读:
    WebForms UnobtrusiveValidationMode 须要“jquery”ScriptResourceMapping。
    用R进行微博分析的初步尝试
    使用Docker部署Gitlab
    怎样托管你的项目到github上具体教程
    Android Api Demos登顶之路(四十五)Loader--&gt;Cursor
    【C语言】推断一个数是否为2的n次方
    Akka并发编程——第五节:Actor模型(四)
    POJ2773 Happy 2006【容斥原理】
    作用域与生命周期
    C# string
  • 原文地址:https://www.cnblogs.com/zero-zyq/p/5627563.html
Copyright © 2020-2023  润新知