Почему электронные письма в формате HTML отправляются классом APEX Schedulable с пустыми телами?

У меня есть класс APEX, который используется для отправки электронной почты каждый день в 19:00:

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 доставляется так, как ожидалось. Однако, когда я планирую занятие, электронное письмо доставляется с пустым телом. Если я переключу тело письма на обычный текст, оно будет доставлено нормально (но это не сработает для меня).

Как мне заставить это работать?

ОБНОВЛЕНИЕ:

Вы не можете вызвать getContent () в экземплярах PageReference ни из запланированных методов APEX, ни из методов @future (я не уверен, почему это так, но это то, что есть). Я думаю, что решением будет создание веб-службы, которую я буду вызывать из метода @future. Кажется невероятно хакерским, но я не уверен, что еще я мог сделать.

ОКОНЧАТЕЛЬНОЕ ОБНОВЛЕНИЕ: Вот как отправлять электронные письма HTML из запланированного APEX:

  • Создайте класс, реализующий интерфейс Schedulable.
  • Пусть метод execute () вызывает метод @future.
  • Попросите метод @future вызвать метод с включенной веб-службой в классе, который отправляет электронное письмо.

Хотя этот подход окольный, он работает.

5
задан barelyknown 23 February 2012 в 17:19
поделиться