維護良好的模型導向應用程式表單 ALM
本文提供各種案例的相關資訊,說明如何執行和實踐良好的應用程式生命週期管理 (ALM),以在模型導向應用程式解決方案中自訂表單。
以下各節描述表單合併的運作方式,以及如何維護自訂。 以下各節將詳細說明為模型導向應用程式表單成功維護 ALM 的基本開發案例。 每個案例都包括要遵循的步驟,可幫助您在更新解決方案或模型導向應用程式時,執行適當的 ALM 程序。
請遵循以下步驟,為此案例執行良好的表單 ALM。
- 在您的開發環境中建立名稱為 FormA 的新表單,並在表單上執行自訂。
- 在開發環境中建立新的解決方案 (在下圖中命名為解決方案 A),這將是未受管理的解決方案,並新增您的新表單。 將解決方案匯出為受管理的解決方案。 此步驟會匯出表單的完整 FormXml。
- 在您的測試環境中,匯入步驟 2 中的受管理解決方案,這會在測試環境中建立 FormA。 在下圖中,測試環境中已建立 FormA,表單的 UI 顯示解決方案 A 新增到表單的 Field1 和 Field2。
- 當您使用新的開發 (來源) 環境進一步自訂步驟 1 中所建立的表單時,請匯入步驟 2 中所建立的託管解決方案 A,確定您使用的開發實例具有 FormA 受管理狀態。 如下圖所示,開發環境已匯入受管理的解決方案 A,並自訂表單以建立活動自訂。 然後,FormA 可新增至新的為受管理解決方案 (圖中的解決方案 B),並從開發環境中匯出為受管理的解決方案。 此步驟會匯出表單的差異 (diff) FormXml。
- 在您的測試環境中,從步驟 4 匯入受管理的解決方案 (解決方案 B)。 如下圖所示,解決方案 B 在 FormA 中新增了新的 Field3 ,並移除由解決方案 A 新增的 Field2。在測試環境中,表單的 UI 現在會在表單上顯示 Field3 和 Field1,但不會在合併之後顯示 Field2。
如下圖所示,從基本解決方案 (解決方案 A) 處於為未受管理狀態的開發環境中建立多個受管理解決方案,並不是一種良好的 ALM 作法。 這是因為,當您為未受管理的表單建立另一個未受管理的解決方案 (解決方案 B) 時,FormXml 會匯出為完整的 formxml,而不是上述有效案例中所示的差異 formxml。 接著,像移除資料行這類的變更將不會生效。
請遵循以下步驟,為此案例執行良好的表單 ALM。
在您的開發環境中建立名稱為 FormA 的新表單,並在表單上執行自訂。
建立解決方案 (下圖中的解決方案 A),這將是未受管理的解決方案,並新增您的新表單。 將解決方案匯出為受管理的解決方案。 此步驟會匯出表單的完整 FormXml。
在您的測試環境中,匯入步驟 2 中的受管理解決方案,從而在測試環境中建立表單。 在下圖中,測試環境中已建立 FormA,表單的 UI 顯示解決方案 A 新增到表單的 Field1 和 Field2。
當您使用修補程式進一步自訂在步驟 1 中建立的表單時,請使用解決方案 A 處於未受管理狀態的相同環境,並為解決方案建立修補程式和自訂表單。 接著,將修補程式匯出為受管理的解決方案。 此步驟會匯出表單的完整 formXml。
在您的測試環境中,從步驟 4 匯入受管理的修補程式解決方案。 如下圖所示,解決方案 A 修補程式在 FormA 中新增了一個新的 Field3,並移除了由解決方案 A 新增的 Field2。
注意
包含完整 formXml 的修補程式會與建立修補程式的基礎層進行比較,並忽略任何基礎和目前修補程式之間的中繼修補程式。 因此,由於已存在於基礎層解決方案 A中,所以會移除 Field2,並偵測到移除。 另一方面,Field3 是由此修補程式解決方案新增的,而且不能透過後續修補程式移除。 因此,透過修補程式解決方案新增的欄位本質上是相加的。
當您使用更新進一步自訂在步驟 1 中建立的表單時,請使用解決方案 A 處於未受管理狀態的相同環境,並複製解決方案 A 以建立升級解決方案並自訂表單。 然後,將解決方案 A 升級匯出為受管理的解決方案。 此步驟會匯出表單的完整 FormXml。
在您的測試環境中,從步驟 6 匯入受管理的解決方案 A 升級。 如下圖所示,解決方案 A 升級是在 FormA 中新增了新的 Field4,並移除由解決方案 A 新增的 Field2。在測試環境中,表單的 UI 現在會在表單上顯示 Field1、Field3 和 Field4,但 Field2 將在表單從匯入合併後移除。
請遵循以下步驟,為此案例執行良好的表單 ALM。
- 在您的開發環境中編輯現有的受管理表單 (在此範例中名為 FormB),並在表單上執行自訂。 請注意,解決方案 A 是開發環境中為表單安裝的受管理解決方案。
- 建立新的解決方案 (下圖中的解決方案 B),其為未受管理的解決方案,並新增 FormB。 將解決方案匯出為受管理的解決方案。 此步驟會匯出表單的差異 (diff) FormXml。
- 在您的測試環境中,匯入步驟 2 中的受管理解決方案,從而為表單建立第二個解決方案層。 在下圖中,FormB 取得測試環境中 Solution A 和 Solution B 的合併變更,並且表單的 UI 在表單上顯示 Field1 和 Field3,但不顯示 Field2,其已由 Solution B 移除。
- 當您使用新的受管理解決方案進一步自訂在步驟 1 中自訂的表單時,請確定使用新開發環境中具有處於受管理狀態狀態的 FormB。 如下圖所示,解決方案 A 和 解決方案 B 受管理解決方案會匯入新開發環境中。 FormB 是自訂建立的使用中自訂,可將其新增至新的解決方案 (圖中的解決方案 C),並匯出為受管理的解決方案。
- 在您的測試環境中,從步驟 4 匯入受管理的解決方案 C。 如下圖所示,解決方案 C 在 FormB 中新增了新的 Field4 ,並移除由解決方案 B 新增的 Field3。在測試環境中,表單的 UI 現在會在表單上顯示 Field1 和 Field4,但不顯示 Field2 和 Field3。
如下圖所示,從包含您為同一表單建立的另一個未受管理解決方案的開發環境中建立多個受管理解決方案,並不是一種良好的 ALM 作法。 請注意,解決方案 B 處於未受管理狀態。 當您為 FormB 建立另一個未受管理的解決方案 (解決方案 C) 時,FormXml 會匯出為差異 FormXml,就如上述案例的步驟 4 所示。 但是,FormB 也包含來自解決方案 B 的變更,這些變更將會被新的變更覆寫。
例如,如下圖所示,在解決方案 B 中,Field3 新增至 FormB。但現在當您在此環境中建立新的解決方案 C (且解決方案 B 處於未受管理狀態),並移除 Field3 時,也會在開發環境中移除 Field3 。 在匯出解決方案時,將不會在差異 FormXml 中追蹤 Field3,因為新增與移除此資料行的變更是在相同的使用中層中進行的。 這代表在測試環境中匯入受管理的解決方案 C 時,表單仍然會呈現 Field3,因為差異 FormXml 決不會將其記錄為已移除 (就像其在 [良好表單 ALM] 案例中的步驟 5 中移除)。 以這種方式執行表單自訂時,將會導致開發環境與測試環境不一致。
請遵循以下步驟,為此案例執行良好的表單 ALM。
在您的開發環境中自訂現有的受管理表單 (在此範例中名為 FormB),並在表單上執行自訂。 請注意,解決方案 A 是開發環境中為表單安裝的受管理解決方案。
建立解決方案 (解決方案 B),其會是未受管理的解決方案,並新增 FormB。 將解決方案匯出為受管理的解決方案。 此步驟會匯出表單的差異 FormXml。
在您的測試環境中,匯入步驟 2 中的受管理解決方案 B,從而為表單建立第二個解決方案層。 在下圖中,FormB 在測試環境中取得解決方案 A 和解決方案 B 的合併變更。 此外,FormB 的 UI 也會在表單上顯示 Field1 和 Field3,而不是由解決方案 B 移除的 Field2。
當您使用修補程式解決方案進一步自訂您在步驟 1 中自訂的表單時,您可以使用與步驟 1 相同的開發環境,其中解決方案 B處於未受管理狀態。 如下圖所示,解決方案 A 處於受管理狀態且解決方案 B 處於未受管理狀態。 進一步自訂表單,您可以為解決方案 B 建立修補程式,將您的表單新增至此解決方案,並將其匯出為受管理的修補程式解決方案。 此步驟會匯出差異 FormXml。
在您的測試環境中,從步驟 4 匯入受管理的修補程式解決方案 B。 如下圖所示,解決方案 B 修補程式在 FormB 中新增了一個新的 Field4,並移除了由解決方案 B 新增的 Field3。
注意
修補程式本質上是可附加的,無法從表單移除元件,例如資料行。 因此,Field3 將不會從表單中移除。 測試環境中表單的 UI 現在會在表單上顯示 Field1、Field3 和 Field4,但不顯示 Field2。
當您使用更新進一步自訂在步驟 1 中建立的表單時,請使用解決方案 B 處於未受管理狀態的相同環境,並複製解決方案 B 以建立升級解決方案並自訂 FormB。 將更新匯出為受管理的解決方案。 此步驟會匯出表單的差異 FormXml。
在您的測試環境中,從步驟 6 匯入受管理的解決方案 B 更新解決方案。 如下圖所示,解決方案 B 更新 在 FormB 中新增了新的 Field5 ,並移除由解決方案 B 新增的 Field3。在測試環境中,表單的 UI 現在會在表單上顯示 Field1、Field4 和 Field5,但會移除 Field2 和 Field3。
請遵循以下步驟,為此案例執行良好的表單 ALM。
- 在開發環境 1中,建立新的 FormA,並在表單上執行自訂。
- 建立解決方案 (下圖中的解決方案 A),這將是未受管理的解決方案,並新增您的新表單。 將解決方案匯出為未受管理的解決方案。 此步驟會匯出表單的完整 FormXml。
- 在開發環境 2 中,從步驟 2 匯入未受管理的解決方案,這會在開發環境 2 中建立表單。 在下圖中,已建立 FormA,且表單的 UI 顯示解決方案 A 新增到表單的 Field1 和 Field2。
- 您可以進一步自訂開發環境 2 中的表單,在環境中進行使用中的自訂,例如新增名為 Field3 的新資料行。 FormA現在會顯示 Field1、Field2 和 Field3。
- 在您的開發環境 1 中,您也可以透過新增 Field4 進一步自訂表單。 開發環境 1中表單的 UI 現在會顯示 Field1、Field2 和 Field4。
- 將未受管理的解決方案 A 與步驟 5 中所做的變更匯出。 此步驟會匯出表單的完整 FormXml。
- 在開發環境 2中,從步驟 6 匯入未受管理的解決方案 A 升級。 因為您要匯入的解決方案包含 FormA 的完整 FormXml,所以其會覆寫開發環境 1 中的使用中自訂。 因此,該表單現在只會顯示 Field1、Field2和 Field4,而不顯示 Field3,這是在開發環境 1 中完成的其他使用中自訂。 任何具有表單完整 FormXml 的未受管理管解決方案匯入都會發生此行為。
請遵循以下步驟,為此案例執行良好的表單 ALM。
- 在開發環境 1 中,自訂現有的表單 (此範例中名為 FormB)。 然後在表單上執行自訂。
- 建立解決方案 (下圖中的解決方案 B),其會是未受管理的解決方案,並新增 FormB。 將解決方案匯出為未受管理的解決方案。 此步驟會匯出表單的差異 FormXml。
- 在開發環境 2 中,匯入步驟 2 中未受管理解決方案,從而為表單建立第二個解決方案層。 FormB UI 會在表單合併後顯示 Field1、Field2 和 Field3。
- 您可以進一步自訂開發環境 2 中的表單,在環境中進行使用中的自訂,例如新增名為 Field4 的新資料行。 FormB現在會顯示 Field1、Field2、Field3 和 Field4。
- 在開發環境 1 中,您可以進一步自訂表單,新增名為 Field5 的資料行。 開發環境 1中表單的 UI 現在會顯示 Field3 和 Field5。
- 將未受管理的解決方案 B 與步驟 5 中所做的變更匯出。 此步驟會匯出表單的差異 FormXml。
- 在開發環境 2中,從步驟 6 匯入未受管理的解決方案 B 升級。 因為您要匯入的解決方案包含 FormB 的差異 FormXml,所以其會合併開發環境 1 中的使用中自訂。 表單現在會顯示 Field1、Field2、Field3、Field4 和 Field5。 任何具有表單差異 FormXml 的未受管理管解決方案匯入都會發生此行為。
- 如果步驟 7 中的表單合併不是您想要的,即使您使用未受管理的解決方案匯入差異 FormXml,且您希望能覆寫開發環境 2 中設定的使用中自訂,則請移除 FormB 的使用中層。 其他資訊:移除未受管理層。
- 將未受管理的解決方案 B 與步驟 5 中所做的變更匯出。 此步驟會匯出表單的差異 FormXml。
- 在開發環境 2中,從步驟 9 匯入未受管理的解決方案 B 升級。 由於開發環境 2 中的表單沒有使用中層 (參見步驟 8),即使您要為 FormB 匯入差異 FormXml,也會匯入未受管理解決方案 B 中的所有變更。 表單現在只會顯示 Field1、Field2、Field3 和 Field5。 任何具有表單差異 FormXml 的未受管理管解決方案匯入都會發生此行為。 這與為跨多個開發環境的現有表單維護未受管理解決方案和自訂案例中的步驟 7 結果相同。
每個匯出的解決方案套件均包含自訂 .xml 檔案。 每當解決方案中包含表單時,相關的表單定義就會存在於自訂 .xml 檔案的 FormXml 區段中。 FormXml 可以是完整或差異 (diff)。
當您為處於未受管理狀態的表單匯出解決方案時,您的 FormXml 稱為 完整 FormXml。 「完整」表示它包含整個表單定義。 當您建立新的表單並將其匯出時,該表單一律為完整的 FormXml,因為您要從中匯出的環境中的表單處於未受管理狀態,也處於建立狀態。 如果您從相同環境匯出任何其他解決方案,則這些解決方案也會包含完整的 FormXml。 因為此 solutionaction
屬性表示差異 FormXml,所以您匯出之解決方案中的完整 FormXml xml 檔案將不會包含任何 solutionaction
屬性。
當您為處於受管理狀態的表單匯出解決方案時,您的 FormXml 稱為差異或 diff FormXml。 「差異」表示 FormXml 只包含在該環境的使用中自訂中完成的變更,而不是整個表單定義。 當您自訂現有的受管理表單並將其匯出時,該表單將一律為差異 FormXml,因為它只包含已完成的使用中變更。 您匯出之解決方案的 customization.xml 檔案中的差異 FormXml 將包含定義變更的 solutionaction
屬性 (如新增、移除、修改)。
差異 FormXml 可確保您的解決方案只表示您應用程式所需的變更,並將受到來自其他層變更的影響較小。 差異 FormXml 也可縮小解決方案的份量,有助於更快地匯入。