【发布时间】:2013-06-05 17:52:26
【问题描述】:
我正在尝试通过 salesforce Beatbox python 客户端更新记录,更新操作似乎可以正常工作,但我不太清楚如何将外部 ID 指定为外键:
尝试更新插入:
consolidatedToInsert = []
for id,ce in ConsolidatedEbills.items():
consolidatedToInsert.append(
{
'type':'consolidated_ebill__c',
'Account__r':{'type':'Account','ETL_Natural_Key__c':ce['CLASS_REFERENCE']},
'ETL_Natural_Key__c':ce['ISSUE_UNIQUE_ID']
}
)
print consolidatedToInsert[0]
pc.login('USERNAME', 'TOTALLYREALPASSWORD')
ret = pc.upsert('ETL_Natural_Key__c',consolidatedToInsert[0])
print ret
给出错误:
'外部外键引用未引用有效实体:Account__r'
[{'isCreated': False, 'errors': [{'fields': [], 'message': '外部外键引用未引用有效实体:Account__r', 'statusCode': 'INVALID_FIEL D'}], 'id': '', 'success': False, 'created': False}]
soap 示例和错误文本的特殊性似乎表明这是可能的,但我在文档中几乎找不到关于使用外部 id 插入的内容。
仔细一看,我不确定这是否可能,Account__r 的一个完全损坏的密钥似乎无声无息地传递,就好像它甚至不是 XML 翻译的目标一样,不过我很想弄错。
对 pythonclient.py 422:0 的快速更改:
for k,v in field_dict.items():
if v is None:
fieldsToNull.append(k)
field_dict[k] = []
if k.endswith('__r') and isinstance(v,dict):
pass
elif hasattr(v,'__iter__'):
if len(v) == 0:
fieldsToNull.append(k)
else:
field_dict[k] = ";".join(v)
另一个到 __beatbox.py 375:0
for fn in sObjects.keys():
if (fn != 'type'):
if (isinstance(sObjects[fn],dict)):
self.writeSObjects(s, sObjects[fn], fn)
else:
s.writeStringElement(_sobjectNs, fn, sObjects[fn])
而且它的作用就像某种黑暗魔法。
【问题讨论】:
-
sn-p 很有代表性,但实际情况就是这样。哦,等等,感谢伟大的图书馆!
标签: python soap salesforce