142 lines
4.6 KiB
JavaScript
142 lines
4.6 KiB
JavaScript
/*
|
||
Сервис интеграции ПП Парус 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;
|