2016-11-24 22 views
1

我打算在Google App Engine上为项目使用Salesforce Bulk API。我已经开始写一些简单的测试代码通过Python的salesforce-bulk-api库创建使用批量API两个任务:当在Google App Engine上执行时,Salesforce Bulk API:InvalidSessionId(无法找到会话ID)

from salesforce_bulk_api import SalesforceBulkJob 

header = ['WhoId', 'Subject'] 
messages = [('[...]', 'Test Task 1'), 
      ('[...]', 'Test Task 2')] 

os.environ['SALESFORCE_INSTANCE'] = '[...]' 
os.environ['SALESFORCE_SECURITY_TOKEN'] = access_token 

job = SalesforceBulkJob('insert', 'Task') 
job.upload(
    header, 
    messages 
) 

results = job.results() 
for r in results: 
    print('Result ' + str(r)) 

执行这个代码在本地工作正常和两个任务出现在Salesforce。但是,在Google App Engine上运行代码时,它会失败。作业/批细节:

<error xmlns="http://www.force.com/2009/06/asyncapi/dataload"> 
<script/> 
    <exceptionCode>InvalidSessionId</exceptionCode> 
    <exceptionMessage>Unable to find session id</exceptionMessage> 
</error> 

从我的文档中看到,会话ID需要通过每一次头字段X-SFDC-Session发送。我已经检查过,并且在本地执行以及通过Google App Engine执行设置。看起来像这样的标题:

{ 'Content-Length': '183', 
    'Accept-Encoding': 'gzip, deflate', 
    'Accept': '*/*', 
    'User-Agent': 'python-requests/2.9.1', 
    'X-SFDC-Session': u'[...]', 
    'Connection': 'keep-alive', 
    'Content-Type': u'application/xml; charset=UTF-8'} 

任何人有提示如何调试/解决此问题?谢谢!

- Manfred

+0

这仍然是一个持续的问题?这可能是值得的[报告项目问题跟踪](https://github.com/safarijv/salesforce-bulk-api/issues)。有一个[请求提及unicode的请求](https://github.com/safarijv/salesforce-bulk-api/pull/4),但目前还不清楚这是否解决了您的问题。 – Adam

+0

你有没有想过这个? – NSjonas

回答

0

也许这是底层库的一个问题。注意你的错误,你看到u'[...]'它看起来应该是一个简单的字符串。

在您的本地版本的库,在salesforce_bulk_api.py上线212,找到以下行:

headers = {'X-SFDC-Session': self.session_id} 

,并更改为:

headers = {'X-SFDC-Session': str(self.session_id)} 

现在,重新部署应用,然后再试一次。如果这可以解决问题,请考虑发送拉取请求来编辑该库以包含您的修补程序。

本地开发环境只是一个模拟器,可能与真正的App Engine环境有很大不同,甚至可能在本地机器与本地机器之间存在很大差异。许多公司将他们的应用程序首先部署到“分期”项目,然后再将其转换到其生产项目。

+0

好抓。不幸的是这没有什么区别。 我意识到显着差异,这就是为什么我们在GAE上使用临时项目的原因。但是,这一次,我正在努力寻找问题/差异。 –

相关问题