Другие

Шаги этой группы служат для выполнения множества разнородных задач.

DbExecute - выполняет указанный SQL-запрос к базе данных

Rollup - создает записи с помощью преобразования

HTTPConnector - обращается к серверу посредством HTTP-запросов

DeleteFiles - удаляет файлы и каталоги

DbExecute

DbExecute выполняет указанные операторы SQL/DML/DDL для базы данных, подключенной с помощью драйвера JDBC. Шаг не имеет входных портов, а ответы на запрос к базе отправляются на первый выходной порт.

Порты DbExecute:

Тип портаНомерОбязательныйОписаниеМетаданные
Output0даДля выходных записейлюбые

Атрибуты DbExecute:

АтрибутОбязательныйОписаниеВозможные значения
dbConnectionдаИдентификатор соединения с БД, которое будет использоваться.
dbConnection="JDBC0"
sqlQueryдаSQL-запрос, определенный на графе.

<Attr name="transform"><![CDATA[
CREATE TABLE IF NOT EXISTS ${TABLE_NAME} (id INT,surname TEXT,name TEXT);
    TRUNCATE TABLE ${TABLE_NAME};
    SELECT * FROM ${TABLE_NAME};
    ]]> 
</Attr>
urlлибо имя внешнего файла, включая путь, определяющий запрос SQL с теми же характеристиками, которые описаны в атрибуте запроса SQL, либо строка атрибута URL-адреса файла, которая используется для чтения порта.url="port:$0.ddl:discrete"
charsetнет

Кодировка внешнего файла, указанная в атрибуте sqlQuery.

Rollup

Rollup создает одну или несколько выходных записей из одной или нескольких входных записей. Может отправлять разные записи на разные выходные порты, указанные пользователем.

Метаданные на разных выходных портах могут различаться.

Порты Rollup:

Тип портаНомерОбязательныйОписаниеМетаданные
Input0даДля входных записейлюбые
Output0даДля выходных записей
1-Nнет

Атрибуты Rollup:

АтрибутОбязательныйОписаниеВозможные значения
groupKeyFields / groupKeyдаКлюч, по которому записи считаются включенными в одну группу. Выражается в виде последовательности имен отдельных входных полей, разделенных друг от друга символом «#».name; salary
groupAccumulatorMetadataId / groupAccMd / groupMdдaИдентификатор метаданных, которые служат для создания групповых аккумуляторов.InputData
inputSorted / sortedдаПо умолчанию записи считаются отсортированными. Либо по возрастанию, либо по убыванию. Разные поля могут даже иметь разный порядок сортировки. Если ваши записи не отсортированы, установите для этого атрибута значение false.False
transformдаАлгоритм обработки данных. Функции для преобразования на шаге Rollup описаны в таблице ниже.
<Attr name="transform">
    <![CDATA[//#PseudoRust:code 
    Пользовательский алгоритм обработки.
    ]]>
</Attr>

Функции шага Rollup:

void initGroup( groupAccumulator)

ПараметрЗначение
ОбязательныйДа
Входные параметры
<metadata name> groupAccMd

Метаданные, указанные пользователем. Если groupAccMd не определен, выполнение графа завершится с ошибкой.

Возвращаетvoid
ВызовВызывается по одному разу для первой входной записи каждой группы. Вызывается перед updateGroup(groupAccMd).
ОписаниеИнициализирует информацию для конкретной группы.
Пример

pub fn init_group() { }

boolean updateGroup ( groupAccumulator)

ПараметрЗначение
ОбязательныйДа
Входные параметры
<metadata name> groupAccumulatorMetadataId

Метаданные, указанные пользователем. Если groupAccMd не определен, выполнение графа завершится с ошибкой.

Возвращает

если true, то вызывается updateTransform(counter, groupAccMd)

если false, то вызывается updateTransformOnError(counter, groupAccMd)

Вызов

Вызывается многократно (по одному разу для каждой входной записи группы, включая первую и последнюю запись). Вызывается после того, как функция initGroup(groupAccumulator) уже была вызвана для всей группы.

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

pub fn update_group() -> bool {
    group.count += 1;
    group.sum += input.salary;
return true}

boolean finishGroup( groupAccumulator)

ПараметрЗначение
ОбязательныйДа
Входные параметры
<metadata name> groupAccMd

Метаданные, указанные пользователем. Если groupAccMd не определен, выполнение графа завершится с ошибкой.

Возвращает

если true, то вызывается transform(counter,groupAccMd)

если false, то вызывается transformOnError(counter,groupAccMd)

Вызов

Вызывается повторно, один раз для последней входной записи каждой группы. Вызывается после того, как updateGroup(groupAccMd) уже был вызван для всех входных записей группы.

Описание

Если finishGroup() завершается с ошибкой, то весь граф завершится ошибкой.

Пример

pub fn finish_group() -> bool {
    if input.name.chars().count() < 5 { 
        return false }
        return true}

integer updateTransform(integer counter, groupAccumulator)

ПараметрЗначение
ОбязательныйДа
Входные параметры

Целочисленный счетчик (начинается с 0, указывает количество созданных записей. Должен быть завершен, как показано в примере ниже. Вызовы функций заканчиваются, когда возвращается SKIP.)

<metadata name> groupAccMd (метаданные, указанные пользователем).

Если groupAccMd не определен, выполнение графа завершится с ошибкой.

Возвращаетцелочисленные значения
Вызов

Вызывается неоднократно, как указано пользователем. Вызывается после того, как updateGroup(groupAccumulator) возвращает значение true. Функция вызывается до тех пор, пока не будет возвращен SKIP.

Описание

Создает выходные записи на основе информации об отдельных записях. Если updateTransform() завершится ошибкой, а updateTransformOnError() не определено, весь граф завершится ошибкой. Если какая-либо часть функции transform() для какой-либо выходной записи вызывает сбой функции updateTransform(), и если определена другая (updateTransformOnError()), обработка продолжается в этом updateTransformOnError() в том месте, где произошел сбой updateTransform(). Функция updateTransformOnError() получает информацию, собранную функцией updateTransform(), полученную из ранее успешно обработанного кода. Сообщение об ошибке и трассировка стека также передаются в updateTransformOnError().

Пример

pub fn update_transform(counter: usize) -> OutPort {
    if counter > 1 { 
        return out_port![SKIP] }

    output.out_0 = input.clone();
    return out_port![0]

integer transform(integer counter, groupAccumulator)

ПараметрЗначение
ОбязательныйДа
Входные параметры

целочисленный счетчик (начинается с 0, указывает количество созданных записей. должен быть завершен, как показано в примере ниже. Вызовы функций заканчиваются, когда возвращается SKIP.)

<metadata name> groupAccMd (метаданные, указанные пользователем).

Если groupAccMd не определен, выполнение графа завершится с ошибкой.

Возвращаетцелочисленные значения
Вызов

Вызывается неоднократно, как указано пользователем. Вызывается после того, как updateGroup(groupAccumulator) возвращает значение true. Функция вызывается до тех пор, пока не будет возвращен SKIP.

Описание

Создает выходные записи на основе всех записей всей группы. Если функция transform() завершается ошибкой, а функция transformOnError() не определена, весь граф завершится ошибкой. Если какая-либо часть функции transform() для какой-либо выходной записи вызывает сбой функции transform(), и если функция transformOnError() определена, обработка продолжается в transformOnError() в том месте, где произошла ошибка transform(). Функция transformOnError() получает информацию, собранную функцией transform(), которая была получена из ранее успешно обработанного кода. Также сообщение об ошибке и трассировка стека передаются в transformOnError().

Пример

pub fn transform(counter: usize) -> OutPort {
    if counter > 0 { 
        return out_port![SKIP] }
        
    output.out_0.name = input.name.clone() + "[AVG]";
    output.out_0.salary = group.sum / (group.count as f64);
    output.out_1 = output.out_0.clone();
    return out_port![ALL]

integer updateTransformOnError(string errorMessage, string stackTrace, integer counter, groupAccumulator)

ПараметрЗначение
ОбязательныйДа
Входные параметры

string errorMessage

string stackTrace

integer counter (начинается с 0, указывает количество созданных записей. должно быть завершено, как показано в примере ниже. Вызов функции завершается, когда возвращается SKIP.)

<metadata name> groupAccMd (метаданные, указанные пользователем).

Если groupAccMd не определен, выполнение графа завершится с ошибкой.

Возвращаетцелочисленные значения
Вызов

Вызывается, если updateTransform() вызывает исключение

Описание Создает выходные записи на основе информации об отдельных записях
Пример

pub fn update_transform_on_error(_: OutPort) { }
integer transformOnError(string errorMessage, string stackTrace, integer counter, groupAccumulator)
ПараметрЗначение
ОбязательныйДа
Входные параметры

string errorMessage

string stackTrace

integer counter (начинается с 0, указывает количество созданных записей. должно быть завершено, как показано в примере ниже. Вызов функции завершается, когда возвращается SKIP.)

<metadata name> groupAccMd (метаданные, указанные пользователем).

Если groupAccMd не определен, выполнение графа завершится с ошибкой.

Возвращаетцелочисленные значения
Вызов

Вызывается, если transform() выдает исключение

Описание Создает создает выходные записи на основе всех записей всей группы.
Пример

pub fn transform_on_error(_: OutPort) { }

Доступ к полям ввода и вывода

Все остальные функции шаблона PseudoRust не позволяют получить доступ ни к входам, ни к выходам, ни к groupAccMd.

Ввод записей или полей

Входные записи или поля доступны в функциях initGroup(), updateGroup(), finishGroup(). Они также доступны в функциях updateTransform(), transform(), updateTansformOnError() и transformOnError().

Выходные записи или поля

Выходные записи или поля доступны в функциях updateTransform(), transform(), updateTansformOnError() и transformOnError().

Групповой аккумулятор

Групповой аккумулятор доступен в функциях initGroup(), updateGroup(), finishGroup(). Он также доступен в функциях updateTransform(), transform(), updateTansformOnError() и transformOnError().

HTTPConnector

HTTPConnector отправляет запросы к указанному серверу и получает ответы. Запрос записывается в атрибут url. Ответ может быть отправлен на выходной порт или сохранён в указанном в атрибуте outputURL файле. Путь к выходному файлу может быть отправлен на указанный выходной порт.

Порты HTTPConnector:

Тип портаНомерОбязательныйОписаниеМетаданные
Input0нетДля установки различных атрибутов шагаЛюбые
Output0Содержимое ответа, путь к файлу ответа, код состояния, атрибуты шага
1Подробности об ошибках

Метаданные

таблица входных метаданных

таблица выходных метаданных (исходящих)

таблица ошибок

Атрибуты HTTPConnector:

АтрибутОбязательныйОписаниеВозможные значения
urlдаURL-адрес сервера, к которому подключается компонент. Формат URL-адреса смотрите в разделе [Поддерживаемые форматы](). Поддерживаются протоколы HTTP, HTTPS, FTP и SFTP.
requestMethodдаМетод запроса.requestMethod="POST"
addInputFieldsAsParametersУказывает, следует ли добавлять в URL-адрес дополнительные параметры из входящего ребра.addInputFieldsAsParameters="false" по умолчанию
addInputFieldsAsParametersToОтправить параметры в - указывает, следует ли добавлять входные поля в строку запроса или в тело метода. Параметры можно добавлять в тело метода только в том случае, если для метода запроса установлено значение POST. По умолчанию параметры передаются в QUERY. addInputFieldsAsParametersTo="BODY"
multipartEntitiesСоставные сущности - указывает поля, которые следует добавлять как составные объекты в запрос POST. Имя поля используется в качестве имени сущности. Ожидается список входных полей, разделенных точкой с запятой.
charsetКодировка символов входных/выходных файлов.charset="UTF-8" по умолчанию.
requestContentCодержимое запроса, указывается в сопоставлении входных данных inputMapping.
output.out_0.requestContent = input.in_0.xmlConfig;
inputURLURL-адрес входного файла, из которого считывается один HTTP-запрос. Подробнее о выборе файла в разделе [Диалоговое окно URL-файла]().
outputURLURL-адрес выходного файла, в который записывается HTTP-ответ. Подробнее о выборе файла в разделе [Диалоговое окно URL-файла]().
appendOutputПо умолчанию любой новый ответ перезаписывает старый. Если вы переключите этот атрибут на true, новый ответ будет добавлен к старым. Применяется только к выходным записям.
inputMappingСопоставление входных данных. Позволяет устанавливать соответствие между полями входных записей и атрибутами шага.
<attr name="inputMapping">
    <![CDATA[//#PseudoRust:code

        pub fn transform() -> OutPort {
            output.out_0.requestContent = input.in_0.xmlConfig;

            return out_port![ALL]
        }
    ]]>
</attr>
outputMappingСопоставление выходных данных. Позволяет сопоставить данные ответа (например, содержимое тела ответа, код состояния и т. д.) с полями выходной записи. Также можно сопоставить значения из входных полей и сведений об ошибке (если для параметра «Redirect error output» установлено значение true).
errorMappingСопоставление ошибок. Позволяет сопоставить сообщение об ошибке с выходной записью.
<attr name="errorMapping">
    <![CDATA[//#PseudoRust:code

        pub fn transform() -> OutPort {
            let message = "Ошибка удаления папки из директории";
            let logType = "ERROR";
            
            output.out_1.message = message;
            output.out_1.logType = logType;

            return out_port![ALL]
        }
    ]]>
</attr>
authenticationMethodнетУказывает, какой метод аутентификации следует использовать. HTTP BASIC | HTTP DIGEST | ANY authenticationMethod="BASIC" по умолчанию
usernameИмя пользователя, необходимое для подключения к серверу. username="${USER}"
passwordПароль, необходимый для подключения к серверу. password="${PASSWORD}"

Сопоставление входных данных

Для сопоставления входных данных через атрибут inputMapping используется Редактор преобразований, в котором можно решить, какие поля из входной записи следует назначить атрибутам шага.

Редактор преобразований для HTTPConnector

Редактор преобразований для HTTPConnector

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

Составные объекты

Вы можете настраивать составные объекты в Редакторе преобразований. inputMapping предлагает поля, производные от значения атрибута multipartEntities. Например, поле1;поле2 в качестве значения составных сущностей генерирует следующие поля:

Составные объекты в сопоставлении входных данных

Составные объекты в сопоставлении входных данных

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

Если вы имеете дело с составными объектами, вам необходимо использовать метод POST. При указании составного объекта к HTTP-запросу автоматически добавляется дополнительный Content-type заголовок, содержащий значение «multipart/form-data». Более того, рёбра будут указываться и распределяться автоматически и в HTTP-запросе. Настройка HTTP-заголовка Content-type как «multipart/form-data» вручную нарушит автоматическую спецификацию рёбер.

Возможные способы настройки составных сущностей (расписать подробнее):

  • Список входных полей
  • Содержимое карты составного объекта
  • Содержимое карты и имя файла
  • Использовать файл как составной объект

Список входных полей

Атрибут Multipart entities содержит список полей из входной записи, разделенных точкой с запятой. Каждое поле представляет собой составную сущность. Имя совпадает с именем поля, значение поля используется в качестве содержимого.

Содержимое карты составного объекта

Используйте сопоставление входных данных inputMapping, чтобы установить содержимое составных сущностей. Составное имя будет таким же, как имя поля, а содержимое будет определяться сопоставлением.

Содержимое карты и имя файла

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

Использовать файл как составной объект

Раздел в разработке

Сопоставление выходных данных

При редактировании атрибута outputMapping открывается Редактор преобразования, в котором вы можете решить, что следует отправить на выходной порт.

Редактор преобразований для HTTPConnector

Редактор преобразований для HTTPConnector

Чтобы выполнить сопоставление, выполните несколько основных шагов:

  1. Если у вас уже есть выходные метаданные, щелкните левой кнопкой мыши элемент на левой панели и перетащите его в поле вывода. Это отправит данные результата на выход.
  2. Если у вас нет выходных метаданных:
    • Перетащите поле с левой панели на правую панель (пустое место).
    • Это создает новое поле в выходных метаданных.

Вы можете сопоставить различные данные с выходным портом:

  • Значения полей из входных метаданных — вы можете отправлять значения из полей ввода в выходной порт. Это особенно полезно, когда вы используете какой-то идентификатор сеанса для HTTP-запросов.

  • Результат — предоставляет данные о результате. К ним относятся:

    • content — содержимое HTTP-ответа в виде строки. Это поле будет иметь значение null, если ответ записывается в файл.
    • contentByte — необработанное содержимое HTTP-ответа в виде массива байтов. Это поле будет иметь значение null, если ответ записывается в файл.
    • outputFilePath - путь к файлу, в который записан ответ. Будет нулевым, если ответ не записывается в файл.
    • statusCode — код состояния HTTP ответа. заголовок — карта, представляющая свойства HTTP-заголовка из ответа.
    • rawHeaders — заголовки ответа.
    • errorMessage — сообщение об ошибке в случае, если вывод ошибки перенаправляется на стандартный порт вывода.
  • Атрибуты — предоставляет значения атрибутов компонента:

    • URL-адрес — URL-адрес, по которому был отправлен запрос.
    • requestMethod — метод, который использовался для запроса.
    • requestContent — содержимое отправленного запроса (если указано в виде строки).
    • inputFileUrl — URL-адрес файла, содержащего содержимое запроса.

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

Пример в разработке

Сопоставление ошибок

При редактировании атрибута errorMapping открывается редактор преобразований, в котором можно сопоставить сведения об ошибке с выходным портом. Поведение очень похоже на отображение вывода. Если вы оставите сопоставление ошибок пустым, будет использовано сопоставление ошибок по умолчанию:

output.out_1.* = input.in_0.*;
output.out_1.* = input.in_1.*;

Пример. Скачать Web-страницу

Загрузите содержимое веб-страницы modernsolution.ru с помощью HTTPConnector. Сохраните результат в файл для дальнейшей обработки.

Решение

Используйте атрибуты URL-адреса и URL-адреса выходного файла. Загруженная страница будет сохранена в файле result.html в каталоге ${DATAOUT_DIR}.

АтрибутЗначение
URL

https://modernsolution.ru

Output file URL${DATAOUT_DIR}/result.html

DeleteFiles

DeleteFiles используется для удаления файлов и каталогов (в том числе, рекурсивно).

Порты DeleteFiles:

Тип портаНомерОбязательныйОписаниеМетаданные
Input0нетДля входных записей, которые необходимо сопоставить с атрибутами шага.любые
Output0нетРезультаты
1нетОшибки

Атрибуты DeleteFiles:

АтрибутОбязательныйОписаниеВозможные значения
fileURL

да1

Путь к файлу или каталогу, который необходимо удалитьfileURL="${DATATMP_DIR}/bl/esb/loadHub/${srcName}_${tableName}.csv"
recursiveнетУдалять каталоги рекурсивно.recursive="true" по умолчанию
inputMapping

2

Определяет маппинг входных записей с атрибутами шага.

<attr name="inputMapping">
    <![CDATA[//#PseudoRust

        pub fn transform() -> OutPort {
            output.out_0.fileURL = input.in_0.url;

            return out_port![ALL]
        }
    ]]>
</attr>
standardOutputMapping

2

Определяет маппинг результатов работы шага на стандартный порт вывода.

<attr name="standardOutputMapping">
    <![CDATA[//#PseudoRust
        pub fn transform() -> OutPort {
            output.out_0.message[0] = "Файл удален из архива: "+input.in_0.name;
            output.out_0.logType[0] = "INFO";

            return out_port![ALL]
        }
    ]]>
</attr>
errorOutputMapping

2

Определяет отображение ошибок на порт вывода ошибок.

<attr name="errorOutputMapping"><![CDATA[//#PseudoRust
pub fn transform() -> OutPort {
	output.out_1.message[0] = "Ошибка удаления файла из архива: "+input.in_0.name+"\n"+input.in_1.errorMessage;
	output.out_1.logType[0] = "ERROR";

	return out_port![ALL]
}

]]></attr>
redirectErrorOutputнетЕсли этот параметр включен, ошибки будут отправляться на стандартный порт вывода вместо порта ошибок.redirectErrorOutput="false" по умолчанию
stopOnFailнетПо умолчанию сбой при обработке графа приведёт к тому, что шаг пропустит все последующие входные записи и отправит информацию о них на порт вывода ошибок. Такое поведение можно отключить с помощью этого атрибута.

false: если произойдет ошибка (например, файл не найден), шаг продолжит удаление последующих файлов.

true: в случае возникновения ошибки шаг прекратит удаление последующих файлов и отправит информацию об оставшихся неудалёнными файлах на порт ошибки.

Примечание: эта функция работает только в том случае, если к порту ошибки шага подключено ребро.

stopOnFail="false" по умолчанию
1

Атрибут является обязательным, если он не указан в маппинге входных записей.

2

Требуется, если соответствующее ребро подключено.

При редактировании любого маппинга открывается Редактор преобразований.

Сопоставление входных данных

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

АтрибутТипВозможные значения
fileURLstringfileURL="${DATA_DIR}/folder/log.txt"
recursivebooleantrue | false

Сопоставление выходных данных

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

Если выходное сопоставление пусто, поля входной записи и результирующей записи сопоставляются с выходными данными по имени.

Имя поляТипВозможные значения
fileURLstringПуть к файлу или каталогу, который был удален.
resultbooleanTrue, если операция завершилась успешно (может быть false, если включено перенаправление ошибок).
errorMessagestringЕсли операция не удалась, поле содержит сообщение об ошибке (используется, когда включено перенаправление ошибок).
stackTracestringЕсли операция не удалась, поле содержит трассировку стека ошибки (используется, когда включено перенаправление ошибок).

Сопоставление ошибок

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

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

Имя поляТипОписание
resultbooleanВсегда будет установлено значение false.
errorMessagestringСообщение об ошибке
stackTracestringТрассировка ошибок.
fileURLstringURL-адрес удаленного файла или каталога.

Пример. Удаление файла

Чтобы удалить файл ${PROJECT_DIR}/delete_me.txt нужно заполнить атрибут fileURL.

АтрибутЗначение
fileURL${PROJECT_DIR}/delete_me.txt

Пример. Удаление директории

Чтобы удалить директорию ${OLD_PROJECT}/old_folder нужно заполнить атрибуты fileURL и recursive.

АтрибутЗначение
fileURL${PROJECT_DIR}/delete_me.txt
recursivetrue