建立修補程式以簡化解決方案更新

如果您將實體新增至解決方案,且匯出該解決方案,則該解決方案中的實體和所有其相關資產都會匯出。 這些資產包括屬性、表單、檢視表、關聯和視覺效果,以及與實體一起封裝的所有其他資產。 匯出所有物件表示您可能不小心修改目標部署上的物件,或攜帶非預期的相依性。

若要解決此情況,您可以建立和發行解決方案修補程式,當中包含實體的子元件,而不發行整個實體及其所有資產。 原始解決方案和一或多個相關的修補程式可以在稍後彙總 (合併) 至解決方案的更新版本,以取代目標 Microsoft Dataverse 組織中的原始解決方案。

修補程式

您可以將修補程式套用至受管理或未受管理的解決方案,並且僅包含實體的變更和相關的實體資產。 修補程式不包含任何非自訂的系統元件或它所相依的關聯,因為這些元件已存在做為部署目標的組織中。 在您開發週期的某個時間點,您可以將所有修補程式彙總至新的解決方案版本中,以取代建立修補程式所在的原始解決方案。

修補程式會儲存在 Dataverse 資料庫中做為 Solution 實體記錄。 非 null ParentSolutionId 屬性表示解決方案為修補程式。 修補程式可透過 .NET 或 Web API 的 SDK 建立和管理,對於開發自動化非常實用,例如產品安裝指令碼。 不過,Dataverse Web 應用程式提供各種 Web 表單,可讓您互動建立和管理修補程式。

  • 修補程式只能從上層解決方案建立,使用 CloneAsPatchRequestCloneAsPatch 動作

  • 修補程式上層不可以是修補程式。

  • 修補程式只能有一個上層解決方案。

  • 修補程式會在其上層解決方案上建立相依性 (解決方案層級)。

  • 如果上層解決方案存在,才能安裝修補程式。

  • 您無法安裝修補程式,除非上層解決方案的唯一名稱和主要/次要版本號碼 (如 ParentSolutionId 所識別) 不符合安裝在目標組織中的上層解決方案的這些項目。

  • 修補程式版本必須擁有相同的主要和次要號碼,但組建或發行號碼必須高於上層解決方案版本號碼。 顯示名稱可以不同。

  • 如果解決方案為修補程式,後續修補程式的版本號碼必須高於該解決方案的任何現有修補程式。

  • 修補程式與解決方案支援相同的作業,例如新增更新,但不可移除。 您無法使用修補程式移除解決方案中的元件。 若要移除解決方案中的元件,請執行升級。

  • 修補程式匯出為受管理時,必須匯入至受管理上層解決方案之上。 規則為修補程式保護 (受管理或未受管理) 必須符合其上層。

  • 不要將未受管理的修補程式用於實際生產。

  • 修補程式僅在 8.0 版或更新版本的 Dataverse 組織中支援。

    此版支援解決方案修補程式中的 SolutionPackager 和 PackageDeployer 工具。 請參閱工具的線上說明,了解任何與修補程式相關的命令列選項。

建立修補程式

使用 CloneAsPatchRequest 訊息或 CloneAsPatch 動作,或是使用 Web 應用程式從組織中的未受管理解決方案建立修補程式。 您建立修補程式後,原始解決方案便會鎖定,您無法變更或將它匯出,只要組織中有相依的修補程式將解決方案識別為上層解決方案。 修補程式版本管理類似解決方案版本管理,並以下列格式指定:major.minor.build.release。 當您建立修補程式時,無法變更現有的主要或次要解決方案版本。

匯出及匯入修補程式

您可以使用 .NET 或 Web API 的 SDK、Web 應用程式,或是 Package Deployer 工具匯出和匯入修補程式。 相關 .NET 要求類別的 SDK 包括 ImportSolutionRequestExportSolutionRequest。 Web API 的相關動作為 ImportSolution 動作ExportSolution 動作

修補範例

下表列出修補範例的詳細資料。 請注意,在此範例中,解決方案和修補程式會依數字順序匯入並且累加,大致與解決方案匯入相同。

修補程式名稱 描述
解決方案 A,1.0 版(未受管理) 包含有 6 個欄位的 A 實體。
解決方案 A,1.0.1.0 版(未受管理) 包含有 6 個欄位的 A 實體 (3 個已更新),並新增有 10 個欄位的 B 實體。
解決方案 A,1.0.2.0 版(未受管理) 包含有 10 個欄位的 C 實體。

匯入程序如下。

  1. 開發人員或自訂員首先會先將基礎解決方案(解決方案 A 1.0)匯入至組織。 結果是組織內有6 個欄位的 A 實體 。

  2. 接著匯入解決方案 A 修補程式 1.0.1.0。 組織現在包含有6 個欄位的 A 實體(3 個已更新),再加上有10 個欄位的 B 實體 。

  3. 最後匯入解決方案 A 修補程式 1.0.2.0。 組織現在包含有 6 個欄位的 A 實體(3 個已更新)、 有 10 個欄位的 B 實體,再加上有 10 個欄位的 C 實體。

另一個修補範例

讓我們來看看另一個修補範例,下表列出詳細資料。

修補程式名稱 描述
解決方案 A,1.0 版 (未受管理,基礎解決方案) 包含 Account 實體,其中客戶編碼欄位的長度從 20 個字元調整為 30 個。
解決方案 B,2.0 版(未受管理,不同廠商) 包含 Account 實體,其中客戶編碼欄位的長度已調整為 50 個字元。
解決方案 A,1.0.1.0 版(未受管理,修補程式) 包含 Account 實體的更新,其中客戶編碼欄位的長度已調整為 35 個字元。

匯入程序如下:

  1. 開發人員或自訂員首先會先將基礎解決方案(解決方案 A 1.0)匯入至組織。 結果為 Account 實體,其中客戶編碼欄位為 30 個字元。

  2. 已匯入解決方案 B。 現在組織包含 Account 實體,其中客戶編碼欄位為 50 個字元。

  3. 已匯入解決方案 A 修補程式 1.0.1.0。 現在組織仍包含 Account 實體,其中客戶編碼欄位為 50 個字元,如解決方案 B 所套用。

  4. 已解除安裝解決方案 B。 現在組織包含 Account 實體,其中客戶編碼欄位為 35 個字元,如解決方案 A 1.0.1.0 修補程式所套用。

刪除修補程式

您可以使用 DeleteRequest 或 (針對 Web API) 使用 HTTP DELETE 方法刪除修補程式或基礎 (上層) 解決方案。 組織中有一個或多個修補程式的受管理和未受管理解決方案的刪除程序不同。

若是未受管理的解決方案,您必須先解除安裝基礎解決方案的所有修補程式,依照建立版本的相反順序,再解除安裝基礎解決方案。

若是受管理的解決方案,您只要解除安裝基礎解決方案。 Dataverse 系統會先依版本的相反順序自動解除安裝修補程式,再解除安裝基礎解決方案。 您也可以只解除安裝單一修補程式。

更新解決方案

更新解決方案包含彙總 (合併) 該解決方案的所有修補程式到新版的解決方案中。 之後,該解決方案會解除鎖定,並且可再次修改 (僅限未受管理的解決方案) 或匯出。 若是受管理的解決方案,則無法進一步修改解決方案。除非是從剛更新的解決方案建立修補程式。 若要將修補程式彙總到未受管理的解決方案中,請使用 CloneAsSolutionRequestCloneAsSolution 動作。 再製解決方案會建立新的未受管理解決方案版本,納入其所有修補程式,使用更高的 major.minor 版本號碼,相同的唯一名稱及顯示名稱。

若是受管理的解決方案,處理的方式稍有不同。 首先再製未受管理的解決方案 (A),納入其所有的修補程式,然後將它匯出為受管理的解決方案 (B)。 在包含受管理版本的 (A) 解決方案及其修補程式的目標組織中,匯入受管理的解決方案 (B),然後執行 DeleteAndPromoteRequestDeleteAndPromote 動作 將受管理的解決方案 (A) 及其修補程式取代為版本號碼較高之升級的受管理解決方案 (B)。

請參閱

使用分割的解決方案