我正在開發一個由其他人開始的項目,並試圖修復一些錯誤。有一個包含要處理的實體列表的自定義實體。但是它自定義的實體被刪除,並且列表沒有被更新,所以拋出了一個錯誤。Drnamics CRM - 附加 - 檢查實體是否存在
我想添加一個檢查,確保每個處理的實體都被檢查以確保它首先存在。
這是可能的CRM,如果是這樣,最好的辦法是什麼。請注意,這是用C#2008編寫的。
注意:我只有要使用的實體名稱。 [end edit] 謝謝
我正在開發一個由其他人開始的項目,並試圖修復一些錯誤。有一個包含要處理的實體列表的自定義實體。但是它自定義的實體被刪除,並且列表沒有被更新,所以拋出了一個錯誤。Drnamics CRM - 附加 - 檢查實體是否存在
我想添加一個檢查,確保每個處理的實體都被檢查以確保它首先存在。
這是可能的CRM,如果是這樣,最好的辦法是什麼。請注意,這是用C#2008編寫的。
注意:我只有要使用的實體名稱。 [end edit] 謝謝
使用CRM元數據服務(sample Metadata code from 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.");
}