Salesforce:从Salesforce到Salesforce的SOAP登录

时间:2012-03-01 17:21:46

标签: web-services soap salesforce sessionid

我实现了一个批处理作业,该作业在同一个salesforce实例中进行webservice调用,然后该实例应该发送带有pdf附件的电子邮件, 因为您无法直接从批处理作业发送pdf附件。我的webservice调用如下所示:

    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的解决方案。如果你能帮助我会很感激!谢谢!

1 个答案:

答案 0 :(得分:2)

您无法在批处理顶点获得这样的会话ID,因为它在系统上下文中运行,因此没有特定的用户信息可供检索。

更新:

您有以下选择:

  1. 尝试从您的Salesforce组织中通过wsdl运行Web服务wsdl到组织中的apex生成器,以生成一些可能允许您登录的类。每次执行调用只允许一个Web服务请求。
  2. 您可以创建一个网站页面,您可以在批处理顶点发出HTTP请求。这需要检索要为其发送PDF的项目的ID以及要运行的特定用户,以便您使用System.runAs(用户)方法。您可以在HTTPRequest标头或自定义设置中传递这些参数。
  3. 请注意,这些解决方案都不是理想的,您可能需要首先重新考虑使用Batch apex的原因,看看是否可以以不同的方式重新实现它。