forked from CITKParus/P8-Panels
Merge pull request 'main' (#4) from CITKParus/P8-Panels:main into main
Reviewed-on: Dollerok/P8-Panels#4
This commit is contained in:
commit
2d1a07d071
18
README.md
18
README.md
@ -68,13 +68,13 @@
|
||||
|
||||
> **Внимание:**
|
||||
>
|
||||
> - **Проверьте версию "ПАРУС 8 Онлайн"**
|
||||
>
|
||||
> Перед копированием расширения из репозитория убедитесь, что в [релизах расширения](https://git.citpb.ru/CITKParus/P8-Panels-ParusOnlineExt/releases) нет специальной сборки для Вашей версии "ПАРУС 8 Онлайн". **Если таковая есть - необходимо устанавливать именно её, а не актуальную сборку из основной ветки репозитория!**
|
||||
>
|
||||
> - **Для релиза "ПАРУС 8 Онлайн" от 30.08.2024**
|
||||
>
|
||||
> Требуется [патч до промежуточной сборки 02.09.2024 или старше](https://cloud.mail.ru/public/nEZb/y4oQa1N6D). Установка расширения на данный релиз не рекомендуется, по возможности - пропустите его.
|
||||
>
|
||||
> - **Для релизов "ПАРУС 8 Онлайн" до 30.08.2024**
|
||||
>
|
||||
> Содержимое папки "bin" следует брать из специальной сборки расширения - [Для сборок Парус-Онлайн до 30.08.2024](https://git.citpb.ru/CITKParus/P8-Panels-ParusOnlineExt/releases/tag/FOR_PARUS_ONLINE_BEFORE_20240830)
|
||||
> Требуется [патч для "ПАРУС 8 Онлайн" до промежуточной сборки 02.09.2024](https://cloud.mail.ru/public/nEZb/y4oQa1N6D). Установка расширения на данный релиз не рекомендуется, по возможности - пропустите его.
|
||||
|
||||
3. Подключите библиотеку расширения к серверу приложений "ПАРУС 8 Онлайн". Для этого добавьте ссылку на библиотеку в файл "Config\extensions.config" сервера приложений:
|
||||
|
||||
@ -2377,8 +2377,8 @@ const Svg = ({ title }) => {
|
||||
- Отображение произвольного пользовательского диалога в качестве карточки задачи/редактора задачи
|
||||
- Масштабирование визуального представления
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
**Подключение**
|
||||
|
||||
@ -2719,7 +2719,7 @@ const LINE_HEIGHT = 30;
|
||||
const STYLES = {
|
||||
CONTAINER: { textAlign: "center", paddingTop: CONTAINER_PADDING_TOP },
|
||||
TITLE: { paddingBottom: "15px", height: TITLE_HEIGHT },
|
||||
GANTT_CONTAINER: {
|
||||
CYCLOGRAM_CONTAINER: {
|
||||
height: `calc(100vh - ${APP_BAR_HEIGHT} - ${TITLE_HEIGHT} - ${CONTAINER_PADDING_TOP})`,
|
||||
width: "100vw",
|
||||
paddingTop: "5px"
|
||||
@ -2833,7 +2833,7 @@ const Cyclogram = ({ title }) => {
|
||||
<P8PCyclogram
|
||||
{...P8P_CYCLOGRAM_CONFIG_PROPS}
|
||||
{...state}
|
||||
containerStyle={STYLES.GANTT_CONTAINER}
|
||||
containerStyle={STYLES.CYCLOGRAM_CONTAINER}
|
||||
lineHeight={LINE_HEIGHT}
|
||||
taskDialogRenderer={prms => (
|
||||
<CustomTaskDialog task={prms.task} ident={state.ident} handleReload={handleReload} close={prms.close} />
|
||||
|
@ -536,7 +536,7 @@ const P8PCyclogramTaskEditor = ({
|
||||
cancelBtnCaption
|
||||
}) => {
|
||||
//Собственное состояние
|
||||
const [state, setState] = useState({
|
||||
const [state] = useState({
|
||||
start: task.start,
|
||||
end: task.end
|
||||
});
|
||||
|
@ -33,7 +33,7 @@ import { P8PAppInlineError } from "./p8p_app_message"; //Встраиваемо
|
||||
//---------
|
||||
|
||||
//Уровни масштаба
|
||||
const P8P_GANTT_ZOOM = [0, 1, 2, 3, 4];
|
||||
const P8P_GANTT_ZOOM = [0, 1, 2, 3, 4, 5];
|
||||
|
||||
//Уровни масштаба (строковые наименования в терминах библиотеки)
|
||||
const P8P_GANTT_ZOOM_VIEW_MODES = {
|
||||
@ -41,7 +41,8 @@ const P8P_GANTT_ZOOM_VIEW_MODES = {
|
||||
1: "Half Day",
|
||||
2: "Day",
|
||||
3: "Week",
|
||||
4: "Month"
|
||||
4: "Month",
|
||||
5: "Year"
|
||||
};
|
||||
|
||||
//Структура задачи
|
||||
|
@ -62,8 +62,15 @@ const STYLES = {
|
||||
GRID_PANEL_CARD_CONTENT_TITLE_ICON: { paddingTop: "4px" },
|
||||
GRID_PANEL_CARD_ACTIONS: { marginTop: "auto", display: "flex", justifyContent: "flex-end", alignItems: "flex-start" },
|
||||
DESKTOP_GROUP_HEADER: { fontWeight: "bold", fontFamily: "tahoma, arial, verdana, sans-serif!important", fontSize: "13px!important" },
|
||||
DESKTOP_ITEM_BUTTON: { fontSize: "12px", textTransform: "none", "&:hover": { backgroundColor: "#c3e1ff" }, maxWidth: "150px" },
|
||||
DESKTOP_ITEM_STACK: { justifyContent: "center", alignItems: "center", fontSize: "12px" },
|
||||
DESKTOP_ITEM_BUTTON: {
|
||||
fontSize: "12px",
|
||||
textTransform: "none",
|
||||
"&:hover": { backgroundColor: "#c3e1ff" },
|
||||
width: "150px",
|
||||
height: "90px",
|
||||
flexDirection: "column",
|
||||
justifyContent: "flex-start"
|
||||
},
|
||||
DESKTOP_ITEM_ICON: { width: "48px", height: "48px", fontSize: "48px" },
|
||||
DESKTOP_ITEM_CATION: {
|
||||
display: "-webkit-box",
|
||||
@ -165,12 +172,10 @@ const getPanelsLinks = ({ variant, panels, selectedPanel, group, defaultGroupTyt
|
||||
sx={STYLES.DESKTOP_ITEM_BUTTON}
|
||||
title={panel.caption}
|
||||
>
|
||||
<Stack sx={STYLES.DESKTOP_ITEM_STACK}>
|
||||
<Icon sx={STYLES.DESKTOP_ITEM_ICON}>{panel.icon}</Icon>
|
||||
<Typography sx={STYLES.DESKTOP_ITEM_CATION} variant="body1">
|
||||
{panel.caption}
|
||||
</Typography>
|
||||
</Stack>
|
||||
<Icon sx={STYLES.DESKTOP_ITEM_ICON}>{panel.icon}</Icon>
|
||||
<Typography sx={STYLES.DESKTOP_ITEM_CATION} variant="body1">
|
||||
{panel.caption}
|
||||
</Typography>
|
||||
</Button>
|
||||
)
|
||||
);
|
||||
@ -230,7 +235,12 @@ const P8PPanelsMenuDesktop = ({ group, onItemNavigate, panels = [], defaultGroup
|
||||
const panelsLinks = getPanelsLinks({ variant: P8P_PANELS_MENU_VARIANT.DESKTOP, panels, group, defaultGroupTytle, onItemNavigate });
|
||||
|
||||
//Генерация содержимого
|
||||
return <Box p={2}>{panelsLinks}</Box>;
|
||||
return (
|
||||
<Box p={2}>
|
||||
{panelsLinks[0]}
|
||||
<Stack direction="row">{panelsLinks.map((l, i) => (i > 0 ? l : null))}</Stack>
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
//Контроль свойств - Меню панелей - рабочий стол
|
||||
|
@ -15,6 +15,7 @@ import { P8PAppWorkspace } from "./components/p8p_app_workspace"; //Рабоче
|
||||
import { P8PTable, P8P_TABLE_DATA_TYPE, P8P_TABLE_SIZE, P8P_TABLE_FILTER_SHAPE } from "./components/p8p_table"; //Таблица данных
|
||||
import { P8PDataGrid, P8P_DATA_GRID_DATA_TYPE, P8P_DATA_GRID_SIZE, P8P_DATA_GRID_FILTER_SHAPE } from "./components/p8p_data_grid"; //Таблица данных
|
||||
import { P8PGantt, P8P_GANTT_TASK_SHAPE, P8P_GANTT_TASK_ATTRIBUTE_SHAPE, P8P_GANTT_TASK_COLOR_SHAPE } from "./components/p8p_gantt"; //Диаграмма Ганта
|
||||
import { P8PCyclogram } from "./components/p8p_cyclogram"; //Циклограмма
|
||||
|
||||
//---------
|
||||
//Константы
|
||||
@ -98,6 +99,7 @@ const addConfigChildProps = children =>
|
||||
if (child.type.name === "P8PTable") configProps = P8P_TABLE_CONFIG_PROPS;
|
||||
if (child.type.name === "P8PDataGrid") configProps = P8P_DATA_GRID_CONFIG_PROPS;
|
||||
if (child.type.name === "P8PGantt") configProps = P8P_GANTT_CONFIG_PROPS;
|
||||
if (child.type.name === "P8PCyclogram") configProps = P8P_CYCLOGRAM_CONFIG_PROPS;
|
||||
return React.createElement(child.type, { ...configProps, ...restProps }, addConfigChildProps(children));
|
||||
});
|
||||
|
||||
@ -120,6 +122,9 @@ const P8PDataGridConfigWrapped = (props = {}) => <P8PDataGrid {...P8P_DATA_GRID_
|
||||
//Обёртка для компонента "Диаграмма Ганта" (P8PGantt)
|
||||
const P8PGanttConfigWrapped = (props = {}) => <P8PGantt {...P8P_GANTT_CONFIG_PROPS} {...props} />;
|
||||
|
||||
//Обёртка для компонента "Циклограмма" (P8PCyclogram)
|
||||
const P8PCyclogramConfigWrapped = (props = {}) => <P8PCyclogram {...P8P_GANTT_CONFIG_PROPS} {...props} />;
|
||||
|
||||
//Универсальный элемент-обёртка в параметры конфигурации
|
||||
const ConfigWrapper = ({ children }) => addConfigChildProps(children);
|
||||
|
||||
@ -149,5 +154,6 @@ export {
|
||||
P8PTableConfigWrapped,
|
||||
P8PDataGridConfigWrapped,
|
||||
P8PGanttConfigWrapped,
|
||||
P8PCyclogramConfigWrapped,
|
||||
ConfigWrapper
|
||||
};
|
||||
|
@ -140,6 +140,9 @@ const xml2JSON = ({ xmlDoc, isArray, transformTagName, tagValueProcessor, attrib
|
||||
//Форматирование даты в формат РФ
|
||||
const formatDateRF = value => (value ? dayjs(value).format("DD.MM.YYYY") : null);
|
||||
|
||||
//Форматирование даты и времени в формат РФ
|
||||
const formatDateTimeRF = value => (value ? dayjs(value).format("DD.MM.YYYY HH:mm:ss") : null);
|
||||
|
||||
//Форматирование даты в формат JSON (только дата, без времени)
|
||||
const formatDateJSONDateOnly = value => (value ? dayjs(value).format("YYYY-MM-DD") : null);
|
||||
|
||||
@ -163,6 +166,7 @@ export {
|
||||
object2Base64XML,
|
||||
xml2JSON,
|
||||
formatDateRF,
|
||||
formatDateTimeRF,
|
||||
formatDateJSONDateOnly,
|
||||
formatNumberRFCurrency,
|
||||
genGUID
|
||||
|
@ -47,7 +47,7 @@ const LINE_HEIGHT = 30;
|
||||
const STYLES = {
|
||||
CONTAINER: { textAlign: "center", paddingTop: CONTAINER_PADDING_TOP },
|
||||
TITLE: { paddingBottom: "15px", height: TITLE_HEIGHT },
|
||||
GANTT_CONTAINER: {
|
||||
CYCLOGRAM_CONTAINER: {
|
||||
height: `calc(100vh - ${APP_BAR_HEIGHT} - ${TITLE_HEIGHT} - ${CONTAINER_PADDING_TOP})`,
|
||||
width: "100vw",
|
||||
paddingTop: "5px"
|
||||
@ -274,7 +274,7 @@ const Cyclogram = ({ title }) => {
|
||||
<P8PCyclogram
|
||||
{...P8P_CYCLOGRAM_CONFIG_PROPS}
|
||||
{...state}
|
||||
containerStyle={STYLES.GANTT_CONTAINER}
|
||||
containerStyle={STYLES.CYCLOGRAM_CONTAINER}
|
||||
lineHeight={LINE_HEIGHT}
|
||||
taskDialogRenderer={prms => (
|
||||
<CustomTaskDialog task={prms.task} ident={state.ident} handleReload={handleReload} close={prms.close} />
|
||||
|
@ -4,15 +4,15 @@
|
||||
*/
|
||||
create table P8PNL_SMPL_CYCLOGRAM
|
||||
(
|
||||
RN number( 17 ) not null,
|
||||
IDENT number( 17 ) not null,
|
||||
TYPE number( 1 ) not null,
|
||||
NAME varchar2( 200 ) not null,
|
||||
POS_START number( 17 ) default null,
|
||||
POS_END number( 17 ) default null,
|
||||
DATE_FROM date default null,
|
||||
DATE_TO date default null,
|
||||
TASK_GROUP number( 17 ) default null,
|
||||
RN number(17) not null, -- Рег. номер записи
|
||||
IDENT number(17) not null, -- Идентификатор процесса
|
||||
TYPE number(1) not null, -- Тип (0 - колонка, 1 - группа, 2 - задача)
|
||||
NAME varchar2(200) not null, -- Наименование
|
||||
POS_START number(17) default null, -- Начальная позиция на циклограмме
|
||||
POS_END number(17) default null, -- Конечная позиция на циклограмме
|
||||
DATE_FROM date default null, -- Дата начала
|
||||
DATE_TO date default null, -- Дата окончания
|
||||
TASK_GROUP number(17) default null, -- Группа задач
|
||||
constraint C_P8PNL_SMPL_CYCLOGRAM_RN_PK primary key (RN),
|
||||
constraint C_P8PNL_SMPL_CYCLOGRAM_TP_VAL check (TYPE in (0, 1, 2))
|
||||
);
|
||||
|
@ -2757,6 +2757,11 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
||||
if (NTASK_CLASS = NCLASS_PART_DEFICIT) then
|
||||
/* Определяем пропорции прогресса */
|
||||
NTASK_PROGRESS := ROUND(C.NREL_FACT / C.NMAIN_QUANT * 100);
|
||||
/* Если значение прогресса задачи больше 100 */
|
||||
if (NTASK_PROGRESS > 100) then
|
||||
/* Устанавливаем максимальное допустимое значение - 100 */
|
||||
NTASK_PROGRESS := 100;
|
||||
end if;
|
||||
else
|
||||
/* Не требуется */
|
||||
NTASK_PROGRESS := null;
|
||||
|
@ -85,7 +85,7 @@ end PKG_P8PANELS_SAMPLES;
|
||||
/
|
||||
create or replace package body PKG_P8PANELS_SAMPLES as
|
||||
|
||||
/* Константы для циклограммы */
|
||||
/* Константы - циклограмма */
|
||||
NCG_MULTIPLIER constant PKG_STD.TNUMBER := 5; -- Множитель для ширины отображения
|
||||
|
||||
/* Получение списка контрагентов */
|
||||
@ -756,7 +756,7 @@ create or replace package body PKG_P8PANELS_SAMPLES as
|
||||
and T.IDENT = NIDENT;
|
||||
end CYCLOGRAM_BASE_UPDATE;
|
||||
|
||||
/* Инициализация буфера данных для диаграммы Ганта */
|
||||
/* Инициализация буфера данных для циклограммы */
|
||||
procedure CYCLOGRAM_INIT
|
||||
(
|
||||
NIDENT in out number -- Идентификатор буфера сформированных данных (null - сгенерировать новый, !null - удалить старые данные и пересоздать с указанным идентификатором)
|
||||
@ -1161,18 +1161,18 @@ create or replace package body PKG_P8PANELS_SAMPLES as
|
||||
/* Изменение задачи циклограммы */
|
||||
procedure CYCLOGRAM_TASK_MODIFY
|
||||
(
|
||||
NIDENT in number, -- Идентификатор буфера
|
||||
NRN in number, -- Рег. номер записи
|
||||
SDATE_FROM in varchar2, -- Дата начала (в строковом представлении)
|
||||
SDATE_TO in varchar2 -- Дата окончания (в строковом представлении)
|
||||
NIDENT in number, -- Идентификатор буфера
|
||||
NRN in number, -- Рег. номер записи
|
||||
SDATE_FROM in varchar2, -- Дата начала (в строковом представлении)
|
||||
SDATE_TO in varchar2 -- Дата окончания (в строковом представлении)
|
||||
)
|
||||
is
|
||||
DDATE_FROM PKG_STD.TLDATE; -- Дата начала
|
||||
DDATE_TO PKG_STD.TLDATE; -- Дата окончания
|
||||
NYEAR PKG_STD.TNUMBER; -- Текущий год
|
||||
DCYCLOGRAM_START PKG_STD.TLDATE; -- Дата начала циклограммы
|
||||
NSTART PKG_STD.TNUMBER; -- Позиция начала элемента
|
||||
NEND PKG_STD.TNUMBER; -- Позиция окончания элемента
|
||||
DDATE_FROM PKG_STD.TLDATE; -- Дата начала
|
||||
DDATE_TO PKG_STD.TLDATE; -- Дата окончания
|
||||
NYEAR PKG_STD.TNUMBER; -- Текущий год
|
||||
DCYCLOGRAM_START PKG_STD.TLDATE; -- Дата начала циклограммы
|
||||
NSTART PKG_STD.TNUMBER; -- Позиция начала элемента
|
||||
NEND PKG_STD.TNUMBER; -- Позиция окончания элемента
|
||||
begin
|
||||
/* Фиксируем текущий год */
|
||||
NYEAR := EXTRACT(year from sysdate);
|
||||
|
@ -16,17 +16,31 @@ create or replace package PKG_P8PANELS_VISUAL as
|
||||
NGANTT_ZOOM_WEEK constant PKG_STD.TNUMBER := 3; -- Неделя
|
||||
NGANTT_ZOOM_MONTH constant PKG_STD.TNUMBER := 4; -- Месяц
|
||||
|
||||
/* Константы - масштаб циклограммы */
|
||||
NCYCLOGRAM_ZOOM_MIN constant PKG_STD.TLNUMBER := 0.2; -- Минимальный (0.2 от исходного)
|
||||
NCYCLOGRAM_ZOOM_TINY constant PKG_STD.TLNUMBER := 0.4; -- Мелкий (0.4 от исходного)
|
||||
NCYCLOGRAM_ZOOM_SMALL constant PKG_STD.TLNUMBER := 0.7; -- Уменьшенный (0.7 от исходного)
|
||||
NCYCLOGRAM_ZOOM_DEFAULT constant PKG_STD.TLNUMBER := 1; -- Исходный
|
||||
NCYCLOGRAM_ZOOM_LARGE constant PKG_STD.TLNUMBER := 1.5; -- Увеличенный (1.5 от исходного)
|
||||
NCYCLOGRAM_ZOOM_HUGE constant PKG_STD.TLNUMBER := 2; -- Большой (2 от исходного)
|
||||
NCYCLOGRAM_ZOOM_MAX constant PKG_STD.TLNUMBER := 2.5; -- Максимальный (2.5 от исходного)
|
||||
|
||||
/* Константы - тип графика */
|
||||
SCHART_TYPE_BAR constant PKG_STD.TSTRING := 'bar';
|
||||
SCHART_TYPE_LINE constant PKG_STD.TSTRING := 'line';
|
||||
SCHART_TYPE_PIE constant PKG_STD.TSTRING := 'pie';
|
||||
SCHART_TYPE_DOUGHNUT constant PKG_STD.TSTRING := 'doughnut';
|
||||
SCHART_TYPE_BAR constant PKG_STD.TSTRING := 'bar'; -- Столбчатая
|
||||
SCHART_TYPE_LINE constant PKG_STD.TSTRING := 'line'; -- Линейная
|
||||
SCHART_TYPE_PIE constant PKG_STD.TSTRING := 'pie'; -- Круговая
|
||||
SCHART_TYPE_DOUGHNUT constant PKG_STD.TSTRING := 'doughnut'; -- Кольцевая
|
||||
|
||||
/* Константы - расположение легенды графика */
|
||||
SCHART_LGND_POS_LEFT constant PKG_STD.TSTRING := 'left';
|
||||
SCHART_LGND_POS_RIGHT constant PKG_STD.TSTRING := 'right';
|
||||
SCHART_LGND_POS_TOP constant PKG_STD.TSTRING := 'top';
|
||||
SCHART_LGND_POS_BOTTOM constant PKG_STD.TSTRING := 'bottom';
|
||||
SCHART_LGND_POS_LEFT constant PKG_STD.TSTRING := 'left'; -- Слева
|
||||
SCHART_LGND_POS_RIGHT constant PKG_STD.TSTRING := 'right'; -- Справа
|
||||
SCHART_LGND_POS_TOP constant PKG_STD.TSTRING := 'top'; -- Наверху
|
||||
SCHART_LGND_POS_BOTTOM constant PKG_STD.TSTRING := 'bottom'; -- Внизу
|
||||
|
||||
/* Константы - циклограмма */
|
||||
NCYCLOGRAM_GROUP_DEF_WIDTH constant PKG_STD.TNUMBER := 100; -- Высота заголовка группы (по умолчанию)
|
||||
NCYCLOGRAM_GROUP_DEF_HEIGHT constant PKG_STD.TNUMBER := 42; -- Ширина заголовка группы (по умолчанию)
|
||||
NCYCLOGRAM_LINE_HEIGHT constant PKG_STD.TNUMBER := 20; -- Высота строк циклограммы
|
||||
|
||||
/* Типы данных - значение колонки таблицы данных */
|
||||
type TCOL_VAL is record
|
||||
@ -242,6 +256,83 @@ create or replace package PKG_P8PANELS_VISUAL as
|
||||
RDATASETS TCHART_DATASETS -- Наборы данных
|
||||
);
|
||||
|
||||
/* Типы данных - описание атрибута задачи для циклограммы */
|
||||
type TCYCLOGRAM_TASK_ATTR is record
|
||||
(
|
||||
SNAME PKG_STD.TSTRING, -- Наименование
|
||||
SCAPTION PKG_STD.TSTRING, -- Заголовок
|
||||
BVISIBLE boolean -- Разрешить отображение
|
||||
);
|
||||
|
||||
/* Типы данных - коллекция описаний атрибутов задачи для циклограммы */
|
||||
type TCYCLOGRAM_TASK_ATTRS is table of TCYCLOGRAM_TASK_ATTR;
|
||||
|
||||
/* Типы данных - значение атрибута задачи для циклограммы */
|
||||
type TCYCLOGRAM_TASK_ATTR_VAL is record
|
||||
(
|
||||
SNAME PKG_STD.TSTRING, -- Наименование
|
||||
SVALUE PKG_STD.TSTRING -- Значение
|
||||
);
|
||||
|
||||
/* Типы данных - коллекция значений атрибутов задачи для циклограммы */
|
||||
type TCYCLOGRAM_TASK_ATTR_VALS is table of TCYCLOGRAM_TASK_ATTR_VAL;
|
||||
|
||||
/* Типы данных - колонка циклограммы */
|
||||
type TCYCLOGRAM_COLUMN is record
|
||||
(
|
||||
SNAME PKG_STD.TSTRING, -- Наименование колонки
|
||||
NSTART PKG_STD.TNUMBER, -- Позиция начала колонки
|
||||
NEND PKG_STD.TNUMBER -- Позиция конца колонки
|
||||
);
|
||||
|
||||
/* Типы данных - коллекция колонок циклограммы */
|
||||
type TCYCLOGRAM_COLUMNS is table of TCYCLOGRAM_COLUMN;
|
||||
|
||||
/* Типы данных - строки циклограммы */
|
||||
type TCYCLOGRAM_TASK is record
|
||||
(
|
||||
NRN PKG_STD.TREF, -- Рег. номер
|
||||
SCAPTION PKG_STD.TSTRING, -- Заголовок
|
||||
SNAME PKG_STD.TSTRING, -- Наименование
|
||||
NLINE_NUMB PKG_STD.TNUMBER, -- Номер строки
|
||||
NSTART PKG_STD.TNUMBER, -- Позиция начала задачи
|
||||
NEND PKG_STD.TNUMBER, -- Позиция конца задачи
|
||||
SGROUP PKG_STD.TSTRING, -- Наименование группы
|
||||
SBG_COLOR PKG_STD.TSTRING := null, -- Цвет заливки задачи (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
|
||||
STEXT_COLOR PKG_STD.TSTRING := null, -- Цвет текста заголовка задачи (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
|
||||
SHIGHLIGHT_COLOR PKG_STD.TSTRING := null, -- Цвет при наведении (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
|
||||
RATTR_VALS TCYCLOGRAM_TASK_ATTR_VALS := null -- Значения дополнительных атрбутов (null - дополнительные атрибуты не определены)
|
||||
);
|
||||
|
||||
/* Типы данных - коллекция строк циклограммы */
|
||||
type TCYCLOGRAM_TASKS is table of TCYCLOGRAM_TASK;
|
||||
|
||||
/* Типы данных - группа строк циклограммы */
|
||||
type TCYCLOGRAM_GROUP is record
|
||||
(
|
||||
SNAME PKG_STD.TSTRING, -- Имя группы
|
||||
BHEADER_VISIBLE boolean, -- Признак отображения заголовка группы
|
||||
NHEADER_HEIGHT PKG_STD.TNUMBER, -- Высота заголовка группы
|
||||
NHEADER_WIDTH PKG_STD.TNUMBER, -- Ширина заголовка группы
|
||||
SHIGHLIGHT_COLOR PKG_STD.TSTRING := null -- Цвет при наведении (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
|
||||
);
|
||||
|
||||
/* Типы данных - коллекция групп строк циклограммы */
|
||||
type TCYCLOGRAM_GROUPS is table of TCYCLOGRAM_GROUP;
|
||||
|
||||
/* Типы данных - циклограмма */
|
||||
type TCYCLOGRAM is record
|
||||
(
|
||||
STITLE PKG_STD.TSTRING, -- Заголовок (null - не отображать)
|
||||
NLINE_HEIGHT PKG_STD.TLNUMBER, -- Высота строк
|
||||
NZOOM PKG_STD.TNUMBER := NCYCLOGRAM_ZOOM_DEFAULT, -- Текущий масштаб (см. константы NCYCLOGRAM_ZOOM_*)
|
||||
BZOOM_BAR boolean := true, -- Обображать панель масштабирования
|
||||
RCOLUMNS TCYCLOGRAM_COLUMNS, -- Коллекция колонок циклограммы
|
||||
RGROUPS TCYCLOGRAM_GROUPS, -- Коллекция групп строк циклограммы
|
||||
RTASKS TCYCLOGRAM_TASKS, -- Коллекция строк циклограммы
|
||||
RTASK_ATTRS TCYCLOGRAM_TASK_ATTRS -- Описание атрибутов карточки задачи
|
||||
);
|
||||
|
||||
/* Расчет диапаона выдаваемых записей */
|
||||
procedure UTL_ROWS_LIMITS_CALC
|
||||
(
|
||||
@ -577,6 +668,87 @@ create or replace package PKG_P8PANELS_VISUAL as
|
||||
RCHART in TCHART, -- Описание графика
|
||||
NINCLUDE_DEF in number := 1 -- Включить описание заголовка (0 - нет, 1 - да)
|
||||
) return clob; -- XML-описание
|
||||
|
||||
/* Формирование задачи циклограммы */
|
||||
function TCYCLOGRAM_TASK_MAKE
|
||||
(
|
||||
NRN in number, -- Рег. номер записи
|
||||
SCAPTION in varchar2, -- Заголовок
|
||||
SNAME in varchar2, -- Наименование
|
||||
NLINE_NUMB in number, -- Номер строки
|
||||
NSTART in number, -- Позиция начала задачи
|
||||
NEND in number, -- Позиция конца задачи
|
||||
SGROUP in varchar2 := null, -- Наименование группы
|
||||
SBG_COLOR in varchar2 := null, -- Цвет заливки задачи (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
|
||||
STEXT_COLOR in varchar2 := null, -- Цвет текста заголовка задачи (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
|
||||
SHIGHLIGHT_COLOR in varchar2 := null -- Цвет при наведении (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
|
||||
) return TCYCLOGRAM_TASK; -- Результат работы
|
||||
|
||||
/* Добавление значения атрибута к задаче циклограммы */
|
||||
procedure TCYCLOGRAM_TASK_ADD_ATTR_VAL
|
||||
(
|
||||
RCYCLOGRAM in TCYCLOGRAM, -- Описание циклограммы
|
||||
RTASK in out nocopy TCYCLOGRAM_TASK, -- Описание задачи
|
||||
SNAME in varchar2, -- Наименование
|
||||
SVALUE in varchar2, -- Значение
|
||||
BCLEAR in boolean := false -- Флаг очистки коллекции значений атрибутов (false - не очищать, true - очистить коллекцию перед добавлением)
|
||||
);
|
||||
|
||||
/* Формирование циклограммы */
|
||||
function TCYCLOGRAM_MAKE
|
||||
(
|
||||
STITLE in varchar2, -- Заголовок (null - не отображать)
|
||||
NLINE_HEIGHT in number := NCYCLOGRAM_LINE_HEIGHT, -- Высота строк
|
||||
NZOOM in number := NCYCLOGRAM_ZOOM_DEFAULT, -- Текущий масштаб (см. константы NCYCLOGRAM_ZOOM_*)
|
||||
BZOOM_BAR in boolean := true -- Обображать панель масштабирования
|
||||
) return TCYCLOGRAM; -- Результат работы
|
||||
|
||||
/* Добавление колонки в циклограмму */
|
||||
procedure TCYCLOGRAM_ADD_COLUMN
|
||||
(
|
||||
RCYCLOGRAM in out nocopy TCYCLOGRAM, -- Описание циклограммы
|
||||
SNAME in varchar2, -- Заголовок колонки
|
||||
NSTART in number, -- Позиция начала колонки
|
||||
NEND in number, -- Позиция конца колонки
|
||||
BCLEAR in boolean := false -- Флаг очистки коллекции колонок циклограммы (false - не очищать, true - очистить коллекцию перед добавлением)
|
||||
);
|
||||
|
||||
/* Добавление группы в циклограмму */
|
||||
procedure TCYCLOGRAM_ADD_GROUP
|
||||
(
|
||||
RCYCLOGRAM in out nocopy TCYCLOGRAM, -- Описание циклограммы
|
||||
SNAME in varchar2, -- Имя группы
|
||||
BHEADER_VISIBLE in boolean := true, -- Признак отображения заголовка группы
|
||||
NHEADER_HEIGHT in number := NCYCLOGRAM_GROUP_DEF_HEIGHT, -- Высота заголовка группы
|
||||
NHEADER_WIDTH in number := NCYCLOGRAM_GROUP_DEF_WIDTH, -- Ширина заголовка группы
|
||||
SHIGHLIGHT_COLOR in varchar2 := null, -- Цвет при наведении (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
|
||||
BCLEAR in boolean := false -- Флаг очистки коллекции групп (false - не очищать, true - очистить коллекцию перед добавлением)
|
||||
);
|
||||
|
||||
/* Добавление задачи в циклограммы */
|
||||
procedure TCYCLOGRAM_ADD_TASK
|
||||
(
|
||||
RCYCLOGRAM in out nocopy TCYCLOGRAM, -- Описание циклограммы
|
||||
RTASK in TCYCLOGRAM_TASK, -- Задача циклограммы
|
||||
BCLEAR in boolean := false -- Флаг очистки коллекции задач (false - не очищать, true - очистить коллекцию перед добавлением)
|
||||
);
|
||||
|
||||
/* Добавление описания атрибута задачи циклограммы */
|
||||
procedure TCYCLOGRAM_ADD_TASK_ATTR
|
||||
(
|
||||
RCYCLOGRAM in out nocopy TCYCLOGRAM, -- Описание циклограммы
|
||||
SNAME in varchar2, -- Наименование
|
||||
SCAPTION in varchar2, -- Заголовок
|
||||
BVISIBLE boolean := true, -- Разрешить отображение
|
||||
BCLEAR in boolean := false -- Флаг очистки коллекции атрибутов (false - не очищать, true - очистить коллекцию перед добавлением)
|
||||
);
|
||||
|
||||
/* Сериализация циклограммы */
|
||||
function TCYCLOGRAM_TO_XML
|
||||
(
|
||||
RCYCLOGRAM in TCYCLOGRAM, -- Описание циклограммы
|
||||
NINCLUDE_DEF in number := 1 -- Включить описание колонок (0 - нет, 1 - да)
|
||||
) return clob; -- XML-описание
|
||||
|
||||
end PKG_P8PANELS_VISUAL;
|
||||
/
|
||||
@ -603,38 +775,44 @@ text="Формат data_grid и gant как в chart"
|
||||
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_TAG_XCYCLOGRAM constant PKG_STD.TSTRING := 'XCYCLOGRAM'; -- Тэг для описания заголовка циклограммы
|
||||
|
||||
/* Константы - атрибуты ответов (универсальные) */
|
||||
SRESP_ATTR_NAME constant PKG_STD.TSTRING := 'name'; -- Атрибут для наименования
|
||||
SRESP_ATTR_CAPTION constant PKG_STD.TSTRING := 'caption'; -- Атрибут для подписи
|
||||
SRESP_ATTR_DATA_TYPE constant PKG_STD.TSTRING := 'dataType'; -- Атрибут для типа данных
|
||||
SRESP_ATTR_VISIBLE constant PKG_STD.TSTRING := 'visible'; -- Атрибут для флага видимости
|
||||
SRESP_ATTR_TITLE constant PKG_STD.TSTRING := 'title'; -- Атрибут для заголовка
|
||||
SRESP_ATTR_ZOOM constant PKG_STD.TSTRING := 'zoom'; -- Атрибут для масштаба
|
||||
SRESP_ATTR_ID constant PKG_STD.TSTRING := 'id'; -- Атрибут для идентификатора
|
||||
SRESP_ATTR_START constant PKG_STD.TSTRING := 'start'; -- Атрибут для даты начала
|
||||
SRESP_ATTR_END constant PKG_STD.TSTRING := 'end'; -- Атрибут для даты окончания
|
||||
SRESP_ATTR_RN constant PKG_STD.TSTRING := 'rn'; -- Атрибут для рег. номера
|
||||
SRESP_ATTR_NUMB constant PKG_STD.TSTRING := 'numb'; -- Атрибут для номера
|
||||
SRESP_ATTR_FULL_NAME constant PKG_STD.TSTRING := 'fullName'; -- Атрибут для полного наименования
|
||||
SRESP_ATTR_DESC constant PKG_STD.TSTRING := 'desc'; -- Атрибут для описания
|
||||
SRESP_ATTR_TYPE constant PKG_STD.TSTRING := 'type'; -- Атрибут для типа
|
||||
SRESP_ATTR_HINT constant PKG_STD.TSTRING := 'hint'; -- Атрибут для подсказки
|
||||
SRESP_ATTR_GROUP_NAME constant PKG_STD.TSTRING := 'groupName'; -- Атрибут для наименования группы
|
||||
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_NAME constant PKG_STD.TSTRING := 'name'; -- Атрибут для наименования
|
||||
SRESP_ATTR_CAPTION constant PKG_STD.TSTRING := 'caption'; -- Атрибут для подписи
|
||||
SRESP_ATTR_DATA_TYPE constant PKG_STD.TSTRING := 'dataType'; -- Атрибут для типа данных
|
||||
SRESP_ATTR_VISIBLE constant PKG_STD.TSTRING := 'visible'; -- Атрибут для флага видимости
|
||||
SRESP_ATTR_TITLE constant PKG_STD.TSTRING := 'title'; -- Атрибут для заголовка
|
||||
SRESP_ATTR_ZOOM constant PKG_STD.TSTRING := 'zoom'; -- Атрибут для масштаба
|
||||
SRESP_ATTR_ID constant PKG_STD.TSTRING := 'id'; -- Атрибут для идентификатора
|
||||
SRESP_ATTR_START constant PKG_STD.TSTRING := 'start'; -- Атрибут для даты начала
|
||||
SRESP_ATTR_END constant PKG_STD.TSTRING := 'end'; -- Атрибут для даты окончания
|
||||
SRESP_ATTR_RN constant PKG_STD.TSTRING := 'rn'; -- Атрибут для рег. номера
|
||||
SRESP_ATTR_NUMB constant PKG_STD.TSTRING := 'numb'; -- Атрибут для номера
|
||||
SRESP_ATTR_FULL_NAME constant PKG_STD.TSTRING := 'fullName'; -- Атрибут для полного наименования
|
||||
SRESP_ATTR_DESC constant PKG_STD.TSTRING := 'desc'; -- Атрибут для описания
|
||||
SRESP_ATTR_TYPE constant PKG_STD.TSTRING := 'type'; -- Атрибут для типа
|
||||
SRESP_ATTR_HINT constant PKG_STD.TSTRING := 'hint'; -- Атрибут для подсказки
|
||||
SRESP_ATTR_GROUP_NAME constant PKG_STD.TSTRING := 'groupName'; -- Атрибут для наименования группы
|
||||
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_HEIGHT constant PKG_STD.TSTRING := 'height'; -- Атрибут для высоты
|
||||
SRESP_ATTR_GROUPS constant PKG_STD.TSTRING := 'groups'; -- Атрибут для групп
|
||||
SRESP_ATTR_COLUMNS constant PKG_STD.TSTRING := 'columns'; -- Атрибут для колонок
|
||||
SRESP_ATTR_TASKS constant PKG_STD.TSTRING := 'tasks'; -- Атрибут для задач
|
||||
SRESP_ATTR_HL_COLOR constant PKG_STD.TSTRING := 'highlightColor'; -- Атрибут для цвета подсветки
|
||||
SRESP_ATTR_ZOOM_BAR constant PKG_STD.TSTRING := 'zoomBar'; -- Атрибут для флага отображения панели масштаба
|
||||
|
||||
/* Константы - атрибуты ответов (таблица данных) */
|
||||
SRESP_ATTR_DT_ORDER constant PKG_STD.TSTRING := 'order'; -- Атрибут для флага сортировки
|
||||
SRESP_ATTR_DT_FILTER constant PKG_STD.TSTRING := 'filter'; -- Атрибут для флага отбора
|
||||
SRESP_ATTR_DT_COLUMN_VALUES constant PKG_STD.TSTRING := 'values'; -- Атрибут для предопределённых значений
|
||||
|
||||
/* Константы - атрибуты ответов (диаграмма Ганта) */
|
||||
SRESP_ATTR_GANTT_ZOOM_BAR constant PKG_STD.TSTRING := 'zoomBar'; -- Атрибут для флага отображения панели масштаба диаграммы Ганта
|
||||
SRESP_ATTR_TASK_PROGRESS constant PKG_STD.TSTRING := 'progress'; -- Атрибут для прогресса задачи
|
||||
SRESP_ATTR_TASK_DEPS constant PKG_STD.TSTRING := 'dependencies'; -- Атрибут для зависимостей задачи
|
||||
SRESP_ATTR_TASK_RO constant PKG_STD.TSTRING := 'readOnly'; -- Атрибут для флага задачи "только для чтения"
|
||||
@ -657,6 +835,10 @@ text="Формат data_grid и gant как в chart"
|
||||
SRESP_ATTR_CHART_DS_ITEMS constant PKG_STD.TSTRING := 'items'; -- Атрибут для коллекции элементов набора данных
|
||||
SRESP_ATTR_CHART_DS_I_VAL constant PKG_STD.TSTRING := 'value'; -- Атрибут для значения элемента набора данных
|
||||
|
||||
/* Константы - атрибуты ответов (циклограмма) */
|
||||
SRESP_ATTR_CG_TASK_LINE constant PKG_STD.TSTRING := 'lineNumb'; -- Атрибут для номера строки (по оси Y)
|
||||
SRESP_ATTR_CG_LINE_HEIGHT constant PKG_STD.TSTRING := 'lineHeight'; -- Атрибут для высоты строк
|
||||
|
||||
/* Константы - параметры условий отбора */
|
||||
SCOND_FROM_POSTFIX constant PKG_STD.TSTRING := 'From'; -- Постфикс наименования нижней границы условия отбора
|
||||
SCOND_TO_POSTFIX constant PKG_STD.TSTRING := 'To'; -- Постфикс наименования верхней границы условия отбора
|
||||
@ -2034,7 +2216,7 @@ text="Формат data_grid и gant как в chart"
|
||||
/* Cтатические атрибуты заголовка */
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_TITLE, SVALUE => RGANTT.STITLE);
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_ZOOM, NVALUE => RGANTT.NZOOM);
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_GANTT_ZOOM_BAR, BVALUE => RGANTT.BZOOM_BAR);
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_ZOOM_BAR, BVALUE => RGANTT.BZOOM_BAR);
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_TASK_RO, BVALUE => RGANTT.BREAD_ONLY);
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_TASK_RO_DATES, BVALUE => RGANTT.BREAD_ONLY_DATES);
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_TASK_RO_PRGRS, BVALUE => RGANTT.BREAD_ONLY_PROGRESS);
|
||||
@ -2382,5 +2564,517 @@ text="Формат data_grid и gant как в chart"
|
||||
P_EXCEPTION(0, PKG_STATE.SQL_ERRM());
|
||||
end TCHART_TO_XML;
|
||||
|
||||
/* Формирование колонки циклограммы */
|
||||
function TCYCLOGRAM_COLUMN_MAKE
|
||||
(
|
||||
SNAME in varchar2, -- Заголовок колонки
|
||||
NSTART in number, -- Позиция начала колонки
|
||||
NEND in number -- Позиция конца колонки
|
||||
) return TCYCLOGRAM_COLUMN -- Результат работы
|
||||
is
|
||||
RRES TCYCLOGRAM_COLUMN; -- Буфер для результата
|
||||
begin
|
||||
/* Формируем объект */
|
||||
RRES.SNAME := SNAME;
|
||||
RRES.NSTART := NSTART;
|
||||
RRES.NEND := NEND;
|
||||
/* Возвращаем результат */
|
||||
return RRES;
|
||||
end TCYCLOGRAM_COLUMN_MAKE;
|
||||
|
||||
/* Добавление колонки циклограммы в коллекцию */
|
||||
procedure TCYCLOGRAM_COLUMNS_ADD
|
||||
(
|
||||
RCOLUMNS in out nocopy TCYCLOGRAM_COLUMNS, -- Коллекция колонок циклограммы
|
||||
SNAME in varchar2, -- Наименование колонки
|
||||
NSTART in number, -- Позиция начала колонки
|
||||
NEND in number, -- Позиция конца колонки
|
||||
BCLEAR in boolean := false -- Флаг очистки коллекции колонок (false - не очищать, true - очистить коллекцию перед добавлением)
|
||||
)
|
||||
is
|
||||
begin
|
||||
/* Инициализируем коллекцию если необходимо */
|
||||
if ((RCOLUMNS is null) or (BCLEAR)) then
|
||||
RCOLUMNS := TCYCLOGRAM_COLUMNS();
|
||||
end if;
|
||||
/* Добавляем элемент */
|
||||
RCOLUMNS.EXTEND();
|
||||
RCOLUMNS(RCOLUMNS.LAST) := TCYCLOGRAM_COLUMN_MAKE(SNAME => SNAME, NSTART => NSTART, NEND => NEND);
|
||||
end TCYCLOGRAM_COLUMNS_ADD;
|
||||
|
||||
/* Сериализация описания колонок циклограммы */
|
||||
procedure TCYCLOGRAM_COLUMNS_TO_XML
|
||||
(
|
||||
RCYCLOGRAM_COLUMNS in TCYCLOGRAM_COLUMNS -- Описание колонок циклограммы
|
||||
)
|
||||
is
|
||||
begin
|
||||
/* Обходим колонки из коллекции */
|
||||
if ((RCYCLOGRAM_COLUMNS is not null) and (RCYCLOGRAM_COLUMNS.COUNT > 0)) then
|
||||
for I in RCYCLOGRAM_COLUMNS.FIRST .. RCYCLOGRAM_COLUMNS.LAST
|
||||
loop
|
||||
/* Открываем описание колонки */
|
||||
PKG_XFAST.DOWN_NODE(SNAME => SRESP_TAG_XCOLUMNS_DEF);
|
||||
/* Атрибуты колонки */
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_NAME, SVALUE => RCYCLOGRAM_COLUMNS(I).SNAME);
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_START, NVALUE => RCYCLOGRAM_COLUMNS(I).NSTART);
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_END, NVALUE => RCYCLOGRAM_COLUMNS(I).NEND);
|
||||
/* Закрываем описание колонки */
|
||||
PKG_XFAST.UP();
|
||||
end loop;
|
||||
end if;
|
||||
end TCYCLOGRAM_COLUMNS_TO_XML;
|
||||
|
||||
/* Формирование группы циклограммы */
|
||||
function TCYCLOGRAM_GROUP_MAKE
|
||||
(
|
||||
SNAME in varchar2, -- Имя группы
|
||||
BHEADER_VISIBLE in boolean := true, -- Признак отображения заголовка группы
|
||||
NHEADER_HEIGHT in number := NCYCLOGRAM_GROUP_DEF_HEIGHT, -- Высота заголовка группы
|
||||
NHEADER_WIDTH in number := NCYCLOGRAM_GROUP_DEF_WIDTH, -- Ширина заголовка группы
|
||||
SHIGHLIGHT_COLOR in varchar2 := null -- Цвет при наведении (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
|
||||
) return TCYCLOGRAM_GROUP -- Результат работы
|
||||
is
|
||||
RRES TCYCLOGRAM_GROUP; -- Буфер для результата
|
||||
begin
|
||||
/* Формируем объект */
|
||||
RRES.SNAME := SNAME;
|
||||
RRES.BHEADER_VISIBLE := BHEADER_VISIBLE;
|
||||
RRES.NHEADER_HEIGHT := NHEADER_HEIGHT;
|
||||
RRES.NHEADER_WIDTH := NHEADER_WIDTH;
|
||||
RRES.SHIGHLIGHT_COLOR := SHIGHLIGHT_COLOR;
|
||||
/* Возвращаем результат */
|
||||
return RRES;
|
||||
end TCYCLOGRAM_GROUP_MAKE;
|
||||
|
||||
/* Поиск группы циклограммы по наименованию */
|
||||
function TCYCLOGRAM_GROUP_FIND
|
||||
(
|
||||
RGROUPS in TCYCLOGRAM_GROUPS, -- Описание групп циклограммы
|
||||
SNAME in varchar2 -- Наименование
|
||||
) return TCYCLOGRAM_GROUP -- Найденное описание группы (null - если не нашли)
|
||||
is
|
||||
begin
|
||||
/* Обходим группы из описания */
|
||||
if ((RGROUPS is not null) and (RGROUPS.COUNT > 0)) then
|
||||
for I in RGROUPS.FIRST .. RGROUPS.LAST
|
||||
loop
|
||||
if (RGROUPS(I).SNAME = SNAME) then
|
||||
return RGROUPS(I);
|
||||
end if;
|
||||
end loop;
|
||||
end if;
|
||||
/* Ничего не нашли */
|
||||
return null;
|
||||
end TCYCLOGRAM_GROUP_FIND;
|
||||
|
||||
/* Сериализация описания групп циклограммы */
|
||||
procedure TCYCLOGRAM_GROUPS_TO_XML
|
||||
(
|
||||
RGROUPS in TCYCLOGRAM_GROUPS -- Коллекция групп циклограммы
|
||||
)
|
||||
is
|
||||
begin
|
||||
/* Обходим группы из коллекции */
|
||||
if ((RGROUPS is not null) and (RGROUPS.COUNT > 0)) then
|
||||
for I in RGROUPS.FIRST .. RGROUPS.LAST
|
||||
loop
|
||||
/* Открываем описание группы */
|
||||
PKG_XFAST.DOWN_NODE(SNAME => SRESP_ATTR_GROUPS);
|
||||
/* Атрибуты группы */
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_NAME, SVALUE => RGROUPS(I).SNAME);
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_VISIBLE, BVALUE => RGROUPS(I).BHEADER_VISIBLE);
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_HEIGHT, NVALUE => RGROUPS(I).NHEADER_HEIGHT);
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_WIDTH, NVALUE => RGROUPS(I).NHEADER_WIDTH);
|
||||
if (RGROUPS(I).SHIGHLIGHT_COLOR is not null) then
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_HL_COLOR, SVALUE => RGROUPS(I).SHIGHLIGHT_COLOR);
|
||||
end if;
|
||||
/* Закрываем описание группы */
|
||||
PKG_XFAST.UP();
|
||||
end loop;
|
||||
end if;
|
||||
end TCYCLOGRAM_GROUPS_TO_XML;
|
||||
|
||||
/* Проверка наличия группы в циклограмме */
|
||||
function TCYCLOGRAM_TASK_GROUP_CHECK
|
||||
(
|
||||
RGROUPS in TCYCLOGRAM_GROUPS, -- Описание групп циклограммы
|
||||
SNAME in varchar2 -- Наименование
|
||||
) return TCYCLOGRAM_GROUP -- Найденное описание группы (null - если не нашли)
|
||||
is
|
||||
begin
|
||||
/* Обходим группы из описания */
|
||||
if ((RGROUPS is not null) and (RGROUPS.COUNT > 0)) then
|
||||
for I in RGROUPS.FIRST .. RGROUPS.LAST
|
||||
loop
|
||||
if (RGROUPS(I).SNAME = SNAME) then
|
||||
return RGROUPS(I);
|
||||
end if;
|
||||
end loop;
|
||||
end if;
|
||||
/* Ничего не нашли */
|
||||
return null;
|
||||
end TCYCLOGRAM_TASK_GROUP_CHECK;
|
||||
|
||||
/* Формирование задачи циклограммы */
|
||||
function TCYCLOGRAM_TASK_MAKE
|
||||
(
|
||||
NRN in number, -- Рег. номер записи
|
||||
SCAPTION in varchar2, -- Заголовок
|
||||
SNAME in varchar2, -- Наименование
|
||||
NLINE_NUMB in number, -- Номер строки
|
||||
NSTART in number, -- Позиция начала задачи
|
||||
NEND in number, -- Позиция конца задачи
|
||||
SGROUP in varchar2 := null, -- Наименование группы
|
||||
SBG_COLOR in varchar2 := null, -- Цвет заливки задачи (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
|
||||
STEXT_COLOR in varchar2 := null, -- Цвет текста заголовка задачи (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
|
||||
SHIGHLIGHT_COLOR in varchar2 := null -- Цвет при наведении (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
|
||||
) return TCYCLOGRAM_TASK -- Результат работы
|
||||
is
|
||||
RRES TCYCLOGRAM_TASK; -- Буфер для результата
|
||||
begin
|
||||
/* Формируем объект */
|
||||
RRES.NRN := NRN;
|
||||
RRES.SCAPTION := SCAPTION;
|
||||
RRES.SNAME := SNAME;
|
||||
RRES.NLINE_NUMB := NLINE_NUMB;
|
||||
RRES.NSTART := NSTART;
|
||||
RRES.NEND := NEND;
|
||||
RRES.SGROUP := SGROUP;
|
||||
RRES.SBG_COLOR := SBG_COLOR;
|
||||
RRES.STEXT_COLOR := STEXT_COLOR;
|
||||
RRES.SHIGHLIGHT_COLOR := SHIGHLIGHT_COLOR;
|
||||
/* Возвращаем результат */
|
||||
return RRES;
|
||||
end TCYCLOGRAM_TASK_MAKE;
|
||||
|
||||
/* Проверка корректности наименования дополнительного атрибута задачи циклограммы */
|
||||
procedure TCYCLOGRAM_TASK_ATTR_NAME_CH
|
||||
(
|
||||
SNAME in varchar2 -- Наименование
|
||||
)
|
||||
is
|
||||
begin
|
||||
if (SNAME in (SRESP_ATTR_ID,
|
||||
SRESP_ATTR_RN,
|
||||
SRESP_ATTR_CAPTION,
|
||||
SRESP_ATTR_FULL_NAME,
|
||||
SRESP_ATTR_START,
|
||||
SRESP_ATTR_END,
|
||||
SRESP_ATTR_CG_TASK_LINE,
|
||||
SRESP_ATTR_GROUP_NAME,
|
||||
SRESP_ATTR_TASK_BG_COLOR,
|
||||
SRESP_ATTR_TASK_TEXT_COLOR,
|
||||
SRESP_ATTR_HL_COLOR)) then
|
||||
P_EXCEPTION(0,
|
||||
'Наименование атрибута "%s" является зарезервированным.',
|
||||
SNAME);
|
||||
end if;
|
||||
end TCYCLOGRAM_TASK_ATTR_NAME_CH;
|
||||
|
||||
/* Поиск атрибута задачи циклограммы по наименованию */
|
||||
function TCYCLOGRAM_TASK_ATTR_FIND
|
||||
(
|
||||
RTASK_ATTRS in TCYCLOGRAM_TASK_ATTRS, -- Описание атрибутов задачи циклограммы
|
||||
SNAME in varchar2 -- Наименование
|
||||
) return TCYCLOGRAM_TASK_ATTR -- Найденное описание (null - если не нашли)
|
||||
is
|
||||
begin
|
||||
/* Обходим атрибуты из описания */
|
||||
if ((RTASK_ATTRS is not null) and (RTASK_ATTRS.COUNT > 0)) then
|
||||
for I in RTASK_ATTRS.FIRST .. RTASK_ATTRS.LAST
|
||||
loop
|
||||
if (RTASK_ATTRS(I).SNAME = SNAME) then
|
||||
return RTASK_ATTRS(I);
|
||||
end if;
|
||||
end loop;
|
||||
end if;
|
||||
/* Ничего не нашли */
|
||||
return null;
|
||||
end TCYCLOGRAM_TASK_ATTR_FIND;
|
||||
|
||||
/* Добавление значения атрибута к задаче циклограммы */
|
||||
procedure TCYCLOGRAM_TASK_ADD_ATTR_VAL
|
||||
(
|
||||
RCYCLOGRAM in TCYCLOGRAM, -- Описание циклограммы
|
||||
RTASK in out nocopy TCYCLOGRAM_TASK, -- Описание задачи
|
||||
SNAME in varchar2, -- Наименование
|
||||
SVALUE in varchar2, -- Значение
|
||||
BCLEAR in boolean := false -- Флаг очистки коллекции значений атрибутов (false - не очищать, true - очистить коллекцию перед добавлением)
|
||||
)
|
||||
is
|
||||
begin
|
||||
/* Проверим наименование */
|
||||
TCYCLOGRAM_TASK_ATTR_NAME_CH(SNAME => SNAME);
|
||||
/* Проверим, что такой атрибут зарегистрирован */
|
||||
if (TCYCLOGRAM_TASK_ATTR_FIND(RTASK_ATTRS => RCYCLOGRAM.RTASK_ATTRS, SNAME => SNAME).SNAME is null) then
|
||||
P_EXCEPTION(0,
|
||||
'Атрибут "%s" задачи циклограммы не зарегистрирован.',
|
||||
SNAME);
|
||||
end if;
|
||||
/* Инициализируем коллекцию если необходимо */
|
||||
if ((RTASK.RATTR_VALS is null) or (BCLEAR)) then
|
||||
RTASK.RATTR_VALS := TCYCLOGRAM_TASK_ATTR_VALS();
|
||||
end if;
|
||||
/* Добавляем элемент */
|
||||
RTASK.RATTR_VALS.EXTEND();
|
||||
RTASK.RATTR_VALS(RTASK.RATTR_VALS.LAST).SNAME := SNAME;
|
||||
RTASK.RATTR_VALS(RTASK.RATTR_VALS.LAST).SVALUE := SVALUE;
|
||||
end TCYCLOGRAM_TASK_ADD_ATTR_VAL;
|
||||
|
||||
/* Сериализация описания задач группы циклограммы */
|
||||
procedure TCYCLOGRAM_TASKS_TO_XML
|
||||
(
|
||||
RTASKS in TCYCLOGRAM_TASKS -- Коллекция задач группы циклограммы
|
||||
)
|
||||
is
|
||||
begin
|
||||
/* Обходим задачи из коллекции */
|
||||
if ((RTASKS is not null) and (RTASKS.COUNT > 0)) then
|
||||
for I in RTASKS.FIRST .. RTASKS.LAST
|
||||
loop
|
||||
/* Открываем строку */
|
||||
PKG_XFAST.DOWN_NODE(SNAME => SRESP_ATTR_TASKS);
|
||||
/* Статические тарибуты */
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_ID, SVALUE => 'taskId' || RTASKS(I).NRN);
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_RN, NVALUE => RTASKS(I).NRN);
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_NAME, SVALUE => RTASKS(I).SCAPTION);
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_FULL_NAME, SVALUE => RTASKS(I).SNAME);
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_CG_TASK_LINE, NVALUE => RTASKS(I).NLINE_NUMB);
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_START, NVALUE => RTASKS(I).NSTART);
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_END, NVALUE => RTASKS(I).NEND);
|
||||
if (RTASKS(I).SGROUP is not null) then
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_GROUP_NAME, SVALUE => RTASKS(I).SGROUP);
|
||||
end if;
|
||||
if (RTASKS(I).SBG_COLOR is not null) then
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_TASK_BG_COLOR, SVALUE => RTASKS(I).SBG_COLOR);
|
||||
end if;
|
||||
if (RTASKS(I).STEXT_COLOR is not null) then
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_TASK_TEXT_COLOR, SVALUE => RTASKS(I).STEXT_COLOR);
|
||||
end if;
|
||||
if (RTASKS(I).SHIGHLIGHT_COLOR is not null) then
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_HL_COLOR, SVALUE => RTASKS(I).SHIGHLIGHT_COLOR);
|
||||
end if;
|
||||
/* Динамические атрибуты */
|
||||
if ((RTASKS(I).RATTR_VALS is not null) and (RTASKS(I).RATTR_VALS.COUNT > 0)) then
|
||||
for J in RTASKS(I).RATTR_VALS.FIRST .. RTASKS(I).RATTR_VALS.LAST
|
||||
loop
|
||||
PKG_XFAST.ATTR(SNAME => RTASKS(I).RATTR_VALS(J).SNAME, SVALUE => RTASKS(I).RATTR_VALS(J).SVALUE);
|
||||
end loop;
|
||||
end if;
|
||||
/* Закрываем задачу */
|
||||
PKG_XFAST.UP();
|
||||
end loop;
|
||||
end if;
|
||||
end TCYCLOGRAM_TASKS_TO_XML;
|
||||
|
||||
/* Формирование циклограммы */
|
||||
function TCYCLOGRAM_MAKE
|
||||
(
|
||||
STITLE in varchar2, -- Заголовок (null - не отображать)
|
||||
NLINE_HEIGHT in number := NCYCLOGRAM_LINE_HEIGHT, -- Высота строк
|
||||
NZOOM in number := NCYCLOGRAM_ZOOM_DEFAULT, -- Текущий масштаб (см. константы NCYCLOGRAM_ZOOM_*)
|
||||
BZOOM_BAR in boolean := true -- Обображать панель масштабирования
|
||||
) return TCYCLOGRAM -- Результат работы
|
||||
is
|
||||
RRES TCYCLOGRAM; -- Буфер для результата
|
||||
begin
|
||||
/* Формируем объект */
|
||||
RRES.STITLE := STITLE;
|
||||
RRES.NLINE_HEIGHT := NLINE_HEIGHT;
|
||||
RRES.NZOOM := NZOOM;
|
||||
RRES.BZOOM_BAR := BZOOM_BAR;
|
||||
/* Возвращаем результат */
|
||||
return RRES;
|
||||
end TCYCLOGRAM_MAKE;
|
||||
|
||||
/* Добавление колонки в циклограмму */
|
||||
procedure TCYCLOGRAM_ADD_COLUMN
|
||||
(
|
||||
RCYCLOGRAM in out nocopy TCYCLOGRAM, -- Описание циклограммы
|
||||
SNAME in varchar2, -- Заголовок колонки
|
||||
NSTART in number, -- Позиция начала колонки
|
||||
NEND in number, -- Позиция конца колонки
|
||||
BCLEAR in boolean := false -- Флаг очистки коллекции колонок (false - не очищать, true - очистить коллекцию перед добавлением)
|
||||
)
|
||||
is
|
||||
begin
|
||||
/* Формируем описание и добавляем в коллекцию колонок */
|
||||
TCYCLOGRAM_COLUMNS_ADD(RCOLUMNS => RCYCLOGRAM.RCOLUMNS,
|
||||
SNAME => SNAME,
|
||||
NSTART => NSTART,
|
||||
NEND => NEND,
|
||||
BCLEAR => BCLEAR);
|
||||
end TCYCLOGRAM_ADD_COLUMN;
|
||||
|
||||
/* Добавление группы в циклограмму */
|
||||
procedure TCYCLOGRAM_ADD_GROUP
|
||||
(
|
||||
RCYCLOGRAM in out nocopy TCYCLOGRAM, -- Описание циклограммы
|
||||
SNAME in varchar2, -- Имя группы
|
||||
BHEADER_VISIBLE in boolean := true, -- Признак отображения заголовка группы
|
||||
NHEADER_HEIGHT in number := NCYCLOGRAM_GROUP_DEF_HEIGHT, -- Высота заголовка группы
|
||||
NHEADER_WIDTH in number := NCYCLOGRAM_GROUP_DEF_WIDTH, -- Ширина заголовка группы
|
||||
SHIGHLIGHT_COLOR in varchar2 := null, -- Цвет при наведении (null - использовать цвет по умолчанию из стилей, формат - HTML-цвет, #RRGGBBAA)
|
||||
BCLEAR in boolean := false -- Флаг очистки коллекции групп (false - не очищать, true - очистить коллекцию перед добавлением)
|
||||
)
|
||||
is
|
||||
begin
|
||||
/* Проверяем наличие группы в циклограмме */
|
||||
if (TCYCLOGRAM_GROUP_FIND(RGROUPS => RCYCLOGRAM.RGROUPS, SNAME => SNAME).SNAME is null) then
|
||||
/* Инициализируем коллекцию если необходимо */
|
||||
if ((RCYCLOGRAM.RGROUPS is null) or (BCLEAR)) then
|
||||
RCYCLOGRAM.RGROUPS := TCYCLOGRAM_GROUPS();
|
||||
end if;
|
||||
/* Добавляем элемент */
|
||||
RCYCLOGRAM.RGROUPS.EXTEND();
|
||||
RCYCLOGRAM.RGROUPS(RCYCLOGRAM.RGROUPS.LAST) := TCYCLOGRAM_GROUP_MAKE(SNAME => SNAME,
|
||||
BHEADER_VISIBLE => BHEADER_VISIBLE,
|
||||
NHEADER_HEIGHT => NHEADER_HEIGHT,
|
||||
NHEADER_WIDTH => NHEADER_WIDTH,
|
||||
SHIGHLIGHT_COLOR => SHIGHLIGHT_COLOR);
|
||||
end if;
|
||||
end TCYCLOGRAM_ADD_GROUP;
|
||||
|
||||
/* Добавление задачи в циклограммы */
|
||||
procedure TCYCLOGRAM_ADD_TASK
|
||||
(
|
||||
RCYCLOGRAM in out nocopy TCYCLOGRAM, -- Описание циклограммы
|
||||
RTASK in TCYCLOGRAM_TASK, -- Задача циклограммы
|
||||
BCLEAR in boolean := false -- Флаг очистки коллекции задач (false - не очищать, true - очистить коллекцию перед добавлением)
|
||||
)
|
||||
is
|
||||
begin
|
||||
/* Инициализируем коллекцию если необходимо */
|
||||
if ((RCYCLOGRAM.RTASKS is null) or (BCLEAR)) then
|
||||
RCYCLOGRAM.RTASKS := TCYCLOGRAM_TASKS();
|
||||
end if;
|
||||
/* Если у задачи указана группа */
|
||||
if (RTASK.SGROUP is not null) then
|
||||
/* Проверяем наличие группы в циклограмме */
|
||||
if (TCYCLOGRAM_GROUP_FIND(RGROUPS => RCYCLOGRAM.RGROUPS, SNAME => RTASK.SGROUP).SNAME is null) then
|
||||
P_EXCEPTION(0, 'Группа "%s" циклограммы не зарегистрирована.', RTASK.SGROUP);
|
||||
end if;
|
||||
end if;
|
||||
/* Добавляем элемент */
|
||||
RCYCLOGRAM.RTASKS.EXTEND();
|
||||
RCYCLOGRAM.RTASKS(RCYCLOGRAM.RTASKS.LAST) := RTASK;
|
||||
end TCYCLOGRAM_ADD_TASK;
|
||||
|
||||
/* Добавление описания атрибута задачи циклограммы */
|
||||
procedure TCYCLOGRAM_ADD_TASK_ATTR
|
||||
(
|
||||
RCYCLOGRAM in out nocopy TCYCLOGRAM, -- Описание циклограммы
|
||||
SNAME in varchar2, -- Наименование
|
||||
SCAPTION in varchar2, -- Заголовок
|
||||
BVISIBLE boolean := true, -- Разрешить отображение
|
||||
BCLEAR in boolean := false -- Флаг очистки коллекции атрибутов (false - не очищать, true - очистить коллекцию перед добавлением)
|
||||
)
|
||||
is
|
||||
begin
|
||||
/* Проверим наименование */
|
||||
TCYCLOGRAM_TASK_ATTR_NAME_CH(SNAME => SNAME);
|
||||
/* Проверим, что такого ещё нет */
|
||||
if (TCYCLOGRAM_TASK_ATTR_FIND(RTASK_ATTRS => RCYCLOGRAM.RTASK_ATTRS, SNAME => SNAME).SNAME is not null) then
|
||||
P_EXCEPTION(0,
|
||||
'Атрибут "%s" задачи циклограммы уже зарегистрирован.',
|
||||
SNAME);
|
||||
end if;
|
||||
/* Инициализируем коллекцию если необходимо */
|
||||
if ((RCYCLOGRAM.RTASK_ATTRS is null) or (BCLEAR)) then
|
||||
RCYCLOGRAM.RTASK_ATTRS := TCYCLOGRAM_TASK_ATTRS();
|
||||
end if;
|
||||
/* Добавляем элемент */
|
||||
RCYCLOGRAM.RTASK_ATTRS.EXTEND();
|
||||
RCYCLOGRAM.RTASK_ATTRS(RCYCLOGRAM.RTASK_ATTRS.LAST).SNAME := SNAME;
|
||||
RCYCLOGRAM.RTASK_ATTRS(RCYCLOGRAM.RTASK_ATTRS.LAST).SCAPTION := SCAPTION;
|
||||
RCYCLOGRAM.RTASK_ATTRS(RCYCLOGRAM.RTASK_ATTRS.LAST).BVISIBLE := BVISIBLE;
|
||||
end TCYCLOGRAM_ADD_TASK_ATTR;
|
||||
|
||||
/* Сериализация описания циклограммы */
|
||||
procedure TCYCLOGRAM_DEF_TO_XML
|
||||
(
|
||||
RCYCLOGRAM in TCYCLOGRAM -- Описание циклограммы
|
||||
)
|
||||
is
|
||||
begin
|
||||
/* Cтатические атрибуты заголовка */
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_TITLE, SVALUE => RCYCLOGRAM.STITLE);
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_CG_LINE_HEIGHT, NVALUE => RCYCLOGRAM.NLINE_HEIGHT);
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_ZOOM, NVALUE => RCYCLOGRAM.NZOOM);
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_ZOOM_BAR, BVALUE => RCYCLOGRAM.BZOOM_BAR);
|
||||
/* Если есть динамические атрибуты */
|
||||
if ((RCYCLOGRAM.RTASK_ATTRS is not null) and (RCYCLOGRAM.RTASK_ATTRS.COUNT > 0)) then
|
||||
/* Обходим динамические атрибуты задачи */
|
||||
for I in RCYCLOGRAM.RTASK_ATTRS.FIRST .. RCYCLOGRAM.RTASK_ATTRS.LAST
|
||||
loop
|
||||
/* Открываем динамический атрибут задачи */
|
||||
PKG_XFAST.DOWN_NODE(SNAME => SRESP_ATTR_TASK_ATTRIBUTES);
|
||||
/* Наполняем его атрибутами */
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_NAME, SVALUE => RCYCLOGRAM.RTASK_ATTRS(I).SNAME);
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_CAPTION, SVALUE => RCYCLOGRAM.RTASK_ATTRS(I).SCAPTION);
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_VISIBLE, BVALUE => RCYCLOGRAM.RTASK_ATTRS(I).BVISIBLE);
|
||||
/* Закрываем динамический атрибут задачи */
|
||||
PKG_XFAST.UP();
|
||||
end loop;
|
||||
end if;
|
||||
/* Обходим колонки циклограммы */
|
||||
if ((RCYCLOGRAM.RCOLUMNS is not null) and (RCYCLOGRAM.RCOLUMNS.COUNT > 0)) then
|
||||
for I in RCYCLOGRAM.RCOLUMNS.FIRST .. RCYCLOGRAM.RCOLUMNS.LAST
|
||||
loop
|
||||
/* Открываем описание колонки */
|
||||
PKG_XFAST.DOWN_NODE(SNAME => SRESP_ATTR_COLUMNS);
|
||||
/* Атрибуты колонки */
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_NAME, SVALUE => RCYCLOGRAM.RCOLUMNS(I).SNAME);
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_START, NVALUE => RCYCLOGRAM.RCOLUMNS(I).NSTART);
|
||||
PKG_XFAST.ATTR(SNAME => SRESP_ATTR_END, NVALUE => RCYCLOGRAM.RCOLUMNS(I).NEND);
|
||||
/* Закрываем описание колонки */
|
||||
PKG_XFAST.UP();
|
||||
end loop;
|
||||
end if;
|
||||
end TCYCLOGRAM_DEF_TO_XML;
|
||||
|
||||
/* Сериализация циклограммы */
|
||||
function TCYCLOGRAM_TO_XML
|
||||
(
|
||||
RCYCLOGRAM in TCYCLOGRAM, -- Описание циклограммы
|
||||
NINCLUDE_DEF in number := 1 -- Включить описание колонок (0 - нет, 1 - да)
|
||||
) return clob -- XML-описание
|
||||
is
|
||||
CRES clob; -- Буфер для результата
|
||||
begin
|
||||
/* Начинаем формирование XML */
|
||||
PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_);
|
||||
/* Открываем корень */
|
||||
PKG_XFAST.DOWN_NODE(SNAME => SRESP_TAG_XDATA);
|
||||
/* Открываем циклограмму */
|
||||
PKG_XFAST.DOWN_NODE(SNAME => SRESP_TAG_XCYCLOGRAM);
|
||||
/* Если необходимо включить описание циклограммы */
|
||||
if (NINCLUDE_DEF = 1) then
|
||||
TCYCLOGRAM_DEF_TO_XML(RCYCLOGRAM => RCYCLOGRAM);
|
||||
end if;
|
||||
/* Формируем описание групп циклограммы */
|
||||
TCYCLOGRAM_GROUPS_TO_XML(RGROUPS => RCYCLOGRAM.RGROUPS);
|
||||
/* Описываем задачи */
|
||||
TCYCLOGRAM_TASKS_TO_XML(RTASKS => RCYCLOGRAM.RTASKS);
|
||||
/* Закрываем циклограмму */
|
||||
PKG_XFAST.UP();
|
||||
/* Закрываем корень */
|
||||
PKG_XFAST.UP();
|
||||
/* Сериализуем */
|
||||
CRES := PKG_XFAST.SERIALIZE_TO_CLOB();
|
||||
/* Завершаем формирование XML */
|
||||
PKG_XFAST.EPILOGUE();
|
||||
/* Возвращаем полученное */
|
||||
return CRES;
|
||||
exception
|
||||
when others then
|
||||
/* Завершаем формирование XML */
|
||||
PKG_XFAST.EPILOGUE();
|
||||
/* Вернем ошибку */
|
||||
PKG_STATE.DIAGNOSTICS_STACKED();
|
||||
P_EXCEPTION(0, PKG_STATE.SQL_ERRM());
|
||||
end TCYCLOGRAM_TO_XML;
|
||||
|
||||
end PKG_P8PANELS_VISUAL;
|
||||
/
|
||||
|
34
dist/p8-panels.js
vendored
34
dist/p8-panels.js
vendored
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user