2010-11-11 41 views
0

我在salesforce中看到類似功能的調度程序,但它與salesforce提供的現有功能有些相關,並且根據我的研究,沒有提供示例源代碼。如何在Apex中實現調度程序?

我想要做的是創建我自己的調度程序,它根據日期發送簡單的電子郵件。

目標:

自定義對象Player有場

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

如果今天的日期爲一天起始日期之前,我想請發郵件到播放器。 例如,玩家的名字是John,如果今天是2010-12-10並且一個玩家的startDate設置爲2010-12-11,則發送稱爲"hello John"的電子郵件。

不幸的是,我找不到好的示例或教程在線或salesforce doc如何使用Apex做到這一點。 任何人都可以指出從哪裏開始?

UPDATE

我想答案從eyescream.

擴展設置調度程序後,可以設置什麼跟進採取類似使用模板或設置自定義對象字段的一些值發送電子郵件。

下面我發現在Visualforce格式中使用電子郵件模板的人很有用。

我有自定義對象'alertTester',它引用了其他對象的'自定義',甚至這個對象'自定義'引用另一個對象'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> 

回答

1

退房的解決方案,不涉及代碼之前,你會深深地扎到頂點...

電子郵件警報+工作流規則應該在這種情況下爲您提供您需要的所有功能,只需單擊即可,無需任何代碼。

+0

非常感謝您的提示,我會嘗試! – 2010-11-13 09:08:45

+0

我查看了工作流頁面,發現只能設置5個電子郵件地址。在我的場景中,用戶將創建時間表,客戶自定義對象具有電子郵件字段。因此,將有100個客戶各自擁有單獨的電子郵件地址。我的調度程序需要查看它們中的每一個,因此這種情況可能不適合現有功能。有什麼想法嗎? – 2010-11-14 23:57:37

+1

在播放器對象上創建電子郵件提醒,將收件人類型設置爲「電子郵件字段」。你的領域(如果它的類型真的是電子郵件而不是文本,例如!)應該出現在列表中。點擊箭頭將其移動到屏幕的右側。很難形容,但也許截圖會有所幫助:http://dl.dropbox.com/u/709568/stackoverflow/masato%20email.png – eyescream 2010-11-15 18:35:51

1

我回答再次我自己的問題..

下面的鏈接,搜索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; 
    } 
} 
+0

嗯我已經試過上面,但似乎不工作莫名其妙。我設置調度程序發送自己的電子郵件每小時,但我沒有收到..仍在調查中 – 2010-11-15 11:26:59