Создание исправлений для упрощения обновления решений
Если вы добавляете сущность в решение и экспортируете это решение, сущность и все ее связанные ресурсы экспортируются в это решение. Эти активы включают атрибуты, формы, представления, отношения и визуализации, а также любые другие активы, которые упакованы вместе с сущностью. Экспорт всех объектов означает, что вы можете непреднамеренно изменить объекты в целевом развертывании или переносить непреднамеренные зависимости.
Чтобы решить эту проблему, вы можете создавать и публиковать исправления решения, которые содержат подкомпоненты сущностей, а не публиковать всю сущность и все ее активы. Исходное решение и один или несколько связанных исправлений могут быть объединены (слиты) в более позднее время в обновленную версию решения, которая затем может заменить исходное решение в целевой организации 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 полями. |
Процесс импорта выглядит следующим образом.
Разработчик или настройщик сначала импортирует базовое решение (SolutionA 1.0) в организацию. Результатом является entityA с 6 полями в организации.
Затем импортируется исправление SolutionA 1.0.1.0. Теперь организация содержит entityA с 6 полями (3 были обновлены) плюс entityB с 10 полями.
Наконец, импортируется исправление 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 символов. |
Процесс импорта выглядит следующим образом:
Разработчик или настройщик сначала импортирует базовое решение (SolutionA 1.0) в организацию. Результатом является сущность
Account
с полем номера счета из 30 символов.SolutionB импортировано. Организация теперь содержит сущность
Account
с полем номера счета из 50 символов.Импортируется исправление SolutionA 1.0.1.0. Организация все еще содержит сущность
Account
с полем номера счета из 50 символов, как применено SolutionB.Решение SolutionB удаляется. Организация теперь содержит сущность
Account
с полем номера счета из 35 символов, как применено исправлением SolutionA 1.0.1.0.
Удаление исправления
Вы можете удалить исправление или базовое (родительское) решение, используя DeleteRequest или, для веб-API, используя метод HTTP DELETE
. Процесс удаления отличается для управляемого или неуправляемого решения, в котором есть одно или несколько исправлений, существующих в организации.
Для неуправляемого решения необходимо сначала удалить все исправления базового решения в порядке, обратном порядку версий, в котором они были созданы, перед удалением базового решения.
Для управляемое решение вы просто удаляете базовое решение. Система Dataverse автоматически удаляет исправления в обратном порядке версий перед удалением базового решения. Вы также можете просто удалить одно исправление.
Обновление решения
Обновление решения включает в себя свертывание (слияние) всех исправлений этого решения в новую версию решения. Впоследствии это решение разблокируется и может быть снова изменено (только для неуправляемого решения) или экспортировано. Для управляемого решения дальнейшие модификации решения запрещены, кроме создания исправлений из недавно обновленного решения. Чтобы объединить исправления в неуправляемое решение, используйте CloneAsSolutionRequest или CloneAsSolution Action. Клонирование решения создает новую версию неуправляемого решения, включающую все его исправления, с более высоким номером версии главная.дополнительная, такое же уникальное имя и отображаемое имя.
Для управляемое решение все немного по-другому. Сначала вы клонируете неуправляемое решение (A), включающее все его исправления, а затем экспортируете его как управляемое решение (B). В целевой организации, которая содержит управляемую версию решения (A) и его исправлений, вы импортируете управляемое решение (B) и затем выполняете DeleteAndPromoteRequest или действие DeleteAndPromote, чтобы заменить управляемое решение (A) и его исправления на обновленное управляемое решение (B) с более высоким номером версии.