Dynamics CRM - 添加 - 检查实体是否存在
-
07-07-2019 - |
题
我正在开发一个由其他人启动的项目,并尝试修复一些错误。有一个自定义实体包含要处理的实体列表。但是,如果删除了自定义实体,并且未更新列表,则会抛出错误。
我想添加一个检查,确保检查每个处理的实体以确保它首先存在。
这在CRM中是否可行,如果是这样,最好的方法是什么。请注意,这是用C#2008编写的。
[编辑] 注意:我只有要使用的实体名称。 [结束编辑] 感谢
解决方案
使用CRM元数据服务(来自MSDN for CRM 4的样本元数据代码)。您可以检索所有实体的列表( RetrieveAllEntitiesRequest
),然后通过循环检查每个实体是否在该列表中。
其他提示
对于较新版本的CRM,您可以使用 MetadataFilterExpression 只询问您感兴趣的实体:
var entityName = "WHATEVER";
var entityFilter = new MetadataFilterExpression(LogicalOperator.And);
entityFilter.Conditions.Add(new MetadataConditionExpression("LogicalName", MetadataConditionOperator.Equals, entityName));
// we don't need all of the metadata, so we can just ask for a couple of basic things
var mpe = new MetadataPropertiesExpression()
{
AllProperties = false,
PropertyNames = {"DisplayName", "ObjectTypeCode", "PrimaryIdAttribute", "PrimaryNameAttribute"}
};
var entityQueryExpression = new EntityQueryExpression()
{
Criteria = entityFilter,
Properties = mpe
};
var retrieveMetadataChangesRequest = new RetrieveMetadataChangesRequest()
{
Query = entityQueryExpression
};
var metadataResponse = (RetrieveMetadataChangesResponse)orgService.Execute(retrieveMetadataChangesRequest);
if (metadataResponse.EntityMetadata.Count == 0)
{
// does not exist
Console.WriteLine(entityName + " was not found.");
}
else if (metadataResponse.EntityMetadata.Count == 1)
{
// found entity
Console.WriteLine(entityName + " was found.");
}
不隶属于 StackOverflow