Loading
Création d'une classe Apex pour Définition d'action d'état d'objet

Création d'une classe Apex pour Définition d'action d'état d'objet

Créez une classe Apex invocable dans la Developer Console pour chacune des définitions d'action d'état d'objet (actions personnalisées).

  1. Cliquez sur le menu d'accès rapide (l’icône d'engrenage Configuration), puis sur Developer Console.
  2. Sélectionnez Fichier | Nouveau Classe Apex .
  3. Saisissez un nom, puis cliquez sur OK.
  4. Collez l'exemple de code dans la boîte de dialogue.
  5. Enregistrez vos modifications.

Exemple de classe d'invocation Apex pour Définition d'action d'état d'objet

Voici quelques exemples de classes Apex pour créer des définitions d'action d'état d'objet. Modifier l'exemple de code pour l'adapter à vos besoins

La Signature de la méthode inclut les paramètres obligatoires suivants :

Paramètre Description
Carte < Chaîne, Objet > inputMap

Contient deux clés :

  • contractId : Le SObjectId

  • objectStateActionDefinition : Un enregistrement pour l'action appelée.

  • actionData : Une donnée spécifique à l'action qui contient des détails supplémentaires de l'API ou des actions par défaut de type Map <String, String>.

Carte < Chaîne, Objet > outMap
  • outMap.put('isSuccess', true) : Les actions Apex échouent si le paramètre isSuccess n'a pas été renvoyé ou si le paramètre isSuccess est renvoyé sur false.

  • outMap.put('finalStatusValue', '<abc>') : Si plusieurs transitions d'état d'objet avec le même état « De » et des états « À » différents sont possibles pour l'action appelée, la classe Apex ne changera pas l'état « À » du contrat. Vous devez définir finalStatusValue.

Exemple de classe Apex RestartContract

Redémarrez un contrat résilié en utilisant une action personnalisée.

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

Exemple de classe Apex ApprovalAction

Implémentez une logique supplémentaire exécutée en même temps que le processus d'approbation Salesforce standard.

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

Exemple de classe Apex EndContract

Pour une action appelée, si plusieurs transitions d'état d'objet sont possibles pour un état De, car plusieurs états À sont disponibles, Apex ne changera pas l'état du contrat. Par exemple, dans un contrat activé, une action personnalisée appelée Endcontract est configurée pour déplacer le contrat vers deux états : annulé et résilié. Pour que l'appel Apex réussisse, le paramètre finalStatusValue est requis.

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