Так что это вещь часового пояса делает это хитрее.
Создайте объект, содержащий транзакцию, назовем его 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
Пространство имен сообщений