diff --git a/db/UDO_PKG_EQUIPDS.pck b/db/UDO_PKG_EQUIPDS.pck
index 090f8a0..64656a2 100644
--- a/db/UDO_PKG_EQUIPDS.pck
+++ b/db/UDO_PKG_EQUIPDS.pck
@@ -31,8 +31,12 @@ create or replace package UDO_PKG_EQUIPDS as
SEXSSERVICEFN_UPLOAD in varchar2, -- Функция обмена для выгрузки данных
SEXSSERVICE_SEND_MD in varchar2, -- Сервис обмена для передачи внешней системе
SEXSSERVICEFN_SEND_MD in varchar2, -- Функция обмена для передачи внешней системе
+ SEXSSERVICE_SEND_MDCB in varchar2, -- Сервис обмена для приёма Call-back запросов с результатами передачи внешней системе
+ SEXSSERVICEFN_SEND_MDCB in varchar2, -- Функция сервиса обмена для приёма Call-back запросов с результатами передачи внешней системе
SEXSSERVICE_SEND_RQ in varchar2, -- Сервис обмена для обработки внешней системой
SEXSSERVICEFN_SEND_RQ in varchar2, -- Функция обмена для обработки внешней системой
+ SEXSSERVICE_SEND_RQCB in varchar2, -- Сервис обмена для приёма Call-back запросов с результатами обработки внешней системой
+ SEXSSERVICEFN_SEND_RQCB in varchar2, -- Функция сервиса обмена для приёма Call-back запросов с результатами обработки внешней системой
NEQUIPDS out number, -- Регистрационный номер выборки данных оборудования
NEQUIPDSCM out number -- Регистрационный номер класса оборудования выборки данных
);
@@ -62,11 +66,34 @@ create or replace package UDO_PKG_EQUIPDS as
SEXSSERVICEFN_UPLOAD in varchar2, -- Функция обмена для выгрузки данных
SEXSSERVICE_SEND_MD in varchar2, -- Сервис обмена для передачи внешней системе
SEXSSERVICEFN_SEND_MD in varchar2, -- Функция обмена для передачи внешней системе
+ SEXSSERVICE_SEND_MDCB in varchar2, -- Сервис обмена для приёма Call-back запросов с результатами передачи внешней системе
+ SEXSSERVICEFN_SEND_MDCB in varchar2, -- Функция сервиса обмена для приёма Call-back запросов с результатами передачи внешней системе
SEXSSERVICE_SEND_RQ in varchar2, -- Сервис обмена для обработки внешней системой
SEXSSERVICEFN_SEND_RQ in varchar2, -- Функция обмена для обработки внешней системой
+ SEXSSERVICE_SEND_RQCB in varchar2, -- Сервис обмена для приёма Call-back запросов с результатами обработки внешней системой
+ SEXSSERVICEFN_SEND_RQCB in varchar2, -- Функция сервиса обмена для приёма Call-back запросов с результатами обработки внешней системой
NRN out number -- Регистрационный номер
);
+ /* Клиентское исправление "Выборки данных оборудования (классы оборудования)" */
+ procedure CM_UPD
+ (
+ NRN in number, -- Регистрационный номер
+ SEQOBJKIND in varchar2, -- Класс оборудования
+ SDICMUNTS in varchar2, -- Единица измерения выборки
+ SUSERPROCS_DATA in varchar2, -- Процедура формирования
+ SEXSSERVICE_UPLOAD in varchar2, -- Сервис обмена для выгрузки данных
+ SEXSSERVICEFN_UPLOAD in varchar2, -- Функция обмена для выгрузки данных
+ SEXSSERVICE_SEND_MD in varchar2, -- Сервис обмена для передачи внешней системе
+ SEXSSERVICEFN_SEND_MD in varchar2, -- Функция обмена для передачи внешней системе
+ SEXSSERVICE_SEND_MDCB in varchar2, -- Сервис обмена для приёма Call-back запросов с результатами передачи внешней системе
+ SEXSSERVICEFN_SEND_MDCB in varchar2, -- Функция сервиса обмена для приёма Call-back запросов с результатами передачи внешней системе
+ SEXSSERVICE_SEND_RQ in varchar2, -- Сервис обмена для обработки внешней системой
+ SEXSSERVICEFN_SEND_RQ in varchar2, -- Функция обмена для обработки внешней системой
+ SEXSSERVICE_SEND_RQCB in varchar2, -- Сервис обмена для приёма Call-back запросов с результатами обработки внешней системой
+ SEXSSERVICEFN_SEND_RQCB in varchar2 -- Функция сервиса обмена для приёма Call-back запросов с результатами обработки внешней системой
+ );
+
/* Клиентское удаление "Выборки данных оборудования (классы оборудования)" */
procedure CM_DEL
(
@@ -292,8 +319,12 @@ create or replace package body UDO_PKG_EQUIPDS as
SEXSSERVICEFN_UPLOAD in varchar2, -- Функция обмена для выгрузки данных
SEXSSERVICE_SEND_MD in varchar2, -- Сервис обмена для передачи внешней системе
SEXSSERVICEFN_SEND_MD in varchar2, -- Функция обмена для передачи внешней системе
+ SEXSSERVICE_SEND_MDCB in varchar2, -- Сервис обмена для приёма Call-back запросов с результатами передачи внешней системе
+ SEXSSERVICEFN_SEND_MDCB in varchar2, -- Функция сервиса обмена для приёма Call-back запросов с результатами передачи внешней системе
SEXSSERVICE_SEND_RQ in varchar2, -- Сервис обмена для обработки внешней системой
SEXSSERVICEFN_SEND_RQ in varchar2, -- Функция обмена для обработки внешней системой
+ SEXSSERVICE_SEND_RQCB in varchar2, -- Сервис обмена для приёма Call-back запросов с результатами обработки внешней системой
+ SEXSSERVICEFN_SEND_RQCB in varchar2, -- Функция сервиса обмена для приёма Call-back запросов с результатами обработки внешней системой
NEQUIPDS out number, -- Регистрационный номер выборки данных оборудования
NEQUIPDSCM out number -- Регистрационный номер класса оборудования выборки данных
)
@@ -320,10 +351,18 @@ create or replace package body UDO_PKG_EQUIPDS as
P_EXCEPTION(0,
'Не указана функция обмена для передачи внешней системе.');
end if;
+ if ((SEXSSERVICE_SEND_MDCB is null) or (SEXSSERVICEFN_SEND_MDCB is null)) then
+ P_EXCEPTION(0,
+ 'Не указана функция обмена для приёма обратной связи о передече внешней системе.');
+ end if;
if ((SEXSSERVICE_SEND_RQ is null) or (SEXSSERVICEFN_SEND_RQ is null)) then
P_EXCEPTION(0,
'Не указана функция обмена для обработки внешней системой.');
end if;
+ if ((SEXSSERVICE_SEND_RQCB is null) or (SEXSSERVICEFN_SEND_RQCB is null)) then
+ P_EXCEPTION(0,
+ 'Не указана функция обмена для приёма обратной связи об обработке внешней системой.');
+ end if;
/* Проверим права доступа */
UDO_PKG_EQUIPDS_BASE.UTL_ACCESS(STABLE => 'UDO_T_EQUIPDS', SACTION => 'UDO_EQUIPDS_MAKE');
/* Проверим наличие такой выборки */
@@ -342,17 +381,21 @@ create or replace package body UDO_PKG_EQUIPDS as
/* Класса оборудования в выборке нет */
if (NEQUIPDSCM is null) then
/* Добавляем запись класса оборудования */
- CM_INS(NPRN => NEQUIPDS,
- SEQOBJKIND => SEQOBJKIND,
- SDICMUNTS => SDICMUNTS,
- SUSERPROCS_DATA => SUSERPROCS_DATA,
- SEXSSERVICE_UPLOAD => SEXSSERVICE_UPLOAD,
- SEXSSERVICEFN_UPLOAD => SEXSSERVICEFN_UPLOAD,
- SEXSSERVICE_SEND_MD => SEXSSERVICE_SEND_MD,
- SEXSSERVICEFN_SEND_MD => SEXSSERVICEFN_SEND_MD,
- SEXSSERVICE_SEND_RQ => SEXSSERVICE_SEND_RQ,
- SEXSSERVICEFN_SEND_RQ => SEXSSERVICEFN_SEND_RQ,
- NRN => NEQUIPDSCM);
+ CM_INS(NPRN => NEQUIPDS,
+ SEQOBJKIND => SEQOBJKIND,
+ SDICMUNTS => SDICMUNTS,
+ SUSERPROCS_DATA => SUSERPROCS_DATA,
+ SEXSSERVICE_UPLOAD => SEXSSERVICE_UPLOAD,
+ SEXSSERVICEFN_UPLOAD => SEXSSERVICEFN_UPLOAD,
+ SEXSSERVICE_SEND_MD => SEXSSERVICE_SEND_MD,
+ SEXSSERVICEFN_SEND_MD => SEXSSERVICEFN_SEND_MD,
+ SEXSSERVICE_SEND_MDCB => SEXSSERVICE_SEND_MDCB,
+ SEXSSERVICEFN_SEND_MDCB => SEXSSERVICEFN_SEND_MDCB,
+ SEXSSERVICE_SEND_RQ => SEXSSERVICE_SEND_RQ,
+ SEXSSERVICEFN_SEND_RQ => SEXSSERVICEFN_SEND_RQ,
+ SEXSSERVICE_SEND_RQCB => SEXSSERVICE_SEND_RQCB,
+ SEXSSERVICEFN_SEND_RQCB => SEXSSERVICEFN_SEND_RQCB,
+ NRN => NEQUIPDSCM);
end if;
end MAKE;
@@ -373,11 +416,20 @@ create or replace package body UDO_PKG_EQUIPDS as
NCUR := PKG_XMAKE.OPEN_CURSOR();
/* Обращаемся к данным класса оборудования */
for C in (select T.RN NRN,
+ FORMAT_HIER_NAME(null, null, OK.FULLCODE) SSEQOBJKIND,
OK.NAME SNAME,
+ DM.MEAS_MNEMO SDICMUNTS,
UP.CODE SUSERPROCS_DATA,
- SU.CODE || '/' || SFU.CODE SEXSSERVICE_UPLOAD,
- SMD.CODE || '/' || SFMD.CODE SEXSSERVICE_SEND_MD,
- SRQ.CODE || '/' || SFRQ.CODE SEXSSERVICE_SEND_RQ
+ SU.CODE SEXSSERVICE_UPLOAD,
+ SFU.CODE SEXSSERVICEFN_UPLOAD,
+ SMD.CODE SEXSSERVICE_SEND_MD,
+ SFMD.CODE SEXSSERVICEFN_SEND_MD,
+ SMDCB.CODE SEXSSERVICE_SEND_MDCB,
+ SFMDCB.CODE SEXSSERVICEFN_SEND_MDCB,
+ SRQ.CODE SEXSSERVICE_SEND_RQ,
+ SFRQ.CODE SEXSSERVICEFN_SEND_RQ,
+ SRQCB.CODE SEXSSERVICE_SEND_RQCB,
+ SFRQCB.CODE SEXSSERVICEFN_SEND_RQCB
from UDO_T_EQUIPDSCM T,
EQOBJKIND OK,
USERPROCS UP,
@@ -385,8 +437,13 @@ create or replace package body UDO_PKG_EQUIPDS as
EXSSERVICEFN SFU,
EXSSERVICE SMD,
EXSSERVICEFN SFMD,
+ EXSSERVICE SMDCB,
+ EXSSERVICEFN SFMDCB,
EXSSERVICE SRQ,
- EXSSERVICEFN SFRQ
+ EXSSERVICEFN SFRQ,
+ EXSSERVICE SRQCB,
+ EXSSERVICEFN SFRQCB,
+ DICMUNTS DM
where T.RN = NEQUIPDSCM
and T.EQOBJKIND = OK.RN
and T.USERPROCS_DATA = UP.RN
@@ -394,8 +451,13 @@ create or replace package body UDO_PKG_EQUIPDS as
and SFU.PRN = SU.RN
and T.EXSSERVICEFN_SEND_MD = SFMD.RN
and SFMD.PRN = SMD.RN
+ and T.EXSSERVICEFN_SEND_MDCB = SFMDCB.RN
+ and SFMDCB.PRN = SMDCB.RN
and T.EXSSERVICEFN_SEND_RQ = SFRQ.RN
- and SFRQ.PRN = SRQ.RN)
+ and SFRQ.PRN = SRQ.RN
+ and T.EXSSERVICEFN_SEND_RQCB = SFRQCB.RN
+ and SFRQCB.PRN = SRQCB.RN
+ and T.DICMUNTS = DM.RN)
loop
/* Собираем карточку класса оборудования */
XEQUIPDSCM := PKG_XMAKE.ELEMENT(ICURSOR => NCUR,
@@ -405,20 +467,47 @@ create or replace package body UDO_PKG_EQUIPDS as
SNAME => 'NRN',
SVALUE => C.NRN),
RATTRIBUTE01 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
+ SNAME => 'SSEQOBJKIND',
+ SVALUE => C.SSEQOBJKIND),
+ RATTRIBUTE02 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
SNAME => 'SNAME',
SVALUE => C.SNAME),
- RATTRIBUTE02 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
+ RATTRIBUTE03 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
+ SNAME => 'SDICMUNTS',
+ SVALUE => C.SDICMUNTS),
+ RATTRIBUTE04 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
SNAME => 'SUSERPROCS_DATA',
SVALUE => C.SUSERPROCS_DATA),
- RATTRIBUTE03 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
+ RATTRIBUTE05 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
SNAME => 'SEXSSERVICE_UPLOAD',
SVALUE => C.SEXSSERVICE_UPLOAD),
- RATTRIBUTE04 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
+ RATTRIBUTE06 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
+ SNAME => 'SEXSSERVICEFN_UPLOAD',
+ SVALUE => C.SEXSSERVICEFN_UPLOAD),
+ RATTRIBUTE07 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
SNAME => 'SEXSSERVICE_SEND_MD',
SVALUE => C.SEXSSERVICE_SEND_MD),
- RATTRIBUTE05 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
+ RATTRIBUTE08 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
+ SNAME => 'SEXSSERVICEFN_SEND_MD',
+ SVALUE => C.SEXSSERVICEFN_SEND_MD),
+ RATTRIBUTE09 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
+ SNAME => 'SEXSSERVICE_SEND_MDCB',
+ SVALUE => C.SEXSSERVICE_SEND_MDCB),
+ RATTRIBUTE10 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
+ SNAME => 'SEXSSERVICEFN_SEND_MDCB',
+ SVALUE => C.SEXSSERVICEFN_SEND_MDCB),
+ RATTRIBUTE11 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
SNAME => 'SEXSSERVICE_SEND_RQ',
- SVALUE => C.SEXSSERVICE_SEND_RQ)));
+ SVALUE => C.SEXSSERVICE_SEND_RQ),
+ RATTRIBUTE12 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
+ SNAME => 'SEXSSERVICEFN_SEND_RQ',
+ SVALUE => C.SEXSSERVICEFN_SEND_RQ),
+ RATTRIBUTE13 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
+ SNAME => 'SEXSSERVICE_SEND_RQCB',
+ SVALUE => C.SEXSSERVICE_SEND_RQCB),
+ RATTRIBUTE14 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
+ SNAME => 'SEXSSERVICEFN_SEND_RQCB',
+ SVALUE => C.SEXSSERVICEFN_SEND_RQCB)));
end loop;
/* Формируем XML-представление ответа */
XDOC := PKG_XMAKE.ELEMENT(ICURSOR => NCUR, SNAME => 'XDATA', RNODE00 => XEQUIPDSCM);
@@ -527,8 +616,12 @@ create or replace package body UDO_PKG_EQUIPDS as
SEXSSERVICEFN_UPLOAD in varchar2, -- Функция обмена для выгрузки данных
SEXSSERVICE_SEND_MD in varchar2, -- Сервис обмена для передачи внешней системе
SEXSSERVICEFN_SEND_MD in varchar2, -- Функция обмена для передачи внешней системе
+ SEXSSERVICE_SEND_MDCB in varchar2, -- Сервис обмена для приёма Call-back запросов с результатами передачи внешней системе
+ SEXSSERVICEFN_SEND_MDCB in varchar2, -- Функция сервиса обмена для приёма Call-back запросов с результатами передачи внешней системе
SEXSSERVICE_SEND_RQ in varchar2, -- Сервис обмена для обработки внешней системой
SEXSSERVICEFN_SEND_RQ in varchar2, -- Функция обмена для обработки внешней системой
+ SEXSSERVICE_SEND_RQCB in varchar2, -- Сервис обмена для приёма Call-back запросов с результатами обработки внешней системой
+ SEXSSERVICEFN_SEND_RQCB in varchar2, -- Функция сервиса обмена для приёма Call-back запросов с результатами обработки внешней системой
NRN out number -- Регистрационный номер
)
is
@@ -538,7 +631,9 @@ create or replace package body UDO_PKG_EQUIPDS as
NUSERPROCS_DATA PKG_STD.TREF; -- Рег. номер процедуры формирования
NEXSSERVICEFN_UPLOAD PKG_STD.TREF; -- Рег. номер функции обмена для выгрузки данных
NEXSSERVICEFN_SEND_MD PKG_STD.TREF; -- Рег. номер Функции обмена для передачи внешней системе
+ NEXSSERVICEFN_SEND_MDCB PKG_STD.TREF; -- Рег. номер call-back функции обмена для передачи внешней системе
NEXSSERVICEFN_SEND_RQ PKG_STD.TREF; -- Рег. номер функции обмена для обработки внешней системой
+ NEXSSERVICEFN_SEND_RQCB PKG_STD.TREF; -- Рег. номер call-back функции обмена для обработки внешней системой
begin
/* Проверим параметры */
if (NPRN is null) then
@@ -560,40 +655,154 @@ create or replace package body UDO_PKG_EQUIPDS as
P_EXCEPTION(0,
'Не указана функция обмена для передачи внешней системе.');
end if;
+ if ((SEXSSERVICE_SEND_MDCB is null) or (SEXSSERVICEFN_SEND_MDCB is null)) then
+ P_EXCEPTION(0,
+ 'Не указана функция обмена для приёма обратной связи о передече внешней системе.');
+ end if;
if ((SEXSSERVICE_SEND_RQ is null) or (SEXSSERVICEFN_SEND_RQ is null)) then
P_EXCEPTION(0,
'Не указана функция обмена для обработки внешней системой.');
end if;
+ if ((SEXSSERVICE_SEND_RQCB is null) or (SEXSSERVICEFN_SEND_RQCB is null)) then
+ P_EXCEPTION(0,
+ 'Не указана функция обмена для приёма обратной связи об обработке внешней системой.');
+ end if;
/* Проверим права доступа */
UDO_PKG_EQUIPDS_BASE.UTL_ACCESS(STABLE => 'UDO_T_EQUIPDSCM', SACTION => 'UDO_EQUIPDSCM_INSERT');
/* Разыменуем ссылки */
- UDO_PKG_EQUIPDS_BASE.CM_JOINS(NCOMPANY => NCOMPANY,
- SEQOBJKIND => SEQOBJKIND,
- SDICMUNTS => SDICMUNTS,
- SUSERPROCS_DATA => SUSERPROCS_DATA,
- SEXSSERVICE_UPLOAD => SEXSSERVICE_UPLOAD,
- SEXSSERVICEFN_UPLOAD => SEXSSERVICEFN_UPLOAD,
- SEXSSERVICE_SEND_MD => SEXSSERVICE_SEND_MD,
- SEXSSERVICEFN_SEND_MD => SEXSSERVICEFN_SEND_MD,
- SEXSSERVICE_SEND_RQ => SEXSSERVICE_SEND_RQ,
- SEXSSERVICEFN_SEND_RQ => SEXSSERVICEFN_SEND_RQ,
- NEQOBJKIND => NEQOBJKIND,
- NDICMUNTS => NDICMUNTS,
- NUSERPROCS_DATA => NUSERPROCS_DATA,
- NEXSSERVICEFN_UPLOAD => NEXSSERVICEFN_UPLOAD,
- NEXSSERVICEFN_SEND_MD => NEXSSERVICEFN_SEND_MD,
- NEXSSERVICEFN_SEND_RQ => NEXSSERVICEFN_SEND_RQ);
+ UDO_PKG_EQUIPDS_BASE.CM_JOINS(NCOMPANY => NCOMPANY,
+ SEQOBJKIND => SEQOBJKIND,
+ SDICMUNTS => SDICMUNTS,
+ SUSERPROCS_DATA => SUSERPROCS_DATA,
+ SEXSSERVICE_UPLOAD => SEXSSERVICE_UPLOAD,
+ SEXSSERVICEFN_UPLOAD => SEXSSERVICEFN_UPLOAD,
+ SEXSSERVICE_SEND_MD => SEXSSERVICE_SEND_MD,
+ SEXSSERVICEFN_SEND_MD => SEXSSERVICEFN_SEND_MD,
+ SEXSSERVICE_SEND_MDCB => SEXSSERVICE_SEND_MDCB,
+ SEXSSERVICEFN_SEND_MDCB => SEXSSERVICEFN_SEND_MDCB,
+ SEXSSERVICE_SEND_RQ => SEXSSERVICE_SEND_RQ,
+ SEXSSERVICEFN_SEND_RQ => SEXSSERVICEFN_SEND_RQ,
+ SEXSSERVICE_SEND_RQCB => SEXSSERVICE_SEND_RQCB,
+ SEXSSERVICEFN_SEND_RQCB => SEXSSERVICEFN_SEND_RQCB,
+ NEQOBJKIND => NEQOBJKIND,
+ NDICMUNTS => NDICMUNTS,
+ NUSERPROCS_DATA => NUSERPROCS_DATA,
+ NEXSSERVICEFN_UPLOAD => NEXSSERVICEFN_UPLOAD,
+ NEXSSERVICEFN_SEND_MD => NEXSSERVICEFN_SEND_MD,
+ NEXSSERVICEFN_SEND_MDCB => NEXSSERVICEFN_SEND_MDCB,
+ NEXSSERVICEFN_SEND_RQ => NEXSSERVICEFN_SEND_RQ,
+ NEXSSERVICEFN_SEND_RQCB => NEXSSERVICEFN_SEND_RQCB);
/* Добавляем запись */
- UDO_PKG_EQUIPDS_BASE.CM_INS(NPRN => NPRN,
- NEQOBJKIND => NEQOBJKIND,
- NDICMUNTS => NDICMUNTS,
- NUSERPROCS_DATA => NUSERPROCS_DATA,
- NEXSSERVICEFN_UPLOAD => NEXSSERVICEFN_UPLOAD,
- NEXSSERVICEFN_SEND_MD => NEXSSERVICEFN_SEND_MD,
- NEXSSERVICEFN_SEND_RQ => NEXSSERVICEFN_SEND_RQ,
- NRN => NRN);
+ UDO_PKG_EQUIPDS_BASE.CM_INS(NPRN => NPRN,
+ NEQOBJKIND => NEQOBJKIND,
+ NDICMUNTS => NDICMUNTS,
+ NUSERPROCS_DATA => NUSERPROCS_DATA,
+ NEXSSERVICEFN_UPLOAD => NEXSSERVICEFN_UPLOAD,
+ NEXSSERVICEFN_SEND_MD => NEXSSERVICEFN_SEND_MD,
+ NEXSSERVICEFN_SEND_MDCB => NEXSSERVICEFN_SEND_MDCB,
+ NEXSSERVICEFN_SEND_RQ => NEXSSERVICEFN_SEND_RQ,
+ NEXSSERVICEFN_SEND_RQCB => NEXSSERVICEFN_SEND_RQCB,
+ NRN => NRN);
end CM_INS;
+ /* Клиентское исправление "Выборки данных оборудования (классы оборудования)" */
+ procedure CM_UPD
+ (
+ NRN in number, -- Регистрационный номер
+ SEQOBJKIND in varchar2, -- Класс оборудования
+ SDICMUNTS in varchar2, -- Единица измерения выборки
+ SUSERPROCS_DATA in varchar2, -- Процедура формирования
+ SEXSSERVICE_UPLOAD in varchar2, -- Сервис обмена для выгрузки данных
+ SEXSSERVICEFN_UPLOAD in varchar2, -- Функция обмена для выгрузки данных
+ SEXSSERVICE_SEND_MD in varchar2, -- Сервис обмена для передачи внешней системе
+ SEXSSERVICEFN_SEND_MD in varchar2, -- Функция обмена для передачи внешней системе
+ SEXSSERVICE_SEND_MDCB in varchar2, -- Сервис обмена для приёма Call-back запросов с результатами передачи внешней системе
+ SEXSSERVICEFN_SEND_MDCB in varchar2, -- Функция сервиса обмена для приёма Call-back запросов с результатами передачи внешней системе
+ SEXSSERVICE_SEND_RQ in varchar2, -- Сервис обмена для обработки внешней системой
+ SEXSSERVICEFN_SEND_RQ in varchar2, -- Функция обмена для обработки внешней системой
+ SEXSSERVICE_SEND_RQCB in varchar2, -- Сервис обмена для приёма Call-back запросов с результатами обработки внешней системой
+ SEXSSERVICEFN_SEND_RQCB in varchar2 -- Функция сервиса обмена для приёма Call-back запросов с результатами обработки внешней системой
+ )
+ is
+ NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация
+ NEQOBJKIND PKG_STD.TREF; -- Рег. номер класса оборудования
+ NDICMUNTS PKG_STD.TREF; -- Рег. номер единицы измерения выборки
+ NUSERPROCS_DATA PKG_STD.TREF; -- Рег. номер процедуры формирования
+ NEXSSERVICEFN_UPLOAD PKG_STD.TREF; -- Рег. номер функции обмена для выгрузки данных
+ NEXSSERVICEFN_SEND_MD PKG_STD.TREF; -- Рег. номер Функции обмена для передачи внешней системе
+ NEXSSERVICEFN_SEND_MDCB PKG_STD.TREF; -- Рег. номер call-back функции обмена для передачи внешней системе
+ NEXSSERVICEFN_SEND_RQ PKG_STD.TREF; -- Рег. номер функции обмена для обработки внешней системой
+ NEXSSERVICEFN_SEND_RQCB PKG_STD.TREF; -- Рег. номер call-back функции обмена для обработки внешней системой
+ begin
+ /* Проверим параметры */
+ if (NRN is null) then
+ P_EXCEPTION(0, 'Не указан идентификатор исправляемого класса оборудования выборки данных.');
+ end if;
+ if (SEQOBJKIND is null) then
+ P_EXCEPTION(0, 'Не указан класс оборудования.');
+ end if;
+ if (SDICMUNTS is null) then
+ P_EXCEPTION(0, 'Не указана единица измерения выборки.');
+ end if;
+ if (SUSERPROCS_DATA is null) then
+ P_EXCEPTION(0, 'Не указана процедура формирования данных выборки.');
+ end if;
+ if ((SEXSSERVICE_UPLOAD is null) or (SEXSSERVICEFN_UPLOAD is null)) then
+ P_EXCEPTION(0, 'Не указана функция обмена для выгрузки данных.');
+ end if;
+ if ((SEXSSERVICE_SEND_MD is null) or (SEXSSERVICEFN_SEND_MD is null)) then
+ P_EXCEPTION(0,
+ 'Не указана функция обмена для передачи внешней системе.');
+ end if;
+ if ((SEXSSERVICE_SEND_MDCB is null) or (SEXSSERVICEFN_SEND_MDCB is null)) then
+ P_EXCEPTION(0,
+ 'Не указана функция обмена для приёма обратной связи о передече внешней системе.');
+ end if;
+ if ((SEXSSERVICE_SEND_RQ is null) or (SEXSSERVICEFN_SEND_RQ is null)) then
+ P_EXCEPTION(0,
+ 'Не указана функция обмена для обработки внешней системой.');
+ end if;
+ if ((SEXSSERVICE_SEND_RQCB is null) or (SEXSSERVICEFN_SEND_RQCB is null)) then
+ P_EXCEPTION(0,
+ 'Не указана функция обмена для приёма обратной связи об обработке внешней системой.');
+ end if;
+ /* Проверим права доступа */
+ UDO_PKG_EQUIPDS_BASE.UTL_ACCESS(STABLE => 'UDO_T_EQUIPDSCM', SACTION => 'UDO_EQUIPDSCM_UPDATE');
+ /* Разыменуем ссылки */
+ UDO_PKG_EQUIPDS_BASE.CM_JOINS(NCOMPANY => NCOMPANY,
+ SEQOBJKIND => SEQOBJKIND,
+ SDICMUNTS => SDICMUNTS,
+ SUSERPROCS_DATA => SUSERPROCS_DATA,
+ SEXSSERVICE_UPLOAD => SEXSSERVICE_UPLOAD,
+ SEXSSERVICEFN_UPLOAD => SEXSSERVICEFN_UPLOAD,
+ SEXSSERVICE_SEND_MD => SEXSSERVICE_SEND_MD,
+ SEXSSERVICEFN_SEND_MD => SEXSSERVICEFN_SEND_MD,
+ SEXSSERVICE_SEND_MDCB => SEXSSERVICE_SEND_MDCB,
+ SEXSSERVICEFN_SEND_MDCB => SEXSSERVICEFN_SEND_MDCB,
+ SEXSSERVICE_SEND_RQ => SEXSSERVICE_SEND_RQ,
+ SEXSSERVICEFN_SEND_RQ => SEXSSERVICEFN_SEND_RQ,
+ SEXSSERVICE_SEND_RQCB => SEXSSERVICE_SEND_RQCB,
+ SEXSSERVICEFN_SEND_RQCB => SEXSSERVICEFN_SEND_RQCB,
+ NEQOBJKIND => NEQOBJKIND,
+ NDICMUNTS => NDICMUNTS,
+ NUSERPROCS_DATA => NUSERPROCS_DATA,
+ NEXSSERVICEFN_UPLOAD => NEXSSERVICEFN_UPLOAD,
+ NEXSSERVICEFN_SEND_MD => NEXSSERVICEFN_SEND_MD,
+ NEXSSERVICEFN_SEND_MDCB => NEXSSERVICEFN_SEND_MDCB,
+ NEXSSERVICEFN_SEND_RQ => NEXSSERVICEFN_SEND_RQ,
+ NEXSSERVICEFN_SEND_RQCB => NEXSSERVICEFN_SEND_RQCB);
+ /* Исправляем запись */
+ UDO_PKG_EQUIPDS_BASE.CM_UPD(NRN => NRN,
+ NEQOBJKIND => NEQOBJKIND,
+ NDICMUNTS => NDICMUNTS,
+ NUSERPROCS_DATA => NUSERPROCS_DATA,
+ NEXSSERVICEFN_UPLOAD => NEXSSERVICEFN_UPLOAD,
+ NEXSSERVICEFN_SEND_MD => NEXSSERVICEFN_SEND_MD,
+ NEXSSERVICEFN_SEND_MDCB => NEXSSERVICEFN_SEND_MDCB,
+ NEXSSERVICEFN_SEND_RQ => NEXSSERVICEFN_SEND_RQ,
+ NEXSSERVICEFN_SEND_RQCB => NEXSSERVICEFN_SEND_RQCB);
+ end CM_UPD;
+
/* Клиентское удаление "Выборки данных оборудования (классы оборудования)" */
procedure CM_DEL
(
@@ -760,11 +969,11 @@ create or replace package body UDO_PKG_EQUIPDS as
DDATASET_TS PKG_STD.TLDATE; -- Буфер для времени формирования данных выборки
begin
/* Проверим параметры */
- if (COALESCE(NDATASET_IDENT, 0) = 0) then
+ if (NDATASET_IDENT is null) then
P_EXCEPTION(0,
'Пользовательская процедура формирования данных не вернула идентификатор буфера выборки.');
end if;
- if (COALESCE(NDATASET_CONFIG_IDENT, 0) = 0) then
+ if (NDATASET_CONFIG_IDENT is null) then
P_EXCEPTION(0,
'Пользовательская процедура формирования данных не вернула идентификатор буфера описания выборки.');
end if;
@@ -1056,6 +1265,7 @@ create or replace package body UDO_PKG_EQUIPDS as
into NCOUNT
from UDO_T_EQUIPDSCMFL T
where T.PRN = RCMML.PRN
+ and T.DATASET_ID = RCMML.DATASET_ID
and T.STATUS = UDO_PKG_EQUIPDS_BASE.NCMFL_STATUS_SENT;
exception
when others then
@@ -1064,7 +1274,7 @@ create or replace package body UDO_PKG_EQUIPDS as
end;
if (NCOUNT = 0) then
P_EXCEPTION(0,
- 'У класса оборудования нет файлов данных, переданных фреймворку - обучение невозможно.');
+ 'У выборки класса оборудования нет файлов данных, переданных фреймворку - обучение невозможно.');
end if;
/* Отправим запрос на обучение */
UDO_PKG_EQUIPDS_DATAPROCESS.SEND_RQ(NCOMPANY => NCOMPANY, NEQUIPDSCMML => RCMML.RN);
diff --git a/db/UDO_PKG_EQUIPDS_BASE.pck b/db/UDO_PKG_EQUIPDS_BASE.pck
index 754c121..0aa2934 100644
--- a/db/UDO_PKG_EQUIPDS_BASE.pck
+++ b/db/UDO_PKG_EQUIPDS_BASE.pck
@@ -112,14 +112,20 @@ create or replace package UDO_PKG_EQUIPDS_BASE as
SEXSSERVICEFN_UPLOAD in varchar2, -- Функция обмена для выгрузки данных
SEXSSERVICE_SEND_MD in varchar2, -- Сервис обмена для передачи внешней системе
SEXSSERVICEFN_SEND_MD in varchar2, -- Функция обмена для передачи внешней системе
+ SEXSSERVICE_SEND_MDCB in varchar2, -- Сервис обмена для приёма Call-back запросов с результатами передачи внешней системе
+ SEXSSERVICEFN_SEND_MDCB in varchar2, -- Функция сервиса обмена для приёма Call-back запросов с результатами передачи внешней системе
SEXSSERVICE_SEND_RQ in varchar2, -- Сервис обмена для обработки внешней системой
SEXSSERVICEFN_SEND_RQ in varchar2, -- Функция обмена для обработки внешней системой
+ SEXSSERVICE_SEND_RQCB in varchar2, -- Сервис обмена для приёма Call-back запросов с результатами обработки внешней системой
+ SEXSSERVICEFN_SEND_RQCB in varchar2, -- Функция сервиса обмена для приёма Call-back запросов с результатами обработки внешней системой
NEQOBJKIND out number, -- Рег. номер класса оборудования
NDICMUNTS out number, -- Рег. номер единицы измерения выборки
NUSERPROCS_DATA out number, -- Рег. номер процедуры формирования
NEXSSERVICEFN_UPLOAD out number, -- Рег. номер функции обмена для выгрузки данных
NEXSSERVICEFN_SEND_MD out number, -- Рег. номер Функции обмена для передачи внешней системе
- NEXSSERVICEFN_SEND_RQ out number -- Рег. номер функции обмена для обработки внешней системой
+ NEXSSERVICEFN_SEND_MDCB out number, -- Рег. номер call-back функции обмена для передачи внешней системе
+ NEXSSERVICEFN_SEND_RQ out number, -- Рег. номер функции обмена для обработки внешней системой
+ NEXSSERVICEFN_SEND_RQCB out number -- Рег. номер call-back функции обмена для обработки внешней системой
);
/* Базовое добавление "Выборки данных оборудования (классы оборудования)" */
@@ -131,7 +137,9 @@ create or replace package UDO_PKG_EQUIPDS_BASE as
NUSERPROCS_DATA in number, -- Процедура формирования
NEXSSERVICEFN_UPLOAD in number, -- Функция обмена для выгрузки данных
NEXSSERVICEFN_SEND_MD in number, -- Функция обмена для передачи внешней системе
+ NEXSSERVICEFN_SEND_MDCB in number, -- Call-back функции обмена для передачи внешней системе
NEXSSERVICEFN_SEND_RQ in number, -- Функция обмена для обработки внешней системой
+ NEXSSERVICEFN_SEND_RQCB in number, -- Call-back функции обмена для обработки внешней системой
NRN out number -- Регистрационный номер
);
@@ -144,7 +152,9 @@ create or replace package UDO_PKG_EQUIPDS_BASE as
NUSERPROCS_DATA in number, -- Процедура формирования
NEXSSERVICEFN_UPLOAD in number, -- Функция обмена для выгрузки данных
NEXSSERVICEFN_SEND_MD in number, -- Функция обмена для передачи внешней системе
- NEXSSERVICEFN_SEND_RQ in number -- Функция обмена для обработки внешней системой
+ NEXSSERVICEFN_SEND_MDCB in number, -- Call-back функции обмена для передачи внешней системе
+ NEXSSERVICEFN_SEND_RQ in number, -- Функция обмена для обработки внешней системой
+ NEXSSERVICEFN_SEND_RQCB in number -- Call-back функции обмена для обработки внешней системой
);
/* Базовое удаление "Выборки данных оборудования (классы оборудования)" */
@@ -516,22 +526,28 @@ create or replace package body UDO_PKG_EQUIPDS_BASE as
/* Разыменование словарей "Выборки данных оборудования (классы оборудования)" */
procedure CM_JOINS
(
- NCOMPANY in number, -- Организация
- SEQOBJKIND in varchar2, -- Класс оборудования
- SDICMUNTS in varchar2, -- Единица измерения выборки
- SUSERPROCS_DATA in varchar2, -- Процедура формирования
- SEXSSERVICE_UPLOAD in varchar2, -- Сервис обмена для выгрузки данных
- SEXSSERVICEFN_UPLOAD in varchar2, -- Функция обмена для выгрузки данных
- SEXSSERVICE_SEND_MD in varchar2, -- Сервис обмена для передачи внешней системе
- SEXSSERVICEFN_SEND_MD in varchar2, -- Функция обмена для передачи внешней системе
- SEXSSERVICE_SEND_RQ in varchar2, -- Сервис обмена для обработки внешней системой
- SEXSSERVICEFN_SEND_RQ in varchar2, -- Функция обмена для обработки внешней системой
- NEQOBJKIND out number, -- Рег. номер класса оборудования
- NDICMUNTS out number, -- Рег. номер единицы измерения выборки
- NUSERPROCS_DATA out number, -- Рег. номер процедуры формирования
- NEXSSERVICEFN_UPLOAD out number, -- Рег. номер функции обмена для выгрузки данных
- NEXSSERVICEFN_SEND_MD out number, -- Рег. номер Функции обмена для передачи внешней системе
- NEXSSERVICEFN_SEND_RQ out number -- Рег. номер функции обмена для обработки внешней системой
+ NCOMPANY in number, -- Организация
+ SEQOBJKIND in varchar2, -- Класс оборудования
+ SDICMUNTS in varchar2, -- Единица измерения выборки
+ SUSERPROCS_DATA in varchar2, -- Процедура формирования
+ SEXSSERVICE_UPLOAD in varchar2, -- Сервис обмена для выгрузки данных
+ SEXSSERVICEFN_UPLOAD in varchar2, -- Функция обмена для выгрузки данных
+ SEXSSERVICE_SEND_MD in varchar2, -- Сервис обмена для передачи внешней системе
+ SEXSSERVICEFN_SEND_MD in varchar2, -- Функция обмена для передачи внешней системе
+ SEXSSERVICE_SEND_MDCB in varchar2, -- Сервис обмена для приёма Call-back запросов с результатами передачи внешней системе
+ SEXSSERVICEFN_SEND_MDCB in varchar2, -- Функция сервиса обмена для приёма Call-back запросов с результатами передачи внешней системе
+ SEXSSERVICE_SEND_RQ in varchar2, -- Сервис обмена для обработки внешней системой
+ SEXSSERVICEFN_SEND_RQ in varchar2, -- Функция обмена для обработки внешней системой
+ SEXSSERVICE_SEND_RQCB in varchar2, -- Сервис обмена для приёма Call-back запросов с результатами обработки внешней системой
+ SEXSSERVICEFN_SEND_RQCB in varchar2, -- Функция сервиса обмена для приёма Call-back запросов с результатами обработки внешней системой
+ NEQOBJKIND out number, -- Рег. номер класса оборудования
+ NDICMUNTS out number, -- Рег. номер единицы измерения выборки
+ NUSERPROCS_DATA out number, -- Рег. номер процедуры формирования
+ NEXSSERVICEFN_UPLOAD out number, -- Рег. номер функции обмена для выгрузки данных
+ NEXSSERVICEFN_SEND_MD out number, -- Рег. номер Функции обмена для передачи внешней системе
+ NEXSSERVICEFN_SEND_MDCB out number, -- Рег. номер call-back функции обмена для передачи внешней системе
+ NEXSSERVICEFN_SEND_RQ out number, -- Рег. номер функции обмена для обработки внешней системой
+ NEXSSERVICEFN_SEND_RQCB out number -- Рег. номер call-back функции обмена для обработки внешней системой
)
is
NEXSSERVICE PKG_STD.TREF; -- Рег. номер сервиса обмена
@@ -568,6 +584,13 @@ create or replace package body UDO_PKG_EQUIPDS_BASE as
NEXSSERVICE => NEXSSERVICE,
SCODE => SEXSSERVICEFN_SEND_MD,
NRN => NEXSSERVICEFN_SEND_MD);
+ /* Call-back функции обмена для передачи внешней системе */
+ FIND_EXSSERVICE_CODE(NFLAG_SMART => 0, NFLAG_OPTION => 0, SCODE => SEXSSERVICE_SEND_MDCB, NRN => NEXSSERVICE);
+ FIND_EXSSERVICEFN_CODE(NFLAG_SMART => 0,
+ NFLAG_OPTION => 0,
+ NEXSSERVICE => NEXSSERVICE,
+ SCODE => SEXSSERVICEFN_SEND_MDCB,
+ NRN => NEXSSERVICEFN_SEND_MDCB);
/* Функция обмена для обработки внешней системой */
FIND_EXSSERVICE_CODE(NFLAG_SMART => 0, NFLAG_OPTION => 0, SCODE => SEXSSERVICE_SEND_RQ, NRN => NEXSSERVICE);
FIND_EXSSERVICEFN_CODE(NFLAG_SMART => 0,
@@ -575,25 +598,145 @@ create or replace package body UDO_PKG_EQUIPDS_BASE as
NEXSSERVICE => NEXSSERVICE,
SCODE => SEXSSERVICEFN_SEND_RQ,
NRN => NEXSSERVICEFN_SEND_RQ);
+ /* Call-back функции обмена для обработки внешней системой */
+ FIND_EXSSERVICE_CODE(NFLAG_SMART => 0, NFLAG_OPTION => 0, SCODE => SEXSSERVICE_SEND_RQCB, NRN => NEXSSERVICE);
+ FIND_EXSSERVICEFN_CODE(NFLAG_SMART => 0,
+ NFLAG_OPTION => 0,
+ NEXSSERVICE => NEXSSERVICE,
+ SCODE => SEXSSERVICEFN_SEND_RQCB,
+ NRN => NEXSSERVICEFN_SEND_RQCB);
end CM_JOINS;
+ /* Базовые проверки целостности и корректности "Выборки данных оборудования (классы оборудования)" */
+ procedure CM_CHECK
+ (
+ SMODE in varchar2, -- 'I' - добавление, 'U' - исправление, 'D' - удаление
+ RREC in UDO_T_EQUIPDSCM%rowtype -- Запись с новыми значения класса оборудования выборки данных
+ )
+ is
+ /* Локальные переменные */
+ RREC_OLD UDO_T_EQUIPDSCM%rowtype; -- Предыдущие значения записи класса оборудования выборки данных
+
+ /* Считывание типа сервиса обмена */
+ function EXSSERVICE_TYPE
+ (
+ NEXSSERVICEFN in number -- Рег. номер функции обмена
+ ) return number -- Тип сервиса обмена (см. константы PKG_EXS.NSRV_TYPE_*)
+ is
+ begin
+ /* Найдем тип серсива обмена */
+ for C in (select S.SRV_TYPE
+ from EXSSERVICE S,
+ EXSSERVICEFN F
+ where F.RN = NEXSSERVICEFN
+ and F.PRN = S.RN)
+ loop
+ /* Нашли - вернём */
+ return C.SRV_TYPE;
+ end loop;
+ /* Ничего не нашли */
+ return null;
+ end EXSSERVICE_TYPE;
+
+ /* Проверка типов сервисов обмена */
+ procedure EXSSERVICE_TYPE_CHECK
+ (
+ RREC in UDO_T_EQUIPDSCM%rowtype -- Проверяемая запись
+ )
+ is
+ begin
+ if (EXSSERVICE_TYPE(NEXSSERVICEFN => RREC.EXSSERVICEFN_UPLOAD) <> PKG_EXS.NSRV_TYPE_SEND) then
+ P_EXCEPTION(0,
+ 'Функция обмена для выгрузки данных должна иметь тип "Отправка сообщений".');
+ end if;
+ if (EXSSERVICE_TYPE(NEXSSERVICEFN => RREC.EXSSERVICEFN_SEND_MD) <> PKG_EXS.NSRV_TYPE_SEND) then
+ P_EXCEPTION(0,
+ 'Функция обмена для передачи данных внешней системе должна иметь тип "Отправка сообщений".');
+ end if;
+ if (EXSSERVICE_TYPE(NEXSSERVICEFN => RREC.EXSSERVICEFN_SEND_MDCB) <> PKG_EXS.NSRV_TYPE_RECIVE) then
+ P_EXCEPTION(0,
+ 'Функция обмена для обратной связи о передаче данных внешней системе должна иметь тип "Приём сообщений".');
+ end if;
+ if (EXSSERVICE_TYPE(NEXSSERVICEFN => RREC.EXSSERVICEFN_SEND_RQ) <> PKG_EXS.NSRV_TYPE_SEND) then
+ P_EXCEPTION(0,
+ 'Функция обмена для обработки внешней системой должна иметь тип "Отправка сообщений".');
+ end if;
+ if (EXSSERVICE_TYPE(NEXSSERVICEFN => RREC.EXSSERVICEFN_SEND_RQCB) <> PKG_EXS.NSRV_TYPE_RECIVE) then
+ P_EXCEPTION(0,
+ 'Функция обмена для обратной связи об обработке внешней системой должна иметь тип "Приём сообщений".');
+ end if;
+ end EXSSERVICE_TYPE_CHECK;
+ begin
+ /* Работаем от режима */
+ case SMODE
+ /* Добавление */
+ when 'I' then
+ begin
+ /* Проверим корректность типов серсовисов обмена */
+ EXSSERVICE_TYPE_CHECK(RREC => RREC);
+ end;
+ /* Исправление */
+ when 'U' then
+ begin
+ /* Считывание текущей записи */
+ RREC_OLD := CM_GET(NFLAG_SMART => 0, NRN => RREC.RN);
+ /* Если изменяются кличевые атрибуты, влияющие на выборку */
+ if ((RREC.EQOBJKIND <> RREC_OLD.EQOBJKIND) or (RREC.DICMUNTS <> RREC_OLD.DICMUNTS)) then
+ /* Проверим отсутствие файлов данных */
+ for C in (select T.RN from UDO_T_EQUIPDSCMFL T where T.PRN = RREC.RN)
+ loop
+ /* Они есть - изменения недопустимы */
+ P_EXCEPTION(0,
+ 'Изменение ключевых атрибутов ("Класс оборудования", "Единица измерения выборки") недопустимо - для данного класса оборудования уже зарегистрированы файлы данных.');
+ end loop;
+ end if;
+ /* Проверим корректность типов серсовисов обмена */
+ EXSSERVICE_TYPE_CHECK(RREC => RREC);
+ end;
+ /* Удаление */
+ when 'D' then
+ begin
+ /* Специальных проверок нет, проверки на возможность удаления файлов и моделей класса оборудования запустятся автоматически при их удалении по связям */
+ null;
+ end;
+ /* Неизвестный режим работы */
+ else
+ P_EXCEPTION(0, 'Режим проверки "%s" не поддерживается.', SMODE);
+ end case;
+ end CM_CHECK;
+
/* Базовое добавление "Выборки данных оборудования (классы оборудования)" */
procedure CM_INS
(
- NPRN in number, -- Родитель
- NEQOBJKIND in number, -- Класс оборудования
- NDICMUNTS in number, -- Единица измерения выборки
- NUSERPROCS_DATA in number, -- Процедура формирования
- NEXSSERVICEFN_UPLOAD in number, -- Функция обмена для выгрузки данных
- NEXSSERVICEFN_SEND_MD in number, -- Функция обмена для передачи внешней системе
- NEXSSERVICEFN_SEND_RQ in number, -- Функция обмена для обработки внешней системой
- NRN out number -- Регистрационный номер
+ NPRN in number, -- Родитель
+ NEQOBJKIND in number, -- Класс оборудования
+ NDICMUNTS in number, -- Единица измерения выборки
+ NUSERPROCS_DATA in number, -- Процедура формирования
+ NEXSSERVICEFN_UPLOAD in number, -- Функция обмена для выгрузки данных
+ NEXSSERVICEFN_SEND_MD in number, -- Функция обмена для передачи внешней системе
+ NEXSSERVICEFN_SEND_MDCB in number, -- Call-back функции обмена для передачи внешней системе
+ NEXSSERVICEFN_SEND_RQ in number, -- Функция обмена для обработки внешней системой
+ NEXSSERVICEFN_SEND_RQCB in number, -- Call-back функции обмена для обработки внешней системой
+ NRN out number -- Регистрационный номер
)
is
+ RREC UDO_T_EQUIPDSCM%rowtype; -- Запись с новыми значениями для проверки
begin
+ /* Соберём запись */
+ RREC.PRN := NPRN;
+ RREC.EQOBJKIND := NEQOBJKIND;
+ RREC.DICMUNTS := NDICMUNTS;
+ RREC.USERPROCS_DATA := NUSERPROCS_DATA;
+ RREC.EXSSERVICEFN_UPLOAD := NEXSSERVICEFN_UPLOAD;
+ RREC.EXSSERVICEFN_SEND_MD := NEXSSERVICEFN_SEND_MD;
+ RREC.EXSSERVICEFN_SEND_MDCB := NEXSSERVICEFN_SEND_MDCB;
+ RREC.EXSSERVICEFN_SEND_RQ := NEXSSERVICEFN_SEND_RQ;
+ RREC.EXSSERVICEFN_SEND_RQCB := NEXSSERVICEFN_SEND_RQCB;
+ /* Проверим возможность исполнения */
+ CM_CHECK(SMODE => 'I', RREC => RREC);
/* Формируем рег. номер */
NRN := GEN_ID();
- /* Добавляем запись */
+ /* Добавляем запись */
insert into UDO_T_EQUIPDSCM
(RN,
PRN,
@@ -603,7 +746,9 @@ create or replace package body UDO_PKG_EQUIPDS_BASE as
USERPROCS_DATA,
EXSSERVICEFN_UPLOAD,
EXSSERVICEFN_SEND_MD,
- EXSSERVICEFN_SEND_RQ)
+ EXSSERVICEFN_SEND_MDCB,
+ EXSSERVICEFN_SEND_RQ,
+ EXSSERVICEFN_SEND_RQCB)
values
(NRN,
NPRN,
@@ -613,40 +758,64 @@ create or replace package body UDO_PKG_EQUIPDS_BASE as
NUSERPROCS_DATA,
NEXSSERVICEFN_UPLOAD,
NEXSSERVICEFN_SEND_MD,
- NEXSSERVICEFN_SEND_RQ);
+ NEXSSERVICEFN_SEND_MDCB,
+ NEXSSERVICEFN_SEND_RQ,
+ NEXSSERVICEFN_SEND_RQCB);
end CM_INS;
/* Базовое исправление "Выборки данных оборудования (классы оборудования)" */
procedure CM_UPD
(
- NRN in number, -- Регистрационный номер
- NEQOBJKIND in number, -- Класс оборудования
- NDICMUNTS in number, -- Единица измерения выборки
- NUSERPROCS_DATA in number, -- Процедура формирования
- NEXSSERVICEFN_UPLOAD in number, -- Функция обмена для выгрузки данных
- NEXSSERVICEFN_SEND_MD in number, -- Функция обмена для передачи внешней системе
- NEXSSERVICEFN_SEND_RQ in number -- Функция обмена для обработки внешней системой
+ NRN in number, -- Регистрационный номер
+ NEQOBJKIND in number, -- Класс оборудования
+ NDICMUNTS in number, -- Единица измерения выборки
+ NUSERPROCS_DATA in number, -- Процедура формирования
+ NEXSSERVICEFN_UPLOAD in number, -- Функция обмена для выгрузки данных
+ NEXSSERVICEFN_SEND_MD in number, -- Функция обмена для передачи внешней системе
+ NEXSSERVICEFN_SEND_MDCB in number, -- Call-back функции обмена для передачи внешней системе
+ NEXSSERVICEFN_SEND_RQ in number, -- Функция обмена для обработки внешней системой
+ NEXSSERVICEFN_SEND_RQCB in number -- Call-back функции обмена для обработки внешней системой
)
is
+ RREC UDO_T_EQUIPDSCM%rowtype; -- Запись с новыми значениями для проверки
begin
+ /* Соберём запись */
+ RREC := CM_GET(NFLAG_SMART => 0, NRN => NRN);
+ RREC.EQOBJKIND := NEQOBJKIND;
+ RREC.DICMUNTS := NDICMUNTS;
+ RREC.USERPROCS_DATA := NUSERPROCS_DATA;
+ RREC.EXSSERVICEFN_UPLOAD := NEXSSERVICEFN_UPLOAD;
+ RREC.EXSSERVICEFN_SEND_MD := NEXSSERVICEFN_SEND_MD;
+ RREC.EXSSERVICEFN_SEND_MDCB := NEXSSERVICEFN_SEND_MDCB;
+ RREC.EXSSERVICEFN_SEND_RQ := NEXSSERVICEFN_SEND_RQ;
+ RREC.EXSSERVICEFN_SEND_RQCB := NEXSSERVICEFN_SEND_RQCB;
+ /* Проверим возможность исполнения */
+ CM_CHECK(SMODE => 'U', RREC => RREC);
/* Исправим данные */
update UDO_T_EQUIPDSCM T
- set T.EQOBJKIND = NEQOBJKIND,
- T.DICMUNTS = NDICMUNTS,
- T.USERPROCS_DATA = NUSERPROCS_DATA,
- T.EXSSERVICEFN_UPLOAD = NEXSSERVICEFN_UPLOAD,
- T.EXSSERVICEFN_SEND_MD = NEXSSERVICEFN_SEND_MD,
- T.EXSSERVICEFN_SEND_RQ = NEXSSERVICEFN_SEND_RQ
+ set T.EQOBJKIND = NEQOBJKIND,
+ T.DICMUNTS = NDICMUNTS,
+ T.USERPROCS_DATA = NUSERPROCS_DATA,
+ T.EXSSERVICEFN_UPLOAD = NEXSSERVICEFN_UPLOAD,
+ T.EXSSERVICEFN_SEND_MD = NEXSSERVICEFN_SEND_MD,
+ T.EXSSERVICEFN_SEND_MDCB = NEXSSERVICEFN_SEND_MDCB,
+ T.EXSSERVICEFN_SEND_RQ = NEXSSERVICEFN_SEND_RQ,
+ T.EXSSERVICEFN_SEND_RQCB = NEXSSERVICEFN_SEND_RQCB
where T.RN = NRN;
end CM_UPD;
/* Базовое удаление "Выборки данных оборудования (классы оборудования)" */
procedure CM_DEL
(
- NRN in number -- Регистрационный номер
+ NRN in number -- Регистрационный номер
)
is
+ RREC UDO_T_EQUIPDSCM%rowtype; -- Запись с новыми значениями для проверки
begin
+ /* Соберём запись */
+ RREC := CM_GET(NFLAG_SMART => 0, NRN => NRN);
+ /* Проверим возможность исполнения */
+ CM_CHECK(SMODE => 'D', RREC => RREC);
/* Удалим файлы */
for C in (select T.RN from UDO_T_EQUIPDSCMFL T where T.PRN = NRN)
loop
diff --git a/db/UDO_T_EQUIPDSCM.sql b/db/UDO_T_EQUIPDSCM.sql
index 3574f7e..1639d2b 100644
--- a/db/UDO_T_EQUIPDSCM.sql
+++ b/db/UDO_T_EQUIPDSCM.sql
@@ -17,8 +17,12 @@ create table UDO_T_EQUIPDSCM
EXSSERVICEFN_UPLOAD number(17) not null,
/* Функция обмена для передачи внешней системе */
EXSSERVICEFN_SEND_MD number(17) not null,
+ /* Call-back функции обмена для передачи внешней системе */
+ EXSSERVICEFN_SEND_MDCB number(17) not null,
/* Функция обмена для обработки внешней системой */
EXSSERVICEFN_SEND_RQ number(17) not null,
+ /* Call-back функции обмена для обработки внешней системой */
+ EXSSERVICEFN_SEND_RQCB number(17) not null,
/* Ключи */
constraint UDO_C_EQUIPDSCM_RN_PK primary key (RN),
constraint UDO_C_EQUIPDSCM_PRN_FK foreign key (PRN) references UDO_T_EQUIPDS(RN),
@@ -27,6 +31,8 @@ create table UDO_T_EQUIPDSCM
constraint UDO_C_EQUIPDSCM_USRPD_FK foreign key (USERPROCS_DATA) references USERPROCS(RN),
constraint UDO_C_EQUIPDSCM_EXSFNUPLD_FK foreign key (EXSSERVICEFN_UPLOAD) references EXSSERVICEFN(RN),
constraint UDO_C_EQUIPDSCM_EXSFNSDMD_FK foreign key (EXSSERVICEFN_SEND_MD) references EXSSERVICEFN(RN),
+ constraint UDO_C_EQUIPDSCM_EXSFNSDMDCB_FK foreign key (EXSSERVICEFN_SEND_MDCB) references EXSSERVICEFN(RN),
constraint UDO_C_EQUIPDSCM_EXSFNSDRQ_FK foreign key (EXSSERVICEFN_SEND_RQ) references EXSSERVICEFN(RN),
+ constraint UDO_C_EQUIPDSCM_EXSFNSDRQCB_FK foreign key (EXSSERVICEFN_SEND_RQCB) references EXSSERVICEFN(RN),
constraint UDO_C_EQUIPDSCM_UN unique (PRN, EQOBJKIND)
);
diff --git a/panels/eqs_tech_cond_forecast/admin_tab.js b/panels/eqs_tech_cond_forecast/admin_tab.js
index ad98a59..f4f1c5d 100644
--- a/panels/eqs_tech_cond_forecast/admin_tab.js
+++ b/panels/eqs_tech_cond_forecast/admin_tab.js
@@ -47,6 +47,7 @@ const REFRESH_INITIAL = {
const DIALOGS_INITIAL = {
dataSelectionIU: false,
dataSelectionClassMachineIU: false,
+ dataSelectionClassMachine: null,
dataSelectionClassMachineFileSendMD: false,
dataSelectionClassMachineModelIU: false
};
@@ -139,7 +140,13 @@ const AdminTab = ({ dataSelection = DS_RN_DEFAULT, dataSelectionClassMachine = n
const handleDataSelectionClassMachineClick = value => setDataSelectionClassMachine(value);
//При нажатии на "Добавить класс оборудования"
- const handleAddEquipDataSelectionClassMachine = () => setDialogs(pv => ({ ...pv, dataSelectionClassMachineIU: true }));
+ const handleAddEquipDataSelectionClassMachine = () =>
+ setDialogs(pv => ({ ...pv, dataSelectionClassMachineIU: true, dataSelectionClassMachine: null }));
+
+ //При нажатии на "Изменить класс оборудования"
+ const handleEditEquipDataSelectionClassMachine = equipDSCM => {
+ setDialogs(pv => ({ ...pv, dataSelectionClassMachineIU: true, dataSelectionClassMachine: equipDSCM }));
+ };
//При нажатии на "Удалить класс оборудования"
const handleDeleteEquipDataSelectionClassMachine = async equipDSCM => {
@@ -153,24 +160,39 @@ const AdminTab = ({ dataSelection = DS_RN_DEFAULT, dataSelectionClassMachine = n
//При сохранении диалога IU класса оборудования
const handleEquipDataSelectionClassMachineIUOk = async values => {
- const data = await executeStored({
- stored: "UDO_PKG_EQUIPDS.CM_INS",
- args: {
- NPRN: equipDataSelection,
- SEQOBJKIND: values.eqobjKind,
- SDICMUNTS: values.measureUnit,
- SUSERPROCS_DATA: values.userprocsData,
- SEXSSERVICE_UPLOAD: values.exsServiceUpload,
- SEXSSERVICEFN_UPLOAD: values.exsServiceFnUpload,
- SEXSSERVICE_SEND_MD: values.exsServiceSendMd,
- SEXSSERVICEFN_SEND_MD: values.exsServiceFnSendMd,
- SEXSSERVICE_SEND_RQ: values.exsServiceSendRq,
- SEXSSERVICEFN_SEND_RQ: values.exsServiceFnSendRq
- }
- });
- setDialogs(pv => ({ ...pv, dataSelectionClassMachineIU: false }));
+ let dataSelectionClassMachine = null;
+ const args = {
+ SEQOBJKIND: values.eqobjKind,
+ SDICMUNTS: values.measureUnit,
+ SUSERPROCS_DATA: values.userprocsData,
+ SEXSSERVICE_UPLOAD: values.exsServiceUpload,
+ SEXSSERVICEFN_UPLOAD: values.exsServiceFnUpload,
+ SEXSSERVICE_SEND_MD: values.exsServiceSendMd,
+ SEXSSERVICEFN_SEND_MD: values.exsServiceFnSendMd,
+ SEXSSERVICE_SEND_MDCB: values.exsServiceSendMdCb,
+ SEXSSERVICEFN_SEND_MDCB: values.exsServiceFnSendMdCb,
+ SEXSSERVICE_SEND_RQ: values.exsServiceSendRq,
+ SEXSSERVICEFN_SEND_RQ: values.exsServiceFnSendRq,
+ SEXSSERVICE_SEND_RQCB: values.exsServiceSendRqCb,
+ SEXSSERVICEFN_SEND_RQCB: values.exsServiceFnSendRqCb
+ };
+ if (dialogs.dataSelectionClassMachine) {
+ await executeStored({
+ stored: "UDO_PKG_EQUIPDS.CM_UPD",
+ args: { NRN: dialogs.dataSelectionClassMachine, ...args }
+ });
+ dataSelectionClassMachine = dialogs.dataSelectionClassMachine;
+ setRefresh(pv => ({ ...pv, dataSelectionClassMachineCard: pv.dataSelectionClassMachineCard + 1 }));
+ } else {
+ const data = await executeStored({
+ stored: "UDO_PKG_EQUIPDS.CM_INS",
+ args: { NPRN: equipDataSelection, ...args }
+ });
+ dataSelectionClassMachine = data.NRN;
+ }
+ setDialogs(pv => ({ ...pv, dataSelectionClassMachineIU: false, dataSelectionClassMachine: null }));
setRefresh(pv => ({ ...pv, dataSelectionClassMachine: pv.dataSelectionClassMachine + 1 }));
- setDataSelectionClassMachine(data.NRN);
+ setDataSelectionClassMachine(dataSelectionClassMachine);
};
//Отработка результатов выполнения пользовательской процедуры формирования данных выборки
@@ -187,6 +209,10 @@ const AdminTab = ({ dataSelection = DS_RN_DEFAULT, dataSelectionClassMachine = n
setRefresh(pv => ({ ...pv, dataSelectionClassMachineFilesList: pv.dataSelectionClassMachineFilesList + 1 }));
};
+ //При нажатии "Обновить" в списке файлов карточки класса оборудования
+ const handleRefreshEquipDataSelectionClassMachineFiles = () =>
+ setRefresh(pv => ({ ...pv, dataSelectionClassMachineFilesList: pv.dataSelectionClassMachineFilesList + 1 }));
+
//При нажатии "Сформировать" в списке файлов карточки класса оборудования
const handleMakeEquipDataSelectionClassMachineFiles = (equipDSCM, procedure, clear) => {
pOnlineUserProcedure({
@@ -219,6 +245,10 @@ const AdminTab = ({ dataSelection = DS_RN_DEFAULT, dataSelectionClassMachine = n
//При нажатии "Передать внешней системе" в списке файлов карточки класса оборудования
const handleSendMdEquipDataSelectionClassMachineFiles = () => setDialogs(pv => ({ ...pv, dataSelectionClassMachineFileSendMD: true }));
+ //При нажатии на "Обновить модели класса оборудования"
+ const handleRefreshEquipDataSelectionClassMachineModel = () =>
+ setRefresh(pv => ({ ...pv, dataSelectionClassMachineModelsList: pv.dataSelectionClassMachineModelsList + 1 }));
+
//При нажатии на "Добавить модель класса оборудования"
const handleAddEquipDataSelectionClassMachineModel = () => setDialogs(pv => ({ ...pv, dataSelectionClassMachineModelIU: true }));
@@ -285,6 +315,7 @@ const AdminTab = ({ dataSelection = DS_RN_DEFAULT, dataSelectionClassMachine = n
) : null}
{dialogs.dataSelectionClassMachineIU ? (
@@ -351,11 +382,14 @@ const AdminTab = ({ dataSelection = DS_RN_DEFAULT, dataSelectionClassMachine = n
card={equipDataSelectionClassMachineCard}
filesList={equipDataSelectionClassMachineFilesList}
modelsList={equipDataSelectionClassMachineModelsList}
+ onCardEdit={handleEditEquipDataSelectionClassMachine}
onCardDelete={handleDeleteEquipDataSelectionClassMachine}
+ onClassMachineFilesRefresh={handleRefreshEquipDataSelectionClassMachineFiles}
onClassMachineFilesMake={handleMakeEquipDataSelectionClassMachineFiles}
onClassMachineFilesDelete={handleDeleteEquipDataSelectionClassMachineFiles}
onClassMachineFilesUpload={handleUploadEquipDataSelectionClassMachineFiles}
onClassMachineFilesSendMd={handleSendMdEquipDataSelectionClassMachineFiles}
+ onClassMachineModelRefresh={handleRefreshEquipDataSelectionClassMachineModel}
onClassMachineModelAdd={handleAddEquipDataSelectionClassMachineModel}
onClassMachineModelDelete={handleDeleteEquipDataSelectionClassMachineModel}
onClassMachineModelSendRq={handleSendRqEquipDataSelectionClassMachineModel}
diff --git a/panels/eqs_tech_cond_forecast/admin_tab_layout.js b/panels/eqs_tech_cond_forecast/admin_tab_layout.js
index e3410c9..4fc2183 100644
--- a/panels/eqs_tech_cond_forecast/admin_tab_layout.js
+++ b/panels/eqs_tech_cond_forecast/admin_tab_layout.js
@@ -7,7 +7,7 @@
//Подключение библиотек
//---------------------
-import React, { useState, useContext, useRef } from "react"; //Классы React
+import React, { useState, useContext, useRef, useEffect } from "react"; //Классы React
import PropTypes from "prop-types"; //Контроль свойств компонента
import {
Box,
@@ -53,7 +53,7 @@ import {
import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../components/p8p_data_grid"; //Таблица данных
import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения
import { DS_RN_DEFAULT, TASK_LIST } from "./eqs_tech_cond_forecast_hooks"; //Общие вспомогательные хуки
-import { useEquipDataSelectionClassMachineDataSetsList } from "./admin_tab_hooks"; //Вспомогательные хуки
+import { useEquipDataSelectionClassMachineDataSetsList, useEquipDataSelectionClassMachineCard } from "./admin_tab_hooks"; //Вспомогательные хуки
//---------
//Константы
@@ -97,6 +97,7 @@ const STYLES = {
overflowY: "auto",
...SCROLL_STYLES
},
+ EQUIP_DSCM_DIALOG_CONTENT: { ...SCROLL_STYLES },
FL_ML_TABLE: {
height: `200px`,
...SCROLL_STYLES
@@ -305,7 +306,7 @@ EquipDataSelectionIU.propTypes = {
};
//Диалог IU класса оборудования выборки данных
-const EquipDataSelectionClassMachineIU = ({ onOk, onCancel }) => {
+const EquipDataSelectionClassMachineIU = ({ classMachine, onOk, onCancel }) => {
//Подключение к контексту приложения
const { pOnlineShowDictionary } = useContext(ApplicationСtx);
@@ -318,18 +319,45 @@ const EquipDataSelectionClassMachineIU = ({ onOk, onCancel }) => {
exsServiceFnUpload: "",
exsServiceSendMd: "",
exsServiceFnSendMd: "",
+ exsServiceSendMdCb: "",
+ exsServiceFnSendMdCb: "",
exsServiceSendRq: "",
- exsServiceFnSendRq: ""
+ exsServiceFnSendRq: "",
+ exsServiceSendRqCb: "",
+ exsServiceFnSendRqCb: ""
});
+ //Карточка из базы
+ const { equipDataSelectionClassMachineCard } = useEquipDataSelectionClassMachineCard(classMachine, 0);
+
+ //При загрузке карточки из базы
+ useEffect(() => {
+ if (equipDataSelectionClassMachineCard.NRN)
+ setValues({
+ eqobjKind: equipDataSelectionClassMachineCard.SSEQOBJKIND,
+ measureUnit: equipDataSelectionClassMachineCard.SDICMUNTS,
+ userprocsData: equipDataSelectionClassMachineCard.SUSERPROCS_DATA,
+ exsServiceUpload: equipDataSelectionClassMachineCard.SEXSSERVICE_UPLOAD,
+ exsServiceFnUpload: equipDataSelectionClassMachineCard.SEXSSERVICEFN_UPLOAD,
+ exsServiceSendMd: equipDataSelectionClassMachineCard.SEXSSERVICE_SEND_MD,
+ exsServiceFnSendMd: equipDataSelectionClassMachineCard.SEXSSERVICEFN_SEND_MD,
+ exsServiceSendMdCb: equipDataSelectionClassMachineCard.SEXSSERVICE_SEND_MDCB,
+ exsServiceFnSendMdCb: equipDataSelectionClassMachineCard.SEXSSERVICEFN_SEND_MDCB,
+ exsServiceSendRq: equipDataSelectionClassMachineCard.SEXSSERVICE_SEND_RQ,
+ exsServiceFnSendRq: equipDataSelectionClassMachineCard.SEXSSERVICEFN_SEND_RQ,
+ exsServiceSendRqCb: equipDataSelectionClassMachineCard.SEXSSERVICE_SEND_RQCB,
+ exsServiceFnSendRqCb: equipDataSelectionClassMachineCard.SEXSSERVICEFN_SEND_RQCB
+ });
+ }, [equipDataSelectionClassMachineCard]);
+
//Отработка воода значения в форму
const handleValueChanged = (name, value) => setValues(pv => ({ ...pv, [name]: value }));
//Генерация содержимого
return (
-