2012-03-01 118 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