【问题标题】:"Invalid field for upsert, must be an External Id custom or standard indexed field: Name" error“更新插入的字段无效,必须是外部 ID 自定义或标准索引字段:名称”错误
【发布时间】:2020-05-28 14:00:50
【问题描述】:

我正在尝试向 Contact 对象输入唯一值。代码如下:

List<Contact> conList = new List<Contact> {
        new Contact(FirstName='Joe',LastName='Smith',Department='Finance'),
        new Contact(FirstName='Kathy',LastName='Smith',Department='Technology'),
        new Contact(FirstName='Caroline',LastName='Roth',Department='Finance'),
        new Contact()};   

// Caroline Roth already exists so I want this code to update her record, not insert another Caroline Roth record          
Database.UpsertResult[] srList = Database.upsert(conList, Contact.Fields.Name, false);

Salesforce 的文档状态 "upsert 语句通过比较一个字段的值来匹配 sObjects 与现有记录。如果您在调用此语句时未指定字段,则 upsert 语句使用 sObject 的 ID 将 sObject 与 Salesforce 中的现有记录匹配。或者,您可以指定一个用于匹配的字段。对于自定义对象,指定一个标记为外部 ID 的自定义字段。对于标准对象,您可以指定任何将 idLookup 属性设置为 true 的字段。例如,的电子邮件字段联系人或用户设置了 idLookup 属性。”

我有两个问题: 1) 我们如何查看 Contact 对象上的哪些字段的 idLookup 属性设置为 true 2) 为什么我在执行代码时会在主题行中出现错误?

【问题讨论】:

    标签: salesforce salesforce-lightning


    【解决方案1】:

    1:

    Map<String, Schema.SObjectField> contacFieldsMap = Schema.getGlobalDescribe().get('Contact').getDescribe().fields.getMap();
    
    for (Schema.SObjectField field : contacFieldsMap.values()) {
        Schema.DescribeFieldResult fieldResult = field.getDescribe();
        if (fieldResult.isIdLookup()) System.debug(fieldResult.getName() + ' IS idLookup');
    }
    

    2:System.debug(Contact.Name.getDescribe().isIdLookup()); // false

    【讨论】:

      猜你喜欢
      • 2019-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-07
      • 1970-01-01
      • 2019-06-05
      • 2019-01-01
      相关资源
      最近更新 更多