Loading
建立物件狀態動作定義的 Apex 類別

建立物件狀態動作定義的 Apex 類別

在「開發人員主控台」中為每個物件狀態動作定義 (自訂動作) 建立可叫用 Apex 類別。

  1. 按一下快速存取功能表 (設定齒輪圖示),然後按一下「開發人員主控台」。
  2. 選取「檔案 | 新增 Apex 類別 」。
  3. 輸入名稱,然後按一下「確定」。
  4. 將範例程式碼貼到對話方塊中。
    請參閱物件狀態動作定義的範例 Apex 叫用類別。
  5. 儲存您的變更。

物件狀態動作定義的範例 Apex 叫用類別

以下是建立物件狀態動作定義的一些範例 Apex 類別。修改範例程式碼以符合您的需求

「方法簽名」包含以下必要參數:

參數 描述
對應 < 字串、物件 > inputMap

包含兩個鍵值:

  • contractId:SObjectId

  • objectStateActionDefinition:呼叫動作的記錄。

  • actionData:包含 API 或類型為「對應 <字串、字串>」之預設動作之其他詳細資料的動作特定資料。

對應 < 字串、物件 > 對應
  • outMap.put('isSuccess', true):如果未傳回 isSuccess 參數,或 isSuccess 參數傳回為 false,則 Apex 動作會失敗。

  • outMap.put('finalStatusValue', '<abc>'):如果呼叫動作具有相同「寄件者」狀態和不同「收件者」狀態的多個物件狀態轉換,則 Apex 類別不會變更契約的「收件者」狀態。您必須定義 finalStatusValue。

範例 RestartContract Apex 類別

使用自訂動作重新啟動已終止的契約。

global class RestartContract implements industries_clm.OpenInterface { 
    public Boolean invokeMethod(String methodName, Map<String, Object> request, Map<String, Object> outMap) {
        Boolean success = true;
        if (methodName == 'executeAction') {
            makeCallout(request, outMap);
        }
        return success;
    }
    public static void makeCallout(Map < String, Object > inputMap, Map < String, Object > outMap) {
        String ContractId = (String) inputMap.get('contractId');
        List<Contract> contract = [SELECT Id, Name, Status FROM Contract WHERE Id =:contractId];
        contract[0].Status = 'Draft';
        update(contract); 
            outMap.put('isSuccess', true);
        }
    }
}

範例 ApprovalAction Apex 類別

實作與標準 Salesforce 批准流程同時執行的其他邏輯。

global class ApprovalAction implements industries_clm.OpenInterface { 
    public Boolean invokeMethod(String methodName, Map<String, Object> request, Map<String, Object> outMap) {
        Boolean success = true;
        if (methodName == 'executeAction') {
            executeAction(request, outMap);
        }
        return success;
    }
    private void executeAction(Map < String, Object > inputMap, Map < String, Object > outMap) {
		Approval.ProcessSubmitRequest req1 = 
            new Approval.ProcessSubmitRequest();
        req1.setComments('Submitting request for approval.');
        String contractId = (String) inputMap.get('contractId');
        req1.setObjectId(contractId);
        
        // Submit the record to specific process and skip the criteria evaluation
        req1.setProcessDefinitionNameOrId('ContractApprovalProcessName');
        req1.setSkipEntryCriteria(true);
        
        // Submit the approval request for the account
        Approval.ProcessResult result = Approval.process(req1);
        
              outMap.put('isSuccess', true);
    }
}

範例 EndContract Apex 類別

針對呼叫的動作,如果「寄件者」狀態有多個物件狀態轉換是可能的,因為有多個「收件者」狀態可用,則 Apex 不會變更契約的狀態。例如,在已啟用的契約上,有一個名為「結束契約」的自訂動作設定為將契約移至兩個狀態:已取消和已終止。為了使 Apex 呼叫成功,需要 finalStatusValue 參數。

global class EndContract implements industries_clm.OpenInterface { 

    public Boolean invokeMethod(String methodName, Map<String, Object> request, Map<String, Object> outMap) {
        Boolean success = true;
        if (methodName == 'executeAction') {
            executeAction(request, outMap);
        }
        return success;
    }
    private void executeAction(Map < String, Object > inputMap, Map < String, Object > outMap) {   
		String contractId = (String) inputMap.get('contractId');
        
        outMap.put('isSuccess', true);
		outMap.put('finalStatusValue', 'Canceled');
    }
}
 
正在載入
Salesforce Help | Article