Loading
Creazione di una classe Apex per la definizione azione stato oggetto

Creazione di una classe Apex per la definizione azione stato oggetto

Creare una classe Apex invocabile nella Developer Console per ciascuna delle definizioni delle azioni stato oggetto (azioni personalizzate).

  1. Fare clic sul menu di accesso rapido (Icona ingranaggio Imposta), quindi su Developer Console.
  2. Selezionare File | Nuovo Classe Apex .
  3. Immettere un nome e fare clic su OK.
  4. Incollare il codice di esempio nella finestra di dialogo.
  5. Salva le modifiche.

Esempio di classe di invocazione Apex per la definizione azione stato oggetto

Di seguito sono riportati alcuni esempi di classi Apex per la creazione di definizioni di azioni stato oggetto. Modificare il codice di esempio in base alle proprie esigenze

Firma metodo include i seguenti parametri obbligatori:

Parametro Descrizione
Mappa < Stringa, Oggetto > inputMap

Contiene due chiavi:

  • contractId: SObjectId

  • objectStateActionDefinition: Un record per l'azione chiamata.

  • actionData: Dati specifici dell'azione che contengono dettagli aggiuntivi dell'API o azioni predefinite di tipo Mappa <Stringa, Stringa>.

Mappa < Stringa, Oggetto > outMap
  • outMap.put('isSuccess', true): Le azioni Apex non riescono se il parametro isSuccess non è stato restituito o se il parametro isSuccess viene restituito come false.

  • outMap.put('finalStatusValue', '<abc>'): Se per l'azione chiamata sono possibili più transizioni di stato oggetto con lo stesso stato "Da" e con stati "A" diversi, la classe Apex non modificherà lo stato "A" del contratto. È necessario definire finalStatusValue.

Esempio di classe Apex RestartContract

Riavviare un contratto risolto utilizzando un'azione personalizzata.

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

Classe Apex ApprovalAction di esempio

Implementare una logica aggiuntiva eseguita contemporaneamente al processo di approvazione standard di 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);
    }
}

Classe Apex EndContract di esempio

Per un'azione chiamata, se sono possibili più transizioni di stato oggetto per uno stato Da perché sono disponibili più stati A, Apex non modificherà lo stato del contratto. Ad esempio, in un contratto attivato è presente un'azione personalizzata denominata Endcontract configurata per spostare il contratto in due stati: annullato e terminato. Perché la chiamata Apex abbia esito positivo è necessario il parametro 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');
    }
}
 
Caricamento
Salesforce Help | Article