2012-03-01 117 views
0

我實現了一個批處理作業,該作業在同一個salesforce實例中進行web服務調用,然後應該發送帶有pdf附件的電子郵件,因爲您無法直接從批處理髮送pdf附件工作。我的Web服務調用看起來是這樣的:Salesforce:從Salesforce到Salesforce的SOAP登錄

public static void callOut(List ids){ 
     InvoiceAttachmentConnector.InvoiceAttachmentService ws = new InvoiceAttachmentConnector.InvoiceAttachmentService(); 
     ws.SessionHeader = new InvoiceAttachmentConnector.SessionHeader_element(); 
     ws.SessionHeader.sessionId = UserInfo.getSessionId(); 
     ws.handleInvoicePdfAttachment(ids); 
    } 

但是在批作業UserInfo.getSessionId()返回null,因此我得到一個INVALID_SESSION_ID例外。

如何登錄獲取SessionId?到目前爲止,我沒有發現從salesforce登錄到salesforce的解決方案。如果你能幫助,我將不勝感激!謝謝!

回答

2

您無法在批處理頂點獲取像這樣的會話Id,因爲它在系統上下文下運行,因此沒有特定的用戶信息用於檢索。

UPDATE:

您有以下選擇:

  1. 嘗試通過WSDL到頂點生成在您的組織運行從您的Salesforce組織的Web服務的WSDL生成一些類,可以讓你登錄。每個執行呼叫只允許一個Web服務請求。
  2. 您可以創建一個網站頁面,在您的批處理頂點中發出HTTP請求。這需要檢索要爲其發送PDF的項目的Id,以及要運行的特定用戶以便使用System.runAs(user)方法。您可以在HTTPRequest標頭或自定義設置中傳遞這些參數。

請注意,這些解決方案都不理想,您可能需要重新考慮爲什麼您首先使用Batch apex並查看是否可以用不同方式重新實現它。

+0

我知道,這就是爲什麼我想找到另一種獲得會話ID的方法。必須有一種方法可以從apex代碼調用另一個salesforce webservice。如果你可以從apex調用一個sf web服務,那麼必須有登錄的可能性,並因此獲得一個會話id。 – Phil 2012-03-02 09:27:14

+0

查看更新的答案。 – pbattisson 2012-03-02 12:30:58

+0

上週我通過選項1瞭解了它。此鏈接http://developer.force.com/cookbook/recipe/calling-salesforce-web-services-using-apex幫助了我很多。我們需要使用批處理作業的原因是,我們希望將作業計劃爲自動將發票發送給客戶。 – Phil 2012-03-05 09:40:45