如果一個對象的記錄在滿足某個條件的情況下,希望能對其進行鎖定,即普通用戶沒有權限對其進行編輯操作,記錄頁面顯示如下圖
一般會在提交審批,或者項目進行到某個階段的情況下,由后台進行判斷要不要鎖定記錄,或者管理員在某種情況下選擇手動鎖定記錄。
在代碼開發之前,需要在系統中進行配置,設置==>工作流和批准==>流程自動設置==>在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);//加鎖
如上,關於使用代碼實現對記錄的鎖定與解鎖操作,如有遺漏,歡迎指正,有問題歡迎留言