Обзор удаления зависимостей
Компоненты решения часто зависят от других компонентов решения. Невозможно удалить компонент решения, который имеет зависимости от другого компонента решения. Зависимости — это записи, автоматически создаваемые платформой решений для предотвращения удаления необходимых компонентов, в то время как один или несколько зависимых компонентов по-прежнему содержат ссылки на них. Пример зависимости следующий: допустим, для работы формы требуется поле, то если вы когда-либо попытаетесь выполнить действие, которое приведет к удалению этого поля, форма перестанет работать.
Заметка
В этой статье, удалить означает, что компонент полностью удален из системы.
В этой статье мы обсудим, как обрабатывать эти зависимости, и стратегии, которые вы можете использовать для удаления зависимостей, которые вам больше не нужны.
Зависимости неуправляемых и управляемых компонентов
Во-первых, важно понимать, что зависимости предотвращают только операции, которые удаляют необходимый компонент. Действия, которые могут удалить компонент, различаются в зависимости от того, неуправляемый он или управляемый.
Неуправляемые компоненты
Эти компоненты представлены одним слоем в активном решении. Любая операция Удалить с таким компонентом приводит к его полному удалению.
Управляемые компоненты
Удаление управляемых компонентов зависит от нескольких факторов: количество слоев решения, относительное положение удаляемого слоя и издатели компонентов. Например, при удалении компонента рассмотрите следующие сценарии и ожидаемое поведение при удалении различных слоев.
Примеры сценариев
Следующие примеры сценариев иллюстрируют, что происходит со слоями решений, когда решения удаляются.
Сценарий 1. Удаление одного уровня решения
Удаление решения 1 вызывает удаление компонента, потому что это единственный слой для компонента.
Сценарий 2. Удаление слоев решений от разных издателей
- Удаление решения 2 не вызывает удаления компонентов. Только этот слой будет удален.
- Удаление решения 1 вызывает удаление компонента, потому что это действие выполняется в базовом слое. Фактически, решение 1 не может быть удалено в этом сценарии, потому что решение от другого издателя расширяет компонент.
Сценарий 3. Удаление нескольких слоев решений от разных издателей
- Удаление решения 3 не вызывает удаления компонентов. Только этот слой будет удален.
- Удаление решения 2 не вызывает удаления компонентов. Только этот слой будет удален.
- Удаление решения 1 не вызывает удаления компонента, потому что в этом случае есть другое решение от того же издателя (Издатель A = Издатель C)). Платформа удаляет слой из решения 1 и заменяет его слоем из решения 3.
Сценарий 4. Удаление слоев решений в неуправляемой настройке
- Удаление активного (неуправляемого) слоя не вызывает удаления компонента. Только этот слой будет удален. Обратите внимание, что вы не можете удалить активное решение, но вы можете удалить компоненты с помощью функции Удалить активную настройку.
- Удаление решения 1 вызывает удаления компонентов. Действие происходит в базовом слое. В отличие от сценария 2, решение 1 можно удалить. Активное решение не считается расширением, и оба слоя будут удалены.
См. страницу о зависимостях
Команда Показать зависимости перечисляет зависимости для выбранного решения или компонента решения. Ее можно вызвать:
- Выбор пункта Показать зависимости на странице решения.
- Выбор пункта Дополнительно>Показать зависимости в решении, когда выбран компонент решения.
- Попытавшись удалить решение, в результате чего платформа обнаружит, что существуют зависимости.
На странице «Зависимости» вы можете открыть или удалить компонент. Больше информации: Просмотр зависимостей для компонента
Диагностика зависимостей
Давайте рассмотрим следующий сценарий. У организации ниже есть два решения: Решение — рабочий процесс и Решение — пользовательская сущность.
Владелец организации решил, что больше не требуется Решение — пользовательская сущность, попытался удалить его и получил следующую страницу:
Не вдаваясь в подробности, можно сделать вывод, что при удалении решения предпринимается попытка удалить сущность с именем Пользовательская сущность и три поля — Пользовательская сущность, Имя и Числовое поле — и все четыре компонента имеют зависимости.
Заметка
Удаление решения может потенциально удалить больше компонентов, но, поскольку они не имеют зависимостей, они не появятся в списке.
Следующим шагом является проверка ссылки Слои решения (крайний правый столбец) для каждой зависимости. Это поможет принять решение о требуемых действиях для удаления решения.
На следующем рисунке показаны сведения о зависимостях между сущностью (настраиваемая сущность) и процессом (тестовый рабочий процесс).
Основываясь на отображаемых данных, вы можете видеть, что зависимый компонент принадлежит решению с именем SolutionWorkflow. Чтобы удалить эту зависимость, мы можем:
- Обновить определение рабочего процесса в SolutionWorkflow, удалив все ссылки на сущность или его подкомпоненты. Затем Обновить или Обновить решение.
- Удалить решение SolutionWorkflow.
- Удалите рабочий процесс из новой версии решения SolutionWorkflow, затем выполните Обновить.
Поскольку любой один зависимый компонент может помешать удалению решения, мы рекомендуем вам проверить все зависимости и внести все необходимые изменения за одну операцию.
На следующем рисунке показаны сведения о зависимостях между сущностью (настраиваемая сущность) и приложением на основе модели (мое приложение).
Основываясь на отображаемых данных, вы можете видеть, что зависимый компонент принадлежит решению с именем Active. Это указывает на то, что зависимость была создана путем импорта неуправляемого решения или через неуправляемую настройку, выполненной с помощью современного пользовательского интерфейса или API.
Чтобы удалить эту зависимость, вы можете:
- Изменить определение приложения на основе модели, чтобы удалить любую ссылку на сущность или ее подкомпоненты. Поскольку приложения на основе модели поддерживают публикацию, вы должны опубликовать свои изменения.
- Удалить приложение на основе модели.
Заметка
Удаление неуправляемого решения не является вариантом удаления этой зависимости, поскольку неуправляемые решения — это просто средство для группировки компонентов.
Действия по удалению управляемой зависимости
Управляемые зависимости — это те зависимости, в которых зависимый компонент связан с управляемым решением. Чтобы разрешить этот вид зависимости, вы должны выполнить действия с решением, в которое был добавлен компонент. Это действие может отличаться в зависимости от того, что вы пытаетесь сделать.
Если вы пытаетесь удалить решение
Выполните следующие действия:
- В целевой организации проверьте ссылку Слои решения, чтобы найти, что является самым верхним решением в списке зависимых компонентов.
- В исходной организации подготовьте новую версию этого решения, в которой решение либо не содержит зависимого компонента, либо имеет обновленную версию зависимого компонента, которая не содержит ссылок на требуемый компонент. Ваша цель — удалить все ссылки на необходимые компоненты в новой версии решения.
- Экспортируйте новую версию решения.
- В целевой организации Обновите это решение.
- Повторите попытку удаления.
Если вы пытаетесь обновить решение
В этом случае вы должны подтвердить, что хотите удалить требуемый компонент (помните, что зависимости применяются только к компонентам, которые удаляются).
Если вы не хотите удалять компонент, вы можете исправить новую версию решения, добавив компонент обратно, выполнив следующие действия:
- В целевой организации удалите промежуточно сохраненное решение (решение, заканчивающееся на _Upgrade).
- В исходной организации снова добавьте необходимые компоненты в решение.
- Экспортируйте новую версию.
- Повторите попытку обновления.
Если удаление является преднамеренным, вы должны удалить зависимость. Попробуйте выполнить действия, описанные в предыдущем разделе "Если вы пытаетесь удалить решение".
Слои и зависимости
Зависимые компоненты могут быть многоуровневыми, поэтому вам может потребоваться изменить более одного решения, чтобы полностью удалить зависимость. Платформа зависимостей вычисляет зависимости только между самыми верхними слоями для обязательных и зависимых компонентов. Это означает, что вам нужно продвигаться сверху вниз в иерархии решений зависимого компонента.
Рассмотрим следующий сценарий:
Вы пытаетесь удалить Решение — пользовательская сущность, и операция заблокирована зависимостями.
Вы начинаете диагностику зависимости, выбирая Слои решения в атрибуте new_numberfield. Вы видите следующий экран:
Поскольку зависимости создаются только между самыми верхними слоями каждого компонента, первым шагом является устранение зависимости между атрибутом new_numberfield в SolutionCustomEntity и рабочим процессом Тестовый рабочий процесс в SolutionWorkflow3.
Чтобы удалить зависимость, вы решили удалить SolutionWorkflow3. Вы делаете это, но когда вы пытаетесь удалить решение еще раз, вы видите ту же страницу зависимостей:
Однако атрибут new_numberfield больше не отображается, даже если он существовал в нескольких слоях.
Действия по удалению неуправляемой зависимости
Чтобы удалить неуправляемые зависимости, необходимо действовать непосредственно на компоненты, а не на решения, к которым они относятся. Например, если вы хотите удалить зависимости между атрибутом и формой, вы должны отредактировать ее в редакторе форм и удалить атрибут из формы. Зависимость будет удалена после выбора Сохранить и Опубликовать.
Заметка
- Команда Показать зависимости позволяет выполнять действия по просмотру, удалению зависимости, редактированию или удалению компонента. Больше информации: Просмотр зависимостей для компонента
- Также можно удалить зависимый компонент. Это действие удаляет все зависимости вместе с компонентом.
Чтобы просмотреть зависимости компонента, в области Решения откройте нужное решение, выберите вертикальное многоточие рядом с компонентом, а затем выберите Дополнительно>Показать зависимости.
Страница зависимостей состоит из двух отдельных частей:
- Зависимые компоненты: список компонентов, которые зависят от выбранного поля. Другими словами, эти компоненты будут иметь это поле в качестве обязательного компонента.
- Обязательные компоненты: список компонентов, которые необходимы этому полю для работы. Другими словами, эти компоненты будут иметь это поле в качестве зависимого компонента.