+ Start a Discussion
Yao LinYao Lin 

How to unlock a record right after submitted in an Approval Process?


I need to unlock a record after it is submitted in an Approval Process for a custom object Sales Order. I tried Apex trigger, but it seems not working. Will I need an Apex Test for the trigger? If so, how can I write it? Please help!

Trigger SOLockRecord on PBSI__PBSI_Sales_Order__c (after update) {

For (PBSI__PBSI_Sales_Order__c so: Trigger.New){

VinayVinay (Salesforce Developers) 

Did you try in Final approval action, make this record as unlock for editing?

Below link has working example to Lock/Unlock record thorough Apex code 


Hope above information was helpful.

Please mark as Best Answer so that it can help others in the future.

Vinay Kumar
Yao LinYao Lin
Hi Vinay, 

I need to unlock the record immediatly after users submit it for approval. 
Yes, I tried the Apex Code too. It didn't work either. I don't know how to write the Apex Test code. 
public class UnlockSOApprovalProcess{
   public static void ListSO(){
//Get records to unlock
List<PBSI__PBSI_Sales_Order__c> soList = new List<PBSI__PBSI_Sales_Order__c>();
//Check locked records
List<PBSI__PBSI_Sales_Order__c> soLockList = new List<PBSI__PBSI_Sales_Order__c>();
for(PBSI__PBSI_Sales_Order__c so :soList){
//Unlock record
    //Unlock records
    List<Approval.UnlockResult> ulrList = Approval.unlock(soLockList, false);
    // Iterate through each returned result
    for(Approval.UnlockResult  ulr : ulrList) {
        if (ulr.isSuccess()) {
            //Operation was successful, so get the ID of the record that was processed
            System.debug('Successfully locked Sales Order with ID: ' + ulr.getId());
        else {
            //Operation failed, so get all errors                
            for(Database.Error err : ulr.getErrors()) {
                System.debug('The following error has occurred.');                    
                System.debug(err.getStatusCode() + ': ' + err.getMessage());
                System.debug('Sales Order fields that affected this error: ' + err.getFields());