salesforce Beatbox python クライアントを介してレコードをアップサートしようとしていますが、アップサート操作は正常に機能しているようですが、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': '', 'success': False, 'created': 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)
もう 1 つを __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])
そしてそれは闇の魔法のように機能します。