Loading
Создание класса Apex для определения действия состояния объекта

Создание класса Apex для определения действия состояния объекта

Создайте вызываемый класс Apex в консоли разработчика для каждого определения действия состояния объекта (настраиваемые действия).

  1. Нажмите на меню быстрого доступа (значок шестеренки «Настройка»), потом нажмите Developer Console.
  2. Выберите File | Новые Класс Apex .
  3. Введите имя и нажмите OK.
  4. Вставьте образец кода в диалоговое окно.
  5. Сохраните внесенные изменения.

Пример класса вызова Apex для определения действия состояния объекта

Ниже указаны примеры классов Apex для создания определений действий состояния объекта. Измените образец кода в соответствии с вашими требованиями

Подпись метода содержит следующие обязательные параметры:

Параметр Описание
Карта < Строка, Объект > inputMap

Содержит два ключа:

  • contractId: SObjectId

  • objectStateActionDefinition: Запись вызываемого действия.

  • actionData: Данные действия, содержащие дополнительные сведения из API или стандартные действия типа Map <String, String>.

Карта < Строка, Объект > OutMap
  • outMap.put('isSuccess', true): Действия Apex не выполняются, если параметр isSuccess не возвращен или параметр isSuccess возвращен как false.

  • outMap.put('finalStatusValue', '<abc>'): Если для вызываемого действия возможны несколько переходов состояния объекта с одинаковым состоянием «От» и разными состояниями «Кому», класс Apex не изменит состояние контракта «Кому». Необходимо определить finalStatusValue.

Пример класса Apex RestartContract

Перезапустите прекращенный контракт посредством настраиваемого действия.

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

Пример класса Apex ApprovalAction

Внедрите дополнительную логику, выполняемую параллельно со стандартным процессом утверждения 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);
    }
}

Пример класса Apex EndContract

В вызываемом действии, если для состояния «От» возможны несколько переходов в состояние объекта из-за доступности нескольких состояний «Кому», Apex не изменит состояние контракта. Например, в активированном контракте существует настраиваемое действие «Конечный контракт», настроенное на перемещение контракта в два состояния: отменено и прекращено. Для успеха вызова Apex необходим параметр 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');
    }
}
 
Загрузка
Salesforce Help | Article