Особенности экспорта-импорта 3.2.0

Проверка файла конфигурации перед импортом

Перед импортом файла конфигурации производится его проверка.


Результат проверки выводится списком.

- сообщения. Информируют о событиях на которые стоит обратить внимание:

  • перезагрузка сервера;
  • замена и переопубликация оргструктуры;
  • объединение справочников или документов;
  • демо-версия импорта.

- предупреждения. Информируют о событиях, способных повлиять на целостность данных:

  • невозможность импортировать некоторые метаданные или данные (например импортируется конфигурация, относящаяся к модулю, не активированному в системе)

 - ошибки. Сообщают о невозможности импортировать конфигурацию:

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

 

Бэкапы
Перед импортом рекомендуется сделать бэкап базы данных.

 

Максимальная длина названия таблицы

Разные базы данных допускают разные максимальные размеры названия таблицы.
Максимальная длина имени импортируемой таблицы

  • для MS SQL – 29 символов;
  • для Fire Bird – 29 символов;
  • для Oracle – 28 символов.

Это следует учитывать при переносе метаданных (справочников, перечислений и документов) с одного типа сервера БД на другой.
Данный пункт применим только для баз данных, созданных в старых версиях ELMA. На момент написания статьи максимальная длина имени создаваемых таблиц для всех баз данных 28 символов.

 

Импорт в Демо-версии

При импорте в демо-версию будут импортированы только пакеты данных процессов. Пакеты метаданных (справочники, перечисления, документы) и пакеты данных, не относящихся к процессам будут пропущены.

 

Экспорт-импорт оргструктуры

При экспорте оргструктуры будет выгружена опубликованная версия.
При импорте загружаемая оргструктура будет автоматически опубликована и заменит действующую.

 
Будьте внимательней при экспорте
Не выбирайте экспорт оргструктуры, если это не требуется.

 

Экспорт-импорт модели KPI

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

 

Экспорт-импорт отчетов

  • При экспорте выгружается черновик отчета.
  • При импорте отчет не будет опубликован автоматически.

 

Экспорт-импорт процессов

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

Правила импорта процессов

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

Объединение контекста процессов

При переносе процессов с одного сервера на другой имеется ряд ситуаций, требующих особый подход.
Пример: На Сервере1 создают процесс и переносят его на Сервер2. На Сервере1 и на Сервере2 в эти процессы добавляют свойство с одинаковым названием. После выгружают процесс с Сервера2 на Сервер1.
Перенос такого рода порождает конфликт. Для его решения введено объединение контекстов имеющегося и импортируемого процессов.

  • Если в системе имеется процесс с Uid’ом соответствующим импортируемому, то их контексты будут объединены.
  • Свойства разного типа не могут быть объединены.
  • Свойства с разным типом связи не могут быть объединены.
  • При объединении процессов их Блоки объединяются по Uid’у и имени.
  • Свойства внутри объединяемых блоков также объединяются.
  • При объединении свойств отображаемое имя имеющегося свойства будет заменено на отображаемое имя импортируемого.
  • При объединении свойств имя имеющегося свойства будет заменено на имя импортируемого.
  • При объединении свойств Uid имеющегося будет сохранен.
 
Особенность объединения контекста процессов
При объединении контекста имеющегося и импортируемого процессов, учитывается не только свойства и блоки текущей версии имеющегося процесса, но и ранее опубликованных версий.

 

Экспорт-импорт пользовательских расширений

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

 

Экспорт-импорт метаданных

  • При экспорте справочников, документов и перечислений (далее метаданные ) выгружаются их опубликованные версии. При импорте метаданных в случае отсутствия аналогичных метаданных в системе создаются и публикуются новые метаданные. При наличии аналогичных производится их объединение и публикация.
  • Если экспортируемые справочники или перечисления находятся в группе, созданной пользователем, то эта группа также будет выгружена.
  • Если экспортируемые справочники или перечисления находятся в системной группе, то при импорте они будут помещены в эту же системную группу. В случае отсутствия таковой, они будут помещены в группу «Общий модуль».
  • Если экспортируемые документы находятся в группе, созданной пользователем, то эта группа также будет выгружена.
  • Для экспорта-импорта доступны только пользовательские перечисления.

Объединение метаданных

При переносе данных с одного сервера на другой имеется ряд ситуаций, требующих особый подход.
Пример 1: На Сервере1 создают справочник и переносят его на Сервер2. На Сервере1 и на Сервере2 в эти справочники добавляют атрибут с одинаковым названием. После выгружают справочник с Сервера2 на Сервер1.
Пример2: На Сервере1 создают справочник и переносят его на Сервер2. На Сервере2 переименовывают один из атрибутов. После выгружают справочник с Сервера2 на Сервер1.
Перенос такого рода порождает конфликт. Для его решения введено объединение метаданных и их свойств.

 
Свойства идентифицирующие метаданные при их импорте
Метаданные имеют ряд свойств, позволяющих идентифицировать их.
• Отображаемое имя ( DisplayName ) – название, видимое пользователю. Совпадение отображаемых имен загружаемых и имеющихся метаданных не является признаком совпадения метаданных.
• Имя ( Name ) – название с которым оперируют администраторы системы и внедрение. Совпадение имен загружаемых и имеющихся метаданных не является признаком совпадения метаданных.
• Уникальный идентификатор ( Uid ) – номер по которому однозначно определяется уникальность типа объекта. Совпадение уникальных идентификаторов загружаемых и имеющихся метаданных является признаком совпадения метаданных. Метаданные считаются одинаковыми, если они имеют одинаковый Uid.
Объединение справочников/документов
  • Если в системе имеется справочник/документ с Uid’ом соответствующим импортируемому, то они будут объединены.
  • При объединении справочников/документов отображаемое имя имеющегося справочника/документа будет заменено на отображаемое имя импортируемого справочника/документа.
  • В случае, если импортируемые метаданные заменяют или объединяются с имеющимися, происходит объединение их скриптов. При этом текст скрипта базовых метаданных комментируется, вместо него устанавливается текст скрипта импортируемых метаданных.
  • При объединении справочников/документов их свойства объединяются по Uid’у и имени.
  • Свойства разного типа не могут быть объединены.
  • Свойства с разным типом связи не могут быть объединены.
  • При объединении справочников/документов их Блоки объединяются по Uid’у и имени.
  • Свойства внутри объединяемых блоков также объединяются.
  • При объединении свойств отображаемое имя имеющегося свойства будет заменено на отображаемое имя импортируемого.
  • При объединении свойств имя имеющегося свойства будет заменено на имя импортируемого.
  • При объединении свойств Uid имеющегося будет сохранен.
  • При объединении свойств, имеющих связь 1-N, Uid ключа связи будет сохранен.
  • Импортируемые данные объединенных справочников так же будут объединены.

Пример объединения справочников
Имеется Справочник1. Отображаемое имя "Наши клиенты", имя "OurCustomers", Uid "5882935F-43FB-4288-BE08-45660D4D995F".
Импортируется Справочник2. Отображаемое имя "Наши новые клиенты", имя "OurCustomers", Uid "5882935F-43FB-4288-BE08-45660D4D995F".

Эти два справочника имеют одинаковые уникальные номера и имена. При импорте они будут объединены. Полученный в результате объединения справочник будет иметь отображаемое имя "Наши новые клиенты", имя "OurCustomers", Uid "5882935F-43FB-4288-BE08-45660D4D995F".

Этот пример применим к случаю, когда справочник был выгружен в файл конфигурации, ему сменили отображаемое имя, после чего импортировали его ранее выгруженную версию.
Пример неудачного объединения справочников
Имеется Справочник1. Отображаемое имя "Наши клиенты", имя "OurCustomers", Uid "5882935F-43FB-4288-BE08-45660D4D995F".
Импортируется Справочник2. Отображаемое имя "Наши клиенты", имя "OurCustomers", Uid "BC4D4F8A-06DD-4A9C-AD37-5097688059EB".

Эти два справочника несмотря на одинаковые имена и отображаемые имена имеют разные уникальные номера. Для системы это два разных справочника. Так как не могут существовать два разных справочника с одним именем, то Справочник2 не только не будет объединен со Справочником1, но и вообще не будет загружен в систему.

Этот пример применим к случаю, когда на двух разных серверах создали справочники с одинаковыми названиями и попытались перенести один из них на другой сервер.
Пример объединения свойств для объединяемых справочников
Объединяются имеющийся Справочник1 и импортируемый Справочник2.

Справочник1 имеет:
  • Свойство1-1 с отображаемым именем "ФИО", именем "FIO", Uid "5B341C74-9E74-46BB-B33F-7A727E398A68"
  • Свойство1-2 с отображаемым именем "Месячная зарплата", именем "Salary", Uid "E950CCEC-E4D3-420C-BDD2-8E55E013456A"
  • Блок1-3 с отображаемым именем "Выплаты", именем "Payments", Uid "E04C077A-A9DF-481C-ABC6-0CB86D6A269F"
Справочник2 имеет:
  • Свойство2-1 с отображаемым именем "ФИО", именем "FIO", Uid "5B341C74-9E74-46BB-B33F-7A727E398A68"
  • Свойство2-2 с отображаемым именем "Зарплата", именем "Salary", Uid "BC4D4F8A-06DD-4A9C-AD37-5097688059EB"
  • Блок2-3 с отображаемым именем "Выплаты", именем "Payments", Uid "E04C077A-A9DF-481C-ABC6-0CB86D6A269F" со свойством:
    • Свойство2-3-1 с отображаемым именем "Выплата", именем "Vyplata", Uid "1C8C91EE-9B93-4700-9171-65AE6C686F5D"
Свойство1-1 будет объединено со Свойством2-1, так как они совпадают и по уникальному номеру и по имени.
Свойство1-2 будет объединено со свойством Свойством2-2, так как они совпадают по имени.
Блок1-3 будет объединен с Блоком2-3, так как. они совпадают и по уникальному номеру и по имени.
Свойство2-3-1 попадет в объединенный блок.

Полученный в результате объединения Справочник3 будет иметь:
  • Свойство3-1 с отображаемым именем "ФИО", именем "FIO", Uid "5B341C74-9E74-46BB-B33F-7A727E398A68"
  • Свойство3-2 с отображаемым именем "Зарплата", именем "Salary", Uid "E950CCEC-E4D3-420C-BDD2-8E55E013456A"
  • Блок3-3 с отображаемым именем "Выплаты", именем "Payments", Uid "E04C077A-A9DF-481C-ABC6-0CB86D6A269F" со свойством:
    • Свойство3-3-1 с отображаемым именем "Выплата", именем "Vyplata", Uid "1C8C91EE-9B93-4700-9171-65AE6C686F5D"
Этот пример применим к случаю, когда справочник, имея только свойство "ФИО" и пустой блок "Выплаты", был выгружен из системы на другой сервер. На обоих серверах было добавлено свойство с именем "Salary", но разными отображаемыми именами. На втором сервере в блок "Выплаты" было добавлено свойство "Выплата". После чего справочник был выгружен со второго и импортирован на первый сервер.
Пример неудачного объединения свойств для объединяемых справочников
Объединяются имеющийся Справочник1 и импортируемый Справочник2.

Справочник1 имеет:
  • Свойство1-1 с отображаемым именем "Выплата", именем "Payment", Uid "8FB17373-020B-4630-AE57-8A3300AEAECB"
Справочник2 имеет:
  • Свойство2-1 с отображаемым именем "Выплата", именем "Vyplata", Uid "66D19D1E-D4B2-46F3-86F8-4078434226C7"

Свойство2-1 не может быть ни объединено со Свойством 1-1 (так как у них разные имена и уникальные номера), ни добавлено в качестве второго свойства (так как нельзя иметь в справочнике два свойства одинаковыми отображаемыми именами). В результате Справчоник2 не будет загружен в систему.

Этот пример применим к случаю, когда справочник выгрузили с одного сервера на другой. На втором случайно стерли свойство "Выплата" и решили его самостоятельно восстановить, создав новое с таким же отображаемым именем. При этом не обратили внимание на то, что созданное имя отличается от исходного. После чего попробовали перенести справочник обратно на первый сервер.
Объединение перечислений
  • Если в системе имеется перечисление с Uid’ом соответствующим импортируемому, то они будут объединены.
  • Не допускается объединение перечислений имеющих один Uid, но разные имена
  • При объединении перечислений отображаемое имя имеющегося перечисления будет заменено на отображаемое имя импортируемого перечисления.
  • Объединение перечислений, имеющих значение с одинаковым именем, но разным значением не допускается.
  • При объединении значений перечислений отображаемое имя имеющегося значения будет заменено на отображаемое имя импортируемого значения.

 

Ошибки проверки файла конфигурации при импорте и их возможные причины


Ошибки системы или файла конфигурации

В системе есть опубликованные объекты или документы, требующие перезагрузки сервера. Для устранения ошибки перезапустите сервер ELMA.

  • «В системе имеются опубликованные объекты, требующие перезапуска сервера. Перезагрузите сервер и запустите импорт заново».


Нарушена структура файла files.xml.

  • «Файл конфигурации импортируемых файлов содержит некорректные данные»


Нарушена структура файла config.xml.

  • «Файл конфигурации не содержит данных, либо версия экспорта-импорта файла конфигурации не соответствует текущей»
  • «Файл конфигурации не содержит раздела ConfigurationData»
  • «Файл конфигурации не содержит раздела MetadaData»
  • «Файл конфигурации не содержит раздела Data»


Ошибки импорта метаданных

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

  • «Импортируемое перечисление является системным»
  • «Имеющееся перечисление является системным»


Объединение перечислений с разными именами не допускается. Для устранения ошибки переименуйте перечисление.

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

Объединение значений перечислений с одинаковыми именами, но разными значениями недопустимо.

  • «Для перечисления числовое значение импортируемого значения отличается от имеющегося числового значения»


Невозможность объединить значения объединяемых перечислений без нарушения правил создания перечислений.

  • «Невозможно добавить значение в перечисление: Значение с таким именем уже существует»
  • «Невозможно добавить значение в перечисление: Числовое значение уже существует в перечислении»


Нарушение структуры БД или файла конфигурации.

  • «Невозможно добавить значение в перечисление: Имя значения должно быть корректным идентификатором (допускаются только буквы английского алфавита, цифры и знак подчеркивания)»
  • «Невозможно добавить значение в перечисление: Не допускаются ключевые слова C#»


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

  • «Импортируемые системные метаданные имеют Uid соответствующий Uid имеющихся пользовательских метаданных»
  • «Импортируемые системные метаданные имеют имя несоответствующее имеющимся системным метаданным»
  • «Импортируемые системные метаданные имеют тип несоответствующий типу имеющихся системных метаданных»
  • «Импортируемые пользовательские метаданные имеют Uid соответствующий Uid имеющихся системных метаданных»


Нарушение структуры БД или файла конфигурации.

  • «Импортируемые пользовательские метаданные имеют имя отличное от имени имеющихся пользовательских метаданных»
  • «Импортируемые пользовательские метаданные имеют имя таблицы отличное от имени таблицы имеющихся пользовательских метаданных»


Попытка импорта конфигурации, несоответствующей конфигурации сервера.

  • «Ошибка считывания метаданных: Тип метаданных не определен»
  • «Ошибка считывания метаданных: описание метаданных отсутствует»


Невозможность объединить свойства объединяемых справочников/документов без нарушения правил наименования свойств.

  • «Невозможно добавить импортируемое свойство в метаданные: Свойство с таким отображаем именем уже существует»


Нарушение структуры БД или файла конфигурации.

  • «Невозможно добавить импортируемое свойство в метаданные: Не указано имя свойства»
  • «Невозможно добавить импортируемое свойство в метаданные: Имя свойства не должно совпадать с именем объекта»
  • «Невозможно добавить импортируемое свойство в метаданные: Имя свойства должно быть корректным идентификатором (допускаются только буквы английского алфавита, цифры и знак подчеркивания)»
  • «Невозможно добавить импортируемое свойство в метаданные: Нельзя использовать имя Id»
  • «Невозможно добавить импортируемое свойство в метаданные: Не допускаются ключевые слова C#»


Невозможность объединить свойства объединяемых справочников/документов без нарушения правил наименования свойств в базе данных.

  • «Невозможно добавить импортируемое свойство в метаданные: Свойство с именем поля уже существует»


Нарушение структуры БД или файла конфигурации.

  • «Невозможно добавить импортируемое свойство в метаданные: Имя поля не может начинаться со знака подчеркивания»
  • «Невозможно добавить импортируемое свойство в метаданные: Имя поля должно быть корректным идентификатором (допускаются только буквы английского алфавита, цифры и знак подчеркивания)»
  • «Невозможно добавить импортируемое свойство в метаданные: Нельзя использовать имя Id»


Невозможно установить связь 1-N, т.к. связанном объекте отсутствует указанная ключевая колонка.

  • «Невозможно добавить импортируемое свойство в метаданные: Невозможно установить связь 1-N, отсутствует ключевая колонка»


Невозможность объединить блоки объединяемых справочников/документов без нарушения правил наименования свойств.

  • «Невозможно добавить импортируемый блок в метаданные: Свойство с таким отображаем именем уже существует»
  • «Невозможно добавить импортируемый блок в метаданные: Свойство с таким именем уже существует»
  • «Невозможно добавить импортируемый блок в метаданные: Имя объекта совпадает с именем одного из свойств»


Нарушение структуры БД или файла конфигурации.

  • «Невозможно добавить импортируемый блок в метаданные: Не указано имя свойства»
  • «Невозможно добавить импортируемый блок в метаданные: Имя свойства не должно совпадать с именем объекта»
  • «Невозможно добавить импортируемый блок в метаданные: Нельзя использовать имя Id»
  • «Невозможно добавить импортируемый блок в метаданные: Не допускаются ключевые слова C#»


Допускается объединение свойств только одного типа.

  • «Для метаданных тип импортируемого свойства отличается от типа имеющегося свойства»
  • «Для метаданных тип связи импортируемого свойства отличается от типа связи имеющегося свойства»


Нарушение структуры БД или файла конфигурации.

  • «Имя таблицы недопустимо: Имя таблицы не может быть пустым»
  • «Имя таблицы недопустимо: Имя таблицы не может начинаться со знака подчеркивания»
  • «Имя таблицы недопустимо: Имя таблицы должно быть корректным идентификатором (допускаются только буквы английского алфавита, цифры и знак подчеркивания)»
  • «Имя таблицы недопустимо: Имя таблицы не должно быть более 28 символов»


Невозможность импорта справочника/документа без нарушения правил наименования таблиц в базе данных.

  • «Имя таблицы недопустимо: Таблица с таким именем уже существует»


Ошибки импорта процессов

Невозможность объединить свойства объединяемых контекстов без нарушения правил наименования свойств.

  • «Невозможно добавить импортируемое свойство в контекст:  Свойство с таким отображаем именем уже существует»
  • «Невозможно добавить импортируемое свойство в контекст:  Не указано имя свойства»
  • «Невозможно добавить импортируемое свойство в контекст:  Имя свойства не должно совпадать с именем объекта»
  • «Невозможно добавить импортируемое свойство в контекст: Свойство с таким именем уже существует»
  • «Имена полей совпадают»


Допускается объединение свойств только одного типа.

  • «Для контекста тип импортируемого свойства отличается от типа имеющегося свойства»
  • «Для контекста тип связи импортируемого свойства отличается от типа связи имеющегося свойства»


Нарушение структуры БД или файла конфигурации.

  • «Невозможно добавить импортируемое свойство в контекст: Имя свойства должно быть корректным идентификатором (допускаются только буквы английского алфавита, цифры и знак подчеркивания)»
  • «Невозможно добавить импортируемое свойство в контекст:  Нельзя использовать имя ID»
  • «Невозможно добавить импортируемое свойство в контекст:  Не допускаются ключевые слова C#»
  • «Невозможно добавить импортируемое свойство в контекст: Не указано имя поля»
  • «Невозможно добавить импортируемое свойство в контекст: Свойство с именем поля уже существует»
  • «Невозможно добавить импортируемое свойство в контекст: Имя поля не может начинаться со знака подчеркивания»
  • «Невозможно добавить импортируемое свойство в контекст: Имя поля должно быть корректным идентификатором (допускаются только буквы английского алфавита, цифры и знак подчеркивания)»
  • «Невозможно добавить импортируемое свойство в контекст: Нельзя использовать имя Id»


Попытка импорта конфигурации, несоответствующей конфигурации сервера.

  • «Невозможно добавить импортируемое свойство в контекст: Тип свойства отсутствует в системе»


Невозможность объединить блоков объединяемых контекстов без нарушения правил наименования блоков.

  • «Невозможно добавить импортируемый блок в контекст: Свойство с таким отображаем именем уже существует»
  • «Невозможно добавить импортируемый блок в контекст: Не указано имя свойства»
  • «Невозможно добавить импортируемый блок в контекст: Имя свойства не должно совпадать с именем объекта»
  • «Невозможно добавить импортируемый блок в контекст: Свойство с таким именем уже существует»


Нарушение структуры БД или файла конфигурации.

  • «Невозможно добавить импортируемый блок в контекст: Имя свойства должно быть корректным идентификатором (допускаются только буквы английского алфавита, цифры и знак подчеркивания)»
  • «Невозможно добавить импортируемый блок в контекст: Нельзя использовать имя  ID»
  • «Невозможно добавить импортируемый блок в контекст: Не допускаются ключевые слова C#»
  • «Невозможно добавить импортируемый блок в контекст: Имя объекта совпадает с именем одного из свойств»