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

相關文章
相關標籤/搜索