Обслуживание работоспособного ALM для форм приложений на основе модели
В этой статье представлена информация о различных сценариях реализации и практики работоспособного управления жизненным циклом приложений (ALM) для настройки форм в решениях приложений на основе модели.
В следующих разделах описывается, как работает слияние форм и как поддерживать настройки. Базовые сценарии разработки с рекомендациями по поддержанию успешного ALM для формы приложения на основе модели подробно описаны в каждом следующем разделе. Каждый сценарий включает в себя шаги, которые помогут вам реализовать правильный процесс ALM при обновлении решения или приложения на основе модели.
Выполните следующие действия, чтобы реализовать работоспособную форму ALM для этого сценария.
- Создайте новую форму с именем FormA в вашей среде разработки и внесите изменения в форму.
- Создайте новое решение (названное Решение А на диаграмме ниже) в среде разработки, которая будет неуправляемым решением, и добавьте новую форму. Экспортируйте решение как управляемое. Этот шаг экспортирует полный FormXml для формы.
- В своей тестовой среде импортируйте управляемое решение из шага 2, который создает FormA в тестовой среде. На диаграмме ниже FormA создается в тестовой среде, и пользовательский интерфейс формы показывает Field1 и Field2 что Решение А добавлено в форму.
- При дальнейшей настройке формы, созданной на шаге 1 с использованием новой среды разработки (исходной), импортируйте управляемое Решение А, созданное на шаге 2, убедитесь, что в используемом вами экземпляре разработки есть FormA в управляемом состоянии. Как показано на диаграмме ниже, управляемое Решение А импортируется в среду разработки, и форма настраивается, создавая активные настройки. Потом, FormA затем можно добавить в новое неуправляемое решение (Решение B на диаграмме) и экспортируется как управляемое решение из среды разработки. Этот шаг экспортирует дифференциальную (diff) FormXml для формы.
- В вашей тестовой среде импортируйте управляемое решение (Решение B) из шага 4. Как показано на диаграмме ниже Решение B добавляет новый Field3 к FormA и удаление Field2, который был добавлен Решение А. Пользовательский интерфейс формы в тестовой среде теперь показывает Field3 а также Field1 в форме, но не Field2 после слияния.
Как видно на диаграмме ниже, создание нескольких управляемых решений из среды разработки, в которой базовое решение (Решение А) находится в неуправляемом состоянии. Это потому, что при создании другого неуправляемого решения (Решение B) для неуправляемой формы FormXml экспортируется как полный FormXml, а не как diff FormXml, как показано в допустимом сценарии выше. Впоследствии такие изменения, как удаление столбца, не вступят в силу.
Выполните следующие действия, чтобы реализовать работоспособную форму ALM для этого сценария.
Создайте новую форму с именем FormA в вашей среде разработки и внесите изменения в форму.
Создайте решение (Решение А на диаграмме ниже), которая будет неуправляемым решением, и добавьте новую форму. Экспортируйте решение как управляемое. Этот шаг экспортирует полный FormXml для формы.
В своей тестовой среде импортируйте управляемое решение из шага 2, который создает форму в тестовой среде. На диаграмме ниже FormA создается в тестовой среде, и пользовательский интерфейс формы показывает Field1 и Field2 что Решение А добавлено в форму.
При дальнейшей настройке формы, созданной на шаге 1, с помощью исправлений используйте ту же среду, где Решение А находится в неуправляемом состоянии, создайте исправление для решения и настройте форму. Затем экспортируйте исправление как управляемое решение. Этот шаг экспортирует полный formXml для формы.
В вашей тестовой среде импортируйте управляемое решение исправление из шага 4. Как показано на диаграмме ниже, исправление Решение А добавляет новый Field3 в FormA и удаление Field2, который был добавлен с помощью Решение А.
Примечание
Исправления, содержащие полный formXml всегда сравниваются с базовым слоем, из которого был создано исправление, и игнорируют любые промежуточные исправления между базовым и текущим исправлением. Как результат, Field2 удаляется, так как оно существует в базовом слое Решение А и удаление обнаружено. С другой стороны, Field3 добавляется этим решением исправления и не может быть удалено последующими исправлениями. Таким образом, поля, добавленные с помощью решений исправлений, являются дополняющими по своей природе.
При дальнейшей настройке формы, созданной на шаге 1, с помощью обновлений используйте ту же среду, где Решение А находится в неуправляемом состоянии и клонируйте Решение A, чтобы создать обновленное решение и настройте форму. Затем экспортируйте обновление Решение А как управляемое решение. Этот шаг экспортирует полный FormXml для формы.
В вашей тестовой среде импортируйте обновление управляемое Решение A из шага 6. Как показано на диаграмме ниже обновление Решение A добавляет новый Field4 к FormA и удаление Field2, который был добавлен Решение А. Пользовательский интерфейс формы в тестовой среде теперь показывает Field1, Field3 и Field4 в форме, но Field2 будет удален после того, как форма будет объединена из импорта.
Выполните следующие действия, чтобы реализовать работоспособную форму ALM для этого сценария.
- Редактировать существующую управляемую форму с именем FormB в этом примере в вашей среде разработки и выполните настройку формы. Обратите внимание, что решение A — это управляемое решение, уже установленный для формы в среде разработки.
- Создайте решение (Решение B на диаграмме ниже), которая будет неуправляемым решением, и добавьте FormB. Экспортируйте решение как управляемое. Этот шаг экспортирует дифференциальную (diff) FormXml для формы.
- В вашей тестовой среде импортируйте управляемое решение из шага 2, таким образом создавая второй слой решения для формы. На приведенной ниже схеме FormB получает объединенные изменения из Решения A и Решения B в тестовой среде, а пользовательский интерфейс для формы показывает Field1 и Field3 в форме, но не Field2, которое было удалено Решением B.
- При дальнейшей настройке формы, настроенной на шаге 1, с использованием новых управляемых решений, убедитесь, что используется новая среда разработки, у которой есть FormB в управляемом состоянии. Как показано на схеме ниже, управляемые решения Решение А и Решение B импортируются в новую среду разработки. Форма B настраивается путем создания активных настроек, которые затем можно добавить в новое решение (Решение C на схеме) и экспортировать как управляемое решение.
- В вашей тестовой среде импортируйте управляемое Решение C из шага 4. Как показано на схеме ниже Решение C добавляет новый Field4 к FormB и удаление Field3, который был добавлен Решением B. Пользовательский интерфейс формы в тестовой среде теперь показывает Field1 и Field4 в форме, но не Field2 и Field3.
Как показано на диаграмме ниже, создание нескольких управляемых решений из среды разработки, которая содержит другое неуправляемое решение, созданное вами для той же формы, не является работоспособным. Обратите внимание, что Решение B находится в неуправляемом состоянии. При создании другого неуправляемого решения (Решение C) для FormB, FormXml экспортируется как diff FormXml, как показано в шаге 4 в приведенном выше сценарии. Но, FormB также содержит изменения из Решение B, который будет перезаписан вашими новыми изменениями.
Например, как показано на диаграмме ниже, Поле3 добавлен к FormB в Решение B. Но теперь, когда вы создаете новый Решение C в этой среде, с Решение B в неуправляемом состоянии и удалите Field3, Field3 также будут удалены в среде разработки. Поле3 не будет отслеживаться в diff FormXml при экспорте решения, поскольку изменение добавления и удаления этого столбца было сделано в том же активном слой. Это означает, что управляемое Решение C импортируется в тестовую среду, форма по-прежнему будет отображать Field3 потому что diff FormXml никогда не записывает его как удаленный (например, он был удален на шаге 5 в сценарии ALM работоспособной формы выше). Выполнение настроек формы таким образом приведет к несовместимости среды разработки с тестовой средой.
Выполните следующие действия, чтобы реализовать работоспособную форму ALM для этого сценария.
Настраивать существующую управляемую форму с именем FormB в этом примере в вашей среде разработки и выполните настройку формы. Обратите внимание, что Решение A — это управляемое решение, уже установленный для формы в среде разработки.
Создайте решение (Решение B), которое будет неуправляемым решением, и добавьте FormB. Экспортируйте решение как управляемое. Этот шаг экспортирует diff FormXml для формы.
В вашей тестовой среде импортируйте управляемое Решение B из шага 2, таким образом создавая второй слой решения для формы. На диаграмме ниже FormB получает объединенные изменения из Решение А и Решение B в тестовой среде. Кроме того, пользовательский интерфейс для FormB показывает Field1 и Field3 в форме, но не Field2, которое было удалено Решением B.
При дальнейшей настройке формы, которую вы настроили на шаге 1, с помощью решения исправления, вы можете использовать ту же среду разработки, что и на шаге 1, где Решение B существует в неуправляемом состоянии. Как показано на схеме ниже, Решение А находится в управляемом состоянии и Решение B находится в неуправляемом состоянии. Форма дополнительно настраивается, и вы создаете сохранение для Решение B добавление вашей формы в это решение и экспорт ее как управляемого исправления. Этот шаг экспортирует diff FormXml.
В вашей тестовой среде импортируйте управляемое исправление Решение B из шага 4. Как показано на схеме ниже, Исправление Решение B добавляет новый Field4 в FormB и удаление Field3, который был добавлен с помощью Решение B.
Примечание
Исправления являются аддитивными по своей природе и не могут удалять из формы такие компоненты, как столбцы. Так, Field3 не будет удален из формы. Пользовательский интерфейс формы в тестовой среде теперь показывает Field1, Field3, и Field4 в форме, но не Field2.
При дальнейшей настройке формы, созданной на шаге 1, с помощью обновлений используйте ту же среду, где Решение B находится в неуправляемом состоянии и клонируйте Решение B, чтобы создать обновленное решение и настройте FormB. Экспортируйте обновление как управляемое решение. Этот шаг экспортирует diff FormXml для формы.
В вашей тестовой среде импортируйте обновление управляемого Решения B из шага 6. Как показано на схеме ниже Обновление Решение B добавляет новый Field5 к FormB и удаление Field3, который был добавлен Решением B. Пользовательский интерфейс формы в тестовой среде теперь показывает Field1, Field4 и Field5 в форме, но Field2 и Field3 удалены.
Выполните следующие действия, чтобы реализовать работоспособную форму ALM для этого сценария.
- В среде разработки 1 создайте FormA и выполните настройки в форму.
- Создайте решение (Решение А на диаграмме ниже), которая будет неуправляемым решением, и добавьте новую форму. Экспортируйте решение как неуправляемое. Этот шаг экспортирует полный FormXml для формы.
- В Среда разработки 2, импортируйте неуправляемое решение из шага 2, который создает форму в Среда разработки 2. На диаграмме ниже FormA создается и пользовательский интерфейс формы показывает Field1 и Field2 что Решение А добавлено в форму.
- Вы дополнительно настраиваете форму в Среда разработки 2 внося активные настройки в среду, такие как добавление нового столбца с именем Field3. ФормаA теперь отображает Field1, Field2 и Поле3.
- В вышей Среда разработки 1, вы также можете настроить форму, добавив Field4. Пользовательский интерфейс для формы в Среда разработки 1 теперь показывает Field1, Field2, а также Field4.
- Экспорт неуправляемого Решение А с изменениями, внесенными на шаге 5. Этот шаг экспортирует полный FormXml для формы.
- В Среда разработки 2 импортируйте неуправляемое Обновление Решение A из шага 6. Поскольку решение, которое вы импортируете, содержит полный FormXml для FormA, он перезаписывает активную настройку, сделанную в Среда разработки 1. Итак, форма теперь показывает только Field1, Field2, а также Field4, но не Field3, которая была дополнительной активной настройкой, выполненной в Среда разработки 1. Такое поведение наблюдается при импорте любого неуправляемого решения, содержащего полный FormXml для формы.
Выполните следующие действия, чтобы реализовать работоспособную форму ALM для этого сценария.
- В Среда разработки 1, настроить существующую форму с именем FormB в этом примере. Затем выполните настройку формы.
- Создайте решение (Решение B на схеме ниже), которая будет неуправляемым решением, и добавьте FormB. Экспортируйте решение как неуправляемое. Этот шаг экспортирует diff FormXml для формы.
- В Среда разработки 2 импортируйте неуправляемое решение из шага 2, таким образом создавая второй слой решения для формы. В FormB пользовательский интерфейс показывает Field1, Field2, а также Field3 после слияния формы.
- Вы дополнительно настраиваете форму в Среда разработки 2 внося активные настройки в среду, такие как добавление нового столбца с именем Field4. FormB теперь показывает Поле1, Поле2, Поле3 и Поле4.
- В Среда разработки 1, вы также можете настроить форму, добавив новый столбец с именем Field5. Пользовательский интерфейс для формы в Среда разработки 1 теперь показывает Field3, и Field5.
- Экспорт неуправляемого Решение B с изменениями, внесенными на шаге 5. Этот шаг экспортирует diff FormXml для формы.
- В Среда разработки 2 импортируйте неуправляемое Обновление Решение B из шага 6. Поскольку решение, которое вы импортируете, содержит diff FormXml для FormB, он объединится с активной настройкой, выполненной в Среда разработки 1. Итак, форма теперь показывает Field1, Field2, Field3, Field4 и Field5. Такое поведение наблюдается для импорта любого неуправляемого решения, содержащего diff FormXml для формы.
- Если слияние форм на шаге 7 — это не то, что вам нужно, даже если вы импортируете diff FormXml с неуправляемым решением и хотите иметь возможность перезаписать активные настройки, сделанные в Среда разработки 2, затем удалите активный слой для FormB. Больше информации: Удалить неуправляемый слой.
- Экспорт неуправляемого Решение B с изменениями, внесенными на шаге 5. Этот шаг экспортирует diff FormXml для формы.
- В Среда разработки 2 импортируйте неуправляемое Обновление Решение B из шага 9. Поскольку нет активного слоя для формы в Среда разработки 2, (см. шаг 8), все изменения из неуправляемого Решение B импортируются, даже если вы импортируете diff FormXml для FormB. Итак, форма теперь показывает только Field1, Field2, Field3 и Field5. Такое поведение наблюдается для импорта любого неуправляемого решения, содержащего diff FormXml для формы. Это тот же результат, что и на шаге 7 в сценарий Поддержка неуправляемых решений и настроек для существующей формы в нескольких средах разработки.
Каждый пакет экспортированного решения включает файл customizations.xml. Каждый раз, когда форма включается в решение, соответствующее определение формы существует в разделах FormXml файла customizations.xml. FormXml может быть полным или же дифференциальным (diff).
FormXml, который вы получаете при экспорте решения для формы в неуправляемом состоянии, называется полный FormXml. Полный означает, что он содержит все определение формы. Когда вы создаете новую форму и экспортируете ее, форма всегда будет полным FormXml, потому что форма в среде, из которой вы экспортируете, находится в неуправляемом состоянии, а также в состоянии создания. Если вы экспортируете какие-либо другие решения из этой же среды, они также будут включать полный FormXml. Поскольку атрибут solutionaction
указывает на diff FormXml, полный FormXml в файле customization.xml в экспортируемом решении не будет содержать никаких атрибутов solutionaction
.
FormXml, который вы получаете при экспорте решения для формы в управляемом состоянии, называется дифференциальный или diff FormXml. Diff означает, что FormXml содержит только изменения, внесенные в активные настройки в этой среде, а не все определение формы. Когда вы настраиваете существующую управляемую форму и экспортируете ее, форма всегда будет diff FormXml, потому что она будет содержать только активные изменения, внесенные в нее. Файл diff FormXml в файле customization.xml в экспортируемом решении будет содержать атрибуты solutionaction
, определяющие изменения, например Добавлен, Удаленный, Изменено.
Diff FormXml гарантирует, что ваше решение будет отражать только те изменения, которые необходимы вашему приложению, и на него меньше повлияют изменения с других уровней. Diff FormXml также делает решение менее громоздким и ускоряет его импорт.