如何以编程方式识别自定义字段?
How can recognize a custom field programmatically?
在 Microsoft Dynamics 365 中,我需要在实体中找到 自定义字段,我想使用 odata(rest api) 或获取实体的自定义字段带有用于动态目的的 SDK。
有什么方法可以通过编程方式找到吗?
您可以通过查询 publisher
table 轻松枚举实例中所有发布者的自定义前缀,您想要名为 customizationprefix
.
的列
检索到所有前缀后,您可以过滤 RetrieveEntityRequest
的结果以提取 name
以 "<customizationprefix>_"
开头的所有列。
adx
、cc
和 msdyn
等前缀来自 add-ons(门户网站、市场营销、现场服务等),您可能需要挑选列表前缀的数量取决于您的具体需求。
示例代码:
var client = new CrmServiceClient( /* ... */ );
const string ENTITY_TO_CHECK = "account"; // logical name
var prefixesQuery = new QueryExpression("publisher") {
ColumnSet = new ColumnSet("customizationprefix")
};
var prefixesData = client.RetrieveMultiple(prefixesQuery).Entities
?.Select(e => e.GetAttributeValue<string>("customizationprefix"));
Console.WriteLine("Publisher prefixes:");
foreach (var pd in prefixesData)
Console.WriteLine("> {0}", pd);
var columnsQuery = new RetrieveEntityRequest
{
LogicalName = ENTITY_TO_CHECK,
EntityFilters = EntityFilters.Attributes,
RetrieveAsIfPublished = true
};
var columnsData = (client.Execute(columnsQuery) as RetrieveEntityResponse)?.EntityMetadata?.Attributes
?.Where(col => prefixesData.Any(prefix => col.LogicalName.StartsWith($"{prefix}_")))
.OrderBy(col => col.LogicalName);
Console.WriteLine("{0} custom fields: {1}", ENTITY_TO_CHECK, columnsData.Count());
foreach (var cd in columnsData.Take(1))
Console.WriteLine("> {0}", cd.LogicalName);
Console.ReadLine();
在 Microsoft Dynamics 365 中,我需要在实体中找到 自定义字段,我想使用 odata(rest api) 或获取实体的自定义字段带有用于动态目的的 SDK。 有什么方法可以通过编程方式找到吗?
您可以通过查询 publisher
table 轻松枚举实例中所有发布者的自定义前缀,您想要名为 customizationprefix
.
检索到所有前缀后,您可以过滤 RetrieveEntityRequest
的结果以提取 name
以 "<customizationprefix>_"
开头的所有列。
adx
、cc
和 msdyn
等前缀来自 add-ons(门户网站、市场营销、现场服务等),您可能需要挑选列表前缀的数量取决于您的具体需求。
示例代码:
var client = new CrmServiceClient( /* ... */ );
const string ENTITY_TO_CHECK = "account"; // logical name
var prefixesQuery = new QueryExpression("publisher") {
ColumnSet = new ColumnSet("customizationprefix")
};
var prefixesData = client.RetrieveMultiple(prefixesQuery).Entities
?.Select(e => e.GetAttributeValue<string>("customizationprefix"));
Console.WriteLine("Publisher prefixes:");
foreach (var pd in prefixesData)
Console.WriteLine("> {0}", pd);
var columnsQuery = new RetrieveEntityRequest
{
LogicalName = ENTITY_TO_CHECK,
EntityFilters = EntityFilters.Attributes,
RetrieveAsIfPublished = true
};
var columnsData = (client.Execute(columnsQuery) as RetrieveEntityResponse)?.EntityMetadata?.Attributes
?.Where(col => prefixesData.Any(prefix => col.LogicalName.StartsWith($"{prefix}_")))
.OrderBy(col => col.LogicalName);
Console.WriteLine("{0} custom fields: {1}", ENTITY_TO_CHECK, columnsData.Count());
foreach (var cd in columnsData.Take(1))
Console.WriteLine("> {0}", cd.LogicalName);
Console.ReadLine();