3

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])

そしてそれは闇の魔法のように機能します。

4

1 に答える 1

4

現在、Beatbox は、実行しようとしている externalId の解決に必要な、このようなネストされた辞書のシリアル化をサポートしていません。(生成されたリクエストを見ると、ネストされた辞書が文字列としてシリアル化されていることがわかります)。

于 2013-06-05T20:18:01.170 に答える