beatbox:在 Account 对象更新多条记录的自定义字段

beatbox: Update custom field of multiple records at Account object

我正在传递类似

的指令

object_dict = {'Name': 'Sample Account', 'Type': 'Account', 'Id': '00001834fiBkAAO', 'score__c': '333'}

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

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

  2. 与使用 service.upsert 命令传递密钥的 upsert 不同,更新如何工作?它会将 Name & ID 视为组合键然后更新 'score__c' 字段吗?

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

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

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

  3. dtto


编辑 解释 "You can use what you get, either the short or long ID":
SFDC 上的所有内容都接受短 ID 或长 ID(Web 界面、Apex、VisualForce、API、导入数据等)。内部 Apex 代码和浏览器中的 Web URL、视图和报告使用 15 个字符,因为它保证被处理区分大小写。每个输出(如备份、从报告、开发人员控制台或 Salesforce API 导出)都有 18 个字符的 ID,以便可以轻松处理不区分大小写,例如通过 Excel.

您可能永远不需要删除或添加最后 3 个字符。唯一的问题可能是,如果您将来自浏览器的 ID copied/pasted 与导出的数据结合使用,而且喜欢不区分大小写的搜索或比较的工具也有一些方法可以区分大小写。您还可以获得长 ID,例如通过 Apex 中的函数 CASESAFEID() 或 Beatbox 中的 SELECT Id from Account WHERE Id = 'short_id...' 或通过我的函数 case_safe_id 在 Python 中离线,但我重申我真的从来不需要它。 (除了对字符串可能是有效的 Salesforce ID 的好奇更准确的猜测:未找到 ID 或 Salesforce 报告的 ID 无效)安全 简单地区分大小写搜索简短sheet中包含的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 和 Lookup 字段的比较区分大小写,即使是短字段 SELECT Id, Name FROM Contact WHERE AccountId = '0010000ID15CHAR',而文本字段的比较不区分大小写 SELECT FirstName FROM Contact WHERE LastName='sMiTh'。因此,如果你存了一些 'old_id' 对于从其他 Salesforce 数据库迁移的行(必须保存为文本),它们必须保存为 18 个字符的 ID