gpt4 book ai didi

Salesforce 自定义对象关系创建

转载 作者:行者123 更新时间:2023-12-05 01:26:37 28 4
gpt4 key购买 nike

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

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

通过snipet获取的字段如下:

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 值才能实现这一点?

最佳答案

长话短说:

以此为模板来完成你想要的:

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 实例放入 fields CustomObject 的数组,并将该 CustomObject 传递给 Salesforce 元数据 API。这对大多数数据字段都有效,但似乎对关系字段无效。

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

那些无声的错误:

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

通过将 CustomField 直接传递给元数据 API(未包装在 CustomObject 中),调用 upsertMetadata仍然会无异常地返回(因为它已经为你做了),但是这次,如果出现问题,upsertResponse[0].success将是 false 而不是 true,并且 upsertResponse[0].errors将为您提供更多信息。

其他问题

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

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

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

  • 大体上记住任何带有 label 的东西在其名称中可能是为了在 UI 中向用户显示,因此可以在其中包含空格以按照用户期望的方式很好地格式化。

Salesforce...真的吗???

(迷你咆哮警告)

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

关于Salesforce 自定义对象关系创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9000493/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com