前言¶
做 Dynamics 365 CE / Dataverse 項目的團隊,日常卡頓通常不是寫不出代碼,而是拿不到環境信息:這個解決方案導到 SIT 會不會壓掉別的方案的定製,某個字段被哪些表單和視圖引用,兩個環境的同一張表單爲什麼不一樣,這次 MR 部署到 UAT 會不會出事。在自己電腦上跑腳本、翻 Power Platform 管理中心,或者手寫 Power Platform CLI 命令,都屬於「能做但很碎」。
下面介紹的 dsh-d365-kit 是維護者 iTanzhao 發佈的一個 DeepSeek Harness(DSH)插件 bundle,專門把這些查詢交給 DSH 智能體去做。它默認只讀,未授予能力時智能體只能看、不能改。
這是什麼¶
一句話定位:dsh-d365-kit 是 Dynamics 365 CE / Dataverse 的開發與部署助手,以 DSH bundle 形式安裝,把一個真實的 D365 組織變成智能體可以直接查詢的對象——元數據、解決方案分層、快照差異、引用關係、遷移風險、代碼改動影響,以及受控制的寫入。
用戶提供 URL、租戶、ClientId 和 secret,插件通過 Dataverse 接口訪問環境;智能體看到的是結構化的工具調用結果,而不是需要人肉解析的網頁或導出文件。
README 裏給的定位是十五個工具、一個設置頁,只讀爲默認。
核心功能¶
連接與環境¶
| 工具 | 作用 |
|---|---|
d365_envs |
環境清單,檢查憑據是否完整;帶 check: true 時實際連一次 |
d365_configure |
新增/編輯/刪除環境(URL、tenant、ClientId、secret),測試連通性 |
d365_health |
掛起或失敗的後臺作業、正在導入發佈的任務、近期安裝的解決方案 |
元數據與解決方案分層¶
d365_metadata:覆蓋 19 種資源類型,包括實體、屬性、關係、表單、視圖、工作流、業務規則、插件、Web 資源、解決方案、組件、Custom API、站點地圖、選項集。d365_layers:讀取msdyn_componentlayer,回答某個組件被哪些解決方案覆蓋、哪一層在最上面、當前生效的是哪一層。
快照與差異¶
d365_sync:把環境的元數據拉成本地快照,逐個資源記錄「complete / truncated / failed」。d365_diff:兩個快照之間的字段級差異(新增、刪除、修改),帶噪聲過濾和過期快照提醒。
影響分析與數據¶
d365_refs:反向查找。字段指向哪些表單/視圖/流程,Web 資源被哪些表單和事件引用,程序集對應哪些類型和步驟。d365_data:業務記錄的 count / group by / sample,需要data.read能力。d365_data_write:創建或更新單條業務記錄,對話中確認後才執行,需要data.write能力。
寫入¶
d365_write 支持新增、更新、刪除選項值和字段,重命名表,增刪系統視圖列。plan-* 動作只產出計劃,execute 需要人工確認,事後有可查詢的審計記錄。
遷移與檢查¶
d365_migrate:解決方案遷移風險評估,覆蓋分層遮蔽、缺失組件、選項值丟失、版本和 managed 狀態。d365_contract:合約矩陣與漂移,比較程序集、插件類型、步驟、表單庫、handler、站點地圖、選項值,支持豁免和趨勢。d365_code_check:讀取 GitLab MR,把 JS / C# 改動映射到目標環境,報告 blocker / warning / 需人工確認。JS 改動對應到 Web 資源和表單,C# 改動對應到程序集/類型/步驟/圖像。
運維¶
d365_reports:本地產物和磁盤佔用,按保留策略清理(默認 dry run),快照壓縮。
設置頁¶
DSH Web UI 的「設置 → D365 Toolkit」,共六個標籤頁:
- Environments:環境清單、連接測試、默認環境
- Permissions:按環境勾選能力(讀業務數據 / 各類寫入)、變更使用的解決方案、複製到其他環境
- Plans:待確認的寫入計劃、近期變更記錄和發佈結果(可重新發布)
- Data:各類產物的文件數、大小、保留策略,dry run 與清理,快照壓縮
- GitLab:倉庫地址、默認項目、只讀 token(
read_api) - General:保留快照數、默認行數上限、請求超時
界面語言跟隨 DSH(中/英)。環境清單和 d365_configure 走同一套存儲代碼,因此界面顯示和智能體讀取的結果一致。
安裝與啓用¶
前置條件:DSH 桌面端;能訪問 *.dynamics.com;一個只讀應用用戶(ClientId + secret)。
# 從 npm 安裝(最短路徑,可升級;包發佈後可用)
plugin_manager install_bundle target="dsh-d365-kit@0.22.1"
# 從 Git 安裝(不需要 registry,可固定 tag)
plugin_manager install_bundle target="git+https://<your-git>/<group>/dsh-d365-kit.git#v0.22.1"
# 從本地目錄安裝(link 模式,代碼改動立即生效)
plugin_manager install_bundle target="D:\path\to\dsh-d365-kit"
dsh-d365-kit@<版本> 從 npm registry 解析;單獨的 GitHub 倉庫要用 git+https:// 形式。倉庫自帶 .github/workflows/publish.yml,配置好 NPM_TOKEN 後,推 v* tag 就會發布到 npm。
裝完重啓一次 DSH,讓 Web 客戶端把設置頁代碼加載進模塊圖。然後在 設置 → D365 Toolkit → Environments 裏添加環境(key、URL、tenant、ClientId、secret),測連接後保存。默認只讀;需要讀業務記錄時,在 Permissions 下勾「Read business data」。
典型用法¶
1. 部署前評估解決方案¶
What are the risks of shipping this solution to SIT and UAT?
d365_migrate action=assess source=dev solution=ContosoBase targets=["sit","uat"]
報告回答:目標環境是否已有該解決方案、源版本是否更高、每個組件上誰的層會壓住誰(列出被遮蔽的解決方案)、選項集是否會丟值。結果落在 .d365/reports/migration-*.md。
2. 這個字段能不能刪¶
Who else still uses account.contoso_customertier? Also check how many records carry a value.
d365_refs kind=field entity=account attribute=contoso_customertier
d365_data action=group entity=account field=contoso_customertier
3. 兩個環境爲什麼不同¶
d365_sync environments=["dev","sit"]
d365_diff base=dev head=sit resources=["forms","views","attributes"]
d365_layers component=Account componentType=SystemForm
先拉兩個環境的快照,再做字段級差異,最後看這個組件被誰覆蓋。
4. MR 能不能上 UAT¶
d365_code_check mergeRequest="https://gitlab.example.com/contoso/powerapps/-/merge_requests/7759/diffs" targets=["uat"]
適用場景與注意¶
適合已經在用 DSH、並且需要頻繁跨環境對比和評估 D365 方案的人:解決方案分層遮蔽判斷、字段刪除前的影響面、跨環境差異定位、MR 部署前檢查、上下游插件註冊漂移。
幾點需要留意:
- 插件以當前 DSH 進程的權限運行,安裝前應檢查源碼(倉庫爲 MIT License,可直接看)和許可證,確認沒有超出預期的讀取範圍。
- 寫入類能力默認不授予,需要顯式在 Permissions 裏勾選,而且
execute要人工確認。請把只讀憑據和寫入憑據分開管理。 - 元數據拉取和業務數據讀取受網絡與行數上限影響,快照可能被標記爲 truncated,發佈前先看
d365_sync的記錄狀態。 - 聯網工具的可用性取決於
*.dynamics.com的網絡通路和憑據有效性。
結尾¶
dsh-d365-kit 的價值在於把 D365 環境裏那些需要反覆人工查詢的信息變成智能體可調用的工具,並且把寫操作擋在人類確認之後。功能面較廣,實際用起來通常從只讀診斷開始。
目錄頁:https://www.skillhub.cn/plugins/iTanzhao/dsh-d365-kit
GitHub:https://github.com/iTanzhao/dsh-d365-kit