移除相依性概觀
解決方案元件通常取決於其他解決方案元件。 您無法刪除任何有其他解決方案元件相依性的解決方案元件。 相依性是由解決方案框架自動建立的記錄,用來防止必要元件被移除,而另一或多個相依元件仍包含對它們的參照。 相依性的範例如下:表單跟函式間依需求已建立一個欄位,但如果您嘗試執行的動作會導致刪除該欄位,則表單將會停止工作。
Note
在此文章中,刪除表示該元件從系統中完全移除。
在本文中,我們將討論如何處理這些相依性及可用來移除不再需要之相依性的原則。
未受管理的和受管理的元件之相依性
首先,必須瞭解相依性只會防止會刪除必要元件的作業。 會刪除元件的動作不盡相同,視元件為未受管理的或受管理的而異。
未受管理的元件
這些元件由活動解決方案中的單一層表示。 任何刪除這類元件的作業都會導致元件完全被移除。
受管理的元件
要刪除受管理的元件,受多個因素影響:解決方案層級數目、要卸載之層級的相對位置,以及元件的發行者。 例如,當您刪除元件時,請思考下列案例,以及當您卸載不同層時,將會出現什麼行為。
範例案例
下列範例案例闡釋卸載解決方案時,解決方案層會發生的變化。
案例 1:卸載單一的解決方案層
卸載解決方案 1 會造成元件的移除,因為它是元件的唯一層。
案例 2:從不同的發行者卸載解決方案層
- 卸載解決方案 2 並不會造成元件的移除。 只有那層會被移除。
- 卸載解決方案 1 會造成元件的移除,因為動作發生在最底層。 事實上,無法在此案例中卸載解決方案 1,因為有不同發行者的解決方案會延伸至元件。
案例 3:從不同的發行者卸載多個解決方案層
- 卸載解決方案 3 並不會造成元件的移除。 只有那層會被移除。
- 卸載解決方案 2 並不會造成元件的移除。 只有那層會被移除。
- 卸載解決方案 1 並不會造成元件的刪除,因為在此案例中,有來自相同發行商的另一個解決方案(發行者 A = 發行者 C)。 該平臺會從解決方案 1 移除層,並將它替換為解決方案 3 中的層。
案例 4:在未受管理的自訂中卸載解決方案層
- 卸載現行的(未受管理的)層不會造成元件的移除。 只有那層會被移除。 請注意,您無法卸載現行的解決方案,但是您可以使用移除現行自訂功能來移除元件 。
- 卸載解決方案 1 會造成元件的移除。 此動作發生在最底層中。 與案例 2 不同,您可以卸載解決方案 1。 現行的解決方案不會被視為擴充,而且這兩層都會被移除。
顯示相依性頁面
顯示相依性命令會列出所選解決方案或解決方案元件的相依性。 它可以用來調用:
- 在解決方案頁面上選取顯示相依性。
- 選擇解決方案元件時,選擇解決方案中的進階>顯示相依性。
- 嘗試卸載解決方案,將會導致平臺偵測到相依性。
從「相依性」頁面中,您可以開啟、移除或刪除該元件。 其他資訊:查看元件的相依性
診斷相依性
讓我們試想以下情況。 下列組織有兩種解決方案:解決方案 - 工作流程與解決方案 - 自訂實體。
組織的負責人決定他們不再需要解決方案 -自訂實體,嘗試將它刪除,並於下列頁面中顯示:
不需深入瞭解詳細資料,我們就可以總結解決方案的卸載正在嘗試刪除名為自訂實體的實體和三個欄位 (自訂實體、名稱及數量欄位),而且四個元件間全都有相依性。
Note
卸載解決方案可能會刪除更多元件,但因為它們不具有相依性,所以不會出現在清單中。
下一個步驟是檢查每個相依性的解決方案層連結(最右邊的欄)。 這將幫助您決定要如何移除相依性。
下圖顯示實體(自訂實體)與程序(測試工作流程)之間的相依性詳細資料。
根據顯示的資料,您可以看到相依元件屬於一個名為 SolutionWorkflow 的解決方案。 若要移除此相依性,我們可以執行下列其中一項:
- 藉由移除對實體或其子元件的任何參照,以更新 SolutionWorkflow 中的工作流程定義。 然後更新或升級解決方案。
- 解除安裝 SolutionWorkflow 解決方案。
- 從新版本的 SolutionWorkflow 解決方案中移除工作流程,然後執行升級。
因為任一相依元件都能防止移除解決方案,所以建議您檢查所有相依性,並在單一作業中進行所有必要的變更。
下圖顯示實體(自訂實體)與模型導向應用程式(我的應用程式)之間的相依性詳細資料。
根據顯示的資料,您可以看到相依元件屬於一個名為 Active 的解決方案。 這表示該相依性是透過匯入未受管理的解決方案或透過現代 UI 或 API 執行的未受管理自訂所建立的。
若要移除此相依性,您可以執行下列其中一項:
- 編輯模型導向應用程式的定義,以移除實體或其子元件的任何參照。 因為模型導向的應用程式支援發行,所以您必須發佈變更。
- 刪除模型導向的應用程式。
Note
卸載未受管理的解決方案不是移除此相依性的選項,因為未受管理的解決方案只是將元件分組的一種方式。
移除受管理之相依性的動作
受管理的相依性是相依元件與受管理的解決方案連結的位置。 若要解決這種相依性,您必須在新增元件的解決方案上執行動作。 該動作可能會有所不同,視您的嘗試作為而定。
如果您嘗試卸載解決方案
執行下列步驟:
- 在目標組織中,檢查解決方案層連結,以尋找相依元件清單中的最頂端解決方案。
- 在來源組織中,準備新版本的解決方案,其中解決方案不包含相依元件,或是擁有不參照必要元件的相依元件更新版本。 您的目標是在新版本的解決方案中移除對必要元件的所有參照。
- 匯出解決方案的新版本。
- 在目標組織中,升級該解決方案。
- 重新嘗試解除安裝。
如果您嘗試升級解決方案
在此案例中,您必須確認您想要刪除必要元件(切記只有在要刪除的元件上才會強制執行相依性)。
如果您不想要刪除元件,可以執行下列動作重新將元件加回,以修正解決方案的新版本:
- 在目標組織中,卸載分段解決方案(用 _Upgrade 結尾的解決方案)。
- 在來源組織中,將必要元件加回解決方案。
- 匯出新版本。
- 重新嘗試升級。
如果是有意進行的刪除,您必須移除該相依性。 嘗試使用上一節「如果您嘗試卸載解決方案」中列出的步驟。
層數與相依性
相依元件可以分層,因此您可能需要變更一個以上的解決方案,才能完全移除相依性。 相依性框架只會計算必要和相依元件最頂層間的相依性關係。 這表示從相依元件解決方案的最頂端到最底端,您都需要作業。
請參考下列案例:
您嘗試卸載解決方案 - 自訂實體,而該作業因相依性而受阻。
您可以透過選取解決方案層上的 new_numberfield 屬性,開始診斷相依性。 您可以參閱下列畫面:
因為相依性只會在每個元件間的最頂層建立,所以第一個步驟是處理 SolutionCustomEntity 中的 new_numberfield 屬性與 SolutionWorkflow3 中的測試工作流程工作流程之間的相依性。
為了移除相依性,您決定要卸載 SolutionWorkflow3。 您這麼做了,但是當您嘗試再次卸載該解決方案時,會看到相同的相依性頁面:
但是,不會再列出 new_numberfield 屬性,即使該屬性出現在多層也一樣。
移除未受管理之相依性的動作
若要移除非未受管理的相依性,您必須直接在元件上執行,而不是在其所屬的解決方案中執行。 例如,如果您要移除屬性與表單之間的相依性,您必須在表單編輯器中編輯該屬性,然後從表單移除屬性。 選取儲存和發佈後,就會移除該相依性。
注意
- 顯示相依性命令可讓您執行動作以檢視、移除相依性、編輯元件或刪除元件。 其他資訊:查看元件的相依性
- 您也可以刪除相依元件。 該動作會隨元件一起刪除所有相依性。
若要檢視元件的相依性,請從解決方案區域打開所需的解決方案,選擇元件旁邊的垂直省略符號,然後選擇進階>顯示相依性。
相依性頁面有兩個截然不同的部分:
- 相依元件:根據選取之欄位而定的元件清單。 換言之,這些元件會將此欄位設定為其必要元件。
- 必要元件:此欄位要運作所必須的元件清單。 換言之,這些元件會將此欄位設定為其相依元件。