【问题标题】:Python beatbox salesforce external Id upsertPython beatbox salesforce 外部 ID upsert
【发布时间】:2013-06-05 17:52:26
【问题描述】:

我正在尝试通过 salesforce Beatbox python 客户端更新记录,更新操作似乎可以正常工作,但我不太清楚如何将外部 ID 指定为外键:

尝试更新插入:

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

soap 示例和错误文本的特殊性似乎表明这是可能的,但我在文档中几乎找不到关于使用外部 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])

而且它的作用就像某种黑暗魔法。

【问题讨论】:

  • sn-p 很有代表性,但实际情况就是这样。哦,等等,感谢伟大的图书馆!

标签: python soap salesforce


【解决方案1】:

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

【讨论】:

  • 哦,很遗憾,在这种情况下,您能否推荐任何其他方式来获取 salesforce Id,由于大小限制,为它们生成 in 子句将是不可靠的。
  • 如果您对 python 很方便,您可以尝试修复它(查看 AuthenticatedRequest.writeSObjects),否则我将在本周晚些时候尝试查看它。
  • 哇,比我预期的要简单,但不是最漂亮的修改。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-17
  • 2023-04-10
相关资源
最近更新 更多