我正在开发一个由其他人启动的项目,并尝试修复一些错误。有一个自定义实体包含要处理的实体列表。但是,如果删除了自定义实体,并且未更新列表,则会抛出错误。

我想添加一个检查,确保检查每个处理的实体以确保它首先存在。

这在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.");
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top