MS CRM merge功能和POA Table(1)

這篇博客要講的是 CRM的 out of box function: Merge.


這個功能主要用於將兩個重複的record合併成爲一個record. 這個功能主要用於account, contact 和 lead實體。它允許你選擇將一個以上類型的實體(secondary)合併到另一個實體(primary)中,同時提供你一些attribute允許你選擇使用哪個record的值作爲最終的值。 在merge結束後, secondary entity將會被deactivated, 同時所有的子實體如email, child contact都會成爲primary entity的子實體。


以上的描述是針對用戶使用merge function的功能闡述, 接下來聊一些我在工作中不得不分析merge function是的一些發現。 

1. 首先描述下問題, 在data migration之後,我們需要merge 一些contact, 但因爲CRM和其他的系統有些交互,我們需要在CRM Merge之前call 一些別的restful service, 所以我們決定加入一個基於contact merge message的pre-plugin去實現以上邏輯。


2. Merge message 的plugin中, 參考下面的關於merge request的鏈接, 你可以獲得master record的Guid, secondary record的Guid以及update的內容。對於我的pre-plugin這就最夠了,我可以通過Guid獲取我需要的attribute。 

https://msdn.microsoft.com/en-us/library/microsoft.crm.sdk.messages.mergerequest.aspx


3. 接下來要談的內容就是MS可能不推薦的了, plugin設計完後發現out of box的merge功能因爲錯誤的data migration而一直報錯,於是只能嘗試去探索在merge function背後,CRM到底做了哪些工作。

a. 從on premise的server找到了merge 窗口的aspx文件,發現CRM是將data從窗口中讀出轉化爲dataitem然後傳給web service, 但是這個web service並沒有詳細的說明文件

b. 於是只能打開基於verbose的tracing, 發現CRM先是通過url 將master guid, objecttype id和secondary guid傳送給mergerecord的web service. 然後通過secondary的GUID去對與merge entity有關係的實體進行數據的查找,我們系統的問題就在於這裏, CRM不僅對1:N的關係進行查找,還對N:N的關係進行查找,而N:N的關係存在另一張table裏面,而且contact 和 marketing list的關係表中還存有objecttypecode。 我們data migration的contact的GUID有一些錯誤,導致merge function認爲secondary entity 是account,從而認爲master contact也是account, 從而發生找不到數據的錯誤。後來修正了關係表之後就一切ok了。


關於merge 的發現就說這麼多,會在下一篇博客中詳細談談POA table的作用和相關的一些stored function和procedure.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章