Loading
Erstellen einer Apex-Klasse für die Objektstatusaktionsdefinition

Erstellen einer Apex-Klasse für die Objektstatusaktionsdefinition

Erstellen Sie in der Developer Console für jede Objektstatusaktionsdefinition (benutzerdefinierte Aktionen) eine aufrufbare Apex-Klasse.

  1. Klicken Sie auf das Schnellzugriffsmenü (Setup-Zahnradsymbol) und dann auf Entwicklerkonsole.
  2. Wählen Sie Datei | Neu Apex-Klasse aus.
  3. Geben Sie einen Namen ein und klicken Sie auf OK.
  4. Fügen Sie den Beispielcode in das Dialogfeld ein.
    Entsprechende Informationen finden Sie unter Beispiel einer Apex-Aufrufklasse für die Objektstatusaktionsdefinition.
  5. Speichern Sie Ihre Änderungen.

Beispiel-Apex-Aufrufklasse für Objektstatusaktionsdefinition

Im Folgenden finden Sie einige Apex-Beispielklassen zum Erstellen von Objektstatusaktionsdefinitionen. Anpassen des Beispielcodes an Ihre Anforderungen

Die Methodensignatur enthält die folgenden obligatorischen Parameter:

Parameter Beschreibung
Karte < Zeichenfolge, Objekt > inputMap

Enthält zwei Schlüssel:

  • Vertrags-ID: Die SObjectId

  • objectStateActionDefinition: Ein Datensatz für die aufgerufene Aktion.

  • actionData: Eine aktionsspezifische Daten, die zusätzliche Details aus der API oder Standardaktionen vom Typ "Zuordnen <Zeichenfolge, Zeichenfolge>" enthält.

Karte < Zeichenfolge, Objekt > outMap
  • outMap.put('isSuccess', true): Die Apex-Aktionen schlagen fehl, wenn der Parameter isSuccess nicht zurückgegeben wurde oder wenn der Parameter isSuccess als false zurückgegeben wird.

  • outMap.put('finalStatusValue', '<abc>'): Wenn für die aufgerufene Aktion mehrere Objektstatusumstellungen mit demselben Status "Von" und einem anderen Status "An" möglich sind, ändert die Apex-Klasse den Status "An" des Vertrags nicht. Sie müssen finalStatusValue definieren.

Beispiel einer Apex-Klasse für RestartContract

Starten Sie einen gekündigten Vertrag mithilfe einer benutzerdefinierten Aktion neu.

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);
        }
    }
}

Beispiel-Apex-Klasse ApprovalAction

Implementieren Sie eine zusätzliche Logik, die gleichzeitig mit dem Salesforce-Standardgenehmigungsprozess ausgeführt wird.

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);
    }
}

Beispiel-Apex-Klasse "EndContract"

Wenn für eine aufgerufene Aktion mehrere Objektstatusumstellungen für einen Von-Status möglich sind, da mehrere An-Status verfügbar sind, ändert Apex den Vertragsstatus nicht. Bei einem aktivierten Vertrag gibt es beispielsweise die benutzerdefinierte Aktion "Vertrag beenden", die konfiguriert ist, um den Vertrag in zwei Status zu versetzen: abgebrochen und beendet. Damit der Apex Aufruf erfolgreich ist, ist der Parameter finalStatusValue erforderlich.

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');
    }
}
 
Laden
Salesforce Help | Article