Python beatbox salesforce外部Id upsert

时间:2013-06-05 17:52:27

标签: python soap salesforce

我正在尝试通过salesforce Beatbox python客户端来记录一条记录,upsert操作似乎工作正常,但我不能完全弄清楚如何将externalid指定为外键:

尝试使用:

进行upsert
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':'','成功':错误,'创建':错误}]

SOAP示例和错误文本的特殊性似乎表明它是可能的,但我在文档中找不到有关使用外部ID插入的内容。


仔细看看我不确定这是否可行,Account__r的一个完全错误的密钥似乎默默地传递,就好像它甚至不是XML翻译的目标一样,但我喜欢错误。< / p>


快速更改为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])

它就像一些黑魔法。

1 个答案:

答案 0 :(得分:4)

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