1

我正在传递类似的东西

object_dict = {'Name':'示例帐户','Type':'Account','Id':'00001834fiBkAAO','score__c':'333'}

并且只想更新 Account 对象的 1 个自定义字段('score__c'),但我对以下 3 件事感到困惑:

  1. 帐户有 15 个字符 ID,但我有 18 个字符,显然可能是因为这 15 个字符对于 Salesforce 来说不是唯一的附加 3 个字符。但是beatbox更新是如何处理这个问题的呢?会更新吗?

  2. 与使用 service.upsert 命令传递密钥的 upsert 不同,更新如何工作?它会将名称和 ID 视为复合键然后更新“score__c”字段吗?

  3. beatbox 如何知道在 Name、Id 和 score__c 中更新哪个字段?

4

1 回答 1

2
  1. 18 个字符 ID 中的最后 3 个字符对前面字符的大写/小写进行编码,以便在不区分大小写的编程语言中也可以比较对象的长 ID 的等效性。你可以使用你得到的东西,无论是短ID还是长ID。(您的 ID 长度为 16 个字符,无效。)

  2. 更新的对象仅由type和 primary key标识id。所有其他名称都是更新的列。因此,如果您不想更新它,您可以忽略“名称”。

  3. dtto


编辑 解释“你可以使用你得到的东西,无论是短 ID 还是长 ID”
SFDC 上的所有东西都接受短 ID 或长 ID(Web 界面、Apex、VisualForce、API、导入数据等)内部顶点代码和 Web URL,浏览器中的视图和报告使用 15 个字符,因为它保证处理后区分大小写。每个输出(如备份、从报告、开发人员控制台或 Salesforce API 导出)都有 18 个字符的 ID,可以轻松处理不区分大小写的问题,例如通过 Excel。

您可能永远不需要删除或添加最后 3 个字符。唯一的问题可能是,如果您将从浏览器复制/粘贴的 ID 与导出的数据结合起来,而且喜欢不区分大小写的搜索或比较的工具有一些方法可以区分大小写。您还可以通过CASESAFEID()ApexSELECT Id from Account WHERE Id = 'short_id...'中的函数或 Beatbox 中的函数或离线通过Python 中的case_safe_id函数获取长 ID ,但我再说一遍,我真的从来不需要它。(除了一个更准确的猜测字符串是否是有效的 Salesforce ID:找不到 ID 或 Salesforce 报告的无效 ID)在 Excel 中简单地搜索包含在工作表中的短 ID是安全的,因为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 建议您使用 18 个字符的 ID。(开发者指南)

如果您通过一次调用一起创建许多行,则可以创建大量相似的 15 个字符的 ID svc.create(list_of_200_rows_data):. 有趣的是,ID 和 Lookup 字段是区分大小写的,即使是短的,SELECT Id, Name FROM Contact WHERE AccountId = '0010000ID15CHAR'而文本字段是不区分大小写SELECT FirstName FROM Contact WHERE LastName='sMiTh'的。因此,如果您曾经为从其他 Salesforce 数据库迁移的行保存一些“old_id”(这必须保存为文本),它们必须保存为 18 个字符的 ID

于 2017-07-30T18:47:32.687 回答