1. 程式人生 > 其它 >Microsoft Dynamics 365 微軟CRM 匯出資料字典 表結構

Microsoft Dynamics 365 微軟CRM 匯出資料字典 表結構

背景

dynamics 365 是在系統上建立實體(表/檢視), 並不是直接在資料庫操作, 以至於, 我們在檢視/直連資料庫的時候要檢視某個欄位是做什麼的非常不方便.

思路

博主不止一次被公司其他部門索要資料字典, 但是dynamics 365並沒有一個好用的可以匯出資料字典的方式, 但是發現檢視基本都是儲存在 MetadataSchema.XXX 表裡

  • MetadataSchema.Entity 儲存表/檢視
  • MetadataSchema.Attribute 儲存欄位
  • MetadataSchema.AttributeTypes 儲存資料型別
  • MetadataSchema.LocalizedLabel 儲存欄位備註
  • StringMap 儲存多選/單選的值和對應說明

需要注意的是以上表都是一對多,由於版本, 是否釋出等多種原因,可能查出來有重複的資料, 需要注意篩選, 如果可以, 也非常希望各位持續優化, 由於並沒有找到官方對應的文件, 基本都是自己摸索, 持續優化中

於是思路是通過SQL語句查詢生成資料字典

博主使用的Microsoft Dynamics 365版本是 1612 (9.0.24.8) (DB 9.0.24.8) (本地), 不同的版本可能資料結構不一定相同, 可能需要看情況優化

SQL語句

SELECT ent.BaseTableName             AS '表名',
       ent.Name                      
AS '檢視名', ent.OriginalLocalizedName AS '表說明', attr.Name AS '欄位名', tps.Description AS '欄位型別', attr.Length AS '欄位長度', CASE attr.IsNullable WHEN 1 THEN '' ELSE '' END AS
'是否必填', attr.DefaultValue '預設值', CASE attr.IsCustomField WHEN 1 THEN '' ELSE '' END AS '是否為自定義欄位', CASE attr.IsPKAttribute WHEN 1 THEN '' ELSE '' END AS '是否為主鍵', (SELECT TOP 1 lab.Label FROM MetadataSchema.LocalizedLabel AS lab WHERE attr.AttributeId = lab.ObjectId ORDER BY lab.LabelTypeCode) AS '欄位說明', CASE WHEN tps.Description NOT IN ( 'picklist', 'state', 'status', 'multiselectpicklist' ) THEN '' ELSE Stuff((SELECT ',' + CONVERT(VARCHAR(100), sm.AttributeValue) + ':' + sm.Value FROM StringMap sm WHERE ent.ObjectTypeCode = sm.ObjectTypeCode AND attr.Name = sm.AttributeName FOR XML PATH('')), 1, 1, '') END AS '選項說明' FROM MetadataSchema.Entity AS ent JOIN MetadataSchema.Attribute AS attr ON ent.EntityId = attr.EntityId JOIN MetadataSchema.AttributeTypes AS tps ON attr.AttributeTypeId = tps.AttributeTypeId WHERE ent.Name IN ( 'new_store' ) --篩選表名 --AND attr.IsCustomField = 1 --篩選自定義欄位 ORDER BY ent.Name, attr.Name

結果