Файловый импорт в систему
Общая информация по функционалу
В случае необходимости разобрать и импортировать данные из любого файла в систему - можно воспользоваться данным функционалом.
Существует 3 системных справочника в микросервисе интеграций:
Кратко об использовании:
Создается конфигурация, где указывается информация о двух командах. Одна команда для парсинга, другая для обработки строк.
Загружается файл через справочник “Файлы для импорта”, указывается конфигурация в соответствии с которой этот файл должен обрабатываться.
Микросервис интеграции периодически ищет необработанные записи в справочнике “Файлы для импорта”. При их нахождении отправляет контент файла в виде команды в определенное приложение (данные для команды targetApp, type и тд берутся из конфигурации, это команда парсинга). В результате, ответом на команду вернется список строк для обработки, которые помещаются в журнал “Элементы файлового импорта”.
Микросервис интеграции периодически ищет необработанные записи в справочнике “Элементы файлового импорта”. При их нахождении отправляет payload найденных записей в виде команды в определенное приложение (данные для команды targetApp, type, maxBatch и тд берутся из конфигурации, это команда импорта). В результате, ответом на команду вернется информация об успешности завершения импорта строки или информация об ошибке.
Информация об использовании справочников
Конфигурация импорта файлов
Содержит информацию о том, как именно файлы выбранного типа импорта должны быть обработаны в системе после загрузки.
Пример готовой конфигурации (основная информация о командах для обработки):
Файлы для импорта
Журнал, в который загружаются файлы, которые необходимо обработать. Тут же пишется статус обработки файла.
Заведение записей в этот справочник состоит из выбора каким именно способом обрабатывать этот файл (выбор строки из журнала конфигурации импорта файлов), загрузки самого файла и выбора планируемой даты начала обработки. Если дата начала обработки не указана - файл начнет обрабатываться в ближайшее время.
Элементы файлового импорта
Журнал, в которые попадают строки файла после его парсинга. Строки сюда попадают автоматически.
Каждая строка, после стадии парсинга, возвращается в виде payload. Payload
содержит, обычно, json, который будет понимать команда импорта строк. Пример payload
можно видеть на скриншоте ниже:
Если импорт строки завершился ошибкой - команда может вернуть информацию об ошибке и эта ошибка будет отображена в журнале.
Пример создания своих обработчиков
1. Создание конфигурации импорта
Создать ее можно либо через журнал, либо подложив json по пути ${module_path}/integration/file-import-config
{
"id": "edi-events-import-config-id",
"title": "Загрузка события для документа по ID",
"parseCommandConfig": {
"targetApp": "alfresco",
"type": "***-edi-events-by-document-id-parse",
"ttl": "330000"
},
"importCommandConfig": {
"targetApp": "alfresco",
"type": "***-edi-get-events-by-document-id",
"ttl": "120000",
"maxBatch": "1"
}
}
2. Написание команды парсинга
В качестве dto на вход всегда одна структура:
@data
@CommandType ("***-edi ~events-by-document-id-parse")
public class EdiGetEventsByDocumentIdParseConmand {
private String filename;
private byte[] content;
Выход должен быть следующим:
@Data
@uloargsConstructor
@aiiargsConstructor
public class EdifventsByDocumentIdParseResult {
private boolean success;
private List<EdiEventsByDocumentIdItem> itemsResult;
private String error;
public static EdifventsByDocumentIdParseResult success (List<EdiEventsByDocumentIdItem> itemsResult) {
return new EdiEventsByDocumentIdParseResult (true, itemsResult, null);
public static EdigventsByDocumentIdParseResult fail (String error) {
return new EdifventsByDocumentIdParseResult (false, null, error);
В качествен itemsResult
может быть любая DTO, главное, чтобы она успешно могла преобразоваться в JSON.
Внутри команды файл надо распарсить и разбить на необходимые для будущей обработки DTOшки.
Если файл нельзя обрабатывать - возвращайте в виде результата success=false
и в error
информацию об ошибке.
3. Написание команды импорта элементов
В качестве dto на вход может быть следующая структура:
@Data
GComnandType ("*#*-edi-get-events-by-document-id")
public class EdiGetEventsByDocumentIdCommand {
private List<FileImportItem> items;
@data
public class FileImportitem {
private String id;
private ObjectData payload;
В качестве результата:
@Data
public class FileInportResultList {
private List<FileInportResultIvem> resultList = new ArrayList<>();
@Data
public class FileInportResultItem {
private String id:
private boolean error;
private String details;
Обратите внимание каждому id
из FileImportItem
должна соответствовать запись в результирующим листе с таким же id
.