Loading
Criar uma classe do Apex para definição de ação de estado do objeto

Criar uma classe do Apex para definição de ação de estado do objeto

Crie uma classe do Apex invocável no Developer Console para cada uma das definições de ação de estado do objeto (ações personalizadas).

  1. Clique no menu de acesso rápido (Ícone de mecanismo de Configuração) e clique em Console do desenvolvedor.
  2. Selecione Arquivo | Novo Classe do Apex .
  3. Insira um nome e clique em OK.
  4. Cole o código de amostra na caixa de diálogo.
  5. Salve suas alterações.

Classe de invocação do Apex de amostra para definição de ação de estado do objeto

Aqui estão alguns exemplos de classes do Apex para criar definições de ação de estado do objeto. Modifique o código de amostra para atender aos seus requisitos

A Assinatura do método inclui estes parâmetros obrigatórios:

Parâmetro Descrição
Mapa < String, Object > inputMap

Contém duas chaves:

  • contractId: O SObjectId

  • objectStateActionDefinition: Um registro para a ação chamada.

  • actionData: Dados específicos da ação que contêm detalhes adicionais da API ou ações padrão do tipo Mapa <String, string>.

Mapa < String, Object > outMap
  • outMap.put('isSuccess', true): As ações do Apex falharão se o parâmetro isSuccess não for retornado ou se o parâmetro isSuccess for retornado como false.

  • outMap.put('finalStatusValue', '<abc>'): Se várias transições de estado de objeto com o mesmo estado "De" e estados "Para" diferentes forem possíveis para a ação chamada, a classe do Apex não alterará o estado "Para" do contrato. Você deve definir finalStatusValue.

Exemplo de Classe do Apex RestartContract

Reinicie um contrato encerrado usando uma ação personalizada.

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 do Apex ApprovalAction de amostra

Implemente uma lógica adicional executada ao mesmo tempo que o processo de aprovação padrão do 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 do Apex EndContract de amostra

Para uma ação chamada, se várias transições de estado de objeto forem possíveis para um estado De porque vários estados Para estão disponíveis, o Apex não alterará o estado do contrato. Por exemplo, em um contrato ativado, há uma ação personalizada chamada Encerramento de contrato configurada para mover o contrato para dois estados: cancelado e encerrado. Para que a chamada do Apex seja bem-sucedida, é necessário o parâmetro 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');
    }
}
 
Carregando
Salesforce Help | Article