forked from CITKParus/P8-ExchangeService
Обслуживание аутентицикации: функции получения, установки и очистки контекста сервиса, фукнция проверки аутентифицированности сервиса, функция постановки в очередь задания на аутентификацию сервиса
This commit is contained in:
parent
43c946b16a
commit
508f476d3e
@ -13,6 +13,7 @@ const { ServerError } = require("./server_errors"); //Типовая ошибк
|
|||||||
const { makeModuleFullPath, validateObject } = require("./utils"); //Вспомогательные функции
|
const { makeModuleFullPath, validateObject } = require("./utils"); //Вспомогательные функции
|
||||||
const prmsDBConnectorSchema = require("../models/prms_db_connector"); //Схемы валидации параметров функций модуля
|
const prmsDBConnectorSchema = require("../models/prms_db_connector"); //Схемы валидации параметров функций модуля
|
||||||
const intfDBConnectorModuleSchema = require("../models/intf_db_connector_module"); //Схема валидации интерфейса модуля взаимодействия с БД
|
const intfDBConnectorModuleSchema = require("../models/intf_db_connector_module"); //Схема валидации интерфейса модуля взаимодействия с БД
|
||||||
|
const objServiceSchema = require("../models/obj_service"); //Схема валидации сервиса
|
||||||
const objServicesSchema = require("../models/obj_services"); //Схема валидации списка сервисов
|
const objServicesSchema = require("../models/obj_services"); //Схема валидации списка сервисов
|
||||||
const objServiceFunctionsSchema = require("../models/obj_service_functions"); //Схема валидации списка функций сервиса
|
const objServiceFunctionsSchema = require("../models/obj_service_functions"); //Схема валидации списка функций сервиса
|
||||||
const objQueueSchema = require("../models/obj_queue"); //Схема валидации сообщения очереди обмена
|
const objQueueSchema = require("../models/obj_queue"); //Схема валидации сообщения очереди обмена
|
||||||
@ -197,7 +198,7 @@ class DBConnector extends EventEmitter {
|
|||||||
"Список функций сервиса"
|
"Список функций сервиса"
|
||||||
);
|
);
|
||||||
if (sCheckResult) throw new ServerError(SERR_OBJECT_BAD_INTERFACE, sCheckResult);
|
if (sCheckResult) throw new ServerError(SERR_OBJECT_BAD_INTERFACE, sCheckResult);
|
||||||
//Вернём добавленную запись
|
//Успешно - отдаём список функций сервиса
|
||||||
return res;
|
return res;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
throw new ServerError(SERR_DB_EXECUTE, e.message);
|
throw new ServerError(SERR_DB_EXECUTE, e.message);
|
||||||
@ -209,6 +210,165 @@ class DBConnector extends EventEmitter {
|
|||||||
throw new ServerError(SERR_DB_EXECUTE, "Нет подключения к БД");
|
throw new ServerError(SERR_DB_EXECUTE, "Нет подключения к БД");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//Получить контекст сервиса
|
||||||
|
async getServiceContext(prms) {
|
||||||
|
//Работаем только при наличии подключения
|
||||||
|
if (this.bConnected) {
|
||||||
|
//Проверяем структуру переданного объекта с параметрами для получения контекста сервиса
|
||||||
|
let sCheckResult = validateObject(
|
||||||
|
prms,
|
||||||
|
prmsDBConnectorSchema.getServiceContext,
|
||||||
|
"Параметры функции считывания контекста сервиса"
|
||||||
|
);
|
||||||
|
//Если структура объекта в норме
|
||||||
|
if (!sCheckResult) {
|
||||||
|
try {
|
||||||
|
//Подготовим параметры для передачи в БД
|
||||||
|
let getServiceContextData = _.cloneDeep(prms);
|
||||||
|
getServiceContextData.connection = this.connection;
|
||||||
|
//И выполним считывание контекста сервиса
|
||||||
|
let res = await this.connector.getServiceContext(getServiceContextData);
|
||||||
|
//Валидируем полученный ответ
|
||||||
|
sCheckResult = validateObject(res, objServiceSchema.ServiceCtx, "Контекст сервиса");
|
||||||
|
if (sCheckResult) throw new ServerError(SERR_OBJECT_BAD_INTERFACE, sCheckResult);
|
||||||
|
//Успешно - отдаём контекст считанный сервиса
|
||||||
|
return res;
|
||||||
|
} catch (e) {
|
||||||
|
throw new ServerError(SERR_DB_EXECUTE, e.message);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new ServerError(SERR_OBJECT_BAD_INTERFACE, sCheckResult);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new ServerError(SERR_DB_EXECUTE, "Нет подключения к БД");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Установить контекст сервиса
|
||||||
|
async setServiceContext(prms) {
|
||||||
|
//Работаем только при наличии подключения
|
||||||
|
if (this.bConnected) {
|
||||||
|
//Проверяем структуру переданного объекта с параметрами для установки контекста сервиса
|
||||||
|
let sCheckResult = validateObject(
|
||||||
|
prms,
|
||||||
|
prmsDBConnectorSchema.setServiceContext,
|
||||||
|
"Параметры функции установки контекста сервиса"
|
||||||
|
);
|
||||||
|
//Если структура объекта в норме
|
||||||
|
if (!sCheckResult) {
|
||||||
|
try {
|
||||||
|
//Подготовим параметры для передачи в БД
|
||||||
|
let setServiceContextData = _.cloneDeep(prms);
|
||||||
|
setServiceContextData.connection = this.connection;
|
||||||
|
//И выполним установку контекста сервиса
|
||||||
|
await this.connector.setServiceContext(setServiceContextData);
|
||||||
|
//Успешно - возвращаем ничего
|
||||||
|
return;
|
||||||
|
} catch (e) {
|
||||||
|
throw new ServerError(SERR_DB_EXECUTE, e.message);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new ServerError(SERR_OBJECT_BAD_INTERFACE, sCheckResult);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new ServerError(SERR_DB_EXECUTE, "Нет подключения к БД");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Очистить контекст сервиса
|
||||||
|
async clearServiceContext(prms) {
|
||||||
|
//Работаем только при наличии подключения
|
||||||
|
if (this.bConnected) {
|
||||||
|
//Проверяем структуру переданного объекта с параметрами для очистки контекста сервиса
|
||||||
|
let sCheckResult = validateObject(
|
||||||
|
prms,
|
||||||
|
prmsDBConnectorSchema.clearServiceContext,
|
||||||
|
"Параметры функции очистки контекста сервиса"
|
||||||
|
);
|
||||||
|
//Если структура объекта в норме
|
||||||
|
if (!sCheckResult) {
|
||||||
|
try {
|
||||||
|
//Подготовим параметры для передачи в БД
|
||||||
|
let clearServiceContextData = _.cloneDeep(prms);
|
||||||
|
clearServiceContextData.connection = this.connection;
|
||||||
|
//И выполним очистку контекста сервиса
|
||||||
|
await this.connector.clearServiceContext(clearServiceContextData);
|
||||||
|
//Успешно - возвращаем ничего
|
||||||
|
return;
|
||||||
|
} catch (e) {
|
||||||
|
throw new ServerError(SERR_DB_EXECUTE, e.message);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new ServerError(SERR_OBJECT_BAD_INTERFACE, sCheckResult);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new ServerError(SERR_DB_EXECUTE, "Нет подключения к БД");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Проверить аутентифицированность сервиса
|
||||||
|
async isServiceAuth(prms) {
|
||||||
|
//Работаем только при наличии подключения
|
||||||
|
if (this.bConnected) {
|
||||||
|
//Проверяем структуру переданного объекта с параметрами для проверки аутентифицированности сервиса
|
||||||
|
let sCheckResult = validateObject(
|
||||||
|
prms,
|
||||||
|
prmsDBConnectorSchema.isServiceAuth,
|
||||||
|
"Параметры функции проверки аутентифицированности сервиса"
|
||||||
|
);
|
||||||
|
//Если структура объекта в норме
|
||||||
|
if (!sCheckResult) {
|
||||||
|
try {
|
||||||
|
//Подготовим параметры для передачи в БД
|
||||||
|
let isServiceAuthData = _.cloneDeep(prms);
|
||||||
|
isServiceAuthData.connection = this.connection;
|
||||||
|
//И выполним проверку атентифицированности сервиса
|
||||||
|
let res = await this.connector.isServiceAuth(isServiceAuthData);
|
||||||
|
//Валидируем результат
|
||||||
|
if (![objServiceSchema.NIS_AUTH_NO, objServiceSchema.NIS_AUTH_YES].includes(res))
|
||||||
|
throw new ServerError(
|
||||||
|
SERR_OBJECT_BAD_INTERFACE,
|
||||||
|
"Неожиданный ответ функции проверки аутентифицированности сервиса"
|
||||||
|
);
|
||||||
|
//Успешно - возвращаем то, что вернула функция проверки
|
||||||
|
return res;
|
||||||
|
} catch (e) {
|
||||||
|
throw new ServerError(SERR_DB_EXECUTE, e.message);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new ServerError(SERR_OBJECT_BAD_INTERFACE, sCheckResult);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new ServerError(SERR_DB_EXECUTE, "Нет подключения к БД");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Поставить в очередь задание на аутентификацию сервиса
|
||||||
|
async putServiceAuthInQueue(prms) {
|
||||||
|
//Работаем только при наличии подключения
|
||||||
|
if (this.bConnected) {
|
||||||
|
//Проверяем структуру переданного объекта с параметрами постановки в очередь задания на аутентификацию сервиса
|
||||||
|
let sCheckResult = validateObject(
|
||||||
|
prms,
|
||||||
|
prmsDBConnectorSchema.putServiceAuthInQueue,
|
||||||
|
"Параметры функции постановки в очередь задания на аутентификацию сервиса"
|
||||||
|
);
|
||||||
|
//Если структура объекта в норме
|
||||||
|
if (!sCheckResult) {
|
||||||
|
try {
|
||||||
|
//Подготовим параметры для передачи в БД
|
||||||
|
let putServiceAuthInQueueData = _.cloneDeep(prms);
|
||||||
|
putServiceAuthInQueueData.connection = this.connection;
|
||||||
|
//И выполним постановку в очередь задания на аутентификацию сервиса
|
||||||
|
await this.connector.putServiceAuthInQueue(putServiceAuthInQueueData);
|
||||||
|
//Успешно - возвращаем ничего
|
||||||
|
return;
|
||||||
|
} catch (e) {
|
||||||
|
throw new ServerError(SERR_DB_EXECUTE, e.message);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new ServerError(SERR_OBJECT_BAD_INTERFACE, sCheckResult);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new ServerError(SERR_DB_EXECUTE, "Нет подключения к БД");
|
||||||
|
}
|
||||||
|
}
|
||||||
//Запись в журнал работы
|
//Запись в журнал работы
|
||||||
async putLog(prms) {
|
async putLog(prms) {
|
||||||
//Работаем только при наличии подключения
|
//Работаем только при наличии подключения
|
||||||
|
404
db/PKG_EXS.pck
404
db/PKG_EXS.pck
@ -54,6 +54,12 @@ create or replace package PKG_EXS as
|
|||||||
SUNAVLBL_NTF_SIGN_NO constant varchar2(40) := 'UNAVLBL_NTF_NO'; -- Íå îïîâåùàòü î ïðîñòîå (ñòðîêîâûé êîä)
|
SUNAVLBL_NTF_SIGN_NO constant varchar2(40) := 'UNAVLBL_NTF_NO'; -- Íå îïîâåùàòü î ïðîñòîå (ñòðîêîâûé êîä)
|
||||||
SUNAVLBL_NTF_SIGN_YES constant varchar2(40) := 'UNAVLBL_NTF_YES'; -- Îïîâåùàòü î ïðîñòîå (ñòðîêîâûé êîä)
|
SUNAVLBL_NTF_SIGN_YES constant varchar2(40) := 'UNAVLBL_NTF_YES'; -- Îïîâåùàòü î ïðîñòîå (ñòðîêîâûé êîä)
|
||||||
|
|
||||||
|
/* Êîíñòàíòû - ïðèçíàê îïîâåùåíèÿ îá îøèáêå èñïîëíåíèÿ ñîîáùåíèÿ î÷åðåäè äëÿ ôóíêöèè îáðàáîòêè */
|
||||||
|
NERR_NTF_SIGN_NO constant EXSSERVICEFN.ERR_NTF_SIGN%type := 0; -- Íå îïîâåùàòü îá îøèáêå èñïîëíåíèÿ
|
||||||
|
NERR_NTF_SIGN_YES constant EXSSERVICEFN.ERR_NTF_SIGN%type := 1; -- Îïîâåùàòü îá îøèáêå èñïîëíåíèÿ
|
||||||
|
SERR_NTF_SIGN_NO constant varchar2(40) := 'ERR_NTF_SIGN_NO'; -- Íå îïîâåùàòü îá îøèáêå èñïîëíåíèÿ (ñòðîêîâûé êîä)
|
||||||
|
SERR_NTF_SIGN_YES constant varchar2(40) := 'ERR_NTF_SIGN_YES'; -- Îïîâåùàòü îá îøèáêå èñïîëíåíèÿ (ñòðîêîâûé êîä)
|
||||||
|
|
||||||
/* Êîíñòàíòû - ñîñòîÿíèÿ çàïèñåé æóðíàëà ðàáîòû ñåðâèñà */
|
/* Êîíñòàíòû - ñîñòîÿíèÿ çàïèñåé æóðíàëà ðàáîòû ñåðâèñà */
|
||||||
NLOG_STATE_INF constant EXSLOG.LOG_STATE%type := 0; -- Èíôîðìàöèÿ
|
NLOG_STATE_INF constant EXSLOG.LOG_STATE%type := 0; -- Èíôîðìàöèÿ
|
||||||
NLOG_STATE_WRN constant EXSLOG.LOG_STATE%type := 1; -- Ïðåäóïðåæäåíèå
|
NLOG_STATE_WRN constant EXSLOG.LOG_STATE%type := 1; -- Ïðåäóïðåæäåíèå
|
||||||
@ -86,10 +92,22 @@ create or replace package PKG_EXS as
|
|||||||
NINC_EXEC_CNT_NO constant number(1) := 0; -- Íå èíêðåìåíòèðîâàòü
|
NINC_EXEC_CNT_NO constant number(1) := 0; -- Íå èíêðåìåíòèðîâàòü
|
||||||
NINC_EXEC_CNT_YES constant number(1) := 1; -- Èíêðåìåíòèðîâàòü
|
NINC_EXEC_CNT_YES constant number(1) := 1; -- Èíêðåìåíòèðîâàòü
|
||||||
|
|
||||||
/* Константы - признак инкремента количества попыток исполнения позиции очереди */
|
/* Êîíñòàíòû - ïðèçíàê íåîáõîäèìîñòè èñïîëíåíèÿ ïîçèöèè î÷åðåäè */
|
||||||
NQUEUE_EXEC_NO constant number(1) := 0; -- Íå èñïîëíÿòü
|
NQUEUE_EXEC_NO constant number(1) := 0; -- Íå èñïîëíÿòü
|
||||||
NQUEUE_EXEC_YES constant number(1) := 1; -- Èñïîëíÿòü
|
NQUEUE_EXEC_YES constant number(1) := 1; -- Èñïîëíÿòü
|
||||||
|
|
||||||
|
/* Êîíñòàíòû - ïðèçíàê àóòåíòèôèöèðîâàííîñòè ñåðâèñà */
|
||||||
|
NIS_AUTH_YES constant EXSSERVICE.IS_AUTH%type := 1; -- Àóòåíòèôèöèðîâàí
|
||||||
|
NIS_AUTH_NO constant EXSSERVICE.IS_AUTH%type := 0; -- Íåàóòåíòèôèöèðîâàí
|
||||||
|
SIS_AUTH_YES constant varchar2(40) := 'IS_AUTH_YES'; -- Àóòåíòèôèöèðîâàí (ñòðîêîâûé êîä)
|
||||||
|
SIS_AUTH_NO constant varchar2(40) := 'IS_AUTH_NO'; -- Íåàóòåíòèôèöèðîâàí (ñòðîêîâûé êîä)
|
||||||
|
|
||||||
|
/* Êîíñòàíòû - ïðèçíàê íåîáõîäèìîñòè àóòåíòèôèöèðîâàííîñòè ñåðâèñà äëÿ èñïîëíåíèÿ ôóíêöèè */
|
||||||
|
NAUTH_ONLY_YES constant EXSSERVICEFN.AUTH_ONLY%type := 1; -- Òðåáóåòñÿ àóòåíòèôèêàöèÿ
|
||||||
|
NAUTH_ONLY_NO constant EXSSERVICEFN.AUTH_ONLY%type := 0; -- Àóòåíòèôèêàöèÿ íå òðåáóåòñÿ
|
||||||
|
SAUTH_ONLY_YES constant varchar2(40) := 'AUTH_ONLY_YES'; -- Òðåáóåòñÿ àóòåíòèôèêàöèÿ (ñòðîêîâûé êîä)
|
||||||
|
SAUTH_ONLY_NO constant varchar2(40) := 'AUTH_ONLY_NO'; -- Àóòåíòèôèêàöèÿ íå òðåáóåòñÿ (ñòðîêîâûé êîä)
|
||||||
|
|
||||||
/* Êîíñòàíòû - îæèäàåìûé èíòåðôåéñ ïðîöåäóðû îáðàáîòêè ñîîáùåíèÿ î÷åðåäè íà ñòîðîíå ÁÄ */
|
/* Êîíñòàíòû - îæèäàåìûé èíòåðôåéñ ïðîöåäóðû îáðàáîòêè ñîîáùåíèÿ î÷åðåäè íà ñòîðîíå ÁÄ */
|
||||||
SPRC_RESP_ARGS constant varchar2(80) := 'NIDENT,IN,NUMBER;NSRV_TYPE,IN,NUMBER;NEXSQUEUE,IN,NUMBER;'; -- Ñïèñîê ïàðàìåòðîâ ïðîöåäóðû îáðàáîòêè
|
SPRC_RESP_ARGS constant varchar2(80) := 'NIDENT,IN,NUMBER;NSRV_TYPE,IN,NUMBER;NEXSQUEUE,IN,NUMBER;'; -- Ñïèñîê ïàðàìåòðîâ ïðîöåäóðû îáðàáîòêè
|
||||||
|
|
||||||
@ -119,8 +137,7 @@ create or replace package PKG_EXS as
|
|||||||
(
|
(
|
||||||
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
||||||
SSUB_CONTAINER in varchar2 := null -- Íàèìåíîâàíèå êîíòåéíåðà âòîðîãî óðîâíÿ
|
SSUB_CONTAINER in varchar2 := null -- Íàèìåíîâàíèå êîíòåéíåðà âòîðîãî óðîâíÿ
|
||||||
)
|
) return varchar2; -- Ïîëíîå íàèìåíîâàíèå êîíòåéíåðà
|
||||||
return varchar2; -- Полное наименование контейнера
|
|
||||||
|
|
||||||
/* Î÷èñòêà êîíòåéíåðà äëÿ õðàíåíèÿ îêðóæåíèÿ âûçîâà ïðîöåäóðû */
|
/* Î÷èñòêà êîíòåéíåðà äëÿ õðàíåíèÿ îêðóæåíèÿ âûçîâà ïðîöåäóðû */
|
||||||
procedure UTL_CONTAINER_PURGE
|
procedure UTL_CONTAINER_PURGE
|
||||||
@ -135,8 +152,7 @@ create or replace package PKG_EXS as
|
|||||||
DEXEC_DATE in date, -- Äàòà ïðåäûäóùåãî èñïîëíåíèÿ
|
DEXEC_DATE in date, -- Äàòà ïðåäûäóùåãî èñïîëíåíèÿ
|
||||||
NRETRY_SCHEDULE in number, -- Ãðàôèê ïåðåçàïóñêà (ñì. êîíñòàíòû NRETRY_SCHEDULE_*)
|
NRETRY_SCHEDULE in number, -- Ãðàôèê ïåðåçàïóñêà (ñì. êîíñòàíòû NRETRY_SCHEDULE_*)
|
||||||
NRETRY_STEP in number -- Øàã ãðàôèêà ïåðåçàïóñêà
|
NRETRY_STEP in number -- Øàã ãðàôèêà ïåðåçàïóñêà
|
||||||
)
|
) return date; -- Äàòà ñëåäóþùåãî çàïóñêà
|
||||||
return date; -- Дата следующего запуска
|
|
||||||
|
|
||||||
/* Âûÿñíåíèå íåîáõîäèìîñòè çàïóñêà ïî ðàñïèñàíèþ */
|
/* Âûÿñíåíèå íåîáõîäèìîñòè çàïóñêà ïî ðàñïèñàíèþ */
|
||||||
function UTL_SCHED_CHECK_EXEC
|
function UTL_SCHED_CHECK_EXEC
|
||||||
@ -145,8 +161,7 @@ create or replace package PKG_EXS as
|
|||||||
NRETRY_SCHEDULE in number, -- Ãðàôèê ïåðåçàïóñêà (ñì. êîíñòàíòû NRETRY_SCHEDULE_*)
|
NRETRY_SCHEDULE in number, -- Ãðàôèê ïåðåçàïóñêà (ñì. êîíñòàíòû NRETRY_SCHEDULE_*)
|
||||||
NRETRY_STEP in number, -- Øàã ãðàôèêà ïåðåçàïóñêà
|
NRETRY_STEP in number, -- Øàã ãðàôèêà ïåðåçàïóñêà
|
||||||
DEXEC in date := sysdate -- Äàòà, îòíîñèòåëüíî êîòîðîé íåîáõîäèìî âûïîëíèòü ïðîâåðêó
|
DEXEC in date := sysdate -- Äàòà, îòíîñèòåëüíî êîòîðîé íåîáõîäèìî âûïîëíèòü ïðîâåðêó
|
||||||
)
|
) return boolean; -- Ïðèçíàê íåîáõîäèìîñòè çàïóñêà
|
||||||
return boolean; -- Признак необходимости запуска
|
|
||||||
|
|
||||||
/* Óñòàíîâêà çíà÷åíèÿ òèïà ñòðîêà ïàðàìåòðà ïðîöåäóðû îáðàáîòêè ñîîáùåíèÿ îáìåíà */
|
/* Óñòàíîâêà çíà÷åíèÿ òèïà ñòðîêà ïàðàìåòðà ïðîöåäóðû îáðàáîòêè ñîîáùåíèÿ îáìåíà */
|
||||||
procedure PRC_RESP_ARG_STR_SET
|
procedure PRC_RESP_ARG_STR_SET
|
||||||
@ -243,12 +258,60 @@ create or replace package PKG_EXS as
|
|||||||
RCSERVICE out sys_refcursor -- Êóðñîð ñî ñïèñêîì ñåðâèñîâ
|
RCSERVICE out sys_refcursor -- Êóðñîð ñî ñïèñêîì ñåðâèñîâ
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/* Ïîëó÷åíèå êîíòåêñòà ñåðâèñà */
|
||||||
|
procedure SERVICE_CTX_GET
|
||||||
|
(
|
||||||
|
NFLAG_SMART in number, -- Ïðèçíàê âûäà÷è ñîîáùåíèÿ îá îøèáêå
|
||||||
|
NEXSSERVICE in number, -- Ðåã. íîìåð çàïèñè ñåðâèñà
|
||||||
|
RCSERVICE_CTX out sys_refcursor -- Êóðñîð ñî êîíòåêòîì ñåðâèñà
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Óñòàíîâêà êîíòåêñòà ñåðâèñà */
|
||||||
|
procedure SERVICE_CTX_SET
|
||||||
|
(
|
||||||
|
NEXSSERVICE in number, -- Ðåã. íîìåð çàïèñè ñåðâèñà
|
||||||
|
SCTX in varchar2, -- Êîíòåêñò
|
||||||
|
DCTX_EXP in date -- Äàòà èñòå÷åíèÿ êîíòåêñòà
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Î÷èñòêà êîíòåêñòà ñåðâèñà */
|
||||||
|
procedure SERVICE_CTX_CLEAR
|
||||||
|
(
|
||||||
|
NEXSSERVICE in number -- Ðåã. íîìåð çàïèñè ñåðâèñà
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Ïðîâåðêà íåîáõîäèìîñòè àóòåíòèôèêàöèè */
|
||||||
|
function SERVICE_IS_AUTH
|
||||||
|
(
|
||||||
|
NEXSSERVICE in number -- Ðåã. íîìåð çàïèñè ñåðâèñà
|
||||||
|
) return number; -- Ôëàã àóòåíòèôèêàöèè (ñì. êîíñòàíòû NIS_AUTH_*)
|
||||||
|
|
||||||
|
/* Ïîèñê ôóíêöèè àóòåíòèôèêàöèè äëÿ ñåðâèñà îáìåíà */
|
||||||
|
procedure SERVICE_AUTH_FN_FIND
|
||||||
|
(
|
||||||
|
NFLAG_SMART in number, -- Ïðèçíàê âûäà÷è ñîîáùåíèÿ îá îøèáêå
|
||||||
|
NEXSSERVICE in number, -- Ðåã. íîìåð çàïèñè ñåðâèñà
|
||||||
|
REXSSERVICEFN out EXSSERVICEFN%rowtype -- Çàïèñü ôóíêöèè àóòåíòèôèêàöèè
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Ïîìåùåíèå çàäàíèÿ íà àóòåíòèôèêàöèþ ñåðâèñà â î÷åðåäü îáìåíà */
|
||||||
|
procedure SERVICE_AUTH_PUT_INQUEUE
|
||||||
|
(
|
||||||
|
NEXSSERVICE in number -- Ðåã. íîìåð ñåðâèñà îáìåíà
|
||||||
|
);
|
||||||
|
|
||||||
/* Ïîëó÷åíèå ñïèñêà ñåðâèñîâ */
|
/* Ïîëó÷åíèå ñïèñêà ñåðâèñîâ */
|
||||||
procedure SERVICES_GET
|
procedure SERVICES_GET
|
||||||
(
|
(
|
||||||
RCSERVICES out sys_refcursor -- Êóðñîð ñî ñïèñêîì ñåðâèñîâ
|
RCSERVICES out sys_refcursor -- Êóðñîð ñî ñïèñêîì ñåðâèñîâ
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/* Ïîëó÷åíèå ñïèñêà ñåðâèñîâ òðåáóþùèõ àóòåíòèôèêàöèè */
|
||||||
|
procedure SERVICES_AUTH_GET
|
||||||
|
(
|
||||||
|
RCSERVICES_AUTH out sys_refcursor -- Êóðñîð ñî ñïèñêîì ñåðâèñîâ òðåáóþùèõ àóòåíòèôèêàöèè
|
||||||
|
);
|
||||||
|
|
||||||
/* Ïîëó÷åíèå ôóíêöèè ñåðâèñà */
|
/* Ïîëó÷åíèå ôóíêöèè ñåðâèñà */
|
||||||
procedure SERVICEFN_GET
|
procedure SERVICEFN_GET
|
||||||
(
|
(
|
||||||
@ -277,8 +340,13 @@ create or replace package PKG_EXS as
|
|||||||
NFLAG_SMART in number, -- Ïðèçíàê ãåíåðàöèè èñêëþ÷åíèÿ (0 - äà, 1 - íåò)
|
NFLAG_SMART in number, -- Ïðèçíàê ãåíåðàöèè èñêëþ÷åíèÿ (0 - äà, 1 - íåò)
|
||||||
SEXSSERVICE in varchar2, -- Ìíåìîêîä ñåðâèñà äëÿ îáðàáîòêè
|
SEXSSERVICE in varchar2, -- Ìíåìîêîä ñåðâèñà äëÿ îáðàáîòêè
|
||||||
SEXSSERVICEFN in varchar2 -- Ìíåìîêîä ôóíêöèè ñåðâèñà äëÿ îáðàáîòêè
|
SEXSSERVICEFN in varchar2 -- Ìíåìîêîä ôóíêöèè ñåðâèñà äëÿ îáðàáîòêè
|
||||||
)
|
) return number; -- Ðåã. íîìåð ôóíêöèè ñåðâèñà îáìåíà
|
||||||
return number; -- Рег. номер функции сервиса обмена
|
|
||||||
|
/* Ïðîâåðêà íàëè÷èÿ â î÷åðåäè íåèñïîëíåííîãî çàäàíèÿ äëÿ óêàçàííîé ôóíêöèè ñåðâèñà îáìåíà */
|
||||||
|
function SERVICEFN_CHECK_INCMPL_INQUEUE
|
||||||
|
(
|
||||||
|
NEXSSERVICEFN in number -- Ðåã. íîìåð çàïèñè ôóíêöèè ñåðâèñà îáìåíà
|
||||||
|
) return boolean; -- Ðåçóëüòàò ïðîâåðêè (true - â î÷åðåäè åñòü íåèñïîëíåííûå çàäàíèÿ äëÿ äàííîé ôóíêöèè, false - â î÷åðåäè íåò íåèñïîëíåííûõ çàäàíèé äëÿ äàííîé ôóíêöèè)
|
||||||
|
|
||||||
/* Ñ÷èòûâàíèå çàïèñè æóðíàëà ðàáîòû */
|
/* Ñ÷èòûâàíèå çàïèñè æóðíàëà ðàáîòû */
|
||||||
procedure LOG_GET
|
procedure LOG_GET
|
||||||
@ -325,8 +393,7 @@ create or replace package PKG_EXS as
|
|||||||
function QUEUE_SRV_TYPE_SEND_EXEC_CHECK
|
function QUEUE_SRV_TYPE_SEND_EXEC_CHECK
|
||||||
(
|
(
|
||||||
NEXSQUEUE in number -- Ðåã. íîìåð çàïèñè î÷åðåäè
|
NEXSQUEUE in number -- Ðåã. íîìåð çàïèñè î÷åðåäè
|
||||||
)
|
) return number; -- Ôëàã íåîáõîäèìîñòè èñïîëíåíèÿ ïîçèöèè î÷åðåäè (ñì. êîíñòàíòû NQUEUE_EXEC_*)
|
||||||
return number; -- Флаг необходимости исполнения позиции очереди (см. константы NQUEUE_EXEC_*)
|
|
||||||
|
|
||||||
/* Ñ÷èòûâàíèå î÷åðåäíîé ïîðöèè èñõîäÿùèõ ñîîáùåíèé èç î÷åðåäè */
|
/* Ñ÷èòûâàíèå î÷åðåäíîé ïîðöèè èñõîäÿùèõ ñîîáùåíèé èç î÷åðåäè */
|
||||||
procedure QUEUE_SRV_TYPE_SEND_GET
|
procedure QUEUE_SRV_TYPE_SEND_GET
|
||||||
@ -682,8 +749,7 @@ create or replace package body PKG_EXS as
|
|||||||
(
|
(
|
||||||
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
||||||
SSUB_CONTAINER in varchar2 := null -- Íàèìåíîâàíèå êîíòåéíåðà âòîðîãî óðîâíÿ
|
SSUB_CONTAINER in varchar2 := null -- Íàèìåíîâàíèå êîíòåéíåðà âòîðîãî óðîâíÿ
|
||||||
)
|
) return varchar2 -- Ïîëíîå íàèìåíîâàíèå êîíòåéíåðà
|
||||||
return varchar2 -- Полное наименование контейнера
|
|
||||||
is
|
is
|
||||||
/* Ôîðìèðîâàíèå ïîëíîãî íàèìåíîâàíèÿ êîíòåéíåðà */
|
/* Ôîðìèðîâàíèå ïîëíîãî íàèìåíîâàíèÿ êîíòåéíåðà */
|
||||||
function CONTAINER_MAKE_NAME
|
function CONTAINER_MAKE_NAME
|
||||||
@ -731,8 +797,7 @@ create or replace package body PKG_EXS as
|
|||||||
DEXEC_DATE in date, -- Äàòà ïðåäûäóùåãî èñïîëíåíèÿ
|
DEXEC_DATE in date, -- Äàòà ïðåäûäóùåãî èñïîëíåíèÿ
|
||||||
NRETRY_SCHEDULE in number, -- Ãðàôèê ïåðåçàïóñêà (ñì. êîíñòàíòû NRETRY_SCHEDULE_*)
|
NRETRY_SCHEDULE in number, -- Ãðàôèê ïåðåçàïóñêà (ñì. êîíñòàíòû NRETRY_SCHEDULE_*)
|
||||||
NRETRY_STEP in number -- Øàã ãðàôèêà ïåðåçàïóñêà
|
NRETRY_STEP in number -- Øàã ãðàôèêà ïåðåçàïóñêà
|
||||||
)
|
) return date -- Äàòà ñëåäóþùåãî çàïóñêà
|
||||||
return date -- Дата следующего запуска
|
|
||||||
is
|
is
|
||||||
begin
|
begin
|
||||||
/* Åñëè íåò äàòû ïðåäûäóùåãî çàïóñêà èëè ðàñïèñàíèå íå îïðåäåëåíî, òî äàòà î÷åðåäíîãî çàïóñêà - ýòî òåêóùàÿ äàòà */
|
/* Åñëè íåò äàòû ïðåäûäóùåãî çàïóñêà èëè ðàñïèñàíèå íå îïðåäåëåíî, òî äàòà î÷åðåäíîãî çàïóñêà - ýòî òåêóùàÿ äàòà */
|
||||||
@ -790,8 +855,7 @@ create or replace package body PKG_EXS as
|
|||||||
NRETRY_SCHEDULE in number, -- Ãðàôèê ïåðåçàïóñêà (ñì. êîíñòàíòû NRETRY_SCHEDULE_*)
|
NRETRY_SCHEDULE in number, -- Ãðàôèê ïåðåçàïóñêà (ñì. êîíñòàíòû NRETRY_SCHEDULE_*)
|
||||||
NRETRY_STEP in number, -- Øàã ãðàôèêà ïåðåçàïóñêà
|
NRETRY_STEP in number, -- Øàã ãðàôèêà ïåðåçàïóñêà
|
||||||
DEXEC in date := sysdate -- Äàòà, îòíîñèòåëüíî êîòîðîé íåîáõîäèìî âûïîëíèòü ïðîâåðêó
|
DEXEC in date := sysdate -- Äàòà, îòíîñèòåëüíî êîòîðîé íåîáõîäèìî âûïîëíèòü ïðîâåðêó
|
||||||
)
|
) return boolean -- Ïðèçíàê íåîáõîäèìîñòè çàïóñêà
|
||||||
return boolean -- Признак необходимости запуска
|
|
||||||
is
|
is
|
||||||
DEXEC_NEXT date; -- Hàñ÷åòíàÿ äàòà ñëåäóþùåãî çàïóñêà
|
DEXEC_NEXT date; -- Hàñ÷åòíàÿ äàòà ñëåäóþùåãî çàïóñêà
|
||||||
begin
|
begin
|
||||||
@ -1056,6 +1120,173 @@ create or replace package body PKG_EXS as
|
|||||||
RNLIST_BASE_CLEAR(NIDENT => NIDENT);
|
RNLIST_BASE_CLEAR(NIDENT => NIDENT);
|
||||||
end SERVICE_GET;
|
end SERVICE_GET;
|
||||||
|
|
||||||
|
/* Ïîëó÷åíèå êîíòåêñòà ñåðâèñà */
|
||||||
|
procedure SERVICE_CTX_GET
|
||||||
|
(
|
||||||
|
NFLAG_SMART in number, -- Ïðèçíàê âûäà÷è ñîîáùåíèÿ îá îøèáêå
|
||||||
|
NEXSSERVICE in number, -- Ðåã. íîìåð çàïèñè ñåðâèñà
|
||||||
|
RCSERVICE_CTX out sys_refcursor -- Êóðñîð ñî êîíòåêòîì ñåðâèñà
|
||||||
|
)
|
||||||
|
is
|
||||||
|
REXSSERVICE EXSSERVICE%rowtype; -- Çàïèñü ñåðâèñà
|
||||||
|
begin
|
||||||
|
/* Ñ÷èòàåì çàïèñü ñåðâèñà */
|
||||||
|
REXSSERVICE := GET_EXSSERVICE_ID(NFLAG_SMART => NFLAG_SMART, NRN => NEXSSERVICE);
|
||||||
|
/* Îòêðûâàåì âûõîäíîé êóðñîð */
|
||||||
|
open RCSERVICE_CTX for
|
||||||
|
select T.RN "nId",
|
||||||
|
T.CTX "sCtx",
|
||||||
|
T.CTX_EXP "dCtxExp",
|
||||||
|
TO_CHAR(T.CTX_EXP, 'dd.mm.yyyy hh24:mi:ss') "sCtxExp",
|
||||||
|
T.IS_AUTH "nIsAuth",
|
||||||
|
DECODE(T.IS_AUTH, NIS_AUTH_YES, SIS_AUTH_YES, NIS_AUTH_NO, SIS_AUTH_NO) "sIsAuth"
|
||||||
|
from EXSSERVICE T
|
||||||
|
where T.RN = REXSSERVICE.RN;
|
||||||
|
end SERVICE_CTX_GET;
|
||||||
|
|
||||||
|
/* Óñòàíîâêà êîíòåêñòà ñåðâèñà */
|
||||||
|
procedure SERVICE_CTX_SET
|
||||||
|
(
|
||||||
|
NEXSSERVICE in number, -- Ðåã. íîìåð çàïèñè ñåðâèñà
|
||||||
|
SCTX in varchar2, -- Êîíòåêñò
|
||||||
|
DCTX_EXP in date -- Äàòà èñòå÷åíèÿ êîíòåêñòà
|
||||||
|
)
|
||||||
|
is
|
||||||
|
REXSSERVICE EXSSERVICE%rowtype; -- Çàïèñü ñåðâèñà
|
||||||
|
begin
|
||||||
|
/* Ñ÷èòàåì çàïèñü ñåðâèñà */
|
||||||
|
REXSSERVICE := GET_EXSSERVICE_ID(NFLAG_SMART => 0, NRN => NEXSSERVICE);
|
||||||
|
/* Ïðîâåðèì, ÷òî êîíòåêñò åñòü */
|
||||||
|
if (SCTX is null) then
|
||||||
|
P_EXCEPTION(0, 'Íå óêàçàí êîíòåêñò ðàáîòû ñåðâèñà.');
|
||||||
|
end if;
|
||||||
|
/* Óñòàíàâëèâàåì êîíòåêñò */
|
||||||
|
update EXSSERVICE T
|
||||||
|
set T.CTX = SCTX,
|
||||||
|
T.CTX_EXP = DCTX_EXP,
|
||||||
|
T.IS_AUTH = NIS_AUTH_YES
|
||||||
|
where T.RN = REXSSERVICE.RN;
|
||||||
|
end SERVICE_CTX_SET;
|
||||||
|
|
||||||
|
/* Î÷èñòêà êîíòåêñòà ñåðâèñà */
|
||||||
|
procedure SERVICE_CTX_CLEAR
|
||||||
|
(
|
||||||
|
NEXSSERVICE in number -- Ðåã. íîìåð çàïèñè ñåðâèñà
|
||||||
|
)
|
||||||
|
is
|
||||||
|
REXSSERVICE EXSSERVICE%rowtype; -- Çàïèñü ñåðâèñà
|
||||||
|
begin
|
||||||
|
/* Ñ÷èòàåì çàïèñü ñåðâèñà */
|
||||||
|
REXSSERVICE := GET_EXSSERVICE_ID(NFLAG_SMART => 0, NRN => NEXSSERVICE);
|
||||||
|
/* Óñòàíàâëèâàåì êîíòåêñò */
|
||||||
|
update EXSSERVICE T
|
||||||
|
set T.CTX = null,
|
||||||
|
T.CTX_EXP = null,
|
||||||
|
T.IS_AUTH = NIS_AUTH_NO
|
||||||
|
where T.RN = REXSSERVICE.RN;
|
||||||
|
end SERVICE_CTX_CLEAR;
|
||||||
|
|
||||||
|
/* Ïðîâåðêà àóòåíòèôèöèðîâàííîñòè ñåðâèñà */
|
||||||
|
function SERVICE_IS_AUTH
|
||||||
|
(
|
||||||
|
NEXSSERVICE in number -- Ðåã. íîìåð çàïèñè ñåðâèñà
|
||||||
|
) return number -- Ôëàã àóòåíòèôèêàöèè (ñì. êîíñòàíòû NIS_AUTH_*)
|
||||||
|
is
|
||||||
|
NRES PKG_STD.TNUMBER; -- Ðåçóëüòàò ðàáîòû
|
||||||
|
REXSSERVICE EXSSERVICE%rowtype; -- Çàïèñü ñåðâèñà
|
||||||
|
begin
|
||||||
|
/* èíèöèàëèçèðóåì ðåçóëüòàò */
|
||||||
|
NRES := NIS_AUTH_NO;
|
||||||
|
/* Ñ÷èòàåì çàïèñü ñåðâèñà */
|
||||||
|
REXSSERVICE := GET_EXSSERVICE_ID(NFLAG_SMART => 0, NRN => NEXSSERVICE);
|
||||||
|
/* Åñëè ñåðâèñ àóòåíòèôèöèðîâàí */
|
||||||
|
if (REXSSERVICE.IS_AUTH = NIS_AUTH_YES) then
|
||||||
|
/* Åñëè óêàçàíà äàòà èñ÷åòå÷åíèÿ àóòåíòèôèêàöèè */
|
||||||
|
if (REXSSERVICE.CTX_EXP is not null) then
|
||||||
|
/* Åñëè äàòà èñòå÷åíèÿ åù¸ íå íàñòóïèëà */
|
||||||
|
if (REXSSERVICE.CTX_EXP > sysdate) then
|
||||||
|
/* Òî îí àóòåíòèôèöèðîâàí */
|
||||||
|
NRES := NIS_AUTH_YES;
|
||||||
|
end if;
|
||||||
|
else
|
||||||
|
/* Äàòû íåò - ñ÷èòàåì åãî àóòåíòèôèöèðîâàííûì */
|
||||||
|
NRES := NIS_AUTH_YES;
|
||||||
|
end if;
|
||||||
|
end if;
|
||||||
|
/* Âåðíåì ðåçóëüòàò ðàáîòû */
|
||||||
|
return NRES;
|
||||||
|
end SERVICE_IS_AUTH;
|
||||||
|
|
||||||
|
/* Ïîèñê ôóíêöèè àóòåíòèôèêàöèè äëÿ ñåðâèñà îáìåíà */
|
||||||
|
procedure SERVICE_AUTH_FN_FIND
|
||||||
|
(
|
||||||
|
NFLAG_SMART in number, -- Ïðèçíàê âûäà÷è ñîîáùåíèÿ îá îøèáêå
|
||||||
|
NEXSSERVICE in number, -- Ðåã. íîìåð çàïèñè ñåðâèñà
|
||||||
|
REXSSERVICEFN out EXSSERVICEFN%rowtype -- Çàïèñü ôóíêöèè àóòåíòèôèêàöèè
|
||||||
|
)
|
||||||
|
is
|
||||||
|
REXSSERVICE EXSSERVICE%rowtype; -- Çàïèñü ñåðâèñà
|
||||||
|
begin
|
||||||
|
/* Ñ÷èòàåì çàïèñü ñåðâèñà */
|
||||||
|
REXSSERVICE := GET_EXSSERVICE_ID(NFLAG_SMART => NFLAG_SMART, NRN => NEXSSERVICE);
|
||||||
|
/* Åñëè ñåðâèñ ñ÷èòàëñÿ */
|
||||||
|
if (REXSSERVICE.RN is not null) then
|
||||||
|
/* Èùåì ôóíêöèþ */
|
||||||
|
begin
|
||||||
|
select T.*
|
||||||
|
into REXSSERVICEFN
|
||||||
|
from EXSSERVICEFN T
|
||||||
|
where T.PRN = REXSSERVICE.RN
|
||||||
|
and T.FN_TYPE = NFN_TYPE_LOGIN;
|
||||||
|
exception
|
||||||
|
when TOO_MANY_ROWS then
|
||||||
|
P_EXCEPTION(NFLAG_SMART,
|
||||||
|
'Äëÿ ñåðâèñà îáìåíà "%s" ôóíêöèÿ àóòåíòèôèêàöèè îïðåäåëåíà íåîäíîçíà÷íî.',
|
||||||
|
REXSSERVICE.CODE);
|
||||||
|
when NO_DATA_FOUND then
|
||||||
|
P_EXCEPTION(NFLAG_SMART,
|
||||||
|
'Äëÿ ñåðâèñà îáìåíà "%s" íå îïðåäåëåíà ôóíêöèÿ àóòåíòèôèêàöèè.',
|
||||||
|
REXSSERVICE.CODE);
|
||||||
|
end;
|
||||||
|
end if;
|
||||||
|
end SERVICE_AUTH_FN_FIND;
|
||||||
|
|
||||||
|
/* Ïîìåùåíèå çàäàíèÿ íà àóòåíòèôèêàöèþ ñåðâèñà â î÷åðåäü îáìåíà */
|
||||||
|
procedure SERVICE_AUTH_PUT_INQUEUE
|
||||||
|
(
|
||||||
|
NEXSSERVICE in number -- Ðåã. íîìåð ñåðâèñà îáìåíà
|
||||||
|
)
|
||||||
|
is
|
||||||
|
pragma autonomous_transaction;
|
||||||
|
REXSSERVICEFN_AUTH EXSSERVICEFN%rowtype; -- Çàïèñü ôóíêöèè àóòåíòèôèêàöèè
|
||||||
|
NAUTH_EXSQUEUE PKG_STD.TREF; -- Ðåã. íîìåð ïîçèöèè î÷åðåäè äëÿ àòóåíòèôèêàöèè
|
||||||
|
begin
|
||||||
|
/* Èùåì ôóíêöèþ å¸ îñóùåñòâëÿþùóþ àóòåíòèôèêàöèþ */
|
||||||
|
SERVICE_AUTH_FN_FIND(NFLAG_SMART => 0, NEXSSERVICE => NEXSSERVICE, REXSSERVICEFN => REXSSERVICEFN_AUTH);
|
||||||
|
/* Ïðîâåðÿåì, ÷òî â î÷åðåäè åù¸ ïîêà íåò çàïðîñîâ íà àóòåíòèôèêàöèþ */
|
||||||
|
if (not SERVICEFN_CHECK_INCMPL_INQUEUE(NEXSSERVICEFN => REXSSERVICEFN_AUTH.RN)) then
|
||||||
|
/* Çà÷èùàåì òåêóùèé êîíòåêñò ñåðâèñà */
|
||||||
|
SERVICE_CTX_CLEAR(NEXSSERVICE => REXSSERVICEFN_AUTH.PRN);
|
||||||
|
/* Ðåãèñòðèðóåì â î÷åðåäè çàäàíèå íà àóòåíòèôèêàöèþ */
|
||||||
|
P_EXSQUEUE_BASE_INSERT(DIN_DATE => sysdate,
|
||||||
|
SIN_AUTHID => UTILIZER(),
|
||||||
|
NEXSSERVICEFN => REXSSERVICEFN_AUTH.RN,
|
||||||
|
DEXEC_DATE => null,
|
||||||
|
NEXEC_CNT => 0,
|
||||||
|
NEXEC_STATE => NQUEUE_EXEC_STATE_INQUEUE,
|
||||||
|
SEXEC_MSG => null,
|
||||||
|
BMSG => null,
|
||||||
|
BRESP => null,
|
||||||
|
NEXSQUEUE => null,
|
||||||
|
NLNK_COMPANY => null,
|
||||||
|
NLNK_DOCUMENT => null,
|
||||||
|
SLNK_UNITCODE => null,
|
||||||
|
SOPTIONS => null,
|
||||||
|
NRN => NAUTH_EXSQUEUE);
|
||||||
|
end if;
|
||||||
|
commit;
|
||||||
|
end SERVICE_AUTH_PUT_INQUEUE;
|
||||||
|
|
||||||
/* Ïîëó÷åíèå ñïèñêà ñåðâèñîâ */
|
/* Ïîëó÷åíèå ñïèñêà ñåðâèñîâ */
|
||||||
procedure SERVICES_GET
|
procedure SERVICES_GET
|
||||||
(
|
(
|
||||||
@ -1078,7 +1309,41 @@ create or replace package body PKG_EXS as
|
|||||||
/* ×èñòèì áóôåð */
|
/* ×èñòèì áóôåð */
|
||||||
RNLIST_BASE_CLEAR(NIDENT => NIDENT);
|
RNLIST_BASE_CLEAR(NIDENT => NIDENT);
|
||||||
end SERVICES_GET;
|
end SERVICES_GET;
|
||||||
|
|
||||||
|
/* Ïîëó÷åíèå ñïèñêà ñåðâèñîâ òðåáóþùèõ àóòåíòèôèêàöèè */
|
||||||
|
procedure SERVICES_AUTH_GET
|
||||||
|
(
|
||||||
|
RCSERVICES_AUTH out sys_refcursor -- Êóðñîð ñî ñïèñêîì ñåðâèñîâ òðåáóþùèõ àóòåíòèôèêàöèè
|
||||||
|
)
|
||||||
|
is
|
||||||
|
NIDENT PKG_STD.TREF; -- Èäåíòèôèêàòîð áóôåðà
|
||||||
|
NTMP PKG_STD.TREF; -- Ðåã. íîìåð î÷åðåäíîé çàïèñè áóôåðà
|
||||||
|
begin
|
||||||
|
/* Ñôîðìèðóåì èäåíòèôèêàòîð áóôåðà */
|
||||||
|
NIDENT := GEN_IDENT();
|
||||||
|
/* Îáõîäèì íóæíûå ñåðâèñû */
|
||||||
|
for C in (select T.RN
|
||||||
|
from EXSSERVICE T
|
||||||
|
where T.IS_AUTH = NIS_AUTH_NO
|
||||||
|
and exists (select FN.RN
|
||||||
|
from EXSSERVICEFN FN
|
||||||
|
where FN.PRN = T.RN
|
||||||
|
and FN.FN_TYPE = NFN_TYPE_LOGIN)
|
||||||
|
and exists (select FN.RN
|
||||||
|
from EXSSERVICEFN FN
|
||||||
|
where FN.PRN = T.RN
|
||||||
|
and FN.AUTH_ONLY = NAUTH_ONLY_YES
|
||||||
|
and FN.FN_TYPE <> NFN_TYPE_LOGIN))
|
||||||
|
loop
|
||||||
|
/* Çàïîìèíàåì èõ ðåã. íîìåðà â áóôåðå */
|
||||||
|
RNLIST_BASE_INSERT(NIDENT => NIDENT, NDOCUMENT => C.RN, NRN => NTMP);
|
||||||
|
end loop;
|
||||||
|
/* Çàáèðàåì îòîáðàííûå ñåðâèñû */
|
||||||
|
SERVICE_GET(NIDENT => NIDENT, RCSERVICE => RCSERVICES_AUTH);
|
||||||
|
/* ×èñòèì áóôåð */
|
||||||
|
RNLIST_BASE_CLEAR(NIDENT => NIDENT);
|
||||||
|
end SERVICES_AUTH_GET;
|
||||||
|
|
||||||
/* Ïîëó÷åíèå ôóíêöèè ñåðâèñà */
|
/* Ïîëó÷åíèå ôóíêöèè ñåðâèñà */
|
||||||
procedure SERVICEFN_GET
|
procedure SERVICEFN_GET
|
||||||
(
|
(
|
||||||
@ -1123,7 +1388,12 @@ create or replace package body PKG_EXS as
|
|||||||
M.CODE "sMsgCode",
|
M.CODE "sMsgCode",
|
||||||
DECODE(M.PRC_RESP, null, null, UTL_STORED_MAKE_LINK(SPROCEDURE => M.PRC_RESP, SPACKAGE => M.PKG_RESP)) "sPrcResp",
|
DECODE(M.PRC_RESP, null, null, UTL_STORED_MAKE_LINK(SPROCEDURE => M.PRC_RESP, SPACKAGE => M.PKG_RESP)) "sPrcResp",
|
||||||
M.APPSRV_BEFORE "sAppSrvBefore",
|
M.APPSRV_BEFORE "sAppSrvBefore",
|
||||||
M.APPSRV_AFTER "sAppSrvAfter"
|
M.APPSRV_AFTER "sAppSrvAfter",
|
||||||
|
T.AUTH_ONLY "nAuthOnly",
|
||||||
|
DECODE(T.AUTH_ONLY, NAUTH_ONLY_NO, SAUTH_ONLY_NO, NAUTH_ONLY_YES, SAUTH_ONLY_YES) "sAuthOnly",
|
||||||
|
T.ERR_NTF_SIGN "nErrNtfSign",
|
||||||
|
DECODE(T.ERR_NTF_SIGN, NERR_NTF_SIGN_NO, SERR_NTF_SIGN_NO, NERR_NTF_SIGN_YES, SERR_NTF_SIGN_YES) "sErrNtfSign",
|
||||||
|
T.ERR_NTF_MAIL "sErrNtfMail"
|
||||||
from EXSSERVICEFN T,
|
from EXSSERVICEFN T,
|
||||||
EXSMSGTYPE M
|
EXSMSGTYPE M
|
||||||
where T.RN in (select L.DOCUMENT from EXSRNLIST L where L.IDENT = NIDENT)
|
where T.RN in (select L.DOCUMENT from EXSRNLIST L where L.IDENT = NIDENT)
|
||||||
@ -1184,8 +1454,7 @@ create or replace package body PKG_EXS as
|
|||||||
NFLAG_SMART in number, -- Ïðèçíàê ãåíåðàöèè èñêëþ÷åíèÿ (0 - äà, 1 - íåò)
|
NFLAG_SMART in number, -- Ïðèçíàê ãåíåðàöèè èñêëþ÷åíèÿ (0 - äà, 1 - íåò)
|
||||||
SEXSSERVICE in varchar2, -- Ìíåìîêîä ñåðâèñà äëÿ îáðàáîòêè
|
SEXSSERVICE in varchar2, -- Ìíåìîêîä ñåðâèñà äëÿ îáðàáîòêè
|
||||||
SEXSSERVICEFN in varchar2 -- Ìíåìîêîä ôóíêöèè ñåðâèñà äëÿ îáðàáîòêè
|
SEXSSERVICEFN in varchar2 -- Ìíåìîêîä ôóíêöèè ñåðâèñà äëÿ îáðàáîòêè
|
||||||
)
|
) return number -- Ðåã. íîìåð ôóíêöèè ñåðâèñà îáìåíà
|
||||||
return number -- Рег. номер функции сервиса обмена
|
|
||||||
is
|
is
|
||||||
NEXSSERVICE PKG_STD.TREF; -- Ðåã. íîìåð ñåðâèñà îáðàáîòêè
|
NEXSSERVICE PKG_STD.TREF; -- Ðåã. íîìåð ñåðâèñà îáðàáîòêè
|
||||||
NEXSSERVICEFN PKG_STD.TREF; -- Ðåã. íîìåð ôóíêöèè ñåðâèñà îáðàáîòêè
|
NEXSSERVICEFN PKG_STD.TREF; -- Ðåã. íîìåð ôóíêöèè ñåðâèñà îáðàáîòêè
|
||||||
@ -1202,6 +1471,36 @@ create or replace package body PKG_EXS as
|
|||||||
return NEXSSERVICEFN;
|
return NEXSSERVICEFN;
|
||||||
end SERVICEFN_FIND_BY_SRVCODE;
|
end SERVICEFN_FIND_BY_SRVCODE;
|
||||||
|
|
||||||
|
/* Ïðîâåðêà íàëè÷èÿ â î÷åðåäè íåèñïîëíåííîãî çàäàíèÿ äëÿ óêàçàííîé ôóíêöèè ñåðâèñà îáìåíà */
|
||||||
|
function SERVICEFN_CHECK_INCMPL_INQUEUE
|
||||||
|
(
|
||||||
|
NEXSSERVICEFN in number -- Ðåã. íîìåð çàïèñè ôóíêöèè ñåðâèñà îáìåíà
|
||||||
|
) return boolean -- Ðåçóëüòàò ïðîâåðêè (true - â î÷åðåäè åñòü íåèñïîëíåííûå çàäàíèÿ äëÿ äàííîé ôóíêöèè, false - â î÷åðåäè íåò íåèñïîëíåííûõ çàäàíèé äëÿ äàííîé ôóíêöèè)
|
||||||
|
is
|
||||||
|
NCNT PKG_STD.TNUMBER; -- Êîëè÷åñòâî íàéäåííûõ çàïèñåé î÷åðåäè
|
||||||
|
begin
|
||||||
|
/* Ïðîâåðèì î÷åðåäü */
|
||||||
|
select count(Q.RN)
|
||||||
|
into NCNT
|
||||||
|
from EXSQUEUE Q
|
||||||
|
where Q.EXSSERVICEFN = NEXSSERVICEFN
|
||||||
|
and Q.EXEC_STATE not in (NQUEUE_EXEC_STATE_OK, NQUEUE_EXEC_STATE_ERR);
|
||||||
|
/* Åñëè íå íàøëè íè÷åãî â î÷åðåäè... */
|
||||||
|
if (NCNT = 0) then
|
||||||
|
/* ...ñêàæåì ÷òî çàäàíèé íåò */
|
||||||
|
return false;
|
||||||
|
else
|
||||||
|
/* Åñëè íàøëè - ñêàæåì ÷òî çàäàíèÿ åñòü */
|
||||||
|
return true;
|
||||||
|
end if;
|
||||||
|
exception
|
||||||
|
when others then
|
||||||
|
P_EXCEPTION(0,
|
||||||
|
'Îøèáêà îïðåäåëåíèÿ íàëè÷èÿ â î÷åðåäè çàäàíèé äëÿ ôóíêöèè (RN: %s) ñåðâèñà îáìåíà: %s',
|
||||||
|
TO_CHAR(NEXSSERVICEFN),
|
||||||
|
sqlerrm);
|
||||||
|
end SERVICEFN_CHECK_INCMPL_INQUEUE;
|
||||||
|
|
||||||
/* Ñ÷èòûâàíèå çàïèñè æóðíàëà ðàáîòû */
|
/* Ñ÷èòûâàíèå çàïèñè æóðíàëà ðàáîòû */
|
||||||
procedure LOG_GET
|
procedure LOG_GET
|
||||||
(
|
(
|
||||||
@ -1394,14 +1693,13 @@ create or replace package body PKG_EXS as
|
|||||||
/* Ïðîâåðêà íåîáõîäèìîñòè èñïîëíåíèÿ ïîçèöèè î÷åðåäè */
|
/* Ïðîâåðêà íåîáõîäèìîñòè èñïîëíåíèÿ ïîçèöèè î÷åðåäè */
|
||||||
function QUEUE_SRV_TYPE_SEND_EXEC_CHECK
|
function QUEUE_SRV_TYPE_SEND_EXEC_CHECK
|
||||||
(
|
(
|
||||||
NEXSQUEUE in number -- Рег. номер записи очереди
|
NEXSQUEUE in number -- Ðåã. íîìåð çàïèñè î÷åðåäè
|
||||||
)
|
) return number -- Ôëàã íåîáõîäèìîñòè èñïîëíåíèÿ ïîçèöèè î÷åðåäè (ñì. êîíñòàíòû NQUEUE_EXEC_*)
|
||||||
return number -- Флаг необходимости исполнения позиции очереди (см. константы NQUEUE_EXEC_*)
|
|
||||||
is
|
is
|
||||||
REXSQUEUE EXSQUEUE%rowtype; -- Запись позиции очереди
|
REXSQUEUE EXSQUEUE%rowtype; -- Çàïèñü ïîçèöèè î÷åðåäè
|
||||||
REXSSERVICE EXSSERVICE%rowtype; -- Запись сервиса обработки
|
REXSSERVICE EXSSERVICE%rowtype; -- Çàïèñü ñåðâèñà îáðàáîòêè
|
||||||
REXSSERVICEFN EXSSERVICEFN%rowtype; -- Запись функции обработки
|
REXSSERVICEFN EXSSERVICEFN%rowtype; -- Çàïèñü ôóíêöèè îáðàáîòêè
|
||||||
NRESULT number(17); -- Результат работы
|
NRESULT PKG_STD.TNUMBER; -- Ðåçóëüòàò ðàáîòû
|
||||||
begin
|
begin
|
||||||
/* Èíèöèàëèçèðóåì ðåçóëüòàò */
|
/* Èíèöèàëèçèðóåì ðåçóëüòàò */
|
||||||
NRESULT := NQUEUE_EXEC_NO;
|
NRESULT := NQUEUE_EXEC_NO;
|
||||||
@ -1412,7 +1710,7 @@ create or replace package body PKG_EXS as
|
|||||||
REXSSERVICEFN := GET_EXSSERVICEFN_ID(NFLAG_SMART => 0, NRN => REXSQUEUE.EXSSERVICEFN);
|
REXSSERVICEFN := GET_EXSSERVICEFN_ID(NFLAG_SMART => 0, NRN => REXSQUEUE.EXSSERVICEFN);
|
||||||
/* Ñ÷èòàåì çàïèñü ñåðâèñà îáðàáîòêè */
|
/* Ñ÷èòàåì çàïèñü ñåðâèñà îáðàáîòêè */
|
||||||
REXSSERVICE := GET_EXSSERVICE_ID(NFLAG_SMART => 0, NRN => REXSSERVICEFN.PRN);
|
REXSSERVICE := GET_EXSSERVICE_ID(NFLAG_SMART => 0, NRN => REXSSERVICEFN.PRN);
|
||||||
/* Проверим условия исполнения - исходящее, недоисполнено, и остались попытки */
|
/* Ïðîâåðèì óñëîâèÿ èñïîëíåíèÿ - èñõîäÿùåå, íåäîèñïîëíåíî, è îñòàëèñü ïîïûòêè, òðåáóåò àóòåíòèôèêàöèè è ñåðâèñ àóòåíòèôèöèðîâàí */
|
||||||
if ((REXSSERVICE.SRV_TYPE = NSRV_TYPE_SEND) and
|
if ((REXSSERVICE.SRV_TYPE = NSRV_TYPE_SEND) and
|
||||||
(REXSQUEUE.EXEC_STATE not in
|
(REXSQUEUE.EXEC_STATE not in
|
||||||
(NQUEUE_EXEC_STATE_OK, NQUEUE_EXEC_STATE_ERR, NQUEUE_EXEC_STATE_APP, NQUEUE_EXEC_STATE_DB)) and
|
(NQUEUE_EXEC_STATE_OK, NQUEUE_EXEC_STATE_ERR, NQUEUE_EXEC_STATE_APP, NQUEUE_EXEC_STATE_DB)) and
|
||||||
@ -1421,7 +1719,9 @@ create or replace package body PKG_EXS as
|
|||||||
((REXSSERVICEFN.RETRY_SCHEDULE = NRETRY_SCHEDULE_UNDEF) and (REXSQUEUE.EXEC_CNT = 0))) and
|
((REXSSERVICEFN.RETRY_SCHEDULE = NRETRY_SCHEDULE_UNDEF) and (REXSQUEUE.EXEC_CNT = 0))) and
|
||||||
(UTL_SCHED_CHECK_EXEC(DEXEC_DATE => REXSQUEUE.EXEC_DATE,
|
(UTL_SCHED_CHECK_EXEC(DEXEC_DATE => REXSQUEUE.EXEC_DATE,
|
||||||
NRETRY_SCHEDULE => REXSSERVICEFN.RETRY_SCHEDULE,
|
NRETRY_SCHEDULE => REXSSERVICEFN.RETRY_SCHEDULE,
|
||||||
NRETRY_STEP => REXSSERVICEFN.RETRY_STEP))) then
|
NRETRY_STEP => REXSSERVICEFN.RETRY_STEP)) and
|
||||||
|
((REXSSERVICEFN.AUTH_ONLY = NAUTH_ONLY_NO) or
|
||||||
|
((REXSSERVICEFN.AUTH_ONLY = NAUTH_ONLY_YES) and (REXSSERVICE.IS_AUTH = NIS_AUTH_YES)))) then
|
||||||
/* Íàäî èñïîëíÿòü */
|
/* Íàäî èñïîëíÿòü */
|
||||||
NRESULT := NQUEUE_EXEC_YES;
|
NRESULT := NQUEUE_EXEC_YES;
|
||||||
end if;
|
end if;
|
||||||
@ -1461,7 +1761,7 @@ create or replace package body PKG_EXS as
|
|||||||
/* ×èñòèì áóôåð */
|
/* ×èñòèì áóôåð */
|
||||||
RNLIST_BASE_CLEAR(NIDENT => NIDENT);
|
RNLIST_BASE_CLEAR(NIDENT => NIDENT);
|
||||||
end QUEUE_SRV_TYPE_SEND_GET;
|
end QUEUE_SRV_TYPE_SEND_GET;
|
||||||
|
|
||||||
/* Óñòàíîâêà ñîñòîÿíèå çàïèñè î÷åðåäè */
|
/* Óñòàíîâêà ñîñòîÿíèå çàïèñè î÷åðåäè */
|
||||||
procedure QUEUE_EXEC_STATE_SET
|
procedure QUEUE_EXEC_STATE_SET
|
||||||
(
|
(
|
||||||
@ -1585,29 +1885,43 @@ create or replace package body PKG_EXS as
|
|||||||
/* Âåðíåì èçìåíåííóþ ïîçèöèþ î÷åðåäè */
|
/* Âåðíåì èçìåíåííóþ ïîçèöèþ î÷åðåäè */
|
||||||
QUEUE_GET(NFLAG_SMART => 0, NEXSQUEUE => NEXSQUEUE, RCQUEUE => RCQUEUE);
|
QUEUE_GET(NFLAG_SMART => 0, NEXSQUEUE => NEXSQUEUE, RCQUEUE => RCQUEUE);
|
||||||
end QUEUE_MSG_SET;
|
end QUEUE_MSG_SET;
|
||||||
|
|
||||||
/* Ïîìåùåíèå ñîîáùåíèÿ îáìåíà â î÷åðåäü */
|
/* Ïîìåùåíèå ñîîáùåíèÿ îáìåíà â î÷åðåäü */
|
||||||
procedure QUEUE_PUT
|
procedure QUEUE_PUT
|
||||||
(
|
(
|
||||||
NEXSSERVICEFN in number, -- Рег. номер функции обработки
|
NEXSSERVICEFN in number, -- Ðåã. íîìåð ôóíêöèè îáðàáîòêè
|
||||||
BMSG in blob, -- Данные
|
BMSG in blob, -- Äàííûå
|
||||||
NEXSQUEUE in number := null, -- Рег. номер связанной позиции очереди
|
NEXSQUEUE in number := null, -- Ðåã. íîìåð ñâÿçàííîé ïîçèöèè î÷åðåäè
|
||||||
NLNK_COMPANY in number := null, -- Рег. номер связанной организации
|
NLNK_COMPANY in number := null, -- Ðåã. íîìåð ñâÿçàííîé îðãàíèçàöèè
|
||||||
NLNK_DOCUMENT in number := null, -- Рег. номер связанной записи документа
|
NLNK_DOCUMENT in number := null, -- Ðåã. íîìåð ñâÿçàííîé çàïèñè äîêóìåíòà
|
||||||
SLNK_UNITCODE in varchar2 := null, -- Код связанного раздела
|
SLNK_UNITCODE in varchar2 := null, -- Êîä ñâÿçàííîãî ðàçäåëà
|
||||||
SOPTIONS in varchar2 := null, -- Параметры сообщения
|
SOPTIONS in varchar2 := null, -- Ïàðàìåòðû ñîîáùåíèÿ
|
||||||
NNEW_EXSQUEUE out number -- Курсор с добавленной позицией очереди
|
NNEW_EXSQUEUE out number -- Êóðñîð ñ äîáàâëåííîé ïîçèöèåé î÷åðåäè
|
||||||
)
|
)
|
||||||
is
|
is
|
||||||
|
REXSSERVICE EXSSERVICE%rowtype; -- Çàïèñü ñåðâèñà îáðàáîòêè
|
||||||
|
REXSSERVICEFN EXSSERVICEFN%rowtype; -- Çàïèñü ôóíêöèè îáðàáîòêè
|
||||||
begin
|
begin
|
||||||
/* Ïðîâåðÿåì ïàðàìåòðû */
|
/* Ïðîâåðÿåì ïàðàìåòðû */
|
||||||
if (NEXSSERVICEFN is null) then
|
if (NEXSSERVICEFN is null) then
|
||||||
P_EXCEPTION(0, 'Не указан идентификатор функции сервиса обмена');
|
P_EXCEPTION(0, 'Íå óêàçàí èäåíòèôèêàòîð ôóíêöèè ñåðâèñà îáìåíà.');
|
||||||
|
end if;
|
||||||
|
/* Ñ÷èòàåì çàïèñü ôóíêöèè îáðàáîòêè */
|
||||||
|
REXSSERVICEFN := GET_EXSSERVICEFN_ID(NFLAG_SMART => 0, NRN => NEXSSERVICEFN);
|
||||||
|
/* Ñ÷èòàåì çàïèñü ñåðâèñà îáðàáîòêè */
|
||||||
|
REXSSERVICE := GET_EXSSERVICE_ID(NFLAG_SMART => 0, NRN => REXSSERVICEFN.PRN);
|
||||||
|
/* Åñëè ýòî èñõîäÿùåå ñîîáùåíèå è ôóíêöèÿ òðåáóåò àóòåíòèôèêàöèè */
|
||||||
|
if ((REXSSERVICE.SRV_TYPE = NSRV_TYPE_SEND) and (REXSSERVICEFN.AUTH_ONLY = NAUTH_ONLY_YES)) then
|
||||||
|
/* Ïðîâåðèì íåîáõîäèìîñòü àóòåíòèôèêàöèè */
|
||||||
|
if (SERVICE_IS_AUTH(NEXSSERVICE => REXSSERVICE.RN) = NIS_AUTH_NO) then
|
||||||
|
/* Íóæíà àóòåíòèôèêàöèÿ - ïîñòàâèì â î÷åðåäü çàäàíèå äëÿ íå¸ */
|
||||||
|
SERVICE_AUTH_PUT_INQUEUE(NEXSSERVICE => REXSSERVICE.RN);
|
||||||
|
end if;
|
||||||
end if;
|
end if;
|
||||||
/* Ñòàâèì çàïèñü â î÷åðåäü */
|
/* Ñòàâèì çàïèñü â î÷åðåäü */
|
||||||
P_EXSQUEUE_BASE_INSERT(DIN_DATE => sysdate,
|
P_EXSQUEUE_BASE_INSERT(DIN_DATE => sysdate,
|
||||||
SIN_AUTHID => UTILIZER(),
|
SIN_AUTHID => UTILIZER(),
|
||||||
NEXSSERVICEFN => NEXSSERVICEFN,
|
NEXSSERVICEFN => REXSSERVICEFN.RN,
|
||||||
DEXEC_DATE => null,
|
DEXEC_DATE => null,
|
||||||
NEXEC_CNT => 0,
|
NEXEC_CNT => 0,
|
||||||
NEXEC_STATE => NQUEUE_EXEC_STATE_INQUEUE,
|
NEXEC_STATE => NQUEUE_EXEC_STATE_INQUEUE,
|
||||||
@ -1635,7 +1949,7 @@ create or replace package body PKG_EXS as
|
|||||||
RCQUEUE out sys_refcursor -- Êóðñîð ñ äîáàâëåííîé ïîçèöèåé î÷åðåäè
|
RCQUEUE out sys_refcursor -- Êóðñîð ñ äîáàâëåííîé ïîçèöèåé î÷åðåäè
|
||||||
)
|
)
|
||||||
is
|
is
|
||||||
NRN EXSQUEUE.RN%type; -- Рег. номер добавленной записи очереди
|
NRN EXSQUEUE.RN%type; -- Ðåã. íîìåð äîáàâëåííîé çàïèñè î÷åðåäè
|
||||||
begin
|
begin
|
||||||
/* Ïðîâåðÿåì ïàðàìåòðû */
|
/* Ïðîâåðÿåì ïàðàìåòðû */
|
||||||
QUEUE_PUT(NEXSSERVICEFN => NEXSSERVICEFN,
|
QUEUE_PUT(NEXSSERVICEFN => NEXSSERVICEFN,
|
||||||
@ -1664,7 +1978,7 @@ create or replace package body PKG_EXS as
|
|||||||
NNEW_EXSQUEUE out number -- Êóðñîð ñ äîáàâëåííîé ïîçèöèåé î÷åðåäè
|
NNEW_EXSQUEUE out number -- Êóðñîð ñ äîáàâëåííîé ïîçèöèåé î÷åðåäè
|
||||||
)
|
)
|
||||||
is
|
is
|
||||||
NEXSSERVICEFN PKG_STD.TREF; -- Рег. номер функции сервиса обработки
|
NEXSSERVICEFN PKG_STD.TREF; -- Ðåã. íîìåð ôóíêöèè ñåðâèñà îáðàáîòêè
|
||||||
begin
|
begin
|
||||||
/* Ïðîâåðÿåì ïàðàìåòðû */
|
/* Ïðîâåðÿåì ïàðàìåòðû */
|
||||||
if (SEXSSERVICE is null) then
|
if (SEXSSERVICE is null) then
|
||||||
@ -1702,7 +2016,7 @@ create or replace package body PKG_EXS as
|
|||||||
RCQUEUE out sys_refcursor -- Êóðñîð ñ äîáàâëåííîé ïîçèöèåé î÷åðåäè
|
RCQUEUE out sys_refcursor -- Êóðñîð ñ äîáàâëåííîé ïîçèöèåé î÷åðåäè
|
||||||
)
|
)
|
||||||
is
|
is
|
||||||
NRN EXSQUEUE.RN%type; -- Рег. номер добавленной записи очереди
|
NRN EXSQUEUE.RN%type; -- Ðåã. íîìåð äîáàâëåííîé çàïèñè î÷åðåäè
|
||||||
begin
|
begin
|
||||||
/* Ñòàâèì çàïèñü â î÷åðåäü */
|
/* Ñòàâèì çàïèñü â î÷åðåäü */
|
||||||
QUEUE_PUT(SEXSSERVICE => SEXSSERVICE,
|
QUEUE_PUT(SEXSSERVICE => SEXSSERVICE,
|
||||||
|
@ -64,6 +64,57 @@ exports.dbConnectorModule = new Schema({
|
|||||||
required: "Не реализована функция получения списка функций сервиса (getServiceFunctions)"
|
required: "Не реализована функция получения списка функций сервиса (getServiceFunctions)"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
//Получение контекста сервиса
|
||||||
|
getServiceContext: {
|
||||||
|
use: { validateAsyncFunctionType },
|
||||||
|
required: true,
|
||||||
|
message: {
|
||||||
|
validateAsyncFunctionType:
|
||||||
|
"Функция получения контекста сервиса (getServiceContext) имеет неверный формат (ожидалось - AsyncFunction)",
|
||||||
|
required: "Не реализована функция получения контекста сервиса (getServiceContext)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//Установка контекста сервиса
|
||||||
|
setServiceContext: {
|
||||||
|
use: { validateAsyncFunctionType },
|
||||||
|
required: true,
|
||||||
|
message: {
|
||||||
|
validateAsyncFunctionType:
|
||||||
|
"Функция установки контекста сервиса (setServiceContext) имеет неверный формат (ожидалось - AsyncFunction)",
|
||||||
|
required: "Не реализована функция установки контекста сервиса (setServiceContext)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//Очистка контекста сервиса
|
||||||
|
clearServiceContext: {
|
||||||
|
use: { validateAsyncFunctionType },
|
||||||
|
required: true,
|
||||||
|
message: {
|
||||||
|
validateAsyncFunctionType:
|
||||||
|
"Функция очистки контекста сервиса (clearServiceContext) имеет неверный формат (ожидалось - AsyncFunction)",
|
||||||
|
required: "Не реализована функция очистки контекста сервиса (clearServiceContext)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//Проверка атуентифицированности сервиса
|
||||||
|
isServiceAuth: {
|
||||||
|
use: { validateAsyncFunctionType },
|
||||||
|
required: true,
|
||||||
|
message: {
|
||||||
|
validateAsyncFunctionType:
|
||||||
|
"Функция проверки атуентифицированности сервиса (isServiceAuth) имеет неверный формат (ожидалось - AsyncFunction)",
|
||||||
|
required: "Не реализована функция проверки атуентифицированности сервиса (isServiceAuth)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//Постановка в очередь задания на аутентификацию сервиса
|
||||||
|
putServiceAuthInQueue: {
|
||||||
|
use: { validateAsyncFunctionType },
|
||||||
|
required: true,
|
||||||
|
message: {
|
||||||
|
validateAsyncFunctionType:
|
||||||
|
"Функция постановки в очередь задания на аутентификацию сервиса (putServiceAuthInQueue) имеет неверный формат (ожидалось - AsyncFunction)",
|
||||||
|
required:
|
||||||
|
"Не реализована функция постановки в очередь задания на аутентификацию сервиса (putServiceAuthInQueue)"
|
||||||
|
}
|
||||||
|
},
|
||||||
//Протоколирование работы сервиса
|
//Протоколирование работы сервиса
|
||||||
log: {
|
log: {
|
||||||
use: { validateAsyncFunctionType },
|
use: { validateAsyncFunctionType },
|
||||||
|
@ -27,6 +27,12 @@ const NUNAVLBL_NTF_SIGN_YES = 1; //Оповещать о простое
|
|||||||
const SUNAVLBL_NTF_SIGN_NO = "UNAVLBL_NTF_NO"; //Не оповещать о простое (строковый код)
|
const SUNAVLBL_NTF_SIGN_NO = "UNAVLBL_NTF_NO"; //Не оповещать о простое (строковый код)
|
||||||
const SUNAVLBL_NTF_SIGN_YES = "UNAVLBL_NTF_YES"; //Оповещать о простое (строковый код)
|
const SUNAVLBL_NTF_SIGN_YES = "UNAVLBL_NTF_YES"; //Оповещать о простое (строковый код)
|
||||||
|
|
||||||
|
//Признак аутентифицированности сервиса
|
||||||
|
const NIS_AUTH_YES = 1; //Аутентифицирован
|
||||||
|
const NIS_AUTH_NO = 0; //Неаутентифицирован
|
||||||
|
const SIS_AUTH_YES = "IS_AUTH_YES"; //Аутентифицирован (строковый код)
|
||||||
|
const SIS_AUTH_NO = "IS_AUTH_NO"; //Неаутентифицирован (строковый код)
|
||||||
|
|
||||||
//-------------
|
//-------------
|
||||||
// Тело модуля
|
// Тело модуля
|
||||||
//-------------
|
//-------------
|
||||||
@ -49,8 +55,12 @@ exports.NUNAVLBL_NTF_SIGN_NO = NUNAVLBL_NTF_SIGN_NO;
|
|||||||
exports.NUNAVLBL_NTF_SIGN_YES = NUNAVLBL_NTF_SIGN_YES;
|
exports.NUNAVLBL_NTF_SIGN_YES = NUNAVLBL_NTF_SIGN_YES;
|
||||||
exports.SUNAVLBL_NTF_SIGN_NO = SUNAVLBL_NTF_SIGN_NO;
|
exports.SUNAVLBL_NTF_SIGN_NO = SUNAVLBL_NTF_SIGN_NO;
|
||||||
exports.SUNAVLBL_NTF_SIGN_YES = SUNAVLBL_NTF_SIGN_YES;
|
exports.SUNAVLBL_NTF_SIGN_YES = SUNAVLBL_NTF_SIGN_YES;
|
||||||
|
exports.NIS_AUTH_YES = NIS_AUTH_YES;
|
||||||
|
exports.NIS_AUTH_NO = NIS_AUTH_NO;
|
||||||
|
exports.SIS_AUTH_YES = SIS_AUTH_YES;
|
||||||
|
exports.SIS_AUTH_NO = SIS_AUTH_NO;
|
||||||
|
|
||||||
//Схема валидации
|
//Схема валидации сервиса
|
||||||
exports.Service = new Schema({
|
exports.Service = new Schema({
|
||||||
//Идентификатор сервиса
|
//Идентификатор сервиса
|
||||||
nId: {
|
nId: {
|
||||||
@ -191,3 +201,67 @@ exports.Service = new Schema({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//Схема валидации контекста сервиса
|
||||||
|
exports.ServiceCtx = new Schema({
|
||||||
|
//Идентификатор сервиса
|
||||||
|
nId: {
|
||||||
|
type: Number,
|
||||||
|
required: true,
|
||||||
|
message: {
|
||||||
|
type: "Идентификатор сервиса (nId) имеет некорректный тип данных (ожидалось - Number)",
|
||||||
|
required: "Не указан идентификатор сервиса (nId)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//Контекст
|
||||||
|
sCtx: {
|
||||||
|
type: String,
|
||||||
|
required: false,
|
||||||
|
message: {
|
||||||
|
type: "Контектс сервиса (sCtx) имеет некорректный тип данных (ожидалось - String)",
|
||||||
|
required: "Не указан контекст сервиса (sCtx)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//Дата истечения контекста
|
||||||
|
dCtxExp: {
|
||||||
|
type: Date,
|
||||||
|
required: false,
|
||||||
|
message: {
|
||||||
|
type: "Дата истечения контекста (dCtxExp) имеет некорректный тип данных (ожидалось - Date)",
|
||||||
|
required: "Не указана дата истечения контекста (dCtxExp)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//Дата истечения контекста (строковое представление)
|
||||||
|
sCtxExp: {
|
||||||
|
type: String,
|
||||||
|
required: false,
|
||||||
|
message: {
|
||||||
|
type:
|
||||||
|
"Строковое представление даты истечения контекста (sCtxExp) имеет некорректный тип данных (ожидалось - String)",
|
||||||
|
required: "Не указано строковое представление даты истечения контекста (sCtxExp)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//Признак аутентицированности сервиса
|
||||||
|
nIsAuth: {
|
||||||
|
type: Number,
|
||||||
|
enum: [NIS_AUTH_YES, NIS_AUTH_NO],
|
||||||
|
required: true,
|
||||||
|
message: {
|
||||||
|
type: "Признака аутентицированности сервиса (nIsAuth) имеет некорректный тип данных (ожидалось - Number)",
|
||||||
|
enum: "Значение признака аутентицированности сервиса (nIsAuth) не поддерживается",
|
||||||
|
required: "Не указан признак аутентицированности сервиса (nIsAuth)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//Признак аутентицированности сервиса (строковый код)
|
||||||
|
sIsAuth: {
|
||||||
|
type: String,
|
||||||
|
enum: [SIS_AUTH_YES, SIS_AUTH_NO],
|
||||||
|
required: true,
|
||||||
|
message: {
|
||||||
|
type:
|
||||||
|
"Строковый код признака аутентицированности сервиса (sIsAuth) имеет некорректный тип данных (ожидалось - String)",
|
||||||
|
enum: "Значение строкового кода признака аутентицированности сервиса (sIsAuth) не поддерживается",
|
||||||
|
required: "Не указан строковый код признака аутентицированности сервиса (sIsAuth)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
//----------------------
|
//----------------------
|
||||||
|
|
||||||
const Schema = require("validate"); //Схемы валидации
|
const Schema = require("validate"); //Схемы валидации
|
||||||
|
const { validateMailList } = require("./common"); //Общие объекты валидации моделей данных
|
||||||
|
|
||||||
//----------
|
//----------
|
||||||
// Константы
|
// Константы
|
||||||
@ -43,6 +44,18 @@ const SRETRY_SCHEDULE_DAY = "DAY"; //Сутки (строковый код)
|
|||||||
const SRETRY_SCHEDULE_WEEK = "WEEK"; //Неделя (строковый код)
|
const SRETRY_SCHEDULE_WEEK = "WEEK"; //Неделя (строковый код)
|
||||||
const SRETRY_SCHEDULE_MONTH = "MONTH"; //Месяц (строковый код)
|
const SRETRY_SCHEDULE_MONTH = "MONTH"; //Месяц (строковый код)
|
||||||
|
|
||||||
|
//Признак необходимости аутентифицированности сервиса для исполнения функции
|
||||||
|
const NAUTH_ONLY_YES = 1; //Требуется аутентификация
|
||||||
|
const NAUTH_ONLY_NO = 0; //Аутентификация не требуется
|
||||||
|
const SAUTH_ONLY_YES = "AUTH_ONLY_YES"; //Требуется аутентификация (строковый код)
|
||||||
|
const SAUTH_ONLY_NO = "AUTH_ONLY_NO"; //Аутентификация не требуется (строковый код)
|
||||||
|
|
||||||
|
//Признак оповещения об ошибке исполнения сообщения очереди для функции обработки
|
||||||
|
const NERR_NTF_SIGN_NO = 0; //Не оповещать об ошибке исполнения
|
||||||
|
const NERR_NTF_SIGN_YES = 1; //Оповещать об ошибке исполнения
|
||||||
|
const SERR_NTF_SIGN_NO = "ERR_NTF_SIGN_NO"; //Не оповещать об ошибке исполнения (строковый код)
|
||||||
|
const SERR_NTF_SIGN_YES = "ERR_NTF_SIGN_YES"; //Оповещать об ошибке исполнения (строковый код)
|
||||||
|
|
||||||
//-------------
|
//-------------
|
||||||
// Тело модуля
|
// Тело модуля
|
||||||
//-------------
|
//-------------
|
||||||
@ -56,6 +69,11 @@ const validateAppSrvFn = val => {
|
|||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//Валидация списка адресов E-Mail для оповещения об ошибке обработки сообщения очереди
|
||||||
|
const validateErrNtfMail = val => {
|
||||||
|
return validateMailList(val);
|
||||||
|
};
|
||||||
|
|
||||||
//------------------
|
//------------------
|
||||||
// Интерфейс модуля
|
// Интерфейс модуля
|
||||||
//------------------
|
//------------------
|
||||||
@ -85,6 +103,14 @@ exports.SRETRY_SCHEDULE_HOUR = SRETRY_SCHEDULE_HOUR;
|
|||||||
exports.SRETRY_SCHEDULE_DAY = SRETRY_SCHEDULE_DAY;
|
exports.SRETRY_SCHEDULE_DAY = SRETRY_SCHEDULE_DAY;
|
||||||
exports.SRETRY_SCHEDULE_WEEK = SRETRY_SCHEDULE_WEEK;
|
exports.SRETRY_SCHEDULE_WEEK = SRETRY_SCHEDULE_WEEK;
|
||||||
exports.SRETRY_SCHEDULE_MONTH = SRETRY_SCHEDULE_MONTH;
|
exports.SRETRY_SCHEDULE_MONTH = SRETRY_SCHEDULE_MONTH;
|
||||||
|
exports.NAUTH_ONLY_YES = NAUTH_ONLY_YES;
|
||||||
|
exports.NAUTH_ONLY_NO = NAUTH_ONLY_NO;
|
||||||
|
exports.SAUTH_ONLY_YES = SAUTH_ONLY_YES;
|
||||||
|
exports.SAUTH_ONLY_NO = SAUTH_ONLY_NO;
|
||||||
|
exports.NERR_NTF_SIGN_NO = NERR_NTF_SIGN_NO;
|
||||||
|
exports.NERR_NTF_SIGN_YES = NERR_NTF_SIGN_YES;
|
||||||
|
exports.SERR_NTF_SIGN_NO = SERR_NTF_SIGN_NO;
|
||||||
|
exports.SERR_NTF_SIGN_YES = SERR_NTF_SIGN_YES;
|
||||||
|
|
||||||
//Схема валидации функции сервиса
|
//Схема валидации функции сервиса
|
||||||
exports.ServiceFunction = new Schema({
|
exports.ServiceFunction = new Schema({
|
||||||
@ -270,5 +296,74 @@ exports.ServiceFunction = new Schema({
|
|||||||
validateAppSrvFn:
|
validateAppSrvFn:
|
||||||
"Обработчик сообщения 'после' на строне сервера приложений для функции сервиса (sAppSrvBefore) имеет некорректный формат, ожидалось: <МОДУЛЬ>.js/<ФУНКЦИЯ>"
|
"Обработчик сообщения 'после' на строне сервера приложений для функции сервиса (sAppSrvBefore) имеет некорректный формат, ожидалось: <МОДУЛЬ>.js/<ФУНКЦИЯ>"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
//Признак необходимости аутентификации для исполнения функции сервсиа обмена
|
||||||
|
nAuthOnly: {
|
||||||
|
type: Number,
|
||||||
|
enum: [NAUTH_ONLY_NO, NAUTH_ONLY_YES],
|
||||||
|
required: true,
|
||||||
|
message: {
|
||||||
|
type:
|
||||||
|
"Признак необходимости аутентификации для исполнения функции сервсиа обмена (nAuthOnly) имеет некорректный тип данных (ожидалось - Number)",
|
||||||
|
enum:
|
||||||
|
"Значение признака необходимости аутентификации для исполнения функции сервсиа обмена (nAuthOnly) не поддерживается",
|
||||||
|
required: "Не указан признак необходимости аутентификации для исполнения функции сервсиа обмена (nAuthOnly)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//Признак необходимости аутентификации для исполнения функции сервсиа обмена (строковый код)
|
||||||
|
sAuthOnly: {
|
||||||
|
type: String,
|
||||||
|
enum: [SAUTH_ONLY_NO, SAUTH_ONLY_YES],
|
||||||
|
required: true,
|
||||||
|
message: {
|
||||||
|
type:
|
||||||
|
"Строковый код признака необходимости аутентификации для исполнения функции сервсиа обмена (sAuthOnly) имеет некорректный тип данных (ожидалось - String)",
|
||||||
|
enum:
|
||||||
|
"Значение строкового кода признака необходимости аутентификации для исполнения функции сервсиа обмена (sAuthOnly) не поддерживается",
|
||||||
|
required:
|
||||||
|
"Не указан строковый код признака необходимости аутентификации для исполнения функции сервсиа обмена (sAuthOnly)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//Признак оповещения об ошибке исполнения сообщения очереди для функции обработки
|
||||||
|
nErrNtfSign: {
|
||||||
|
type: Number,
|
||||||
|
enum: [NERR_NTF_SIGN_NO, NERR_NTF_SIGN_YES],
|
||||||
|
required: true,
|
||||||
|
message: {
|
||||||
|
type:
|
||||||
|
"Признак оповещения об ошибке исполнения сообщения очереди для функции обработки (nErrNtfSign) имеет некорректный тип данных (ожидалось - Number)",
|
||||||
|
enum:
|
||||||
|
"Значение признака оповещения об ошибке исполнения сообщения очереди для функции обработки (nErrNtfSign) не поддерживается",
|
||||||
|
required:
|
||||||
|
"Не указан признак оповещения об ошибке исполнения сообщения очереди для функции обработки (nErrNtfSign)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//Признак оповещения об ошибке исполнения сообщения очереди для функции обработки (строковый код)
|
||||||
|
sErrNtfSign: {
|
||||||
|
type: String,
|
||||||
|
enum: [SERR_NTF_SIGN_NO, SERR_NTF_SIGN_YES],
|
||||||
|
required: true,
|
||||||
|
message: {
|
||||||
|
type:
|
||||||
|
"Строковый код признака оповещения об ошибке исполнения сообщения очереди для функции обработки (sErrNtfSign) имеет некорректный тип данных (ожидалось - String)",
|
||||||
|
enum:
|
||||||
|
"Значение строкового кода признака оповещения об ошибке исполнения сообщения очереди для функции обработки (sErrNtfSign) не поддерживается",
|
||||||
|
required:
|
||||||
|
"Не указан строковый код признака оповещения об ошибке исполнения сообщения очереди для функции обработки (sErrNtfSign)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//Список адресов E-Mail для оповещения об ошибке исполнения сообщения очереди для функции обработки
|
||||||
|
sErrNtfMail: {
|
||||||
|
type: String,
|
||||||
|
required: false,
|
||||||
|
use: { validateErrNtfMail },
|
||||||
|
message: {
|
||||||
|
type:
|
||||||
|
"Список адресов E-Mail для оповещения об ошибке исполнения сообщения очереди для функции обработки (sErrNtfMail) имеет некорректный тип данных (ожидалось - String)",
|
||||||
|
required:
|
||||||
|
"Не указан список адресов E-Mail для оповещения об ошибке исполнения сообщения очереди для функции обработки (sErrNtfMail)",
|
||||||
|
validateErrNtfMail:
|
||||||
|
"Неверный формат списка адресов E-Mail для оповещения об ошибке исполнения сообщения очереди для функции обработки (sErrNtfMail), для указания нескольких адресов следует использовать запятую в качестве разделителя (без пробелов)"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -78,6 +78,89 @@ exports.getServiceFunctions = new Schema({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//Схема валидации параметров функции получения контекста сервиса
|
||||||
|
exports.getServiceContext = new Schema({
|
||||||
|
//Идентификатор сервиса
|
||||||
|
nServiceId: {
|
||||||
|
type: Number,
|
||||||
|
required: true,
|
||||||
|
message: {
|
||||||
|
type: path => `Идентификатор сервиса (${path}) имеет некорректный тип данных (ожидалось - Number)`,
|
||||||
|
required: path => `Не указан идентификатор сервиса (${path})`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
//Схема валидации параметров функции установки контектса сервиса
|
||||||
|
exports.setServiceContext = new Schema({
|
||||||
|
//Идентификатор сервиса
|
||||||
|
nServiceId: {
|
||||||
|
type: Number,
|
||||||
|
required: true,
|
||||||
|
message: {
|
||||||
|
type: path => `Идентификатор сервиса (${path}) имеет некорректный тип данных (ожидалось - Number)`,
|
||||||
|
required: path => `Не указан идентификатор сервиса (${path})`
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//Контекст сервиса
|
||||||
|
sCtx: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
message: {
|
||||||
|
type: path => `Контекст сервиса (${path}) имеет некорректный тип данных (ожидалось - String)`,
|
||||||
|
required: path => `Не указан контекст сервиса (${path})`
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//Дата истечения контекста сервиса
|
||||||
|
dCtxExp: {
|
||||||
|
type: Date,
|
||||||
|
required: false,
|
||||||
|
message: {
|
||||||
|
type: path => `Дата истечения контекст сервиса (${path}) имеет некорректный тип данных (ожидалось - Date)`,
|
||||||
|
required: path => `Не указана дата истечения контекста сервиса (${path})`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
//Схема валидации параметров функции очистки контекста сервиса
|
||||||
|
exports.clearServiceContext = new Schema({
|
||||||
|
//Идентификатор сервиса
|
||||||
|
nServiceId: {
|
||||||
|
type: Number,
|
||||||
|
required: true,
|
||||||
|
message: {
|
||||||
|
type: path => `Идентификатор сервиса (${path}) имеет некорректный тип данных (ожидалось - Number)`,
|
||||||
|
required: path => `Не указан идентификатор сервиса (${path})`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
//Схема валидации параметров функции проверки аутентифицированности сервиса
|
||||||
|
exports.isServiceAuth = new Schema({
|
||||||
|
//Идентификатор сервиса
|
||||||
|
nServiceId: {
|
||||||
|
type: Number,
|
||||||
|
required: true,
|
||||||
|
message: {
|
||||||
|
type: path => `Идентификатор сервиса (${path}) имеет некорректный тип данных (ожидалось - Number)`,
|
||||||
|
required: path => `Не указан идентификатор сервиса (${path})`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
//Схема валидации параметров функции постановки в очередь задания на аутентификацию сервиса
|
||||||
|
exports.putServiceAuthInQueue = new Schema({
|
||||||
|
//Идентификатор сервиса
|
||||||
|
nServiceId: {
|
||||||
|
type: Number,
|
||||||
|
required: true,
|
||||||
|
message: {
|
||||||
|
type: path => `Идентификатор сервиса (${path}) имеет некорректный тип данных (ожидалось - Number)`,
|
||||||
|
required: path => `Не указан идентификатор сервиса (${path})`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
//Схема валидации параметров функции записи в журнал работы сервиса
|
//Схема валидации параметров функции записи в журнал работы сервиса
|
||||||
exports.putLog = new Schema({
|
exports.putLog = new Schema({
|
||||||
//Тип сообщения журнала работы сервиса
|
//Тип сообщения журнала работы сервиса
|
||||||
|
@ -85,6 +85,73 @@ const getServiceFunctions = async prms => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//Получение контекста сервиса
|
||||||
|
const getServiceContext = async prms => {
|
||||||
|
try {
|
||||||
|
let res = await prms.connection.execute(
|
||||||
|
"BEGIN PKG_EXS.SERVICE_CTX_GET(NFLAG_SMART => 0, NEXSSERVICE => :NEXSSERVICE, RCSERVICE_CTX => :RCSERVICE_CTX); END;",
|
||||||
|
{ NEXSSERVICE: prms.nServiceId, RCSERVICE_CTX: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } },
|
||||||
|
{ outFormat: oracledb.OBJECT }
|
||||||
|
);
|
||||||
|
let rows = await readCursorData(res.outBinds.RCSERVICE_CTX);
|
||||||
|
return rows[0];
|
||||||
|
} catch (e) {
|
||||||
|
throw new Error(e.message);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//Установка контекста сервиса
|
||||||
|
const setServiceContext = async prms => {
|
||||||
|
try {
|
||||||
|
await prms.connection.execute(
|
||||||
|
"BEGIN PKG_EXS.SERVICE_CTX_SET(NEXSSERVICE => :NEXSSERVICE, SCTX => :SCTX, DCTX_EXP => :DCTX_EXP); END;",
|
||||||
|
{ NEXSSERVICE: prms.nServiceId, SCTX: prms.sCtx, DCTX_EXP: prms.dCtxExp },
|
||||||
|
{ autoCommit: true }
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
throw new Error(e.message);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//Очистка контекста сервиса
|
||||||
|
const clearServiceContext = async prms => {
|
||||||
|
try {
|
||||||
|
await prms.connection.execute(
|
||||||
|
"BEGIN PKG_EXS.SERVICE_CTX_CLEAR(NEXSSERVICE => :NEXSSERVICE); END;",
|
||||||
|
{ NEXSSERVICE: prms.nServiceId },
|
||||||
|
{ autoCommit: true }
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
throw new Error(e.message);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//Проверка атуентифицированности сервиса
|
||||||
|
const isServiceAuth = async prms => {
|
||||||
|
try {
|
||||||
|
let res = await prms.connection.execute(
|
||||||
|
"BEGIN :RET := PKG_EXS.SERVICE_IS_AUTH(NEXSSERVICE => :NEXSSERVICE); END;",
|
||||||
|
{ NEXSSERVICE: prms.nServiceId, RET: { dir: oracledb.BIND_OUT, type: oracledb.NUMBER } }
|
||||||
|
);
|
||||||
|
return res.outBinds.RET;
|
||||||
|
} catch (e) {
|
||||||
|
throw new Error(e.message);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//Постановка в очередь задания на аутентификацию сервиса
|
||||||
|
const putServiceAuthInQueue = async prms => {
|
||||||
|
try {
|
||||||
|
await prms.connection.execute(
|
||||||
|
"BEGIN PKG_EXS.SERVICE_AUTH_PUT_INQUEUE(NEXSSERVICE => :NEXSSERVICE); END;",
|
||||||
|
{ NEXSSERVICE: prms.nServiceId },
|
||||||
|
{ autoCommit: true }
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
throw new Error(e.message);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
//Запись в протокол работы
|
//Запись в протокол работы
|
||||||
const log = async prms => {
|
const log = async prms => {
|
||||||
try {
|
try {
|
||||||
@ -296,6 +363,11 @@ exports.connect = connect;
|
|||||||
exports.disconnect = disconnect;
|
exports.disconnect = disconnect;
|
||||||
exports.getServices = getServices;
|
exports.getServices = getServices;
|
||||||
exports.getServiceFunctions = getServiceFunctions;
|
exports.getServiceFunctions = getServiceFunctions;
|
||||||
|
exports.getServiceContext = getServiceContext;
|
||||||
|
exports.setServiceContext = setServiceContext;
|
||||||
|
exports.clearServiceContext = clearServiceContext;
|
||||||
|
exports.isServiceAuth = isServiceAuth;
|
||||||
|
exports.putServiceAuthInQueue = putServiceAuthInQueue;
|
||||||
exports.log = log;
|
exports.log = log;
|
||||||
exports.getQueue = getQueue;
|
exports.getQueue = getQueue;
|
||||||
exports.putQueue = putQueue;
|
exports.putQueue = putQueue;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user