logo

[ELMA3] Особенности экспорта-импорта 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#»;
  • «Невозможно добавить импортируемый блок в контекст: Имя объекта совпадает с именем одного из свойств».