我正在尝试通过 salesforce Beatbox python 客户端更新记录 upsert 操作似乎工作正常,但我无法完全弄清楚如何将 externalid 指定为外键:
尝试更新插入:
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': '', '成功': False, '创建': False}]
肥皂示例和错误文本的特殊性似乎表明这是可能的,但我在文档中几乎找不到关于使用外部 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])
它就像一些黑魔法。