Клиентский пакет для режима "Прогнозирование" и скрипт назначения прав доступа

This commit is contained in:
Mikhail Chechnev 2024-08-01 12:46:20 +03:00
parent 25e073731e
commit 9594189131
2 changed files with 129 additions and 0 deletions

127
db/UDO_PKG_EQUIPTCF.pck Normal file
View File

@ -0,0 +1,127 @@
create or replace package UDO_PKG_EQUIPTCF as
/* Формирование дерева состава оборудования */
procedure EQCONFIG_HIER
(
NPEQCONFIG in number, -- Рег. номер родительского узла состава оборудования
COUT out clob -- Сериализованное XML-представление дерева
);
/* Формирование списка технических объектов для выбранного узла состава оборудования */
procedure EQCONFIG_THOBJ_DG
(
NPEQCONFIG in number -- Рег. номер родительского узла состава оборудования
);
end UDO_PKG_EQUIPTCF;
/
create or replace package body UDO_PKG_EQUIPTCF as
/* Формирование ветки дерева состава оборудования */
function EQCONFIG_HIER_NODE
(
NCUR in integer, -- Курсор документа для результата
NCOMPANY in number, -- Рег. номер организации
NPEQCONFIG in number -- Рег. номер родительского узла состава оборудования
) return PKG_XMAKE.TNODE -- XML-описание веток дерева
is
XLEAF PKG_XMAKE.TNODE; -- Текущий лист
XCHILD PKG_XMAKE.TNODE; -- Дочерние листы текущего
XRES PKG_XMAKE.TNODE; -- Буфер для результата
begin
/* Обходим состав оборудования с заданного корня */
for C in (select M.RN NRN,
M.EQPARENT NHRN,
DECODE(M.FICT_REC, 0, M.NAME, DECODE(OL.RN, null, M.NAME, OL.NAME)) SNAME,
case
when exists
(select null
from EQCONFIG C
where C.EQPARENT = M.RN
and exists (select null from V_USERPRIV_HIER_SINGL UP where UP.HIERARCHY = C.RN)) then
1
else
0
end NHASCHILDREN
from EQCONFIG M,
EQOBJLEVEL OL
where M.PR_OBJ_LEVEL = OL.RN(+)
and ((M.FICT_REC = 0) or ((M.FICT_REC = 1) and (CMP_VC2(M.NAME, F_EQCONFIG_EXTRANAME(0)) = 1)))
and exists (select null from V_USERPRIV_HIER_SINGL UP where UP.HIERARCHY = M.RN)
and COALESCE(M.EQPARENT, 0) = NPEQCONFIG
and M.COMPANY = NCOMPANY)
loop
/* Если есть дочерние ветки */
if (C.NHASCHILDREN = 1) then
/* Добавим фиктивную дочернюю запись для индикации наличия дочерних на клиенте */
XCHILD := PKG_XMAKE.ELEMENT(ICURSOR => NCUR,
SNAME => 'children',
RATTRIBUTES => PKG_XMAKE.ATTRIBUTES(ICURSOR => NCUR,
RATTRIBUTE00 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
SNAME => 'id',
SVALUE => C.NRN ||
'_loader'),
RATTRIBUTE01 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
SNAME => 'label',
SVALUE => 'Минуточку...')));
else
XCHILD := null;
end if;
/* Соберём лист */
XLEAF := PKG_XMAKE.ELEMENT(ICURSOR => NCUR,
SNAME => 'children',
RATTRIBUTES => PKG_XMAKE.ATTRIBUTES(ICURSOR => NCUR,
RATTRIBUTE00 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
SNAME => 'id',
SVALUE => C.NRN),
RATTRIBUTE01 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
SNAME => 'label',
SVALUE => C.SNAME)),
RNODE00 => XCHILD);
/* Соберём листы в ветку */
XRES := PKG_XMAKE.CONCAT(ICURSOR => NCUR, RNODE00 => XRES, RNODE01 => XLEAF);
end loop;
/* Вернём собранное */
return XRES;
end EQCONFIG_HIER_NODE;
/* Формирование дерева состава оборудования */
procedure EQCONFIG_HIER
(
NPEQCONFIG in number, -- Рег. номер родительского узла состава оборудования
COUT out clob -- Сериализованное XML-представление дерева
)
is
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации
NCUR integer; -- Курсор документа для результата
XDOC PKG_XMAKE.TNODE; -- Документ для результата
begin
/* Открываем документ */
NCUR := PKG_XMAKE.OPEN_CURSOR();
/* Формируем XML-представление ветки для запрошенного родителя */
XDOC := PKG_XMAKE.ELEMENT(ICURSOR => NCUR,
SNAME => 'XDATA',
RNODE00 => EQCONFIG_HIER_NODE(NCUR => NCUR, NCOMPANY => NCOMPANY, NPEQCONFIG => NPEQCONFIG));
/* Конвертируем в CLOB */
COUT := PKG_XMAKE.SERIALIZE_TO_CLOB(ICURSOR => NCUR,
ITYPE => PKG_XMAKE.CONTENT_,
RNODE => XDOC,
RHEADER => PKG_XHEADER.WRAP_ALL(SVERSION => PKG_XHEADER.VERSION_1_0_,
SENCODING => PKG_XHEADER.ENCODING_UTF_,
SSTANDALONE => PKG_XHEADER.STANDALONE_YES_));
/* Закрываем документ */
PKG_XMAKE.CLOSE_CURSOR(ICURSOR => NCUR);
end EQCONFIG_HIER;
/* Формирование списка технических объектов для выбранного узла состава оборудования */
procedure EQCONFIG_THOBJ_DG
(
NPEQCONFIG in number -- Рег. номер родительского узла состава оборудования
)
is
begin
null;
end EQCONFIG_THOBJ_DG;
end UDO_PKG_EQUIPTCF;
/

2
db/grants.sql Normal file
View File

@ -0,0 +1,2 @@
grant execute on UDO_PKG_EQUIPTCF to public;
grant execute on UDO_PKG_EQUIPDS to public;