Как реализовать планировщик в Apex?

Я вижу в Salesforce функцию, подобную планировщику, но она в некоторой степени связана с существующими функциями, которые предоставляет salesforce, и, насколько я понимаю, образец исходного кода не предоставляется.

Я хочу создать свой собственный планировщик, который отправляет простую электронную почту в зависимости от даты.

Цель:

Настраиваемый объект Player имеет поля

startDate : date like '2010-11-01'
email : text field like [email protected]
name : player's name like John.

Если сегодняшняя дата на один день раньше startDate, я хочу отправить электронное письмо Player. Например, имя игрока John, и если сегодня 2010-12-10, а startDate одного игрока установлен на 2010-12-11, будет отправлено электронное письмо с сообщением "hello John".

К сожалению, я не могу найти хороший пример или учебное пособие в Интернете или документацию по продажам, как это сделать с помощью Apex. Может ли кто-нибудь указать, с чего начать?

ОБНОВЛЕНИЕ

Хочу продолжить ответ от eyescream.

После настройки планировщика вы можете указать, какие последующие действия следует предпринять, например, отправить электронное письмо с использованием шаблона или установить для настраиваемых полей объекта некоторые значения.

Ниже я нашел полезным для людей, использующих шаблон электронной почты в формате Visualforce.

У меня есть пользовательский объект 'alertTester', который ссылается на другой объект 'custom', и даже этот объект 'custom' имеет ссылку на другой объект 'custom1GrandChild', и все отношения (до 3 или 5 слоев, я думаю) могут быть доступны, как показано ниже .

Я тестировал ниже и отлично работает. Теперь я получаю письмо с установленным условием :)

<messaging:emailTemplate subject="Hello" recipientType="User" relatedToType="alertTester__c" >
<messaging:plainTextEmailBody >

{!relatedTo.name}
{!relatedTo.custom__r.name}
{!relatedTo.custom__r.custom1GrandChild__r.name}


</messaging:plainTextEmailBody>
</messaging:emailTemplate>

person Meow    schedule 11.11.2010    source источник


Ответы (2)


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

Уведомление по электронной почте + правило рабочего процесса должно предоставлять вам все функции, необходимые в этом сценарии, и включать в себя простой щелчок без какого-либо кода.

person eyescream    schedule 11.11.2010
comment
Я просмотрел страницу рабочего процесса и обнаружил, что можно настроить только 5 адресов электронной почты. В моем сценарии пользователи будут создавать расписание, а у настраиваемого объекта «Клиент» есть поле электронной почты. Таким образом, будет 100 клиентов, у каждого из которых будет индивидуальный адрес электронной почты. Моему планировщику необходимо изучить каждый из них, чтобы этот случай не вписался в существующую функцию. Есть предположения? - person Meow; 15.11.2010
comment
Создайте оповещение по электронной почте для объекта Player, установите тип получателя в поле «Электронная почта». Ваше поле (например, если это действительно электронная почта, а не текст!) Должно появиться в списке. Щелкните стрелку, чтобы переместить ее в правую часть экрана. Трудно описать, но, возможно, снимок экрана поможет: dl.dropbox.com/u /709568/stackoverflow/masato%20email.png - person eyescream; 15.11.2010
comment
Хорошо ... Фаза установки правила, которая представляет собой шаг 2/3, где вы настраиваете условие, я выбираю, например, поле даты объекта Player, но фактическое значение, которое принимает Salesforce, является статической строкой даты, такой как '2001/10/10'. ‹Br /› Мне нужно сделать что-то вроде «сегодня () - 1 день», но безуспешно .. - person Meow; 16.11.2010
comment
Фактически на той же странице я обнаружил раскрывающееся меню условия, которое делает его ИСТИННЫМ, что позволяет мне установить условие более подробно. Спасибо! - person Meow; 16.11.2010

Я снова отвечаю на свой вопрос ..

Ниже ссылки найдите schedule

http://www.salesforce.com/us/developer/docs/apexcode/index.htm

Похоже, у Apex есть интерфейс Schedulable, который я могу реализовать и настроить задачу cron.

Ниже приведен пример кода, представленного в документе:

global class TestScheduledApexFromTestMethod implements Schedulable {

// This test runs a scheduled job at midnight Sept. 3rd. 2022  


   public static String CRON_EXP = '0 0 0 3 9 ? 2022';

   global void execute(SchedulableContext ctx) {
      CronTrigger ct = [SELECT id, CronExpression, TimesTriggered, NextFireTime
                FROM CronTrigger WHERE id = :ctx.getTriggerId()];

      System.assertEquals(CRON_EXP, ct.CronExpression);
      System.assertEquals(0, ct.TimesTriggered);
      System.assertEquals('2022-09-03 00:00:00', String.valueOf(ct.NextFireTime));

      Account a = [SELECT id, name FROM Account WHERE name = 
                  'testScheduledApexFromTestMethod'];
      a.name = 'testScheduledApexFromTestMethodUpdated';
      update a;
   }   
}
person Meow    schedule 11.11.2010
comment
Хм, я пробовал выше, но, похоже, что-то не работает. Я настроил планировщик на рассылку электронной почты каждый час, но не получаю ... расследование все еще ведется - person Meow; 15.11.2010