2009-09-14 34 views
0

我正在開發一個由其他人開始的項目,並試圖修復一些錯誤。有一個包含要處理的實體列表的自定義實體。但是它自定義的實體被刪除,並且列表沒有被更新,所以拋出了一個錯誤。Drnamics CRM - 附加 - 檢查實體是否存在

我想添加一個檢查,確保每個處理的實體都被檢查以確保它首先存在。

這是可能的CRM,如果是這樣,最好的辦法是什麼。請注意,這是用C#2008編寫的。

注意:我只有要使用的實體名稱。 [end edit] 謝謝

回答

0

對於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."); 
}