salesforce 零基礎學習(三十六)經過Process Builder以及Apex代碼實現鎖定記錄( Lock Record)

上一篇內容是經過Process Builder和Approval Processes實現鎖定記錄的功能,有的時候,每每鎖定一條記錄須要不少的限制條件,若是經過Approval Processes的條件判斷寫起來可能很麻煩,有些邏輯經過Apex寫起來很容易,此篇內容爲經過Process Builder 和Apex代碼實現鎖定記錄。ui

需求:對Opportunity表進行判斷是否加鎖或者解鎖。當Delivery/Installation Status這一項的值爲'Completed'狀況下加鎖,爲其餘的值狀況下,若是原來記錄加鎖,則解鎖。spa

一.獲取容許在apex中使用Lock 和UnLock記錄的權限:Setup->Build->Create->Workflow&Approvals->Process Automation Settings。點進去將Enable record locking and unlocking in Apex這一項選中。debug

 

二.Apex代碼實現加鎖解鎖3d

寫代碼以前咱們須要先了解一些基礎知識。當咱們使用Process Builder選擇Action爲Apex的時候,咱們須要選擇相關Action執行的類,此類中的方法必需要是InvocableMethod的一個方法,即須要添加@InvocableMethod註解。一個類中僅容許有一個此註解的方法。code

加鎖的類以下所示:blog

 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 }

解鎖的類以下所示ip

 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 Builderget

1.Setup->Build->Create->Workflow&Approvals->Process Builder.點擊進入後選擇右上方的newit

2.設置相關信息名稱io

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方法進行操做。

相關文章
相關標籤/搜索