Contents
В случае необходимости разобрать и импортировать данные из любого файла в систему - можно воспользоваться данным функционалом.
Существует 3 системных справочника в микросервисе интеграций:
Кратко об использовании:
- Создается конфигурация, где указывается информация о двух командах. Одна команда для парсинга, другая для обработки строк.
- Загружается файл через справочник “Файлы для импорта”, указывается конфигурация в соответствии с которой этот файл должен обрабатываться.
- Микросервис интеграции периодически ищет необработанные записи в справочнике “Файлы для импорта”. При их нахождении отправляет контент файла в виде команды в определенное приложение (данные для команды targetApp, type и тд берутся из конфигурации, это команда парсинга). В результате, ответом на команду вернется список строк для обработки, которые помещаются в журнал “Элементы файлового импорта”.
- Микросервис интеграции периодически ищет необработанные записи в справочнике “Элементы файлового импорта”. При их нахождении отправляет payload найденных записей в виде команды в определенное приложение (данные для команды targetApp, type, maxBatch и тд берутся из конфигурации, это команда импорта). В результате, ответом на команду вернется информация об успешности завершения импорта строки или информация об ошибке.
Содержит информацию о том, как именно файлы выбранного типа импорта должны быть обработаны в системе после загрузки.
Пример готовой конфигурации (основная информация о командах для обработки):
Журнал, в который загружаются файлы, которые необходимо обработать. Тут же пишется статус обработки файла.
Заведение записей в этот справочник состоит из выбора каким именно способом обрабатывать этот файл (выбор строки из журнала конфигурации импорта файлов), загрузки самого файла и выбора планируемой даты начала обработки. Если дата начала обработки не указана - файл начнет обрабатываться в ближайшее время.
Журнал, в которые попадают строки файла после его парсинга. Строки сюда попадают автоматически.
Каждая строка, после стадии парсинга, возвращается в виде payload. Payload
содержит, обычно, json, который будет понимать команда импорта строк. Пример payload
можно видеть на скриншоте ниже:
Если импорт строки завершился ошибкой - команда может вернуть информацию об ошибке и эта ошибка будет отображена в журнале.
Создать ее можно либо через журнал, либо подложив 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" } }
В качестве 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
информацию об ошибке.
В качестве 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
.