ЦИТК-1081. Нормализация и удаление системных символов отсканированных штрихкодов.
This commit is contained in:
parent
e1bb562fff
commit
113871e82f
@ -27,6 +27,15 @@ const SQUERY_RESP_CT = "SRESP_CT"; //Параметр URL-запроса для
|
||||
//Коды функций-обработчиков (согласно настройкам "Сервисов обмена")
|
||||
const SFNC_UPLOAD = "Upload"; //Функция загрузки
|
||||
|
||||
//Имена узлов/аргументов PWS-запроса
|
||||
const SNODE_XREQUEST = "XREQUEST"; //Корневой узел запроса
|
||||
const SNODE_XPAYLOAD = "XPAYLOAD"; //Полезная нагрузка запроса
|
||||
const SNODE_XARGUMENTS = "XARGUMENTS"; //Коллекция аргументов
|
||||
const SNODE_XARGUMENT = "XARGUMENT"; //Элемент аргумента
|
||||
const SNODE_SNAME = "SNAME"; //Имя аргумента
|
||||
const SNODE_VALUE = "VALUE"; //Значение аргумента
|
||||
const SARG_SSEARCH = "SSEARCH"; //Аргумент строки поиска
|
||||
|
||||
//------------
|
||||
// Тело модуля
|
||||
//------------
|
||||
@ -69,6 +78,38 @@ const converXMLArraysToJSON = (obj, arrayKey) => {
|
||||
}
|
||||
};
|
||||
|
||||
//Кодирование строки в Base64 (UTF-8)
|
||||
const encodeBase64Utf8 = sValue => Buffer.from(sValue, "utf8").toString("base64");
|
||||
|
||||
//Получение полезной нагрузки запроса
|
||||
const getRequestPayload = request => {
|
||||
if (!request || typeof request !== "object") return null;
|
||||
const xRequest = request[SNODE_XREQUEST];
|
||||
if (!xRequest || typeof xRequest !== "object") return null;
|
||||
const xPayload = xRequest[SNODE_XPAYLOAD];
|
||||
if (!xPayload || typeof xPayload !== "object") return null;
|
||||
return xPayload;
|
||||
};
|
||||
|
||||
//Подготовка JSON-запроса перед конвертацией в XML
|
||||
const prepareRequestForXml = request => {
|
||||
//Получим полезную нагрузку запроса
|
||||
const xPayload = getRequestPayload(request);
|
||||
if (!xPayload) return request;
|
||||
//Получим коллекцию аргументов
|
||||
const xArguments = xPayload[SNODE_XARGUMENTS];
|
||||
if (!Array.isArray(xArguments)) return request;
|
||||
//Обработаем аргументы
|
||||
for (let i = 0; i < xArguments.length; i++) {
|
||||
const item = xArguments[i];
|
||||
const arg = item && (item[SNODE_XARGUMENT] || item);
|
||||
if (!arg || typeof arg !== "object" || arg[SNODE_SNAME] !== SARG_SSEARCH) continue;
|
||||
if (arg[SNODE_VALUE] === undefined || arg[SNODE_VALUE] === null) continue;
|
||||
arg[SNODE_VALUE] = encodeBase64Utf8(arg[SNODE_VALUE]);
|
||||
}
|
||||
return request;
|
||||
};
|
||||
|
||||
//Обработчик "До" для полученного сообщения
|
||||
const before = async prms => {
|
||||
//Если пришел запрос в JSON
|
||||
@ -77,6 +118,7 @@ const before = async prms => {
|
||||
let requestXML = "";
|
||||
try {
|
||||
let request = JSON.parse(prms.queue.blMsg.toString());
|
||||
request = prepareRequestForXml(request);
|
||||
let builder = new xml2js.Builder();
|
||||
requestXML = builder.buildObject(request);
|
||||
} catch (e) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user