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 

 

結果

 

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