У меня есть требование, когда мне нужно запустить рабочий процесс без взаимодействия с пользователем.

Я создал рабочий процесс, который отправляет уведомление по электронной почте владельцу возможности, если Opportunity.CloseDate equals TODAY, который работает нормально, пока запись редактируется вручную, а closeDate вручную устанавливается на сегодняшнюю дату.

Моя проблема сейчас в том, что когда я устанавливаю closeDate где-то в будущем, например, через две недели, рабочий процесс не будет запущен, потому что никто не редактировал запись.

Как я могу архивировать решение для этого?

Я нашел похожий вопрос здесь, но это кажется старым и не соответствует передовой практике. Есть ли решение без апекса?

0
Dennis1995 16 Июн 2021 в 13:18
3
Вы смотрели на настройку запускаемого по времени рабочего процесса, который отправляет электронную почту после даты закрытия, или просто запускаемый по расписанию поток, который запускается ежедневно в установленное время. Второй вариант будет работать и для существующих записей, а первый потребует обновления данных.
 – 
manjit5190
16 Июн 2021 в 17:31
1
Почему бы не использовать инициируемый записью поток с запланированными путями, где путь выполняется в 0 дней с Opportunity.CloseDate? По мере изменения даты закрытия SFDC «перепланирует» путь к новому закрытию.
 – 
cropredy
17 Июн 2021 в 00:50

1 ответ

Лучший ответ

Самое простое решение — создать класс Apex, реализующий Scheduleable, и сделать там запрос SELECT Id FROM Opportunity WHERE CloseDate = TODAY и просто обновить записи.

Тем не менее, я рекомендую вам перейти из рабочего процесса в другой класс Apex (обработчик) и выполнить все необходимые действия в нем, потому что по пути ничего не будет обновляться в записях возможностей.

После создания планировщика запланируйте его запуск каждый день в определенное время, выбрав «Настройка» -> «Классы Apex» -> «Расписание Apex».

Черновая реализация для лучшего понимания:

public without sharing class RunWorkflowScheduler implements Schedulable {
    public void execute(System.SchedulableContext sc) {
        List<Opportunity> opps = [SELECT Id FROM Opportunity WHERE CloseDate = TODAY];
        
        //for workflow
        update opps;
        
        //if you move workflow into code
        /*write your email notifications sending here
        * do not update opportunity records*/
    }
}
1
Mariia Illarionova 16 Июн 2021 в 13:59