[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 ключа связи будет сохранен;
- импортируемые данные объединенных справочников так же будут объединены.
Импортируется Справочник 2. Отображаемое имя "Наши новые клиенты", имя "OurCustomers", Uid "5882935F-43FB-4288-BE08-45660D4D995F".
Эти два справочника имеют одинаковые уникальные номера и имена. При импорте они будут объединены. Полученный в результате объединения справочник будет иметь отображаемое имя "Наши новые клиенты", имя "OurCustomers", Uid "5882935F-43FB-4288-BE08-45660D4D995F".
Этот пример применим к случаю, когда справочник был выгружен в файл конфигурации, ему сменили отображаемое имя, после чего импортировали его ранее выгруженную версию.
Импортируется Справочник 2. Отображаемое имя "Наши клиенты", имя "OurCustomers", Uid "BC4D4F8A-06DD-4A9C-AD37-5097688059EB".
Эти два справочника несмотря на одинаковые имена и отображаемые имена имеют разные уникальные номера. Для системы это два разных справочника. Так как не могут существовать два разных справочника с одним именем, то Справочник 2 не только не будет объединен со Справочником 1, но и вообще не будет загружен в систему.
Этот пример применим к случаю, когда на двух разных серверах создали справочники с одинаковыми названиями и попытались перенести один из них на другой сервер.
Справочник 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-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-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".
Справочник 1 имеет:
- Свойство 1-1 с отображаемым именем "Выплата", именем "Payment", Uid "8FB17373-020B-4630-AE57-8A3300AEAECB".
- Свойство 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#»;
- «Невозможно добавить импортируемый блок в контекст: Имя объекта совпадает с именем одного из свойств».