Базовые конфигурации импорта

Импорт отделов

Импортировать можно любые атрибуты класса "Отдел" (ou), включая пользовательские. Для корректного проведения процедуры импорта во внешнем источнике должны быть указаны поля, соответствующие обязательным атрибутам класса "Отдел" (ou), например, "Идентификатор", "Название".

Для создания иерархии вложенных отделов следует указывать родительский объект "parent", допускается значение "null", если отдел создается в корне, см. Связь типа "Вложение".

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

При импорте (синхронизации) отделов доступны все режимы импорта:

  • CREATE — только создание объектов.
  • UPDATE — только обновление существующих объектов.
  • EMPTY — без создания объектов и обновления существующих объектов.

    В режиме EMPTY выполняются только: script-filter, вычисление значений атрибутов, script-customizer, remove-customizer.

Примеры

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

Copy
<?xml version="1.0" encoding="UTF-8"?>
<!-- Базовая конфигурация импорта отделов -->
<config
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../../../../../target/generated-sources/jaxb/advimport/schema1.xsd"
save-log="true">
 
<!-- РЕЖИМ ИМПОРТА: -->
<mode>CREATE</mode>
 
<!-- ПАРАМЕТРЫ, запрашиваемые на форме запуска импорта: -->
<gui-parameter name="file" type="FILE" title="Файл для импорта отделов в формате csv" />
 
<!-- ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ: -->
<!-- класс импортируемых отделов-->
<parameter name="ouMetaClass">ou$ouImport</parameter>
 
<class name="ou" threads-number="2">
<csv-data-source with-header="true" file-name="$file" delimiter=";" encoding="UTF8">
<column name="title" src-key="title"/>
<column name="removed" src-key="removed"/>
<column name="removalDate" src-key="removalDate"/>
</csv-data-source>
<constant-metaclass-resolver metaclass="${ouMetaClass}"/>
<object-searcher attr="title" metaclass="ou"/>
<attr name="title" column="title" />
<attr name="removed" column="removed" />
<attr name="removalDate" column="removalDate" >
<datetime-converter format="yyyy-MM-dd"/>
</attr>
</class>
</config>

Пример файла.csv — источника данных для импорта отделов. ou.example.csv:

Copy
id;title;removed;removalDate;
1;first ou;true;;
2;second ou;false;;
3;3 ou;true;2000-01-01;
4;4 ou;false;2000-02-01;

Возможные ошибки импорта отделов

Ошибка Описание обработки ошибки
Возможные ошибки импорта  
Во внешнем источнике в качестве родительского объекта задан идентификатор самого отдела Объект пропускается

Импорт сотрудников

Импортировать можно любые атрибуты класса "Сотрудник" (employee), включая пользовательские. Для корректного проведения процедуры импорта во внешнем источнике должны быть указаны поля, соответствующие обязательным атрибутам класса "Сотрудник" (employee), например, "Идентификатор", "Наименование", "Отдел".

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

При импорте (синхронизации) сотрудников доступны все режимы импорта:

  • CREATE — только создание объектов.
  • UPDATE — только обновление существующих объектов.
  • EMPTY — без создания объектов и обновления существующих объектов.

    В режиме EMPTY выполняются только: script-filter, вычисление значений атрибутов, script-customizer, remove-customizer.

Примеры

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

Copy
<?xml version="1.0" encoding="UTF-8"?>
<!-- Базовая конфигурация импорта сотрудников -->
<!-- В классах отдел и сотрудник должен существовать атрибут типа строка с кодом idHolder -->
<config
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../../../../../target/classes/advimport/schema1.xsd"
save-log="true">
 
<!-- РЕЖИМЫ ИМПОРТА: -->
<mode>CREATE</mode>
<mode>UPDATE</mode>
 
<!-- ПАРАМЕТРЫ, запрашиваемые на форме запуска импорта: -->
<gui-parameter name="ouFile" type="FILE" title="Файл для импорта отделов в формате csv" />
<gui-parameter name="empFile" type="FILE" title="Файл для импорта сотрудников в формате csv" />
 
<!-- ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ: -->

<!-- класс отделов, в которые будут импортироваться сотрудники-->
<parameter name="ouMetaClass">ou$ouImport</parameter>
<!-- класс импортируемых сотрудников-->
<parameter name="empMetaClass">employee$empImport</parameter>
 
<!-- ПАРАМЕТРЫ класса импортируемых объектов: -->

<class name="ou" threads-number="2">
<csv-data-source with-header="true" file-name="$ouFile" delimiter=";" id-column="id" encoding="UTF8">
<column name="id" src-key="id"/>
<column name="title" src-key="title"/>
<column name="removed" src-key="removed"/>
<column name="removalDate" src-key="removalDate"/>
</csv-data-source>
 
<constant-metaclass-resolver metaclass="${ouMetaClass}"/>
<object-searcher attr="idHolder" metaclass="${ouMetaClass}"/>
<attr name="title" column="title" />
<attr name="removed" column="removed" />
<attr name="idHolder" column="id" />
<attr name="removalDate" column="removalDate" >
<datetime-converter format="yyyy-MM-dd"/>
</attr>
</class>
 <class name="importEmployee" threads-number="1">
<csv-data-source with-header="true" file-name="$empFile" delimiter=";" id-column="id" encoding="UTF8">
<column name="id" src-key="id"/>
<column name="parent" src-key="parent"/>
<column name="lastName" src-key="lastName"/>
<column name="firstName" src-key="firstName"/>
<column name="middleName" src-key="middleName"/>
</csv-data-source>
 
<constant-metaclass-resolver metaclass="${empMetaClass}"/>
<object-searcher attr="idHolder" metaclass="${empMetaClass}"/>

<attr name="lastName" column="lastName" />
<attr name="firstName" column="firstName" />
<attr name="middleName" column="middleName" />
<attr name="parent" column="parent" >
<object-converter attr="idHolder" metaclass="${ouMetaClass}" required="true" />
</attr>
<attr name="idHolder" column="id" />
</class>
</config>

Пример файла.csv — источника данных для импорта сотрудников. employee.example.csv:

Copy
id;parent;lastName;firstName;middleName;
empl1;4;Иванов;Сергей;Николаевич;
empl2;2;Петров;Иван;Сергеевич;

Возможные ошибки импорта сотрудников

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

Импорт справочников

Пример файла конфигурации:

Copy
<?xml version="1.0" encoding="UTF-8"?>
<!-- Базовая конфигурация импорта справочников -->
<config
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../../../target/classes/advimport/schema1.xsd"
save-log="true">
 
<!-- РЕЖИМЫ ИМПОРТА: -->
<mode>CREATE</mode>
<mode>UPDATE</mode>
 
<!-- ПАРАМЕТРЫ: -->
<gui-parameter name="file" type="FILE" title="Файл для импорта справочников в формате csv" />
<!-- Код справочника -->
<parameter name="CatalogCode">category</parameter>
 
<class name="catalog" threads-number="1">
 
<csv-data-source with-header="true" file-name="$file" delimiter=";" encoding="UTF8" id-column="code">
<column name="title" src-key="title"/>
<column name="code" src-key="code"/>
<column name="color" src-key="color"/>
<column name="folder" src-key="folder"/>
<column name="parent" src-key="parent"/>
</csv-data-source>
 
<constant-metaclass-resolver metaclass="${CatalogCode}"/>
<object-searcher attr="code" metaclass="${CatalogCode}"/>
<attr name="title" column="title"/>
<attr name="code" column="code"/>
<attr name="color" column="color"/>
<attr name="folder" column="folder"/>
<attr name="parent" column="parent">
<object-converter attr="code" required="false" metaclass="${CatalogCode}"/>
</attr>
 
</class>

Импорт из базы данных

Пример файла конфигурации:

Copy
<?xml version="1.0" encoding="UTF-8"?>
<config
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../../../../../target/classes/advimport/schema1.xsd"
save-log="true">
<mode>CREATE</mode>
<mode>UPDATE</mode>
<parameter name="configItemMetaClass">objectBase$configItem</parameter>
<parameter name="connectionCode">MySql</parameter>
<class name="configItem" threads-number="1" >
<sql-data-source id-column="inventoryNumber">
<column name="inventoryNumber" src-key="1"/>
<column name="title" src-key="2"/>
<column name="type" src-key="3"/>
<column name="behaviour" src-key="4"/>
<connection-code>${connectionCode}</connection-code>
<query>
select hw.inventoryNumber, hw.title, comp.type, (select inventoryNumber_struct from Structures st where st.inventoryNumber = hw.inventoryNumber) AS behaviour from Hardware hw inner join Components comp on hw.inventoryNumber = comp.inventoryNumber where hw.dateStartExp > '01/06/2019 12:00:00' group by hw.inventoryNumber, hw.title, hw.dateStartExp order by hw.dateStartExp
</query>
</sql-data-source>
<constant-metaclass-resolver metaclass="${configItemMetaClass}"/>
<object-searcher attr="inventoryNumber" metaclass="${configItemMetaClass}"/>
<attr name="inventoryNumber" column="inventoryNumber"/>
<attr name="title" column="title"/>
<attr name="type" column="type"/>
<attr name="behaviour" column="behaviour"/>
</class>
</config>