БД: 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, -- Текст всплывающей подсказки SHINT PKG_STD.TSTRING, -- Текст всплывающей подсказки
SPARENT PKG_STD.TSTRING, -- Наименование родительской колонки SPARENT PKG_STD.TSTRING, -- Наименование родительской колонки
BEXPANDABLE boolean, -- Разрешить сокрытие/отображение дочерних колонок BEXPANDABLE boolean, -- Разрешить сокрытие/отображение дочерних колонок
BEXPANDED boolean -- Отобразить/скрыть дочерние колонки BEXPANDED boolean, -- Отобразить/скрыть дочерние колонки
NWIDTH PKG_STD.TNUMBER -- Ширина колонки (обязательно для фиксированных)
); );
/* Типы данных - коллекция описателей колонок таблицы данных */ /* Типы данных - коллекция описателей колонок таблицы данных */
@ -95,9 +96,11 @@ create or replace package PKG_P8PANELS_VISUAL as
/* Типы данных - таблица данных */ /* Типы данных - таблица данных */
type TDATA_GRID is record type TDATA_GRID is record
( (
RCOL_DEFS TCOL_DEFS, -- Описание колонок BFIXED_HEADER boolean, -- Зафиксировать заголовок
RGROUPS TGROUPS, -- Описание групп NFIXED_COLUMNS PKG_STD.TNUMBER, -- Количество фиксированных колонок
RROWS TROWS -- Данные строк RCOL_DEFS TCOL_DEFS, -- Описание колонок
RGROUPS TGROUPS, -- Описание групп
RROWS TROWS -- Данные строк
); );
/* Типы данных - фильтр */ /* Типы данных - фильтр */
@ -319,7 +322,10 @@ create or replace package PKG_P8PANELS_VISUAL as
/* Формирование таблицы данных */ /* Формирование таблицы данных */
function TDATA_GRID_MAKE 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 function TDATA_GRID_FIND_COL_DEF
@ -345,6 +351,7 @@ create or replace package PKG_P8PANELS_VISUAL as
SPARENT in varchar2 := null, -- Наименование родительской колонки SPARENT in varchar2 := null, -- Наименование родительской колонки
BEXPANDABLE in boolean := false, -- Разрешить сокрытие/отображение дочерних колонок BEXPANDABLE in boolean := false, -- Разрешить сокрытие/отображение дочерних колонок
BEXPANDED in boolean := true, -- Отобразить/скрыть дочерние колонки BEXPANDED in boolean := true, -- Отобразить/скрыть дочерние колонки
NWIDTH in number := null, -- Ширина колонки (обязательно для фиксированных)
BCLEAR in boolean := false -- Флаг очистки коллекции описаний колонок таблицы данных (false - не очищать, true - очистить коллекцию перед добавлением) BCLEAR in boolean := false -- Флаг очистки коллекции описаний колонок таблицы данных (false - не очищать, true - очистить коллекцию перед добавлением)
); );
@ -595,27 +602,31 @@ text="Формат data_grid и gant как в chart"
SRESP_TAG_XGANTT_DEF constant PKG_STD.TSTRING := 'XGANTT_DEF'; -- Тэг для описания заголовка диаграммы Ганта SRESP_TAG_XGANTT_DEF constant PKG_STD.TSTRING := 'XGANTT_DEF'; -- Тэг для описания заголовка диаграммы Ганта
SRESP_TAG_XGANTT_TASKS constant PKG_STD.TSTRING := 'XGANTT_TASKS'; -- Тэг для описания коллекции задач диаграммы Ганта SRESP_TAG_XGANTT_TASKS constant PKG_STD.TSTRING := 'XGANTT_TASKS'; -- Тэг для описания коллекции задач диаграммы Ганта
SRESP_TAG_XCHART constant PKG_STD.TSTRING := 'XCHART'; -- Тэг для описания графика 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'; -- Атрибут для наименования SRESP_ATTR_NAME constant PKG_STD.TSTRING := 'name'; -- Атрибут для наименования
SRESP_ATTR_CAPTION constant PKG_STD.TSTRING := 'caption'; -- Атрибут для подписи SRESP_ATTR_CAPTION constant PKG_STD.TSTRING := 'caption'; -- Атрибут для подписи
SRESP_ATTR_DATA_TYPE constant PKG_STD.TSTRING := 'dataType'; -- Атрибут для типа данных SRESP_ATTR_DATA_TYPE constant PKG_STD.TSTRING := 'dataType'; -- Атрибут для типа данных
SRESP_ATTR_VISIBLE constant PKG_STD.TSTRING := 'visible'; -- Атрибут для флага видимости SRESP_ATTR_VISIBLE constant PKG_STD.TSTRING := 'visible'; -- Атрибут для флага видимости
SRESP_ATTR_TITLE constant PKG_STD.TSTRING := 'title'; -- Атрибут для заголовка SRESP_ATTR_TITLE constant PKG_STD.TSTRING := 'title'; -- Атрибут для заголовка
SRESP_ATTR_ZOOM constant PKG_STD.TSTRING := 'zoom'; -- Атрибут для масштаба SRESP_ATTR_ZOOM constant PKG_STD.TSTRING := 'zoom'; -- Атрибут для масштаба
SRESP_ATTR_ID constant PKG_STD.TSTRING := 'id'; -- Атрибут для идентификатора SRESP_ATTR_ID constant PKG_STD.TSTRING := 'id'; -- Атрибут для идентификатора
SRESP_ATTR_START constant PKG_STD.TSTRING := 'start'; -- Атрибут для даты начала SRESP_ATTR_START constant PKG_STD.TSTRING := 'start'; -- Атрибут для даты начала
SRESP_ATTR_END constant PKG_STD.TSTRING := 'end'; -- Атрибут для даты окончания SRESP_ATTR_END constant PKG_STD.TSTRING := 'end'; -- Атрибут для даты окончания
SRESP_ATTR_RN constant PKG_STD.TSTRING := 'rn'; -- Атрибут для рег. номера SRESP_ATTR_RN constant PKG_STD.TSTRING := 'rn'; -- Атрибут для рег. номера
SRESP_ATTR_NUMB constant PKG_STD.TSTRING := 'numb'; -- Атрибут для номера SRESP_ATTR_NUMB constant PKG_STD.TSTRING := 'numb'; -- Атрибут для номера
SRESP_ATTR_FULL_NAME constant PKG_STD.TSTRING := 'fullName'; -- Атрибут для полного наименования SRESP_ATTR_FULL_NAME constant PKG_STD.TSTRING := 'fullName'; -- Атрибут для полного наименования
SRESP_ATTR_DESC constant PKG_STD.TSTRING := 'desc'; -- Атрибут для описания SRESP_ATTR_DESC constant PKG_STD.TSTRING := 'desc'; -- Атрибут для описания
SRESP_ATTR_TYPE constant PKG_STD.TSTRING := 'type'; -- Атрибут для типа SRESP_ATTR_TYPE constant PKG_STD.TSTRING := 'type'; -- Атрибут для типа
SRESP_ATTR_HINT constant PKG_STD.TSTRING := 'hint'; -- Атрибут для подсказки SRESP_ATTR_HINT constant PKG_STD.TSTRING := 'hint'; -- Атрибут для подсказки
SRESP_ATTR_GROUP_NAME constant PKG_STD.TSTRING := 'groupName'; -- Атрибут для наименования группы SRESP_ATTR_GROUP_NAME constant PKG_STD.TSTRING := 'groupName'; -- Атрибут для наименования группы
SRESP_ATTR_PARENT constant PKG_STD.TSTRING := 'parent'; -- Атрибут для ссылки на родителя SRESP_ATTR_PARENT constant PKG_STD.TSTRING := 'parent'; -- Атрибут для ссылки на родителя
SRESP_ATTR_EXPANDABLE constant PKG_STD.TSTRING := 'expandable'; -- Атрибут для доступности действия сокрытия/отображения SRESP_ATTR_EXPANDABLE constant PKG_STD.TSTRING := 'expandable'; -- Атрибут для доступности действия сокрытия/отображения
SRESP_ATTR_EXPANDED constant PKG_STD.TSTRING := 'expanded'; -- Атрибут для флага сокрытия/отображения 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'; -- Атрибут для флага сортировки SRESP_ATTR_DT_ORDER constant PKG_STD.TSTRING := 'order'; -- Атрибут для флага сортировки
@ -743,7 +754,8 @@ text="Формат data_grid и gant как в chart"
SHINT in varchar2 := null, -- Текст всплывающей подсказки SHINT in varchar2 := null, -- Текст всплывающей подсказки
SPARENT in varchar2 := null, -- Наименование родительской колонки SPARENT in varchar2 := null, -- Наименование родительской колонки
BEXPANDABLE in boolean := false, -- Разрешить сокрытие/отображение дочерних колонок BEXPANDABLE in boolean := false, -- Разрешить сокрытие/отображение дочерних колонок
BEXPANDED in boolean := true -- Отобразить/скрыть дочерние колонки BEXPANDED in boolean := true, -- Отобразить/скрыть дочерние колонки
NWIDTH in number := null -- Ширина колонки (обязательно для фиксированных)
) return TCOL_DEF -- Результат работы ) return TCOL_DEF -- Результат работы
is is
RRES TCOL_DEF; -- Буфер для результата RRES TCOL_DEF; -- Буфер для результата
@ -762,6 +774,7 @@ text="Формат data_grid и gant как в chart"
RRES.SPARENT := SPARENT; RRES.SPARENT := SPARENT;
RRES.BEXPANDABLE := COALESCE(BEXPANDABLE, false); RRES.BEXPANDABLE := COALESCE(BEXPANDABLE, false);
RRES.BEXPANDED := COALESCE(BEXPANDED, true); RRES.BEXPANDED := COALESCE(BEXPANDED, true);
RRES.NWIDTH := NWIDTH;
/* Возвращаем результат */ /* Возвращаем результат */
return RRES; return RRES;
end TCOL_DEF_MAKE; end TCOL_DEF_MAKE;
@ -783,6 +796,7 @@ text="Формат data_grid и gant как в chart"
SPARENT in varchar2 := null, -- Наименование родительской колонки SPARENT in varchar2 := null, -- Наименование родительской колонки
BEXPANDABLE in boolean := false, -- Разрешить сокрытие/отображение дочерних колонок BEXPANDABLE in boolean := false, -- Разрешить сокрытие/отображение дочерних колонок
BEXPANDED in boolean := true, -- Отобразить/скрыть дочерние колонки BEXPANDED in boolean := true, -- Отобразить/скрыть дочерние колонки
NWIDTH in number := null, -- Ширина колонки (обязательно для фиксированных)
BCLEAR in boolean := false -- Флаг очистки коллекции (false - не очищать, true - очистить коллекцию перед добавлением) BCLEAR in boolean := false -- Флаг очистки коллекции (false - не очищать, true - очистить коллекцию перед добавлением)
) )
is is
@ -805,7 +819,8 @@ text="Формат data_grid и gant как в chart"
SHINT => SHINT, SHINT => SHINT,
SPARENT => SPARENT, SPARENT => SPARENT,
BEXPANDABLE => BEXPANDABLE, BEXPANDABLE => BEXPANDABLE,
BEXPANDED => BEXPANDED); BEXPANDED => BEXPANDED,
NWIDTH => NWIDTH);
end TCOL_DEFS_ADD; 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_PARENT, SVALUE => RCOL_DEFS(I).SPARENT);
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_EXPANDABLE, BVALUE => RCOL_DEFS(I).BEXPANDABLE); PKG_XFAST.ATTR(SNAME => SRESP_ATTR_EXPANDABLE, BVALUE => RCOL_DEFS(I).BEXPANDABLE);
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_EXPANDED, BVALUE => RCOL_DEFS(I).BEXPANDED); 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 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 for V in RCOL_DEFS(I).RCOL_VALS.FIRST .. RCOL_DEFS(I).RCOL_VALS.LAST
@ -1148,14 +1166,19 @@ text="Формат data_grid и gant как в chart"
/* Формирование таблицы данных */ /* Формирование таблицы данных */
function TDATA_GRID_MAKE function TDATA_GRID_MAKE
return TDATA_GRID -- Результат работы (
BFIXED_HEADER in boolean := false, -- Зафиксировать заголовок
NFIXED_COLUMNS in number := 0 -- Количество фиксированных колонок
) return TDATA_GRID -- Результат работы
is is
RRES TDATA_GRID; -- Буфер для результата RRES TDATA_GRID; -- Буфер для результата
begin begin
/* Формируем объект */ /* Формируем объект */
RRES.RCOL_DEFS := TCOL_DEFS(); RRES.BFIXED_HEADER := COALESCE(BFIXED_HEADER, false);
RRES.RGROUPS := TGROUPS(); RRES.NFIXED_COLUMNS := COALESCE(NFIXED_COLUMNS, 0);
RRES.RROWS := TROWS(); RRES.RCOL_DEFS := TCOL_DEFS();
RRES.RGROUPS := TGROUPS();
RRES.RROWS := TROWS();
/* Возвращаем результат */ /* Возвращаем результат */
return RRES; return RRES;
end TDATA_GRID_MAKE; end TDATA_GRID_MAKE;
@ -1188,6 +1211,7 @@ text="Формат data_grid и gant как в chart"
SPARENT in varchar2 := null, -- Наименование родительской колонки SPARENT in varchar2 := null, -- Наименование родительской колонки
BEXPANDABLE in boolean := false, -- Разрешить сокрытие/отображение дочерних колонок BEXPANDABLE in boolean := false, -- Разрешить сокрытие/отображение дочерних колонок
BEXPANDED in boolean := true, -- Отобразить/скрыть дочерние колонки BEXPANDED in boolean := true, -- Отобразить/скрыть дочерние колонки
NWIDTH in number := null, -- Ширина колонки (обязательно для фиксированных)
BCLEAR in boolean := false -- Флаг очистки коллекции описаний колонок таблицы данных (false - не очищать, true - очистить коллекцию перед добавлением) BCLEAR in boolean := false -- Флаг очистки коллекции описаний колонок таблицы данных (false - не очищать, true - очистить коллекцию перед добавлением)
) )
is is
@ -1207,6 +1231,7 @@ text="Формат data_grid и gant как в chart"
SPARENT => SPARENT, SPARENT => SPARENT,
BEXPANDABLE => BEXPANDABLE, BEXPANDABLE => BEXPANDABLE,
BEXPANDED => BEXPANDED, BEXPANDED => BEXPANDED,
NWIDTH => NWIDTH,
BCLEAR => BCLEAR); BCLEAR => BCLEAR);
end TDATA_GRID_ADD_COL_DEF; end TDATA_GRID_ADD_COL_DEF;
@ -1249,6 +1274,18 @@ text="Формат data_grid и gant как в chart"
RDATA_GRID.RROWS(RDATA_GRID.RROWS.LAST) := RROW; RDATA_GRID.RROWS(RDATA_GRID.RROWS.LAST) := RROW;
end TDATA_GRID_ADD_ROW; 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 function TDATA_GRID_TO_XML
( (
@ -1262,6 +1299,12 @@ text="Формат data_grid и gant как в chart"
PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_); PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_);
/* Открываем корень */ /* Открываем корень */
PKG_XFAST.DOWN_NODE(SNAME => SRESP_TAG_XDATA); 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 if (NINCLUDE_DEF = 1) then
TCOL_DEFS_TO_XML(RCOL_DEFS => RDATA_GRID.RCOL_DEFS); TCOL_DEFS_TO_XML(RCOL_DEFS => RDATA_GRID.RCOL_DEFS);