Действия начала и завершения сеанса для сервиса обмена
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 -- Ðåã. íîìåð çàïèñè ñåðâèñà
|
||||
) return number; -- Ôëàã àóòåíòèôèêàöèè (ñì. êîíñòàíòû NIS_AUTH_*)
|
||||
|
||||
/* Поиск функции аутентификации для сервиса обмена */
|
||||
/* Поиск функции аутентификации (начала сеанса) для сервиса обмена */
|
||||
procedure SERVICE_AUTH_FN_FIND
|
||||
(
|
||||
NFLAG_SMART in number, -- Ïðèçíàê âûäà÷è ñîîáùåíèÿ îá îøèáêå
|
||||
@ -335,12 +335,26 @@ create or replace package PKG_EXS as
|
||||
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
|
||||
(
|
||||
NEXSSERVICE in number -- Ðåã. íîìåð ñåðâèñà îáìåíà
|
||||
);
|
||||
|
||||
/* Помещение задания на отмену аутентификации (завершение сеанса) сервиса в очередь обмена */
|
||||
procedure SERVICE_UNAUTH_PUT_INQUEUE
|
||||
(
|
||||
NEXSSERVICE in number -- Рег. номер сервиса обмена
|
||||
);
|
||||
|
||||
/* Ïîëó÷åíèå ñïèñêà ñåðâèñîâ */
|
||||
procedure SERVICES_GET
|
||||
(
|
||||
@ -508,7 +522,7 @@ create or replace package PKG_EXS as
|
||||
NLNK_DOCUMENT in number := null, -- Ðåã. íîìåð ñâÿçàííîé çàïèñè äîêóìåíòà
|
||||
SLNK_UNITCODE 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, -- Ðåã. íîìåð ñâÿçàííîé çàïèñè äîêóìåíòà
|
||||
SLNK_UNITCODE 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;
|
||||
if (RARGS_LIST(RARGS_LIST.LAST).DATA_TYPE in ('PL/SQL RECORD')) then
|
||||
P_EXCEPTION(NFLAG_SMART,
|
||||
'Невозможно проверить интерфейс пользовательской процедуры: поддерживаются только простые типы данных аргументов!');
|
||||
'Невозможно проверить интерфейс пользовательской процедуры: поддерживаются только простые типы данных аргументов.');
|
||||
return;
|
||||
end if;
|
||||
/* Óñòàíîâêà ïðèçíàêà - íå ïðîâåðåíî */
|
||||
@ -741,7 +755,7 @@ create or replace package body PKG_EXS as
|
||||
if (SARG_TYPE_NAME is not null) then
|
||||
/* Åñëè ïîëüçîâàòåëüñêèé òèï äàííûõ */
|
||||
P_EXCEPTION(NFLAG_SMART,
|
||||
'Невозможно проверить интерфейс пользовательской процедуры: поддерживаются только простые типы данных!');
|
||||
'Невозможно проверить интерфейс пользовательской процедуры: поддерживаются только простые типы данных.');
|
||||
return;
|
||||
else
|
||||
/* Åñëè ñòàíäàðòíûé òèï äàííûõ */
|
||||
@ -1107,11 +1121,11 @@ create or replace package body PKG_EXS as
|
||||
if (SRESULT is not null) then
|
||||
if (SRESULT not in (SPRC_RESP_RESULT_OK, SPRC_RESP_RESULT_ERR, SPRC_RESP_RESULT_UNAUTH)) then
|
||||
P_EXCEPTION(0,
|
||||
'Код результата исполнения обработчика "%s" не поддерживается',
|
||||
'Код результата исполнения обработчика "%s" не поддерживается.',
|
||||
SRESULT);
|
||||
end if;
|
||||
else
|
||||
P_EXCEPTION(0, 'Не указан код результата исполнения обработчика');
|
||||
P_EXCEPTION(0, 'Не указан код результата исполнения обработчика.');
|
||||
end if;
|
||||
/* Ñîõðàíÿåì êîä ðåçóëüòàòà */
|
||||
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;
|
||||
end SERVICE_IS_AUTH;
|
||||
|
||||
/* Поиск функции аутентификации для сервиса обмена */
|
||||
/* Поиск функции аутентификации (начала сеанса) для сервиса обмена */
|
||||
procedure SERVICE_AUTH_FN_FIND
|
||||
(
|
||||
NFLAG_SMART in number, -- Ïðèçíàê âûäà÷è ñîîáùåíèÿ îá îøèáêå
|
||||
@ -1436,42 +1450,118 @@ create or replace package body PKG_EXS as
|
||||
end if;
|
||||
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
|
||||
(
|
||||
NEXSSERVICE in number -- Ðåã. íîìåð ñåðâèñà îáìåíà
|
||||
)
|
||||
is
|
||||
pragma autonomous_transaction;
|
||||
REXSSERVICE EXSSERVICE%rowtype; -- Запись сервиса
|
||||
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);
|
||||
/* Считаем запись сервиса */
|
||||
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_NO) then
|
||||
/* Ищем функцию осуществляющую аутентификацию */
|
||||
SERVICE_AUTH_FN_FIND(NFLAG_SMART => 0, NEXSSERVICE => REXSSERVICE.RN, REXSSERVICEFN => REXSSERVICEFN_AUTH);
|
||||
/* Проверяем, что в очереди ещё пока нет запросов на аутентификацию */
|
||||
if (not SERVICEFN_CHECK_INCMPL_INQUEUE(NEXSSERVICEFN => REXSSERVICEFN_AUTH.RN)) then
|
||||
/* Зачищаем текущий контекст сервиса */
|
||||
SERVICE_CTX_CLEAR(NEXSSERVICE => REXSSERVICEFN_AUTH.PRN);
|
||||
/* Регистрируем в очереди задание на аутентификацию */
|
||||
QUEUE_PUT(NEXSSERVICEFN => REXSSERVICEFN_AUTH.RN, BMSG => null, NNEW_EXSQUEUE => NAUTH_EXSQUEUE);
|
||||
end if;
|
||||
commit;
|
||||
else
|
||||
P_EXCEPTION(0,
|
||||
'Сервис уже аутентифицирован - сначала необходимо завершить текущий сеанс.');
|
||||
end if;
|
||||
else
|
||||
P_EXCEPTION(0,
|
||||
'Только удалённый клиент может начинать сеанс для сервиса типа "Приём сообщений".');
|
||||
end if;
|
||||
commit;
|
||||
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
|
||||
(
|
||||
@ -1681,7 +1771,7 @@ create or replace package body PKG_EXS as
|
||||
exception
|
||||
when others then
|
||||
P_EXCEPTION(0,
|
||||
'Ошибка определения наличия в очереди заданий для функции (RN: %s) сервиса обмена: %s',
|
||||
'Ошибка определения наличия в очереди заданий для функции (RN: %s) сервиса обмена: %s.',
|
||||
TO_CHAR(NEXSSERVICEFN),
|
||||
sqlerrm);
|
||||
end SERVICEFN_CHECK_INCMPL_INQUEUE;
|
||||
@ -1963,7 +2053,7 @@ create or replace package body PKG_EXS as
|
||||
/* Ïðîâåðÿì ïàðàìåòðû */
|
||||
if (NEXSQUEUE is null) then
|
||||
P_EXCEPTION(0,
|
||||
'Не указан идентификатор позиции очереди для изменения состояния');
|
||||
'Не указан идентификатор позиции очереди для изменения состояния.');
|
||||
end if;
|
||||
if ((NEXEC_STATE is not null) and
|
||||
(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_ERR))) then
|
||||
P_EXCEPTION(0,
|
||||
'Код состояния "%s" позиции очереди не поддерживается',
|
||||
'Код состояния "%s" позиции очереди не поддерживается.',
|
||||
TO_CHAR(NEXEC_STATE));
|
||||
end if;
|
||||
if (NVL(NINC_EXEC_CNT, NINC_EXEC_CNT_NO) not in (NINC_EXEC_CNT_YES, NINC_EXEC_CNT_NO)) then
|
||||
P_EXCEPTION(0,
|
||||
'Флаг икремента счетчика исполнений "%s" позиции очереди не поддерживается',
|
||||
'Флаг икремента счетчика исполнений "%s" позиции очереди не поддерживается.',
|
||||
TO_CHAR(NINC_EXEC_CNT));
|
||||
end if;
|
||||
/* Ñ÷èòàåì çàïèñü î÷åðåäè */
|
||||
@ -2108,7 +2198,7 @@ create or replace package body PKG_EXS as
|
||||
NLNK_DOCUMENT in number := null, -- Ðåã. íîìåð ñâÿçàííîé çàïèñè äîêóìåíòà
|
||||
SLNK_UNITCODE in varchar2 := null, -- Êîä ñâÿçàííîãî ðàçäåëà
|
||||
SOPTIONS in varchar2 := null, -- Ïàðàìåòðû ñîîáùåíèÿ
|
||||
NNEW_EXSQUEUE out number -- Курсор с добавленной позицией очереди
|
||||
NNEW_EXSQUEUE out number -- Рег. номер добавленной позиции очереди
|
||||
)
|
||||
is
|
||||
REXSSERVICE EXSSERVICE%rowtype; -- Çàïèñü ñåðâèñà îáðàáîòêè
|
||||
@ -2187,17 +2277,17 @@ create or replace package body PKG_EXS as
|
||||
NLNK_DOCUMENT in number := null, -- Ðåã. íîìåð ñâÿçàííîé çàïèñè äîêóìåíòà
|
||||
SLNK_UNITCODE in varchar2 := null, -- Êîä ñâÿçàííîãî ðàçäåëà
|
||||
SOPTIONS in varchar2 := null, -- Ïàðàìåòðû ñîîáùåíèÿ
|
||||
NNEW_EXSQUEUE out number -- Курсор с добавленной позицией очереди
|
||||
NNEW_EXSQUEUE out number -- Рег. номер добавленной позиции очереди
|
||||
)
|
||||
is
|
||||
NEXSSERVICEFN PKG_STD.TREF; -- Ðåã. íîìåð ôóíêöèè ñåðâèñà îáðàáîòêè
|
||||
begin
|
||||
/* Ïðîâåðÿåì ïàðàìåòðû */
|
||||
if (SEXSSERVICE is null) then
|
||||
P_EXCEPTION(0, 'Не указан код сервиса обмена');
|
||||
P_EXCEPTION(0, 'Не указан код сервиса обмена.');
|
||||
end if;
|
||||
if (SEXSSERVICEFN is null) then
|
||||
P_EXCEPTION(0, 'Не указан код функции сервиса обмена');
|
||||
P_EXCEPTION(0, 'Не указан код функции сервиса обмена.');
|
||||
end if;
|
||||
/* Ðàçûìåíóåì ôóíêöèþ ñåðâèñà */
|
||||
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
|
||||
/* Îáðàáîò÷èê íå âåðíóë êîíòåêñò è ñåé÷àñ îí íå óñòàíîâëåí äëÿ ñåðâèñà, ýòî ïðîáëåìà - áîëüøå îáðàáîòîê íå áóäåò çíà÷èò ìû íå çàëîãèíèëèñü */
|
||||
P_EXCEPTION(0,
|
||||
'Функция начала сеанса "%s" не установила контекст работы для сервиса "%s"',
|
||||
'Функция начала сеанса "%s" не установила контекст работы для сервиса "%s".',
|
||||
REXSSERVICEFN.CODE,
|
||||
REXSSERVICE.CODE);
|
||||
end if;
|
||||
@ -2343,7 +2433,7 @@ create or replace package body PKG_EXS as
|
||||
else
|
||||
/* Ðåçóëüòàò íå óñòàíîâëåí - ýòî îøèáêà */
|
||||
P_EXCEPTION(0,
|
||||
'Процедура обработчик "%s" не вернула результат работы',
|
||||
'Процедура обработчик "%s" не вернула результат работы.',
|
||||
UTL_STORED_MAKE_LINK(SPACKAGE => REXSMSGTYPE.PKG_RESP, SPROCEDURE => REXSMSGTYPE.PRC_RESP));
|
||||
end if;
|
||||
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