MS CRM 2011中,对于多实体数据文件的导入
??? 在之前的文章中,我已經介紹了如何使用MS CRM 2011中提供的數據管理功能完成數據的導入,有興趣的同學可以看《
MS CRM 2011 RC中的新特性(8)—數據管理》進行了解。
??? 在實際應用中,很多時候,我們都面臨著一個數據文件包含多個實體記錄的情況。如果不經加工處理,直接利用“數據導入”功能進行導入,那么,是無法達到我們的目標的。下面是測試過程和結果。
??? 首先,設定數據文件“省份.csv”,該文件中的數據內容如下表所示。
| 省份名稱 | 負責人 | 城市名稱 |
| 廣東 | 廣州 | |
| 廣東 | 深圳 | |
| 河北 | 石家莊 | |
| 河北 | 秦皇島 |
??? 點擊Ribbon工具條的導入按鈕,啟動“導入數據向導”,在“上載數據文件”頁面設定“數據文件名”為”省份.csv”文件,在“選擇數據映射”頁面中,選擇“默認(自動映射)”作為本次導入的數據映射,如下圖所示
??? 點擊“下一步”按鈕,進入“映射字段”頁面,你會看到在左側的“CRM記錄類型”列表中,只出現了“省份”,而沒有“城市”,那么也就意味著源文件中的城市數據是無法導入進CRM系統的,而且,由于系統在導入時,認為csv文件中每一條數據對應一條省份記錄,所以,系統不會認為記錄中出現了重復,最終的導入結果就是省份多了四條記錄,分別是兩條“廣東”,兩條“河北”,顯然,這是不能夠接受的,那么如何解決這個問題呢?
??? 第一個方法,笨方法——將文件進行分割,然后逐個實體數據的導入。無疑這是非常繁瑣的事情,不過也可以解決問題;
??? 第二個方法,建立數據映射文件,而后在導入時,選擇該數據映射為當前導入所使用的映射。從而可以幫助系統識別出數據文件中包含的所有實體類型。下面是具體的步驟。
??? 首先,創建數據映射,點擊“設置”—> “數據管理”-->“數據映射”,系統將會顯示數據映射列表。很不幸的,截至我現在使用MS CRM 2011 RTM版本,還沒有開放數據映射的創建入口,在Grid上方的工具條中沒有“新建”這個按鈕,只有“導入”按鈕。如下圖所示。
??? 沒有辦法,只好手動創建一個數據映射文件,而后導入到系統中了。
??? 創建數據映射文件的步驟如下:
??? 打開Visual Studio 2010,點擊“文件”> “新建”>“文件”,在彈出的模板分類中選擇“常規”,在右側的模板列表中選擇“XML文件”,如下圖所示。
??? 點擊“打開”按鈕,返回編輯界面。xml文件創建好了,那么映射文件的架構內容在哪里呢?經過作者一番查找,原來位于crm站點的_resources文件夾下,該架構文件的名稱為“ImportMapSchema.xsd”。好,下面借助這個架構文件,可以了解數據映射文件中到底有哪些內容,以指導我們編寫映射文件。
??? 通過分析架構文件,可以得出映射文件的大致結構是這樣子的:
<Map Name="映射文件的名稱">
? <EntitiesPerFile>數據文件是否包含多個實體數據</EntitiesPerFile>
? <Description>描述文字</Description>
? <EntityMaps>
??? <EntityMap TargetEntityName="CRM系統中的實體架構名稱" SourceEntityName="顯示在導入向導‘映射字段’頁面左側CRM記錄類型列表中的名稱" Dedupe="進行重復檢測時的處理方式">
?????? <AttributeMaps><AttributeMap>…</AttributeMap></AttributeMaps>
??? </EntityMap>
? </EntityMaps>
</Map>
其中,
- Name="映射文件的名稱",代表了該映射的顯示名稱,那么無論是在數據映射列表還是導入向導的“選擇數據映射”頁面中,都會以該設定值顯示此數據映射;
- <EntitiesPerFile>數據文件是否包含多個實體數據</EntitiesPerFile>,在架構文件中,對該屬性的描述為
<xs:simpleType name="EntitiesPerFileEnum">
? <xs:restriction base="xs:string">
??? <xs:enumeration value="Single" />
??? <xs:enumeration value="Multiple" />
? </xs:restriction>
</xs:simpleType>
也就是說,一個數據文件中,每行可以只包含一個實體的數據,也可以包含多個實體的數據。使用Multiple值標明當前數據文件包含了多個實體的數據;
- <Description>描述文字</Description>,描述文字,不多說了;
- TargetEntityName="CRM系統中的實體架構名稱",當前文件中數據所對應的CRM系統中的實體名稱,如果有多個實體,那么就需要創建多個<EntityMap>節點;
- SourceEntityName="顯示在導入向導‘映射字段’頁面左側CRM記錄類型列表中的名稱",一個能夠準確反映文件中數據的名稱;
- Dedupe="進行重復檢測時的處理方式",該屬性的定義如下:
<xs:simpleType name="DedupeEnum">
? <xs:restriction base="xs:string">
??? <xs:enumeration value="Ignore" />
??? <xs:enumeration value="Eliminate" />
? </xs:restriction>
</xs:simpleType>
??? 從定義中可見,如果檢測到了重復性數據,可以使用的操作包括有忽略Ignore,以及清除Eliminate。
??? 在單實體數據文件中,一般而言都是選擇清除。那么對于多實體數據文件,如何處理呢,很明顯,多實體數據文件中,很大的可能是主實體數據會出現重復,這一點很容易理解,我不多說了。
??? 而子實體數據出現的重復,可能未必是真正的重復,為什么這么說呢,因為子實體是依附于主實體的,舉例來說,北京市有朝陽,而遼寧省也有朝陽,顯然,這兩個地方并非重復記錄,而是兩條不同的記錄,所以,對于子實體不能夠使用清除Eliminate。
??? 對于AttributeMaps節點以及其下的子節點,是為了導入向導的映射字段時使用的,若此時不進行設置,在向導的字段映射界面,也可以進行設置,為了簡單起見,我就不設置了。
??? ok,通過上面的分析、研究,最后形成的映射文件的內容如下:
<Map Name="針對省份以及城市的數據映射">
? <EntitiesPerFile>Multiple</EntitiesPerFile>
? <Description>我做的一個樣例以及測試</Description>
? <EntityMaps>
??? <EntityMap TargetEntityName="new_city" SourceEntityName="城市" Dedupe="Ignore">
??? </EntityMap>
??? <EntityMap TargetEntityName="new_province" SourceEntityName="省份" Dedupe="Eliminate">
??? </EntityMap>
? </EntityMaps>
</Map>
??? 將該文件保存為“針對省份以及城市的數據映射.xml”。
??? 點擊“數據映射”列表工具條中的導入按鈕,導入該映射文件。如下圖所示。
??? 接下來,點擊Ribbon工具條的“導入數據”按鈕,導入“省份.csv”文件,在“選擇數據映射”頁面,可以看到最下方,我們剛剛導入的數據映射已經赫然在列了。如下圖所示。
??? 點選該映射,點擊“下一步”,進入“映射字段”頁面。此時,左側的CRM記錄類型列表中,不再是“省份”一條記錄,而是“省份”、“城市”兩條記錄了。如下圖所示。
??? 設定“城市”的映射字段,如下圖所示。
??? 設定“省份”的映射字段,如下圖所示。
??? 一路“下一步”下去,直至提交。
??? 轉到“工作區”-->“導入”,查看導入結果。
總結
以上是生活随笔為你收集整理的MS CRM 2011中,对于多实体数据文件的导入的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 默认路由-静态路由-动态路由
- 下一篇: 快速消费品行业的营销费用的管理(2)--