我正在通过像
这样的词典object_dict = {'姓名':'样本帐户','类型':'帐户','Id': '00001834fiBkAAO','得分_c':'333'}
并且想要在Account对象中仅更新1个自定义字段('score__c'),但我对以下3件事感到困惑:
帐号有15个字符,但我有18个字符,显然可能是因为15个字符不能是salesforce追加3个字符的唯一字符。但是beatbox update如何解决这个问题呢?它会更新吗?
与使用service.upsert命令传递密钥的upsert不同,更新如何工作?它会考虑Name& ID作为复合键&然后更新'score__c'字段?
beatbox如何知道Name,Id& score__c?
答案 0 :(得分:2)
18个字符的最后3个字符ID对前一个字符的大写/小写进行编码,因此在不区分大小写的编程语言中也可以比较对象的长ID的等效性。您可以使用您获得的内容,短ID或长ID。 (您的ID长度为16个字符,无效。)
更新后的对象仅由type
和主键id
标识。所有其他名称都是更新列。因此,如果您没有更新它,则可以忽略“名称”。
dtto
修改强>
解释“你可以使用你得到的,短ID或长ID”:
SFDC上的所有内容都接受短ID或长ID(Web界面,Apex,VisualForce,API,导入数据等)。浏览器中的内部顶点代码和Web URL,视图和报告使用15个字符,因为它保证处理区分大小写。每个输出(如备份,从报告,开发者控制台或Salesforce API导出)都带有18个字符的ID,可以轻松处理不区分大小写,例如通过Excel。
您可能永远不需要删除或添加最后3个字符。唯一的问题可能是,如果您将从浏览器复制/粘贴的ID与导出的数据组合在一起,还有喜欢不区分大小写的搜索或比较的工具,请使用一些方法区分大小写。你也可以获得长ID,例如通过Apex中的函数CASESAFEID()
或Beatbox中的SELECT Id from Account WHERE Id = 'short_id...'
或Python中的函数case_safe_id离线,但我重申我真的从未需要它。 (除了更准确的猜测,字符串可能是有效的Salesforce ID:未找到ID或Salesforce报告的无效ID)安全只是区分大小写搜索包含在中的短ID Excel中的工作表,因为ID具有以下结构:
ID structure:
TTTII0XXXXXXXXXCCC
TTT = type of object
II = server instance where the data row was originally created
0 = it is still guaranteed zero at this position, but can be subject of change
XXXXXXXXX = ID of the row, jumping, but approximately increasing in a long-term scale
CCC = encoded case sensitive info
因此,在长ID中搜索的短ID的匹配仅可能恰好在开头。
编辑2 Salesforce recommends that you use the 18-character ID.(开发者指南)
如果通过一次调用创建多个行,则可以创建大量类似的15个字符的ID:svc.create(list_of_200_rows_data)
。有趣的是,ID和查找字段区分大小写,即使是短的SELECT Id, Name FROM Contact WHERE AccountId = '0010000ID15CHAR'
,而文本字段也不区分大小写SELECT FirstName FROM Contact WHERE LastName='sMiTh'
。因此,如果你节省了一些
对于从其他Salesforce数据库迁移的行的'old_id'(必须保存为文本),它们必须保存为18个字符的ID