У меня есть класс APEX, который используется для отправки электронного письма каждый день в 7 часов вечера:
.
global class ReportBroadcaster implements Schedulable {
global ReportBroadcaster() {
}
global void execute(SchedulableContext sc) {
send();
}
global void send() {
PageReference page = new PageReference('/apex/nameofvfpage');
page.setRedirect(true);
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
email.setSubject('Example Subject');
email.setHtmlBody(page.getContent().toString());
email.setToAddresses(new String[]{'test@test.com'});
Messaging.sendEmail(new Messaging.SingleEmailMessage[]{email});
}
}
Когда я выполняю метод send () через экземпляр ReportBroadcaster через анонимный APEX, он доставляется, как и ожидалось. Однако, когда я планирую урок, письмо доставляется с пустым телом. Если я переключаю тело письма на обычный текст, оно доставляется нормально (но это не работает для меня).
Как мне сделать эту работу?
UPDATE:
Вы не можете вызывать getContent () для экземпляров PageReference из запланированных методов APEX или @future (я не уверен, почему это так, но это так). Я думаю, что решение будет состоять в том, чтобы создать веб-сервис, который я буду вызывать из метода @future. Кажется невероятно взволнованным, но я не уверен, что еще я мог сделать.
ЗАКЛЮЧИТЕЛЬНОЕ ОБНОВЛЕНИЕ:
Вот как отправлять электронные письма в формате HTML с запланированного APEX:
- Создайте класс, который реализует интерфейс Schedulable.
- Пусть метод execute () вызывает метод @future.
- Пусть метод @future вызовет метод с включенной веб-службой в классе, который отправляет электронное письмо.
Пока этот подход обходной, он работает.