Действия начала и завершения сеанса для сервиса обмена
This commit is contained in:
parent
7e0b1ea83a
commit
f4f52c6e89
176
db/PKG_EXS.pck
176
db/PKG_EXS.pck
@ -327,7 +327,7 @@ create or replace package PKG_EXS as
|
|||||||
NEXSSERVICE in number -- Ðåã. íîìåð çàïèñè ñåðâèñà
|
NEXSSERVICE in number -- Ðåã. íîìåð çàïèñè ñåðâèñà
|
||||||
) return number; -- Ôëàã àóòåíòèôèêàöèè (ñì. êîíñòàíòû NIS_AUTH_*)
|
) return number; -- Ôëàã àóòåíòèôèêàöèè (ñì. êîíñòàíòû NIS_AUTH_*)
|
||||||
|
|
||||||
/* Поиск функции аутентификации для сервиса обмена */
|
/* Поиск функции аутентификации (начала сеанса) для сервиса обмена */
|
||||||
procedure SERVICE_AUTH_FN_FIND
|
procedure SERVICE_AUTH_FN_FIND
|
||||||
(
|
(
|
||||||
NFLAG_SMART in number, -- Ïðèçíàê âûäà÷è ñîîáùåíèÿ îá îøèáêå
|
NFLAG_SMART in number, -- Ïðèçíàê âûäà÷è ñîîáùåíèÿ îá îøèáêå
|
||||||
@ -335,12 +335,26 @@ create or replace package PKG_EXS as
|
|||||||
REXSSERVICEFN out EXSSERVICEFN%rowtype -- Çàïèñü ôóíêöèè àóòåíòèôèêàöèè
|
REXSSERVICEFN out EXSSERVICEFN%rowtype -- Çàïèñü ôóíêöèè àóòåíòèôèêàöèè
|
||||||
);
|
);
|
||||||
|
|
||||||
/* Помещение задания на аутентификацию сервиса в очередь обмена */
|
/* Поиск функции отмены аутентификации (завершения сеанса) для сервиса обмена */
|
||||||
|
procedure SERVICE_UNAUTH_FN_FIND
|
||||||
|
(
|
||||||
|
NFLAG_SMART in number, -- Признак выдачи сообщения об ошибке
|
||||||
|
NEXSSERVICE in number, -- Рег. номер записи сервиса
|
||||||
|
REXSSERVICEFN out EXSSERVICEFN%rowtype -- Запись функции аутентификации
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Помещение задания на аутентификацию (начало сеанса) сервиса в очередь обмена */
|
||||||
procedure SERVICE_AUTH_PUT_INQUEUE
|
procedure SERVICE_AUTH_PUT_INQUEUE
|
||||||
(
|
(
|
||||||
NEXSSERVICE in number -- Ðåã. íîìåð ñåðâèñà îáìåíà
|
NEXSSERVICE in number -- Ðåã. íîìåð ñåðâèñà îáìåíà
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/* Помещение задания на отмену аутентификации (завершение сеанса) сервиса в очередь обмена */
|
||||||
|
procedure SERVICE_UNAUTH_PUT_INQUEUE
|
||||||
|
(
|
||||||
|
NEXSSERVICE in number -- Рег. номер сервиса обмена
|
||||||
|
);
|
||||||
|
|
||||||
/* Ïîëó÷åíèå ñïèñêà ñåðâèñîâ */
|
/* Ïîëó÷åíèå ñïèñêà ñåðâèñîâ */
|
||||||
procedure SERVICES_GET
|
procedure SERVICES_GET
|
||||||
(
|
(
|
||||||
@ -508,7 +522,7 @@ create or replace package PKG_EXS as
|
|||||||
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 -- Рег. номер добавленной позиции очереди
|
||||||
);
|
);
|
||||||
|
|
||||||
/* Ïîìåùåíèå ñîîáùåíèÿ îáìåíà â î÷åðåäü (âîçâðàùàåò êóðñîð ñ äîáàâëåííîé çàïèñüþ) */
|
/* Ïîìåùåíèå ñîîáùåíèÿ îáìåíà â î÷åðåäü (âîçâðàùàåò êóðñîð ñ äîáàâëåííîé çàïèñüþ) */
|
||||||
@ -535,7 +549,7 @@ create or replace package PKG_EXS as
|
|||||||
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 -- Рег. номер добавленной позиции очереди
|
||||||
);
|
);
|
||||||
|
|
||||||
/* Ïîìåùåíèå ñîîáùåíèÿ îáìåíà â î÷åðåäü (ïî êîäó ñåðâèñà è ôóíêöèè îáðàáîêè, âîçâðàùàåò êóðñîð ñ äîáàâëåííîé çàïèñüþ) */
|
/* Ïîìåùåíèå ñîîáùåíèÿ îáìåíà â î÷åðåäü (ïî êîäó ñåðâèñà è ôóíêöèè îáðàáîêè, âîçâðàùàåò êóðñîð ñ äîáàâëåííîé çàïèñüþ) */
|
||||||
@ -708,7 +722,7 @@ create or replace package body PKG_EXS as
|
|||||||
RARGS_LIST(RARGS_LIST.LAST).DATA_TYPE := STORED_ARG.DB_DATA_TYPE;
|
RARGS_LIST(RARGS_LIST.LAST).DATA_TYPE := STORED_ARG.DB_DATA_TYPE;
|
||||||
if (RARGS_LIST(RARGS_LIST.LAST).DATA_TYPE in ('PL/SQL RECORD')) then
|
if (RARGS_LIST(RARGS_LIST.LAST).DATA_TYPE in ('PL/SQL RECORD')) then
|
||||||
P_EXCEPTION(NFLAG_SMART,
|
P_EXCEPTION(NFLAG_SMART,
|
||||||
'Невозможно проверить интерфейс пользовательской процедуры: поддерживаются только простые типы данных аргументов!');
|
'Невозможно проверить интерфейс пользовательской процедуры: поддерживаются только простые типы данных аргументов.');
|
||||||
return;
|
return;
|
||||||
end if;
|
end if;
|
||||||
/* Óñòàíîâêà ïðèçíàêà - íå ïðîâåðåíî */
|
/* Óñòàíîâêà ïðèçíàêà - íå ïðîâåðåíî */
|
||||||
@ -741,7 +755,7 @@ create or replace package body PKG_EXS as
|
|||||||
if (SARG_TYPE_NAME is not null) then
|
if (SARG_TYPE_NAME is not null) then
|
||||||
/* Åñëè ïîëüçîâàòåëüñêèé òèï äàííûõ */
|
/* Åñëè ïîëüçîâàòåëüñêèé òèï äàííûõ */
|
||||||
P_EXCEPTION(NFLAG_SMART,
|
P_EXCEPTION(NFLAG_SMART,
|
||||||
'Невозможно проверить интерфейс пользовательской процедуры: поддерживаются только простые типы данных!');
|
'Невозможно проверить интерфейс пользовательской процедуры: поддерживаются только простые типы данных.');
|
||||||
return;
|
return;
|
||||||
else
|
else
|
||||||
/* Åñëè ñòàíäàðòíûé òèï äàííûõ */
|
/* Åñëè ñòàíäàðòíûé òèï äàííûõ */
|
||||||
@ -1107,11 +1121,11 @@ create or replace package body PKG_EXS as
|
|||||||
if (SRESULT is not null) then
|
if (SRESULT is not null) then
|
||||||
if (SRESULT not in (SPRC_RESP_RESULT_OK, SPRC_RESP_RESULT_ERR, SPRC_RESP_RESULT_UNAUTH)) then
|
if (SRESULT not in (SPRC_RESP_RESULT_OK, SPRC_RESP_RESULT_ERR, SPRC_RESP_RESULT_UNAUTH)) then
|
||||||
P_EXCEPTION(0,
|
P_EXCEPTION(0,
|
||||||
'Код результата исполнения обработчика "%s" не поддерживается',
|
'Код результата исполнения обработчика "%s" не поддерживается.',
|
||||||
SRESULT);
|
SRESULT);
|
||||||
end if;
|
end if;
|
||||||
else
|
else
|
||||||
P_EXCEPTION(0, 'Не указан код результата исполнения обработчика');
|
P_EXCEPTION(0, 'Не указан код результата исполнения обработчика.');
|
||||||
end if;
|
end if;
|
||||||
/* Ñîõðàíÿåì êîä ðåçóëüòàòà */
|
/* Ñîõðàíÿåì êîä ðåçóëüòàòà */
|
||||||
PRC_RESP_ARG_STR_SET(NIDENT => NIDENT, SARG => SCONT_FLD_SRESULT, SVALUE => SRESULT);
|
PRC_RESP_ARG_STR_SET(NIDENT => NIDENT, SARG => SCONT_FLD_SRESULT, SVALUE => SRESULT);
|
||||||
@ -1402,7 +1416,7 @@ create or replace package body PKG_EXS as
|
|||||||
return NRES;
|
return NRES;
|
||||||
end SERVICE_IS_AUTH;
|
end SERVICE_IS_AUTH;
|
||||||
|
|
||||||
/* Поиск функции аутентификации для сервиса обмена */
|
/* Поиск функции аутентификации (начала сеанса) для сервиса обмена */
|
||||||
procedure SERVICE_AUTH_FN_FIND
|
procedure SERVICE_AUTH_FN_FIND
|
||||||
(
|
(
|
||||||
NFLAG_SMART in number, -- Ïðèçíàê âûäà÷è ñîîáùåíèÿ îá îøèáêå
|
NFLAG_SMART in number, -- Ïðèçíàê âûäà÷è ñîîáùåíèÿ îá îøèáêå
|
||||||
@ -1436,42 +1450,118 @@ create or replace package body PKG_EXS as
|
|||||||
end if;
|
end if;
|
||||||
end SERVICE_AUTH_FN_FIND;
|
end SERVICE_AUTH_FN_FIND;
|
||||||
|
|
||||||
/* Помещение задания на аутентификацию сервиса в очередь обмена */
|
/* Поиск функции отмены аутентификации (завершения сеанса) для сервиса обмена */
|
||||||
|
procedure SERVICE_UNAUTH_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_LOGOUT;
|
||||||
|
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_UNAUTH_FN_FIND;
|
||||||
|
|
||||||
|
/* Помещение задания на аутентификацию (начало сеанса) сервиса в очередь обмена */
|
||||||
procedure SERVICE_AUTH_PUT_INQUEUE
|
procedure SERVICE_AUTH_PUT_INQUEUE
|
||||||
(
|
(
|
||||||
NEXSSERVICE in number -- Ðåã. íîìåð ñåðâèñà îáìåíà
|
NEXSSERVICE in number -- Ðåã. íîìåð ñåðâèñà îáìåíà
|
||||||
)
|
)
|
||||||
is
|
is
|
||||||
pragma autonomous_transaction;
|
pragma autonomous_transaction;
|
||||||
|
REXSSERVICE EXSSERVICE%rowtype; -- Запись сервиса
|
||||||
REXSSERVICEFN_AUTH EXSSERVICEFN%rowtype; -- Çàïèñü ôóíêöèè àóòåíòèôèêàöèè
|
REXSSERVICEFN_AUTH EXSSERVICEFN%rowtype; -- Çàïèñü ôóíêöèè àóòåíòèôèêàöèè
|
||||||
NAUTH_EXSQUEUE PKG_STD.TREF; -- Ðåã. íîìåð ïîçèöèè î÷åðåäè äëÿ àòóåíòèôèêàöèè
|
NAUTH_EXSQUEUE PKG_STD.TREF; -- Ðåã. íîìåð ïîçèöèè î÷åðåäè äëÿ àòóåíòèôèêàöèè
|
||||||
begin
|
begin
|
||||||
/* Ищем функцию её осуществляющую аутентификацию */
|
/* Считаем запись сервиса */
|
||||||
SERVICE_AUTH_FN_FIND(NFLAG_SMART => 0, NEXSSERVICE => NEXSSERVICE, REXSSERVICEFN => REXSSERVICEFN_AUTH);
|
REXSSERVICE := GET_EXSSERVICE_ID(NFLAG_SMART => 0, NRN => NEXSSERVICE);
|
||||||
/* Проверяем, что в очереди ещё пока нет запросов на аутентификацию */
|
/* Работаем только для сервисов отправки сообщений */
|
||||||
if (not SERVICEFN_CHECK_INCMPL_INQUEUE(NEXSSERVICEFN => REXSSERVICEFN_AUTH.RN)) then
|
if (REXSSERVICE.SRV_TYPE = NSRV_TYPE_SEND) then
|
||||||
/* Зачищаем текущий контекст сервиса */
|
/* Проверим, что сервис ещё не аутентифицирован */
|
||||||
SERVICE_CTX_CLEAR(NEXSSERVICE => REXSSERVICEFN_AUTH.PRN);
|
if (SERVICE_IS_AUTH(NEXSSERVICE => REXSSERVICE.RN) = PKG_EXS.NIS_AUTH_NO) then
|
||||||
/* Регистрируем в очереди задание на аутентификацию */
|
/* Ищем функцию осуществляющую аутентификацию */
|
||||||
P_EXSQUEUE_BASE_INSERT(DIN_DATE => sysdate,
|
SERVICE_AUTH_FN_FIND(NFLAG_SMART => 0, NEXSSERVICE => REXSSERVICE.RN, REXSSERVICEFN => REXSSERVICEFN_AUTH);
|
||||||
SIN_AUTHID => UTILIZER(),
|
/* Проверяем, что в очереди ещё пока нет запросов на аутентификацию */
|
||||||
NEXSSERVICEFN => REXSSERVICEFN_AUTH.RN,
|
if (not SERVICEFN_CHECK_INCMPL_INQUEUE(NEXSSERVICEFN => REXSSERVICEFN_AUTH.RN)) then
|
||||||
DEXEC_DATE => null,
|
/* Зачищаем текущий контекст сервиса */
|
||||||
NEXEC_CNT => 0,
|
SERVICE_CTX_CLEAR(NEXSSERVICE => REXSSERVICEFN_AUTH.PRN);
|
||||||
NEXEC_STATE => NQUEUE_EXEC_STATE_INQUEUE,
|
/* Регистрируем в очереди задание на аутентификацию */
|
||||||
SEXEC_MSG => null,
|
QUEUE_PUT(NEXSSERVICEFN => REXSSERVICEFN_AUTH.RN, BMSG => null, NNEW_EXSQUEUE => NAUTH_EXSQUEUE);
|
||||||
BMSG => null,
|
end if;
|
||||||
BRESP => null,
|
commit;
|
||||||
NEXSQUEUE => null,
|
else
|
||||||
NLNK_COMPANY => null,
|
P_EXCEPTION(0,
|
||||||
NLNK_DOCUMENT => null,
|
'Сервис уже аутентифицирован - сначала необходимо завершить текущий сеанс.');
|
||||||
SLNK_UNITCODE => null,
|
end if;
|
||||||
SOPTIONS => null,
|
else
|
||||||
NRN => NAUTH_EXSQUEUE);
|
P_EXCEPTION(0,
|
||||||
|
'Только удалённый клиент может начинать сеанс для сервиса типа "Приём сообщений".');
|
||||||
end if;
|
end if;
|
||||||
commit;
|
|
||||||
end SERVICE_AUTH_PUT_INQUEUE;
|
end SERVICE_AUTH_PUT_INQUEUE;
|
||||||
|
|
||||||
|
/* Помещение задания на отмену аутентификации (завершение сеанса) сервиса в очередь обмена */
|
||||||
|
procedure SERVICE_UNAUTH_PUT_INQUEUE
|
||||||
|
(
|
||||||
|
NEXSSERVICE in number -- Рег. номер сервиса обмена
|
||||||
|
)
|
||||||
|
is
|
||||||
|
pragma autonomous_transaction;
|
||||||
|
REXSSERVICE EXSSERVICE%rowtype; -- Запись сервиса
|
||||||
|
REXSSERVICEFN_UNAUTH EXSSERVICEFN%rowtype; -- Запись функции отмены аутентификации
|
||||||
|
NUNAUTH_EXSQUEUE PKG_STD.TREF; -- Рег. номер позиции очереди для отмены атуентификации
|
||||||
|
begin
|
||||||
|
/* Считаем запись сервиса */
|
||||||
|
REXSSERVICE := GET_EXSSERVICE_ID(NFLAG_SMART => 0, NRN => NEXSSERVICE);
|
||||||
|
/* Работаем только для сервисов отправки сообщений */
|
||||||
|
if (REXSSERVICE.SRV_TYPE = NSRV_TYPE_SEND) then
|
||||||
|
/* Проверим, что сервис аутентифицирован */
|
||||||
|
if (SERVICE_IS_AUTH(NEXSSERVICE => REXSSERVICE.RN) = PKG_EXS.NIS_AUTH_YES) then
|
||||||
|
/* Ищем функцию осуществляющую отмену аутентификации */
|
||||||
|
SERVICE_UNAUTH_FN_FIND(NFLAG_SMART => 1, NEXSSERVICE => REXSSERVICE.RN, REXSSERVICEFN => REXSSERVICEFN_UNAUTH);
|
||||||
|
/* Если функция найдена */
|
||||||
|
if (REXSSERVICEFN_UNAUTH.RN is not null) then
|
||||||
|
/* Проверяем, что в очереди ещё пока нет запросов на отмену аутентификации */
|
||||||
|
if (not SERVICEFN_CHECK_INCMPL_INQUEUE(NEXSSERVICEFN => REXSSERVICEFN_UNAUTH.RN)) then
|
||||||
|
/* Регистрируем в очереди задание на отмену аутентификации */
|
||||||
|
QUEUE_PUT(NEXSSERVICEFN => REXSSERVICEFN_UNAUTH.RN, BMSG => null, NNEW_EXSQUEUE => NUNAUTH_EXSQUEUE);
|
||||||
|
end if;
|
||||||
|
else
|
||||||
|
/* Функции отмены аутентификации нет - просто зачищаем текущий контекст сервиса */
|
||||||
|
SERVICE_CTX_CLEAR(NEXSSERVICE => REXSSERVICE.RN);
|
||||||
|
end if;
|
||||||
|
commit;
|
||||||
|
else
|
||||||
|
P_EXCEPTION(0,
|
||||||
|
'Сервис не аутентифицирован - сначала необходимо начать сеанс.');
|
||||||
|
end if;
|
||||||
|
else
|
||||||
|
P_EXCEPTION(0,
|
||||||
|
'Только удалённый клиент может завершать сеанс для сервиса типа "Приём сообщений".');
|
||||||
|
end if;
|
||||||
|
end SERVICE_UNAUTH_PUT_INQUEUE;
|
||||||
|
|
||||||
/* Ïîëó÷åíèå ñïèñêà ñåðâèñîâ */
|
/* Ïîëó÷åíèå ñïèñêà ñåðâèñîâ */
|
||||||
procedure SERVICES_GET
|
procedure SERVICES_GET
|
||||||
(
|
(
|
||||||
@ -1681,7 +1771,7 @@ create or replace package body PKG_EXS as
|
|||||||
exception
|
exception
|
||||||
when others then
|
when others then
|
||||||
P_EXCEPTION(0,
|
P_EXCEPTION(0,
|
||||||
'Ошибка определения наличия в очереди заданий для функции (RN: %s) сервиса обмена: %s',
|
'Ошибка определения наличия в очереди заданий для функции (RN: %s) сервиса обмена: %s.',
|
||||||
TO_CHAR(NEXSSERVICEFN),
|
TO_CHAR(NEXSSERVICEFN),
|
||||||
sqlerrm);
|
sqlerrm);
|
||||||
end SERVICEFN_CHECK_INCMPL_INQUEUE;
|
end SERVICEFN_CHECK_INCMPL_INQUEUE;
|
||||||
@ -1963,7 +2053,7 @@ create or replace package body PKG_EXS as
|
|||||||
/* Ïðîâåðÿì ïàðàìåòðû */
|
/* Ïðîâåðÿì ïàðàìåòðû */
|
||||||
if (NEXSQUEUE is null) then
|
if (NEXSQUEUE is null) then
|
||||||
P_EXCEPTION(0,
|
P_EXCEPTION(0,
|
||||||
'Не указан идентификатор позиции очереди для изменения состояния');
|
'Не указан идентификатор позиции очереди для изменения состояния.');
|
||||||
end if;
|
end if;
|
||||||
if ((NEXEC_STATE is not null) and
|
if ((NEXEC_STATE is not null) and
|
||||||
(NEXEC_STATE not in (NQUEUE_EXEC_STATE_INQUEUE,
|
(NEXEC_STATE not in (NQUEUE_EXEC_STATE_INQUEUE,
|
||||||
@ -1976,12 +2066,12 @@ create or replace package body PKG_EXS as
|
|||||||
NQUEUE_EXEC_STATE_OK,
|
NQUEUE_EXEC_STATE_OK,
|
||||||
NQUEUE_EXEC_STATE_ERR))) then
|
NQUEUE_EXEC_STATE_ERR))) then
|
||||||
P_EXCEPTION(0,
|
P_EXCEPTION(0,
|
||||||
'Код состояния "%s" позиции очереди не поддерживается',
|
'Код состояния "%s" позиции очереди не поддерживается.',
|
||||||
TO_CHAR(NEXEC_STATE));
|
TO_CHAR(NEXEC_STATE));
|
||||||
end if;
|
end if;
|
||||||
if (NVL(NINC_EXEC_CNT, NINC_EXEC_CNT_NO) not in (NINC_EXEC_CNT_YES, NINC_EXEC_CNT_NO)) then
|
if (NVL(NINC_EXEC_CNT, NINC_EXEC_CNT_NO) not in (NINC_EXEC_CNT_YES, NINC_EXEC_CNT_NO)) then
|
||||||
P_EXCEPTION(0,
|
P_EXCEPTION(0,
|
||||||
'Флаг икремента счетчика исполнений "%s" позиции очереди не поддерживается',
|
'Флаг икремента счетчика исполнений "%s" позиции очереди не поддерживается.',
|
||||||
TO_CHAR(NINC_EXEC_CNT));
|
TO_CHAR(NINC_EXEC_CNT));
|
||||||
end if;
|
end if;
|
||||||
/* Ñ÷èòàåì çàïèñü î÷åðåäè */
|
/* Ñ÷èòàåì çàïèñü î÷åðåäè */
|
||||||
@ -2108,7 +2198,7 @@ create or replace package body PKG_EXS as
|
|||||||
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; -- Çàïèñü ñåðâèñà îáðàáîòêè
|
REXSSERVICE EXSSERVICE%rowtype; -- Çàïèñü ñåðâèñà îáðàáîòêè
|
||||||
@ -2187,17 +2277,17 @@ create or replace package body PKG_EXS as
|
|||||||
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
|
||||||
NEXSSERVICEFN PKG_STD.TREF; -- Ðåã. íîìåð ôóíêöèè ñåðâèñà îáðàáîòêè
|
NEXSSERVICEFN PKG_STD.TREF; -- Ðåã. íîìåð ôóíêöèè ñåðâèñà îáðàáîòêè
|
||||||
begin
|
begin
|
||||||
/* Ïðîâåðÿåì ïàðàìåòðû */
|
/* Ïðîâåðÿåì ïàðàìåòðû */
|
||||||
if (SEXSSERVICE is null) then
|
if (SEXSSERVICE is null) then
|
||||||
P_EXCEPTION(0, 'Не указан код сервиса обмена');
|
P_EXCEPTION(0, 'Не указан код сервиса обмена.');
|
||||||
end if;
|
end if;
|
||||||
if (SEXSSERVICEFN is null) then
|
if (SEXSSERVICEFN is null) then
|
||||||
P_EXCEPTION(0, 'Не указан код функции сервиса обмена');
|
P_EXCEPTION(0, 'Не указан код функции сервиса обмена.');
|
||||||
end if;
|
end if;
|
||||||
/* Ðàçûìåíóåì ôóíêöèþ ñåðâèñà */
|
/* Ðàçûìåíóåì ôóíêöèþ ñåðâèñà */
|
||||||
NEXSSERVICEFN := SERVICEFN_FIND_BY_SRVCODE(NFLAG_SMART => 0,
|
NEXSSERVICEFN := SERVICEFN_FIND_BY_SRVCODE(NFLAG_SMART => 0,
|
||||||
@ -2325,7 +2415,7 @@ create or replace package body PKG_EXS as
|
|||||||
if (REXSSERVICE.CTX is null) then
|
if (REXSSERVICE.CTX is null) then
|
||||||
/* Îáðàáîò÷èê íå âåðíóë êîíòåêñò è ñåé÷àñ îí íå óñòàíîâëåí äëÿ ñåðâèñà, ýòî ïðîáëåìà - áîëüøå îáðàáîòîê íå áóäåò çíà÷èò ìû íå çàëîãèíèëèñü */
|
/* Îáðàáîò÷èê íå âåðíóë êîíòåêñò è ñåé÷àñ îí íå óñòàíîâëåí äëÿ ñåðâèñà, ýòî ïðîáëåìà - áîëüøå îáðàáîòîê íå áóäåò çíà÷èò ìû íå çàëîãèíèëèñü */
|
||||||
P_EXCEPTION(0,
|
P_EXCEPTION(0,
|
||||||
'Функция начала сеанса "%s" не установила контекст работы для сервиса "%s"',
|
'Функция начала сеанса "%s" не установила контекст работы для сервиса "%s".',
|
||||||
REXSSERVICEFN.CODE,
|
REXSSERVICEFN.CODE,
|
||||||
REXSSERVICE.CODE);
|
REXSSERVICE.CODE);
|
||||||
end if;
|
end if;
|
||||||
@ -2343,7 +2433,7 @@ create or replace package body PKG_EXS as
|
|||||||
else
|
else
|
||||||
/* Ðåçóëüòàò íå óñòàíîâëåí - ýòî îøèáêà */
|
/* Ðåçóëüòàò íå óñòàíîâëåí - ýòî îøèáêà */
|
||||||
P_EXCEPTION(0,
|
P_EXCEPTION(0,
|
||||||
'Процедура обработчик "%s" не вернула результат работы',
|
'Процедура обработчик "%s" не вернула результат работы.',
|
||||||
UTL_STORED_MAKE_LINK(SPACKAGE => REXSMSGTYPE.PKG_RESP, SPROCEDURE => REXSMSGTYPE.PRC_RESP));
|
UTL_STORED_MAKE_LINK(SPACKAGE => REXSMSGTYPE.PKG_RESP, SPROCEDURE => REXSMSGTYPE.PRC_RESP));
|
||||||
end if;
|
end if;
|
||||||
exception
|
exception
|
||||||
|
10
db/P_EXSSERVICE_BASE_LOGIN.prc
Normal file
10
db/P_EXSSERVICE_BASE_LOGIN.prc
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
create or replace procedure P_EXSSERVICE_BASE_LOGIN
|
||||||
|
(
|
||||||
|
NRN in number -- Ðåã. íîìåð çàïèñè ñåðâèñà îáìåíà
|
||||||
|
)
|
||||||
|
as
|
||||||
|
begin
|
||||||
|
/* Ïîñòàâèì â î÷åðåäü çàäàíèå íà àóòåíòèôèêàöèþ */
|
||||||
|
PKG_EXS.SERVICE_AUTH_PUT_INQUEUE(NEXSSERVICE => NRN);
|
||||||
|
end;
|
||||||
|
/
|
10
db/P_EXSSERVICE_BASE_LOGOUT.prc
Normal file
10
db/P_EXSSERVICE_BASE_LOGOUT.prc
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
create or replace procedure P_EXSSERVICE_BASE_LOGOUT
|
||||||
|
(
|
||||||
|
NRN in number -- Ðåã. íîìåð çàïèñè ñåðâèñà îáìåíà
|
||||||
|
)
|
||||||
|
as
|
||||||
|
begin
|
||||||
|
/* Ïîñòàâèì â î÷åðåäü çàäàíèå íà îòìåíó àóòåíòèôèêàöèè */
|
||||||
|
PKG_EXS.SERVICE_UNAUTH_PUT_INQUEUE(NEXSSERVICE => NRN);
|
||||||
|
end;
|
||||||
|
/
|
32
db/P_EXSSERVICE_LOGIN.prc
Normal file
32
db/P_EXSSERVICE_LOGIN.prc
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
create or replace procedure P_EXSSERVICE_LOGIN
|
||||||
|
(
|
||||||
|
NRN in number -- Ðåã. íîìåð çàïèñè ñåðâèñà îáìåíà
|
||||||
|
)
|
||||||
|
as
|
||||||
|
REXSSERVICE EXSSERVICE%rowtype; -- Çàïèñü ñåðâèñà îáìåíà
|
||||||
|
begin
|
||||||
|
/* Ñ÷èòûâàíèå çàïèñè */
|
||||||
|
REXSSERVICE := GET_EXSSERVICE_ID(NFLAG_SMART => 0, NRN => NRN);
|
||||||
|
|
||||||
|
/* Ôèêñàöèÿ íà÷àëà âûïîëíåíèÿ äåéñòâèÿ */
|
||||||
|
PKG_ENV.PROLOGUE(NCOMPANY => null,
|
||||||
|
NVERSION => null,
|
||||||
|
NCATALOG => REXSSERVICE.CRN,
|
||||||
|
SUNIT => 'EXSService',
|
||||||
|
SACTION => 'EXSSERVICE_LOGIN',
|
||||||
|
STABLE => 'EXSSERVICE',
|
||||||
|
NDOCUMENT => REXSSERVICE.RN);
|
||||||
|
|
||||||
|
/* Áàçîâîå íà÷àëî ñåàíñà */
|
||||||
|
P_EXSSERVICE_BASE_LOGIN(NRN => REXSSERVICE.RN);
|
||||||
|
|
||||||
|
/* Ôèêñàöèÿ îêîí÷àíèÿ âûïîëíåíèÿ äåéñòâèÿ */
|
||||||
|
PKG_ENV.EPILOGUE(NCOMPANY => null,
|
||||||
|
NVERSION => null,
|
||||||
|
NCATALOG => REXSSERVICE.CRN,
|
||||||
|
SUNIT => 'EXSService',
|
||||||
|
SACTION => 'EXSSERVICE_LOGIN',
|
||||||
|
STABLE => 'EXSSERVICE',
|
||||||
|
NDOCUMENT => REXSSERVICE.RN);
|
||||||
|
end;
|
||||||
|
/
|
32
db/P_EXSSERVICE_LOGOUT.prc
Normal file
32
db/P_EXSSERVICE_LOGOUT.prc
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
create or replace procedure P_EXSSERVICE_LOGOUT
|
||||||
|
(
|
||||||
|
NRN in number -- Ðåã. íîìåð çàïèñè ñåðâèñà îáìåíà
|
||||||
|
)
|
||||||
|
as
|
||||||
|
REXSSERVICE EXSSERVICE%rowtype; -- Çàïèñü ñåðâèñà îáìåíà
|
||||||
|
begin
|
||||||
|
/* Ñ÷èòûâàíèå çàïèñè */
|
||||||
|
REXSSERVICE := GET_EXSSERVICE_ID(NFLAG_SMART => 0, NRN => NRN);
|
||||||
|
|
||||||
|
/* Ôèêñàöèÿ íà÷àëà âûïîëíåíèÿ äåéñòâèÿ */
|
||||||
|
PKG_ENV.PROLOGUE(NCOMPANY => null,
|
||||||
|
NVERSION => null,
|
||||||
|
NCATALOG => REXSSERVICE.CRN,
|
||||||
|
SUNIT => 'EXSService',
|
||||||
|
SACTION => 'EXSSERVICE_LOGOUT',
|
||||||
|
STABLE => 'EXSSERVICE',
|
||||||
|
NDOCUMENT => REXSSERVICE.RN);
|
||||||
|
|
||||||
|
/* Áàçîâîå çàâåðøåíèå ñåàíñà */
|
||||||
|
P_EXSSERVICE_BASE_LOGOUT(NRN => REXSSERVICE.RN);
|
||||||
|
|
||||||
|
/* Ôèêñàöèÿ îêîí÷àíèÿ âûïîëíåíèÿ äåéñòâèÿ */
|
||||||
|
PKG_ENV.EPILOGUE(NCOMPANY => null,
|
||||||
|
NVERSION => null,
|
||||||
|
NCATALOG => REXSSERVICE.CRN,
|
||||||
|
SUNIT => 'EXSService',
|
||||||
|
SACTION => 'EXSSERVICE_LOGOUT',
|
||||||
|
STABLE => 'EXSSERVICE',
|
||||||
|
NDOCUMENT => REXSSERVICE.RN);
|
||||||
|
end;
|
||||||
|
/
|
23
db/v_exsservice.sql
Normal file
23
db/v_exsservice.sql
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
create or replace view v_exsservice
|
||||||
|
(nrn, ncrn, scode, sname, nsrv_type, ssrv_root, ssrv_user, ssrv_pass, nunavlbl_ntf_sign, nunavlbl_ntf_time, sunavlbl_ntf_mail, nis_auth, ncnt_login)
|
||||||
|
as
|
||||||
|
select
|
||||||
|
T.RN, -- NRN
|
||||||
|
T.CRN, -- NCRN
|
||||||
|
T.CODE, -- SCODE
|
||||||
|
T.NAME, -- SNAME
|
||||||
|
T.SRV_TYPE, -- NSRV_TYPE
|
||||||
|
T.SRV_ROOT, -- SSRV_ROOT
|
||||||
|
T.SRV_USER, -- SSRV_USER
|
||||||
|
T.SRV_PASS, -- SSRV_PASS
|
||||||
|
T.UNAVLBL_NTF_SIGN, -- NUNAVLBL_NTF_SIGN
|
||||||
|
T.UNAVLBL_NTF_TIME, -- NUNAVLBL_NTF_TIME
|
||||||
|
T.UNAVLBL_NTF_MAIL, -- SUNAVLBL_NTF_MAIL
|
||||||
|
T.IS_AUTH, -- NIS_AUTH
|
||||||
|
(select count(F.RN)
|
||||||
|
from EXSSERVICEFN F
|
||||||
|
where F.PRN = T.RN
|
||||||
|
and F.FN_TYPE = 1) -- NCNT_LOGIN
|
||||||
|
from
|
||||||
|
EXSSERVICE T
|
||||||
|
where exists (select null from V_USERPRIV UP where UP.CATALOG = T.CRN);
|
Loading…
x
Reference in New Issue
Block a user