3

我正在尝试通过 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])

它就像一些黑魔法。

4

1 回答 1

4

目前 Beatbox 不支持像这样序列化嵌套字典,这是您尝试执行的 externalId 解析所必需的。(如果查看生成的请求,可以看到嵌套字典只是序列化为字符串))。

于 2013-06-05T20:18:01.170 回答