【问题标题】:Salesforce Custom Object Relationship CreationSalesforce 自定义对象关系创建
【发布时间】:2012-01-25 09:41:48
【问题描述】:

我想使用元数据 API 创建两个对象并通过 C# 中的父子关系链接它们。

我可以通过元数据为对象创建对象和“自定义”字段,但服务只是忽略关系的字段 def。

字段的片段如下:

CustomField[] fields = new CustomField[] { new CustomField() 
{ 
  type = FieldType.Text,
  label = "FirstName",
  length = 50,
  lengthSpecified = true,
  fullName = "LJUTestObject__c.FirstName__c"
},
new CustomField() 
{
  type = FieldType.Text,
  label = "LastName",
  length = 50,
  lengthSpecified = true,
  fullName = "LJUTestObject__c.Lastname__c"
},
new CustomField() 
{
  type = FieldType.Text,
  label = "Postcode",
  length = 50,
  lengthSpecified = true,
  fullName = "LJUTestChildObject__c.Postcode__c"
},
new CustomField() 
{
  type = FieldType.MasterDetail,
  relationshipLabel = "PostcodeLookup",
  relationshipName = "LJUTestObject__c.LJUTestObject_Id__c",
  relationshipOrder = 0,
  relationshipOrderSpecified = true,
  fullName = "LJUTestChildObject__c.Lookup__r"
}
};

父对象的样子:

LJUTestObject
  ID,
  FirstName, Text(50)
  LastName, Text(50)

子对象看起来像:

LJUTestChildObject
  ID,
  Postcode, Text(50)

我想将父级链接到子级,因此一个“LJUTestObject”可以有多个“LJUTestChildObjects”。

我需要 FieldType、RelationshipName 和 RelationshipOrder 的哪些值才能实现这一点?

【问题讨论】:

    标签: salesforce


    【解决方案1】:

    TL;DR:

    使用这个作为模板来完成你想要的:

    var cf = new CustomField();
    cf.fullName = "ChildCustomObject__c.ParentCustomField__c";
    cf.type = FieldType.MasterDetail;
    cf.typeSpecified = true;
    cf.label = "Parent Or Whatever You Want This To Be Called In The UI";
    cf.referenceTo = "ParentCustomObject__c";
    cf.relationshipName = "ParentOrWhateverYouWantThisToBeCalledInternally";
    cf.relationshipLabel = "This is an optional label";
    
    var aUpsertResponse = smc.upsertMetadata(metadataSession, null, null, new Metadata[] { cf });
    

    主要区别:

    自然的诱惑是将 CustomField 实例放入 CustomObject 的 fields 数组中,并将该 CustomObject 传递给 Salesforce 元数据 API。这对大多数数据字段都有效,但似乎不适用于关系字段。

    相反,将 CustomField 直接传递给 Salesforce 元数据 API,而不是包装在 CustomObject 中。

    那些被忽略的错误:

    事实证明错误正在发生,并且 Salesforce 元数据 API 知道它们,但是当嵌套在 CustomObject 中的 CustomFields 发生错误时不会告诉您这些错误。

    通过将 CustomField 直接传递给 Metadata API(未包装在 CustomObject 中),对 upsertMetadata 的调用仍将返回而不会引发异常(正如它已经为您所做的那样),但是这一次,如果有什么出错了,upsertResponse[0].success 会是 false 而不是 true,upsertResponse[0].errors 会给你更多信息。

    其他问题

    • 必须指定referenceTo,如果它与现有的内置或自定义对象的名称不匹配,则错误消息将与您根本没有指定referenceTo 相同。

    • fullName 应该以 __c 而不是 __r 结尾。 __r 用于关系名称,但请记住 fullName 指定的是 字段 名称,而不是 relationship 名称。

    • relationshipName - 我通过在末尾不包含 __r 并且在开头不包含自定义对象名称来使其工作。我没有测试以确保其他方法不起作用,但请注意,至少您不需要relationshipName 中包含这些额外的组件。

    • 请记住,名称中带有 label 的任何内容都可能是为了在 UI 中显示给用户,因此可以在其中包含空格,以便按照用户期望的方式很好地格式化。

    Salesforce...真的???

    (迷你咆哮警告)

    Salesforce 元数据 API 不直观且记录不充分。这就是为什么你被困在这么简单的事情上。这就是为什么没有人知道你的问题的答案。这就是为什么,四年后,我被困在同一件事上。创建关系是您希望使用 Salesforce 元数据 API 执行的主要操作之一,但长期以来一直很难弄清楚。来吧 Salesforce,我们知道您是一家销售公司,而不是一家技术公司,但您赚取了数万亿美元并乐于炫耀 - 为投资学习您的开发人员的更好的 API 体验投入更多资金平台。

    【讨论】:

      【解决方案2】:

      我自己并没有像这样通过元数据 API 创建这些,但我建议:

      relationshipName = "LJUTestObject__c.LJUTestObject_Id__c
      

      应该是:

      relationshipName = "LJUTestObject__c.Id
      

      由于 Id 是标准字段,__c 后缀仅用于自定义字段(不是自定义对象上的标准字段)。还有可能是关系全名应该以__c结尾而不是__r结尾,但是先试试上面的改,看看效果如何。

      【讨论】:

        【解决方案3】:
        SELECT 
            Id,
            OwnerId,
            WhatId,
            Reminder_Date_Time__c, 
            WhoId, 
            Record_Type_Name__c, 
            Task_Type__c,
            Assigned_Date__c, 
            Task_Status__c, 
            ActivityDate, 
            Subject, 
            Attended_By__c,
            Is_Assigned__c 
        FROM Task 
        WHERE 
            (NOT Task_Status__c LIKE 'Open') AND 
            ActivityDate >= 2017-12-13 AND 
            (NOT Service__r.Service_State__c LIKE 'Karnataka')
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-07
          • 1970-01-01
          • 2021-03-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多