142 lines
4.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
Сервис интеграции ПП Парус 8 с WEB API
Дополнительный модуль: работа с БД ПП Парус 8 (Oracle)
*/
//----------------------
// Подключение библиотек
//----------------------
const oracledb = require("oracledb"); //Работа с СУБД Oracle
//------------
// Тело модуля
//------------
//Подключение к БД
const connect = prms => {
return new Promise((resolve, reject) => {
oracledb.getConnection(
{
user: prms.user,
password: prms.password,
connectString: prms.connectString
},
(err, connection) => {
if (err) {
reject(new Error(err.message));
} else {
resolve(connection);
}
}
);
});
};
//Отключение от БД
const disconnect = connection => {
return new Promise((resolve, reject) => {
if (connection) {
connection.close(err => {
if (err) {
reject(new Error(err.message));
} else {
resolve();
}
});
} else {
reject(new Error("Не указано подключение"));
}
});
};
//Получение списка сервисов
const getServices = connection => {
return new Promise((resolve, reject) => {
if (connection) {
connection.execute(
"BEGIN PKG_EXS.SERVICE_GET(RCSERVICES => :RCSERVICES); END;",
{ RCSERVICES: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } },
{ outFormat: oracledb.OBJECT },
(err, result) => {
if (err) {
reject(new Error(err.message));
}
let cursor = result.outBinds.RCSERVICES;
let queryStream = cursor.toQueryStream();
let rows = [];
queryStream.on("data", row => {
rows.push(row);
});
queryStream.on("error", err => {
reject(new Error(err.message));
});
queryStream.on("close", () => {
resolve(rows);
});
}
);
} else {
reject(new Error("Не указано подключение"));
}
});
};
//Запись в протокол работы
const log = (connection, msg, queueID) => {
return new Promise((resolve, reject) => {
if (connection) {
connection.execute(
"BEGIN PKG_EXS.LOG_PUT(NLOG_STATE => :NLOG_STATE, SMSG => :SMSG, NEXSQUEUE => :NEXSQUEUE, RCLOG => :RCLOG); END;",
{
NLOG_STATE: 0,
SMSG: msg,
NEXSQUEUE: queueID,
RCLOG: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT }
},
{ outFormat: oracledb.OBJECT, autoCommit: true },
(err, result) => {
if (err) {
reject(new Error(err.message));
}
let cursor = result.outBinds.RCLOG;
let queryStream = cursor.toQueryStream();
let rows = [];
queryStream.on("data", row => {
rows.push(row);
});
queryStream.on("error", err => {
reject(new Error(err.message));
});
queryStream.on("close", () => {
resolve(rows[0]);
});
}
);
} else {
reject(new Error("Не указано подключение"));
}
});
};
//Считывание очередной порции исходящих сообщений из очереди
const getQueueOutgoing = prms => {};
//Помещение очередного входящего сообщения в очередь
const putQueueIncoming = prms => {};
//Установка значения в сообщении очереди
const setQueueValue = prms => {};
//-----------------
// Интерфейс модуля
//-----------------
exports.connect = connect;
exports.disconnect = disconnect;
exports.getServices = getServices;
exports.log = log;
exports.getQueueOutgoing = getQueueOutgoing;
exports.putQueueIncoming = putQueueIncoming;
exports.setQueueValue = setQueueValue;