Конфликты импорта

Конфликты различаются по степени критичности. Всего существует три категории критичности.

  • Низкая критичность — некритичные конфликты, разрешение которых можно игнорировать. К этой категории относятся, например, конфликты типов InvalidCardReference и InvalidRowReference.

  • Нормальная критичность — любые конфликты, которые не относятся к двум оставшимся категориям.

  • Высокая критичность — особенно критичные конфликты, которые могут сюда относятся все конфликты метаданных.

Типы конфликтов импорта

Следующие конфликты могут быть обнаружены при проверке загружаемых данных перед импортом Решения.

Тип конфликта Конфликт Причина

Конфликты данных

GlobalUniqueViolated

Возникает, если импортируемая карточка нарушает требование уникальности значения поля, установленное на уровне БД. Данный конфликт связан с тем, что значение поля с признаком "Unique globally" в импортируемой карточке совпадает со значением данного поля в существующей карточке.

CardUniqueViolated

Возникает, если импортируемая карточка нарушает требование уникальности значения поля, установленное на уровне экземпляра карточки. В схеме карточки для поля установлен признак уникальности "Unique within card".

SectionUniqueViolated

Возникает, если импортируемая карточка нарушает требование уникальности значения поля, установленное на уровне секции экземпляра карточки. В схеме карточки для поля установлен признак уникальности "Unique within section".

TreeUniqueViolated

Возникает, если импортируемая карточка нарушает требование уникальности значения поля, установленное на уровне всего дерева иерархической секции. В схеме карточки для поля установлен признак уникальности "Unique within tree".

SecondRowInStructSection

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

TreeCycleDetected

Возникает, если в импортируемых данных строка A является родительской для строки Б, а в целевой БД — строка Б является родительской для А, из-за чего при импорте будет произведена попытка перемещения родительской строки в дочернюю.

InvalidCardTypeId

Возникает, если тип импортируемой карточки не зарегистрирован в целевой БД.

InvalidCardReference

Возникает, если значение поля с типом REFCARDID в импортируемых данных ссылается на карточку, которой нет в целевой БД и нет в импортируемых данных.

InvalidEnumValue

Возникает, если значение поля типа ENUM в импортируемых данных, отсутствует в списке возможных значений данного поля в целевой БД.

InvalidRowReference

Возникает, если значение поля с типом REFID в импортируемых данных ссылается на строку, которой нет в целевой БД и нет в импортируемых данных.

Custom

Логика проверки данного конфликта реализована в расширении Менеджера решений.

Конфликты метаданных

DuplicatedFieldName

Возникает, если поля с аналогичными названиями в импортируемых данных и в целевой БД имеют разные идентификаторы.

DuplicatedFieldId

Возникает, если поля с аналогичными идентификаторами в импортируемых данных и в целевой БД имеют разные имена.

DuplicatedSectionAlias

Возникает, если секции с аналогичными названиями в импортируемых данных и в целевой БД имеют разные идентификаторы.

DuplicatedSectionId

Возникает, если секции с аналогичными идентификаторами в импортируемых данных и в целевой БД имеют разные имена.

InvalidReferencedCardTypeId

Возникает, если поле с типом REFID или REFCARDID в импортируемых данных ссылается на тип карточек, которого нет в целевой БД.

InvalidReferencedSectionTypeId

Возникает, если поле с типом REFID или REFCARDID в импортируемых данных ссылается на тип секции, которой нет в целевой БД и в импортируемых данных.

InvalidReferencedField

Возникает, если поле с типом REFID или REFCARDID в импортируемых данных и поле в целевой БД ссылаются на разные типы карточек или типы секций.

IncompatibleFieldTypeChange

Возникает, если тип поля в импортируемых данных несовместим с типом данного поля в целевой БД, или различается список возможных значений поля с типом ENUM.

InvalidCardTypeId

Возникает, если расширенная секции в импортируемых данных расширяет тип карточек, отсутствующий в целевой БД.

InvalidParentSectionId

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

OwnerCardID

Возникает, когда импортировался файл, у которого в OwnerCardID прописан несуществующий идентификатор карточки.

RowParentChangedConflict

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

Варианты решения конфликтов импорта

Следующие варианты решения конфликтов могут быть применены к данным перед импортом Решения.

Отредактировать объект вручную в базе-приёмнике.

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

Заменить старый объект новым.

Заменяет значение ROWID в импортируемых данных на значение из целевой БД. Данное решение предлагается для конфликтов: TreeUniqueViolated, SectionUniqueViolated.

Поменять поле импортируемого объекта.

Заменяет идентификатор поля в импортируемых данных на новый. Данное решение предлагается для конфликтов: TreeUniqueViolated, SectionUniqueViolated.

Заменить ID на Guid.Empty.

Изменяет идентификатор ссылки на "00000000-0000-0000-0000-000000000000". Данное решение предлагается для конфликта: InvalidRowReference.

Не импортировать секцию метаданных.

Удаляет из импортируемых данных вызывавшую конфликт секцию. Данное решение предлагается для конфликта: DuplicatedSectionAlias.

Не импортировать поле метаданных

Удаляет из импортируемых данных вызывавшее конфликт поле. Данное решение предлагается для конфликта: DuplicatedFieldName.

Заменить старую роль новой.

Заменяет идентификатор роли в импортируемых данных на значение из целевой БД. Данное решение предлагается для конфликта: Custom при нарушении уникальности имени для роли.

Поменять имя импортируемой роли.

Заменяет идентификатор роли в импортируемых данных на новый. Данное решение предлагается для конфликта: Custom при нарушении уникальности имени для роли.

Заменить старую разметку новой.

Заменяет идентификатор разметки в импортируемых данных на значение из целевой БД. Данное решение предлагается для конфликта: Custom при нарушении уникальности имени для разметки.

Поменять имя импортируемой разметки.

Заменяет идентификатор разметки в импортируемых данных на новый. Данное решение предлагается для конфликта: Custom при нарушении уникальности имени для разметки.

Задать в OwnerCardID одно из вычисленных значений

Значение вычисляется путем анализа импортируемых данных, находятся карточки, ссылающиеся на этот файл.

Игнорировать

Вариант разрешения позволяет пропустить разрешение некритичного конфликта.

Групповое решение конфликтов

При большом количестве конфликтов существует возможность группового разрешения однотипных конфликтов — флаги в правой части строки конфликта.

Доступны следующие варианты группового разрешения:
  • Ручной выбор конфликтов. При таком варианте можно выбрать каждый конфликт с помощью флага в правой части строки для каждого конфликта.

  • Групповой выбор с помощью флага Конфликты без разрешения. Позволяет выбрать только конфликты, у которых нет разрешения. Статус разрешения обозначается иконкой-индикатором в столбце Разрешён.

  • Групповой выбор с помощью флага Выбрать всё. Позволяет выбрать или отменить выбор всех обнаруженных конфликтов.

  • Групповой выбор похожих конфликтов с помощью кнопки Выбрать похожие. Кнопка позволяет сгруппировать все конфликты одного вида и применить к ним одно из доступных разрешений. Похожие конфликты перемещаются наверх таблицы.

При выборе двух и более однотипных конфликтов становится доступной кнопка Применить групповое решение. Нажатие на кнопку вызывает окно выбора доступных вариантов решения. Выберите из списка вариант решения, запустите разрешение кнопкой Продолжить или отмените групповое решение кнопкой Отмена. При выборе Продолжить выбранный вариант решения конфликта применяется ко всем выбранным конфликтам, при выборе Отмена окно закрывается, вариант решения не применяется.

Если были выбраны конфликты разного типа, при нажатии на кнопку Применить групповое решение отображается сообщение Решение доступно для X конфликтов из Y выбранных.