Отправка шаблона электронной почты еженедельно с APEX - PullRequest
0 голосов
/ 07 февраля 2020

@ sfdcfox У меня есть указанный c шаблон электронной почты, который я хочу отправлять клиентам еженедельно из Salesforce. Электронное письмо должно быть отправлено всем клиентам в соответствии со следующим: 1 - ИД клиента НЕ ПУСТОЙ 2 - Конкретный c день недели и время суток. С учетом часового пояса.

Можете ли вы пожалуйста помогите с пошаговым кодом?

Спасибо

1 Ответ

0 голосов
/ 08 февраля 2020

Так что это вещь часового пояса делает это хитрее.

  • Создайте объект, содержащий транзакцию, назовем его ClientEmail

    • Сохраните идентификатор записи в поле, например Client__c
    • Сохраните метку времени в GMT из локали клиента с датой, в которую электронная почта доступна для отправки, Available Date Time

    • Добавьте логическое поле, Sent__c

  • Напишите свой логин c, чтобы собрать соответствующие записи в классе Apex ClientEmailController.

    • Запрос SOQL должен быть похож на этот формат: [SELECT Id,(SELECT Id,AvailableDateTime__c,Sent__c FROM ClientEmails__r WHERE Sent__c = false) FROM **Your Object** ]

    • Выполните итерацию по этому вопросу и, если ClientEmails__r.isEmpty() == true, создайте запись ClientEmail с соответствующей отметкой времени.

    • Если ClientEmails__r.isEmpty() == false, передать запись.

  • В другом методе используйте запрос SOQL, например [SELECT Id,Client__c,AvailableDateTime__c,Sent__c FROM ClientEmail__c WHERE AvailableDateTime__c = TODAY AND Sent__c = false], для собрать все записи, которые доступны сегодня. Переберите их и проверьте, если время по Гринвичу Datetime > System.now(). Если они есть, добавьте их в List<Messaging.SingleEmailMessage> и добавьте logi c, чтобы добавить их в шаблон электронной почты. После отправки этого списка электронных писем обновите записи до Sent__c = true, обновите записи.

  • Создайте класс Apex ClientEmailQueueable. Оттуда внедрите Queueable и вызовите методы отправки метода на ClientEmailController для сбора и отправки электронных писем.

  • Затем, в ClientEmailSchedulable, внедрите Schedulable и вызовите System.enqueueJob(new ClientEmailQueueable());

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

Это будет довольно много кода, поэтому я оставлю это вам, но ваша структура метаданных выглядит следующим образом:

  • Пользовательский объект: электронная почта клиента (ClientEmail__c)
    • Поле: Клиент (Client__c) Master-Detail
    • Поле: Доступно Дата Время (AvailableDateTime__c) Дата и время
    • Поле: Отправлено (Sent__c ) Флажок / Boolean
  • Apex Class ClientEmailController
    • Методы создания исходных записей
    • Сбор и отправка электронных писем
  • Apex Class: ClientEmailQueueable implements Queueable
    • Вызовите метод Gather and Send Emails здесь
  • Apex Class: ClientEmailSchedulable implements Schedulable
    • Позвоните на ClientEmailQueueable класс отсюда

SOQL Date References

Apex Queueable

Apex Schedulable

Пространство имен сообщений

...