Поделиться через


Создание исправлений для упрощения обновления решений

Если вы добавляете сущность в решение и экспортируете это решение, сущность и все ее связанные ресурсы экспортируются в это решение. Эти активы включают атрибуты, формы, представления, отношения и визуализации, а также любые другие активы, которые упакованы вместе с сущностью. Экспорт всех объектов означает, что вы можете непреднамеренно изменить объекты в целевом развертывании или переносить непреднамеренные зависимости.

Чтобы решить эту проблему, вы можете создавать и публиковать исправления решения, которые содержат подкомпоненты сущностей, а не публиковать всю сущность и все ее активы. Исходное решение и один или несколько связанных исправлений могут быть объединены (слиты) в более позднее время в обновленную версию решения, которая затем может заменить исходное решение в целевой организации Microsoft Dataverse.

Исправления

Вы можете применять исправления к управляемым или неуправляемым решениям и включать только изменения в сущности и связанные активы сущностей. Исправления не содержат никаких ненастроенных системных компонентов или отношений, от которых они зависят, поскольку эти компоненты уже существуют в развернутой организации. В какой-то момент цикла разработки вы можете свернуть все исправления в новую версию решения, чтобы заменить исходное решение, из которого были созданы исправления.

Исправления хранятся в базе данных Dataverse как записи сущности Solution. Атрибут ParentSolutionId, отличный от NULL, указывает, что решение является исправлением. Исправления можно создавать и управлять ими с помощью пакета SDK для .NET или веб-API, которые полезны для разработки автоматизации, например, сценария установки продукта. Однако веб-приложение Dataverse предоставляет различные веб-формы, которые позволяют интерактивно создавать и управлять исправлениями.

  • Исправления могут быть созданы только из родительского решения с помощью CloneAsPatchRequest или CloneAsPatch Action.

  • Родительское решение исправления не может быть исправлением.

  • Исправления могут иметь только одно родительское решение.

  • Исправление создает зависимость (на уровне решения) от своего родительского решения.

  • Вы можете установить исправление только при наличии родительского решения.

  • Вы не можете установить исправление, если уникальное имя и основной/дополнительный номер версии родительского решения, как указано ParentSolutionId, совпадают с этими параметрами родительского решения, установленного в целевой организации.

  • Версия исправления должна иметь тот же основной и дополнительный номер, но более высокий номер сборки и выпуска, чем номер версии родительского решения. Отображаемое имя может отличаться.

  • Если в решении есть исправления, последующие исправления должны иметь номер версии с более высоким номером, чем у любого существующего исправления для этого решения.

  • Исправления поддерживают те же операции, что и решения, такие как накопительное обновление, но не удаление. Вы не можете удалить компоненты из решения, используя исправление. Чтобы удалить компоненты из решения, выполните обновление.

  • Исправления, экспортированные как управляемые, должны быть импортированы поверх управляемого родительского решения. Правило заключается в том, что защита исправлений (управляемая или неуправляемая) должна соответствовать родительскому решению.

  • Не используйте неуправляемые исправления в производственных целях.

  • Исправления поддерживаются только в организациях Dataverse версии 8.0 или новее.

    Инструменты SolutionPackager и PackageDeployer в этом выпуске поддерживают исправления решений. Обратитесь к справке инструмента в Интернете, чтобы узнать о параметрах командной строки, связанных с исправлениями.

Создание исправления

Создайте исправление из неуправляемого решения в организации с помощью сообщения CloneAsPatchRequest или CloneAsPatch Action или с помощью веб-приложения. После создания исправления первоначальное решение будет заблокировано, и его нельзя изменить или экспортировать, если имеются зависимые исправления в организации, которые определяют это решение как родительское решение. Управление версиями исправлений аналогично управлению версиями решения и указывается в следующем формате: major.minor.build.release. Вы не можете вносить изменения в существующие основные или второстепенные версии решения при создании исправления.

Экспорт и импорт исправления

Вы можете использовать пакет SDK для .NET или веб-API, веб-приложение или инструмент Package Deployer для экспорта и импорта исправления. Соответствующими пакетами SDK для классов запросов .NET являются ImportSolutionRequest и ExportSolutionRequest. Соответствующие действия для веб-API: ImportSolution Action и ExportSolution Action.

Примеры исправлений

В следующей таблице перечислены сведения примера исправления. Обратите внимание, что в этом примере решение и исправления импортируются в числовом порядке и являются накопительными, что в целом соответствует импорту решения.

Имя исправления Описание
SolutionA, версия 1.0 (неуправляемое) Содержит entityA с 6 полями.
SolutionA, версия 1.0.1.0 (неуправляемое) Содержит entityA с 6 полями (3 обновлено) и добавляет entityB с 10 полями.
SolutionA, версия 1.0.2.0 (неуправляемое) Содержит entityC с 10 полями.

Процесс импорта выглядит следующим образом.

  1. Разработчик или настройщик сначала импортирует базовое решение (SolutionA 1.0) в организацию. Результатом является entityA с 6 полями в организации.

  2. Затем импортируется исправление SolutionA 1.0.1.0. Теперь организация содержит entityA с 6 полями (3 были обновлены) плюс entityB с 10 полями.

  3. Наконец, импортируется исправление SolutionA 1.0.2.0. Теперь организация содержит entityA с 6 полями (3 были обновлены), entityB с 10 полями и entityC с 10 полями.

Другой пример применения исправлений

Давайте рассмотрим другой пример применения исправлений, подробности которого перечислены в следующей таблице.

Имя исправления Описание
SolutionA, версия 1.0 (неуправляемое, базовое решение) Содержит сущность Account, в котором длина поля номера счета настраивается от 20 до 30 символов.
SolutionB, версия 2.0 (неуправляемое, другой поставщик) Содержит сущность Account, в котором длина поля номера счета настраивается до 50 символов.
SolutionA, версия 1.0.1.0 (неуправляемое, исправление) Содержит обновление сущности Account, в котором длина поля номера счета настраивается до 35 символов.

Процесс импорта выглядит следующим образом:

  1. Разработчик или настройщик сначала импортирует базовое решение (SolutionA 1.0) в организацию. Результатом является сущность Account с полем номера счета из 30 символов.

  2. SolutionB импортировано. Организация теперь содержит сущность Account с полем номера счета из 50 символов.

  3. Импортируется исправление SolutionA 1.0.1.0. Организация все еще содержит сущность Account с полем номера счета из 50 символов, как применено SolutionB.

  4. Решение SolutionB удаляется. Организация теперь содержит сущность Account с полем номера счета из 35 символов, как применено исправлением SolutionA 1.0.1.0.

Удаление исправления

Вы можете удалить исправление или базовое (родительское) решение, используя DeleteRequest или, для веб-API, используя метод HTTP DELETE. Процесс удаления отличается для управляемого или неуправляемого решения, в котором есть одно или несколько исправлений, существующих в организации.

Для неуправляемого решения необходимо сначала удалить все исправления базового решения в порядке, обратном порядку версий, в котором они были созданы, перед удалением базового решения.

Для управляемое решение вы просто удаляете базовое решение. Система Dataverse автоматически удаляет исправления в обратном порядке версий перед удалением базового решения. Вы также можете просто удалить одно исправление.

Обновление решения

Обновление решения включает в себя свертывание (слияние) всех исправлений этого решения в новую версию решения. Впоследствии это решение разблокируется и может быть снова изменено (только для неуправляемого решения) или экспортировано. Для управляемого решения дальнейшие модификации решения запрещены, кроме создания исправлений из недавно обновленного решения. Чтобы объединить исправления в неуправляемое решение, используйте CloneAsSolutionRequest или CloneAsSolution Action. Клонирование решения создает новую версию неуправляемого решения, включающую все его исправления, с более высоким номером версии главная.дополнительная, такое же уникальное имя и отображаемое имя.

Для управляемое решение все немного по-другому. Сначала вы клонируете неуправляемое решение (A), включающее все его исправления, а затем экспортируете его как управляемое решение (B). В целевой организации, которая содержит управляемую версию решения (A) и его исправлений, вы импортируете управляемое решение (B) и затем выполняете DeleteAndPromoteRequest или действие DeleteAndPromote, чтобы заменить управляемое решение (A) и его исправления на обновленное управляемое решение (B) с более высоким номером версии.

См. также

Используйте сегментированные решения