БД: P8PDataGrid - поддержка фиксированных заголовка и колонок

This commit is contained in:
Mikhail Chechnev 2024-05-04 14:04:08 +03:00
parent f4912d20f2
commit 44069b0bc9

View File

@ -54,7 +54,8 @@ create or replace package PKG_P8PANELS_VISUAL as
SHINT PKG_STD.TSTRING, -- Текст всплывающей подсказки
SPARENT PKG_STD.TSTRING, -- Наименование родительской колонки
BEXPANDABLE boolean, -- Разрешить сокрытие/отображение дочерних колонок
BEXPANDED boolean -- Отобразить/скрыть дочерние колонки
BEXPANDED boolean, -- Отобразить/скрыть дочерние колонки
NWIDTH PKG_STD.TNUMBER -- Ширина колонки (обязательно для фиксированных)
);
/* Типы данных - коллекция описателей колонок таблицы данных */
@ -95,6 +96,8 @@ create or replace package PKG_P8PANELS_VISUAL as
/* Типы данных - таблица данных */
type TDATA_GRID is record
(
BFIXED_HEADER boolean, -- Зафиксировать заголовок
NFIXED_COLUMNS PKG_STD.TNUMBER, -- Количество фиксированных колонок
RCOL_DEFS TCOL_DEFS, -- Описание колонок
RGROUPS TGROUPS, -- Описание групп
RROWS TROWS -- Данные строк
@ -319,7 +322,10 @@ create or replace package PKG_P8PANELS_VISUAL as
/* Формирование таблицы данных */
function TDATA_GRID_MAKE
return TDATA_GRID; -- Результат работы
(
BFIXED_HEADER in boolean := false, -- Зафиксировать заголовок
NFIXED_COLUMNS in number := 0 -- Количество фиксированных колонок
) return TDATA_GRID; -- Результат работы
/* Поиск описания колонки в таблице данных по наименованию */
function TDATA_GRID_FIND_COL_DEF
@ -345,6 +351,7 @@ create or replace package PKG_P8PANELS_VISUAL as
SPARENT in varchar2 := null, -- Наименование родительской колонки
BEXPANDABLE in boolean := false, -- Разрешить сокрытие/отображение дочерних колонок
BEXPANDED in boolean := true, -- Отобразить/скрыть дочерние колонки
NWIDTH in number := null, -- Ширина колонки (обязательно для фиксированных)
BCLEAR in boolean := false -- Флаг очистки коллекции описаний колонок таблицы данных (false - не очищать, true - очистить коллекцию перед добавлением)
);
@ -595,6 +602,7 @@ text="Формат data_grid и gant как в chart"
SRESP_TAG_XGANTT_DEF constant PKG_STD.TSTRING := 'XGANTT_DEF'; -- Тэг для описания заголовка диаграммы Ганта
SRESP_TAG_XGANTT_TASKS constant PKG_STD.TSTRING := 'XGANTT_TASKS'; -- Тэг для описания коллекции задач диаграммы Ганта
SRESP_TAG_XCHART constant PKG_STD.TSTRING := 'XCHART'; -- Тэг для описания графика
SRESP_TAG_XDATA_GRID constant PKG_STD.TSTRING := 'XDATA_GRID'; -- Тэг для описания таблицы данных
/* Константы - атрибуты ответов (универсальные) */
SRESP_ATTR_NAME constant PKG_STD.TSTRING := 'name'; -- Атрибут для наименования
@ -616,6 +624,9 @@ text="Формат data_grid и gant как в chart"
SRESP_ATTR_PARENT constant PKG_STD.TSTRING := 'parent'; -- Атрибут для ссылки на родителя
SRESP_ATTR_EXPANDABLE constant PKG_STD.TSTRING := 'expandable'; -- Атрибут для доступности действия сокрытия/отображения
SRESP_ATTR_EXPANDED constant PKG_STD.TSTRING := 'expanded'; -- Атрибут для флага сокрытия/отображения
SRESP_ATTR_FIXED_HEADER constant PKG_STD.TSTRING := 'fixedHeader'; -- Атрибут для флага фиксации заголовка
SRESP_ATTR_FIXED_COLUMNS constant PKG_STD.TSTRING := 'fixedColumns'; -- Атрибут для количества фиксированных колонок
SRESP_ATTR_WIDTH constant PKG_STD.TSTRING := 'width'; -- Атрибут для ширины
/* Константы - атрибуты ответов (таблица данных) */
SRESP_ATTR_DT_ORDER constant PKG_STD.TSTRING := 'order'; -- Атрибут для флага сортировки
@ -743,7 +754,8 @@ text="Формат data_grid и gant как в chart"
SHINT in varchar2 := null, -- Текст всплывающей подсказки
SPARENT in varchar2 := null, -- Наименование родительской колонки
BEXPANDABLE in boolean := false, -- Разрешить сокрытие/отображение дочерних колонок
BEXPANDED in boolean := true -- Отобразить/скрыть дочерние колонки
BEXPANDED in boolean := true, -- Отобразить/скрыть дочерние колонки
NWIDTH in number := null -- Ширина колонки (обязательно для фиксированных)
) return TCOL_DEF -- Результат работы
is
RRES TCOL_DEF; -- Буфер для результата
@ -762,6 +774,7 @@ text="Формат data_grid и gant как в chart"
RRES.SPARENT := SPARENT;
RRES.BEXPANDABLE := COALESCE(BEXPANDABLE, false);
RRES.BEXPANDED := COALESCE(BEXPANDED, true);
RRES.NWIDTH := NWIDTH;
/* Возвращаем результат */
return RRES;
end TCOL_DEF_MAKE;
@ -783,6 +796,7 @@ text="Формат data_grid и gant как в chart"
SPARENT in varchar2 := null, -- Наименование родительской колонки
BEXPANDABLE in boolean := false, -- Разрешить сокрытие/отображение дочерних колонок
BEXPANDED in boolean := true, -- Отобразить/скрыть дочерние колонки
NWIDTH in number := null, -- Ширина колонки (обязательно для фиксированных)
BCLEAR in boolean := false -- Флаг очистки коллекции (false - не очищать, true - очистить коллекцию перед добавлением)
)
is
@ -805,7 +819,8 @@ text="Формат data_grid и gant как в chart"
SHINT => SHINT,
SPARENT => SPARENT,
BEXPANDABLE => BEXPANDABLE,
BEXPANDED => BEXPANDED);
BEXPANDED => BEXPANDED,
NWIDTH => NWIDTH);
end TCOL_DEFS_ADD;
/* Поиск описания колонки по наименованию */
@ -853,6 +868,9 @@ text="Формат data_grid и gant как в chart"
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_PARENT, SVALUE => RCOL_DEFS(I).SPARENT);
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_EXPANDABLE, BVALUE => RCOL_DEFS(I).BEXPANDABLE);
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_EXPANDED, BVALUE => RCOL_DEFS(I).BEXPANDED);
if (RCOL_DEFS(I).NWIDTH is not null) then
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_WIDTH, NVALUE => RCOL_DEFS(I).NWIDTH);
end if;
/* Предопределённые значения */
if (RCOL_DEFS(I).RCOL_VALS is not null) and (RCOL_DEFS(I).RCOL_VALS.COUNT > 0) then
for V in RCOL_DEFS(I).RCOL_VALS.FIRST .. RCOL_DEFS(I).RCOL_VALS.LAST
@ -1148,11 +1166,16 @@ text="Формат data_grid и gant как в chart"
/* Формирование таблицы данных */
function TDATA_GRID_MAKE
return TDATA_GRID -- Результат работы
(
BFIXED_HEADER in boolean := false, -- Зафиксировать заголовок
NFIXED_COLUMNS in number := 0 -- Количество фиксированных колонок
) return TDATA_GRID -- Результат работы
is
RRES TDATA_GRID; -- Буфер для результата
begin
/* Формируем объект */
RRES.BFIXED_HEADER := COALESCE(BFIXED_HEADER, false);
RRES.NFIXED_COLUMNS := COALESCE(NFIXED_COLUMNS, 0);
RRES.RCOL_DEFS := TCOL_DEFS();
RRES.RGROUPS := TGROUPS();
RRES.RROWS := TROWS();
@ -1188,6 +1211,7 @@ text="Формат data_grid и gant как в chart"
SPARENT in varchar2 := null, -- Наименование родительской колонки
BEXPANDABLE in boolean := false, -- Разрешить сокрытие/отображение дочерних колонок
BEXPANDED in boolean := true, -- Отобразить/скрыть дочерние колонки
NWIDTH in number := null, -- Ширина колонки (обязательно для фиксированных)
BCLEAR in boolean := false -- Флаг очистки коллекции описаний колонок таблицы данных (false - не очищать, true - очистить коллекцию перед добавлением)
)
is
@ -1207,6 +1231,7 @@ text="Формат data_grid и gant как в chart"
SPARENT => SPARENT,
BEXPANDABLE => BEXPANDABLE,
BEXPANDED => BEXPANDED,
NWIDTH => NWIDTH,
BCLEAR => BCLEAR);
end TDATA_GRID_ADD_COL_DEF;
@ -1249,6 +1274,18 @@ text="Формат data_grid и gant как в chart"
RDATA_GRID.RROWS(RDATA_GRID.RROWS.LAST) := RROW;
end TDATA_GRID_ADD_ROW;
/* Сериализация описания таблицы данных */
procedure TDATA_GRID_DEF_TO_XML
(
RDATA_GRID in TDATA_GRID -- Описание таблицы данных
)
is
begin
/*атические атрибуты заголовка */
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_FIXED_HEADER, BVALUE => RDATA_GRID.BFIXED_HEADER);
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_FIXED_COLUMNS, NVALUE => RDATA_GRID.NFIXED_COLUMNS);
end TDATA_GRID_DEF_TO_XML;
/* Сериализация таблицы данных */
function TDATA_GRID_TO_XML
(
@ -1262,6 +1299,12 @@ text="Формат data_grid и gant как в chart"
PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_);
/* Открываем корень */
PKG_XFAST.DOWN_NODE(SNAME => SRESP_TAG_XDATA);
/* Открываем таблицу данных */
PKG_XFAST.DOWN_NODE(SNAME => SRESP_TAG_XDATA_GRID);
/* Формируем описание таблицы данных */
TDATA_GRID_DEF_TO_XML(RDATA_GRID => RDATA_GRID);
/* Закрываем таблицу данных */
PKG_XFAST.UP();
/* Если необходимо включить описание колонок */
if (NINCLUDE_DEF = 1) then
TCOL_DEFS_TO_XML(RCOL_DEFS => RDATA_GRID.RCOL_DEFS);