2014-10-07 76 views
1

您是否知道系統中是否有任何類似MS CRM實體的全球參考書?將實體ID解析爲MS Dynamics CRM中的實體類型

我需要將實體ID解析爲實體類型,而不檢查每個實體是否存在給定的GUID。

可能嗎?

+0

我可以問爲什麼這個要求存在?除了某些SQL工作外,有一個記錄GUID並不包含其他信息(如邏輯名稱或對象類型代碼)是非常罕見的。 – Nicknow 2014-10-08 02:07:07

+0

這個需求確實非常特殊 - 要找出在註釋的預操作'Retrieve'上鍊接到哪個實體。從查詢定義中,可以獲取被引用實體的GUID,但不能獲取它的類型。 – shytikov 2014-10-08 06:30:45

+0

如果你在'annotation'上工作,你有一個'ObjectTypeCode'。我已經在下面發佈了一個關於如何基於OTC值查詢實體邏輯名稱的答案。我建議您更新您的問題以更好地描述實際需求。 – Nicknow 2014-10-08 13:53:08

回答

1

我不知道任何支持的方式,但我相信你可以對數據庫中的PrincipalObjectAccess表進行SQL查詢,並檢索ObjectTypeCode的值,其中ObjectId是GUID。

+0

實際上,即使通過常規的「OrganizatinService」調用也可以檢索POA對象,但它仍然無法通過。我相信POA條目並不總是被創建的,即如果實體遵循常規的安全方法,毫無例外,如共享創建... – shytikov 2014-10-08 06:51:29

1

對於annotation您需要查看字段objecttypecode才能確定實體類型objectid

您可以在代碼中生成一個實體邏輯名稱和對象類型代碼列表,作爲Dictionary對象(這會讓您獲得最快的性能,但要求您知道當時系統中的所有實體類型您編譯)或(如果您使用的是CRM 2011 UR12 +或CRM 2013),則可以執行MetadataQuery

你可以閱讀更多有關在這裏做一個元數據查詢:http://bingsoft.wordpress.com/2013/01/11/crm-2011-metadata-query-enhancements/

示例代碼爲您的要求:

var objTypeCode = [INTEGER] //Make this this the annotation.objecttypecode 

MetadataFilterExpression entityFilter = new MetadataFilterExpression(LogicalOperator.And); 
EntityFilter.Conditions.Add(new MetadataConditionExpression("ObjectTypeCode", MetadataConditionOperator.Equals, objTypeCode); 
EntityQueryExpression entityQueryExpression = new EntityQueryExpression() 
{ 
    Criteria = entityFilter 
}; 
RetrieveMetadataChangesRequest retrieveMetadataChangesRequest = new RetrieveMetadataChangesRequest() 
{ 
    Query = entityQueryExpression, 
    ClientVersionStamp = null 
}; 

RetrieveMetadataChangesResponse response = (RetrieveMetadataChangesResponse)orgService.Execute(retrieveMetadataChangesRequest); 

可以減少元數據檢索,獲得更好的性能,如下所示:How to get the CRM Entity Name from the Object Type Code of a RegardingID?

相關問題