Клиентский пакет для режима "Прогнозирование" и скрипт назначения прав доступа
This commit is contained in:
parent
25e073731e
commit
9594189131
127
db/UDO_PKG_EQUIPTCF.pck
Normal file
127
db/UDO_PKG_EQUIPTCF.pck
Normal 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
2
db/grants.sql
Normal file
@ -0,0 +1,2 @@
|
||||
grant execute on UDO_PKG_EQUIPTCF to public;
|
||||
grant execute on UDO_PKG_EQUIPDS to public;
|
Loading…
x
Reference in New Issue
Block a user