Loading
Crear una clase Apex para la definición de acción de estado de objeto

Crear una clase Apex para la definición de acción de estado de objeto

Cree una clase Apex invocable en Developer Console para cada una de las definiciones de acción de estado de objeto (acciones personalizadas).

  1. Haga clic en el menú de acceso rápido (icono de engranaje Configuración) y, a continuación, haga clic en Developer Console.
  2. Seleccione Archivo | Nuevo Clase de Apex .
  3. Ingrese un nombre y haga clic en Aceptar.
  4. Pegue el código de muestra en el cuadro de diálogo.
    Consulte Clase de invocación Apex de ejemplo para Definición de acción de estado de objeto.
  5. Guarde sus cambios.

Clase de invocación Apex de muestra para definición de acción de estado de objeto

Estas son algunas clases Apex de ejemplo para la creación de definiciones de acciones de estado de objeto. Modifique el código de muestra para ajustarse a sus requisitos

Firma de método incluye estos parámetros obligatorios:

Parámetro Descripción
Mapa < Cadena, Objeto > inputMap

Contiene dos claves:

  • contractId: El SObjectId

  • objectStateActionDefinition: Un registro para la acción llamada.

  • actionData: Datos específicos de acciones que contienen detalles adicionales de la API o acciones predeterminadas del tipo Map <String, String>.

Mapa < Cadena, Objeto > outMap
  • outMap.put('isSuccess', verdadero): Las acciones Apex fallan si el parámetro isSuccess no se devolvió o el parámetro isSuccess se devuelve como false.

  • outMap.put('finalStatusValue', '<abc>'): Si son posibles múltiples transiciones de estado de objeto con el mismo estado “De” y un estado “A” diferente para la acción llamada, la clase Apex no cambiará el estado “A” del contrato. Debe definir el finalStatusValue.

Clase Apex RestartContract de muestra

Reinicie un contrato terminado utilizando una acción 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);
        }
    }
}

Clase Apex ApprovalAction de muestra

Implemente lógica adicional que se ejecuta simultáneamente con el proceso de aprobación estándar de 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);
    }
}

Clase de Apex EndContract de muestra

Para una acción llamada, si son posibles múltiples transiciones de estado de objeto para un estado De porque hay múltiples estados Para disponibles, Apex no cambiará el estado del contrato. Por ejemplo, en un contrato activado, existe una acción personalizada denominada Contrato final que está configurada para mover el contrato a dos estados: cancelado y terminado. Para que la llamada Apex tenga éxito, se requiere el 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');
    }
}
 
Cargando
Salesforce Help | Article