Salesforce 鎖定記錄


如果一個對象的記錄在滿足某個條件的情況下,希望能對其進行鎖定,即普通用戶沒有權限對其進行編輯操作,記錄頁面顯示如下圖

 

 

一般會在提交審批,或者項目進行到某個階段的情況下,由后台進行判斷要不要鎖定記錄,或者管理員在某種情況下選擇手動鎖定記錄。

在代碼開發之前,需要在系統中進行配置,設置==>工作流和批准==>流程自動設置==>在Apex中啟用記錄鎖定和解鎖

加下來看下通過Apex加鎖的代碼

 1 String id='0067F000003oTQu';//傳入一條記錄id
 2 if(!Approval.isLocked(id)){//Approval.isLocked(id) 判斷記錄是否加鎖
 3      Approval.lockResult ur = Approval.lock(id);//給一條記錄加鎖
 4      if (ur.isSuccess()) {//方法執行狀態
 5           System.debug('成功鎖定記錄,ID為:' + id);
 6      } else {
 7           for(Database.Error err : ur.getErrors()) { 
 8             System.debug('鎖定失敗'); 
 9             System.debug('=============失敗消息:' + err.getStatusCode() + ': ' + err.getMessage());
10           }
11      }
12 }

可以看到日志顯示:成功鎖定記錄,ID為:0067F000003oTQu

但是去到記錄頁面發現並沒有出現加鎖的那把“鎖”圖標

 

但是我們后台再次執行Approval.isLocked()方法進行判斷可以看到返回值是true,也就是說系統判斷這條記錄應該是被鎖上的狀態,那么問題在哪里呢?

要處理的地方在於配置審批流,如果沒有一個啟用的審批流,在記錄頁面上是不會有加鎖的標記出現的,我在系統中配置了一條無效審批流,沒有任何操作,僅僅為了記錄上的那把鎖

 

啟用了審批流后,記錄上就能看到如下被鎖上的記錄了

 知道了如何加鎖,同樣的解鎖也很簡單了

 1 String id='0067F000003oTQu';
 2 if(Approval.isLocked(id)) {
 3        Approval.UnlockResult ur = Approval.unlock(Id);
 4        if (ur.isSuccess()) {
 5                System.debug('成功解鎖記錄,ID為:' + id);
 6         } else {
 7                 for(Database.Error err : ur.getErrors()) { 
 8                    System.debug('解鎖失敗'); 
 9                    System.debug('=============失敗消息:' + err.getStatusCode() + ': ' + err.getMessage());
10                 }
11             }
12         }

 記錄被鎖定的情況下使用代碼去修改,如果執行用戶的權限不夠則會報錯,所以在有鎖定的情況,先判斷一手是否記錄被鎖定是很有必要的操作

最后,Salesforce也提供了批量鎖定的方法

1 //方法名相同,返回值是一個數組
2 Approval.UnlockResult[] lrList = Approval.unlock(ListObject, true);//解鎖
3 Approval.LockResult[] lrList = Approval.lock(ListObject, false);//加鎖

如上,關於使用代碼實現對記錄的鎖定與解鎖操作,如有遺漏,歡迎指正,有問題歡迎留言

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM