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), luego haga clic en Developer Console.
  2. Seleccione File (Archivo) | Nuevo Clase de Apex .
  3. Introduzca 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 ejemplo para definición de acción de estado de objeto

Estas son algunas clases Apex de ejemplo para crear definiciones de acciones de estado de objeto. Modifique el código de muestra para que se ajuste 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 <Cadena, Cadena>.

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 es posible realizar 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 de 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 ejecute 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 es posible realizar 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