您是否知道系統中是否有任何類似MS CRM實體的全球參考書?將實體ID解析爲MS Dynamics CRM中的實體類型
我需要將實體ID解析爲實體類型,而不檢查每個實體是否存在給定的GUID。
可能嗎?
您是否知道系統中是否有任何類似MS CRM實體的全球參考書?將實體ID解析爲MS Dynamics CRM中的實體類型
我需要將實體ID解析爲實體類型,而不檢查每個實體是否存在給定的GUID。
可能嗎?
我不知道任何支持的方式,但我相信你可以對數據庫中的PrincipalObjectAccess表進行SQL查詢,並檢索ObjectTypeCode的值,其中ObjectId是GUID。
實際上,即使通過常規的「OrganizatinService」調用也可以檢索POA對象,但它仍然無法通過。我相信POA條目並不總是被創建的,即如果實體遵循常規的安全方法,毫無例外,如共享創建... – shytikov 2014-10-08 06:51:29
對於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?
我可以問爲什麼這個要求存在?除了某些SQL工作外,有一個記錄GUID並不包含其他信息(如邏輯名稱或對象類型代碼)是非常罕見的。 – Nicknow 2014-10-08 02:07:07
這個需求確實非常特殊 - 要找出在註釋的預操作'Retrieve'上鍊接到哪個實體。從查詢定義中,可以獲取被引用實體的GUID,但不能獲取它的類型。 – shytikov 2014-10-08 06:30:45
如果你在'annotation'上工作,你有一個'ObjectTypeCode'。我已經在下面發佈了一個關於如何基於OTC值查詢實體邏輯名稱的答案。我建議您更新您的問題以更好地描述實際需求。 – Nicknow 2014-10-08 13:53:08