ЦИТК-979 - Поддержка возможности указания отладочного значения аргумента запроса

This commit is contained in:
Mikhail Chechnev 2025-09-25 14:11:32 +03:00
parent dae416cd83
commit be22cde138
6 changed files with 70 additions and 23 deletions

View File

@ -7,7 +7,7 @@
//Подключение библиотек
//---------------------
import React from "react"; //Классы React
import React, { useState } from "react"; //Классы React
import PropTypes from "prop-types"; //Контроль свойств компонента
import { P8PDialog } from "../../../../components/p8p_dialog"; //Типовой диалог
import { TITLES } from "../../../../../app.text"; //Общие текстовые ресурсы приложения
@ -18,13 +18,27 @@ import { DATA_TYPE } from "../../common"; //Общие константы ред
//-----------
//Диалог добавления/исправления аргумента запроса
const ArgIUDialog = ({ name = "", title = "", dataType = DATA_TYPE.NUMB, mandatory = 0, insert = true, onOk, onCancel }) => {
const ArgIUDialog = ({ name = "", title = "", dataType = DATA_TYPE.NUMB, mandatory = 0, value = "", insert = true, onOk, onCancel }) => {
//Собственное состояние - текущее состояние аргумента
const [current, setCurrent] = useState({ value, dataType });
//Нажатие на кнопку "Ok"
const handleOk = values => onOk && onOk({ ...values });
//Нажатие на кнопку "Отмена"
const handleCancel = () => onCancel && onCancel();
//При изменении значений в поле ввода
const handleInputChange = (name, value) => {
//Если поменяли тип данных - надо пересмотреть поля для ввода
if (name === "dataType") {
//Сохраним в состоянии новый тип данных и сбросим "отладочное значение", ведь оно зависит от типа данных (от этого состояния зависит свойство inputs, передаваемое в P8PDialog ниже)
setCurrent({ dataType: value, value: "" });
//Мы сами пересчитали форму, туда придут новые настройки элементов ввода через свойство inputs, не надо делать пересчет состояния внутри диалога
return true;
}
};
//Генерация содержимого
return (
<P8PDialog
@ -34,7 +48,7 @@ const ArgIUDialog = ({ name = "", title = "", dataType = DATA_TYPE.NUMB, mandato
{ name: "title", value: title, label: "Приглашение" },
{
name: "dataType",
value: dataType,
value: current.dataType,
label: "Тип данных",
list: [
{ name: "Строка", value: DATA_TYPE.STR },
@ -50,10 +64,17 @@ const ArgIUDialog = ({ name = "", title = "", dataType = DATA_TYPE.NUMB, mandato
{ name: "Нет", value: 0 },
{ name: "Да", value: 1 }
]
},
{
name: "value",
value: current.value,
label: "Значение (для отладки)",
type: current.dataType === DATA_TYPE.NUMB ? "number" : current.dataType === DATA_TYPE.DATE ? "date" : "text"
}
]}
onOk={handleOk}
onCancel={handleCancel}
onInputChange={handleInputChange}
/>
);
};
@ -64,6 +85,7 @@ ArgIUDialog.propTypes = {
title: PropTypes.string,
dataType: PropTypes.number,
mandatory: PropTypes.number,
value: PropTypes.string,
insert: PropTypes.bool,
onOk: PropTypes.func,
onCancel: PropTypes.func

View File

@ -25,10 +25,10 @@ const useQueryArgs = query => {
//Добавление аргумента запроса
const addArg = useCallback(
async (name, title, dataType, mandatory) => {
async (name, title, dataType, mandatory, value) => {
await executeStored({
stored: "PKG_P8PANELS_QE.QUERY_OPT_ARG_ADD",
args: { NRN: query, SNAME: name, STITLE: title, NDATA_TYPE: dataType, NMANDATORY: mandatory },
args: { NRN: query, SNAME: name, STITLE: title, NDATA_TYPE: dataType, NMANDATORY: mandatory, SVALUE: value },
loader: false
});
},
@ -37,10 +37,10 @@ const useQueryArgs = query => {
//Исправление аргумента запроса
const editArg = useCallback(
async (name, title, dataType, mandatory) => {
async (name, title, dataType, mandatory, value) => {
await executeStored({
stored: "PKG_P8PANELS_QE.QUERY_OPT_ARG_EDIT",
args: { NRN: query, SNAME: name, STITLE: title, NDATA_TYPE: dataType, NMANDATORY: mandatory },
args: { NRN: query, SNAME: name, STITLE: title, NDATA_TYPE: dataType, NMANDATORY: mandatory, SVALUE: value },
loader: false
});
},

View File

@ -35,14 +35,14 @@ const InspectorQueryArguments = ({ query, args = [], onOptionsChanged = null })
//При добавлении аргумента
const handleArgAdd = async (arg, cb) => {
await addArg(arg.name, arg.title, arg.dataType, arg.mandatory);
await addArg(arg.name, arg.title, arg.dataType, arg.mandatory, arg.value);
cb && cb();
notifyOptionsChanged();
};
//При изменении аргумента
const handleArgEdit = async (arg, cb) => {
await editArg(arg.name, arg.title, arg.dataType, arg.mandatory);
await editArg(arg.name, arg.title, arg.dataType, arg.mandatory, arg.value);
cb && cb();
notifyOptionsChanged();
};

View File

@ -135,6 +135,7 @@ const useQuery = query => {
args: { NRN: query },
respArg: "COUT",
isArray: name => ["XENT", "XATTR", "XRL", "XARG"].includes(name),
attributeValueProcessor: (name, val) => (["value"].includes(name) ? undefined : val),
loader: true
});
setQueryDiagram(serverQueryData2QueryDiagram(data?.XENTS?.XENT || [], data?.XRLS?.XRL || []));

View File

@ -118,7 +118,8 @@ create or replace package PKG_P8PANELS_QE as
SNAME in varchar2, -- Имя
STITLE in varchar2, -- Заголовок
NDATA_TYPE in number, -- Тип данных (см. константы PKG_STD.DATA_TYPE_*)
NMANDATORY in number -- Флаг обязательности (1 - да, 0 - нет)
NMANDATORY in number, -- Флаг обязательности (1 - да, 0 - нет)
SVALUE in varchar2 -- Значение для отладки (строковое представление для всех типов данных)
);
/* Изменение аргумента запроса */
@ -128,7 +129,8 @@ create or replace package PKG_P8PANELS_QE as
SNAME in varchar2, -- Имя
STITLE in varchar2, -- Заголовок
NDATA_TYPE in number, -- Тип данных (см. константы PKG_STD.DATA_TYPE_*)
NMANDATORY in number -- Флаг обязательности (1 - да, 0 - нет)
NMANDATORY in number, -- Флаг обязательности (1 - да, 0 - нет)
SVALUE in varchar2 -- Значение для отладки (строковое представление для всех типов данных)
);
/* Удаление аргумента запроса */
@ -503,7 +505,8 @@ create or replace package body PKG_P8PANELS_QE as
SNAME in varchar2, -- Имя
STITLE in varchar2, -- Заголовок
NDATA_TYPE in number, -- Тип данных (см. константы PKG_STD.DATA_TYPE_*)
NMANDATORY in number -- Флаг обязательности (1 - да, 0 - нет)
NMANDATORY in number, -- Флаг обязательности (1 - да, 0 - нет)
SVALUE in varchar2 -- Значение для отладки (строковое представление для всех типов данных)
)
is
RQ P8PNL_QE_QUERY%rowtype; -- Запись запроса
@ -520,7 +523,8 @@ create or replace package body PKG_P8PANELS_QE as
SNAME => SNAME,
STITLE => STITLE,
NDATA_TYPE => NDATA_TYPE,
NMANDATORY => NMANDATORY);
NMANDATORY => NMANDATORY,
SVALUE => SVALUE);
/* Сохраняем обновленную настройку */
PKG_P8PANELS_QE_BASE.QUERY_OPT_SET(NRN => RQ.RN, ROPT => ROPT);
end QUERY_OPT_ARG_ADD;
@ -532,7 +536,8 @@ create or replace package body PKG_P8PANELS_QE as
SNAME in varchar2, -- Имя
STITLE in varchar2, -- Заголовок
NDATA_TYPE in number, -- Тип данных (см. константы PKG_STD.DATA_TYPE_*)
NMANDATORY in number -- Флаг обязательности (1 - да, 0 - нет)
NMANDATORY in number, -- Флаг обязательности (1 - да, 0 - нет)
SVALUE in varchar2 -- Значение для отладки (строковое представление для всех типов данных)
)
is
RQ P8PNL_QE_QUERY%rowtype; -- Запись запроса
@ -559,7 +564,8 @@ create or replace package body PKG_P8PANELS_QE as
SNAME => SNAME,
STITLE => STITLE,
NDATA_TYPE => NDATA_TYPE,
NMANDATORY => NMANDATORY);
NMANDATORY => NMANDATORY,
SVALUE => SVALUE);
/* Сохраняем обновленную настройку */
PKG_P8PANELS_QE_BASE.QUERY_OPT_SET(NRN => RQ.RN, ROPT => ROPT);
end QUERY_OPT_ARG_EDIT;

View File

@ -6,7 +6,8 @@ create or replace package PKG_P8PANELS_QE_BASE as
SNAME PKG_STD.TSTRING, -- Имя
STITLE PKG_STD.TSTRING, -- Заголовок
NDATA_TYPE PKG_STD.TNUMBER, -- Тип данных (см. константы PKG_STD.DATA_TYPE_*)
NMANDATORY PKG_STD.TNUMBER -- Флаг обязательности (1 - да, 0 - нет)
NMANDATORY PKG_STD.TNUMBER, -- Флаг обязательности (1 - да, 0 - нет)
SVALUE PKG_STD.TLSTRING -- Значение для отладки (строковое представление для всех типов данных)
);
/* Типы данных - Коллекция аргументов */
@ -90,7 +91,8 @@ create or replace package PKG_P8PANELS_QE_BASE as
SNAME in varchar2, -- Имя
STITLE in varchar2, -- Заголовок
NDATA_TYPE in number, -- Тип данных (см. константы PKG_STD.DATA_TYPE_*)
NMANDATORY in number -- Флаг обязательности (1 - да, 0 - нет)
NMANDATORY in number, -- Флаг обязательности (1 - да, 0 - нет)
SVALUE in varchar2 -- Значение для отладки (строковое представление для всех типов данных)
);
/* Изменение аргумента в коллекции */
@ -101,7 +103,8 @@ create or replace package PKG_P8PANELS_QE_BASE as
SNAME in varchar2, -- Имя
STITLE in varchar2, -- Заголовок
NDATA_TYPE in number, -- Тип данных (см. константы PKG_STD.DATA_TYPE_*)
NMANDATORY in number -- Флаг обязательности (1 - да, 0 - нет)
NMANDATORY in number, -- Флаг обязательности (1 - да, 0 - нет)
SVALUE in varchar2 -- Значение для отладки (строковое представление для всех типов данных)
);
/* Удаление аргумента из коллекции */
@ -366,6 +369,7 @@ create or replace package body PKG_P8PANELS_QE_BASE as
SATTR_USE constant PKG_STD.TSTRING := 'use'; -- Применение в запросе
SATTR_SHOW constant PKG_STD.TSTRING := 'show'; -- Отображение в запросе
SATTR_PARENT_ENTITY constant PKG_STD.TSTRING := 'parentEntity'; -- Идентификатор родительской сущности
SATTR_VALUE constant PKG_STD.TSTRING := 'value'; -- Значение
/* Константы - зарезервированные имена рагументов */
SARG_NAME_PAGE constant PKG_STD.TSTRING := 'NPAGE'; -- Номер страницы
@ -432,7 +436,8 @@ create or replace package body PKG_P8PANELS_QE_BASE as
SNAME in varchar2, -- Имя
STITLE in varchar2, -- Заголовок
NDATA_TYPE in number, -- Тип данных (см. константы PKG_STD.DATA_TYPE_*)
NMANDATORY in number -- Флаг обязательности (1 - да, 0 - нет)
NMANDATORY in number, -- Флаг обязательности (1 - да, 0 - нет)
SVALUE in varchar2 -- Значение для отладки (строковое представление для всех типов данных)
) return TARG -- Описание аргумента
is
RARG TARG; -- Буфер для результата
@ -475,6 +480,7 @@ create or replace package body PKG_P8PANELS_QE_BASE as
RARG.STITLE := STITLE;
RARG.NDATA_TYPE := NDATA_TYPE;
RARG.NMANDATORY := NMANDATORY;
RARG.SVALUE := SVALUE;
/* Вернем полученное */
return RARG;
end TARG_MAKE;
@ -493,6 +499,7 @@ create or replace package body PKG_P8PANELS_QE_BASE as
PKG_XFAST.ATTR(SNAME => SATTR_TITLE, SVALUE => RARG.STITLE);
PKG_XFAST.ATTR(SNAME => SATTR_DATA_TYPE, NVALUE => RARG.NDATA_TYPE);
PKG_XFAST.ATTR(SNAME => SATTR_MANDATORY, NVALUE => RARG.NMANDATORY);
PKG_XFAST.ATTR(SNAME => SATTR_VALUE, SVALUE => RARG.SVALUE);
/* Закрываем описание аргумента */
PKG_XFAST.UP();
end TARG_TO_XML;
@ -521,6 +528,7 @@ create or replace package body PKG_P8PANELS_QE_BASE as
RRES.STITLE := PKG_XPATH.ATTRIBUTE(RNODE => XNODE, SNAME => SATTR_TITLE);
RRES.NDATA_TYPE := PKG_XPATH.ATTRIBUTE_NUM(RNODE => XNODE, SNAME => SATTR_DATA_TYPE);
RRES.NMANDATORY := PKG_XPATH.ATTRIBUTE_NUM(RNODE => XNODE, SNAME => SATTR_MANDATORY);
RRES.SVALUE := PKG_XPATH.ATTRIBUTE(RNODE => XNODE, SNAME => SATTR_VALUE);
/* Освободим документ */
PKG_XPATH.FREE(RDOCUMENT => XDOC);
exception
@ -570,7 +578,8 @@ create or replace package body PKG_P8PANELS_QE_BASE as
SNAME in varchar2, -- Имя
STITLE in varchar2, -- Заголовок
NDATA_TYPE in number, -- Тип данных (см. константы PKG_STD.DATA_TYPE_*)
NMANDATORY in number -- Флаг обязательности (1 - да, 0 - нет)
NMANDATORY in number, -- Флаг обязательности (1 - да, 0 - нет)
SVALUE in varchar2 -- Значение для отладки (строковое представление для всех типов данных)
)
is
RARG TARG; -- Добавляемый аргумент
@ -584,7 +593,11 @@ create or replace package body PKG_P8PANELS_QE_BASE as
P_EXCEPTION(0, 'Аргумент с именем "%s" уже существует.', SNAME);
end if;
/* Формируем аргумент */
RARG := TARG_MAKE(SNAME => SNAME, STITLE => STITLE, NDATA_TYPE => NDATA_TYPE, NMANDATORY => NMANDATORY);
RARG := TARG_MAKE(SNAME => SNAME,
STITLE => STITLE,
NDATA_TYPE => NDATA_TYPE,
NMANDATORY => NMANDATORY,
SVALUE => SVALUE);
/* Добавляем его в коллекцию */
RARGS.EXTEND();
RARGS(RARGS.LAST) := RARG;
@ -598,7 +611,8 @@ create or replace package body PKG_P8PANELS_QE_BASE as
SNAME in varchar2, -- Имя
STITLE in varchar2, -- Заголовок
NDATA_TYPE in number, -- Тип данных (см. константы PKG_STD.DATA_TYPE_*)
NMANDATORY in number -- Флаг обязательности (1 - да, 0 - нет)
NMANDATORY in number, -- Флаг обязательности (1 - да, 0 - нет)
SVALUE in varchar2 -- Значение для отладки (строковое представление для всех типов данных)
)
is
RARG TARG; -- Добавляемый аргумент
@ -613,7 +627,11 @@ create or replace package body PKG_P8PANELS_QE_BASE as
P_EXCEPTION(0, 'Не указан индекс изменяемого аргумента.');
end if;
/* Формируем аргумент */
RARG := TARG_MAKE(SNAME => SNAME, STITLE => STITLE, NDATA_TYPE => NDATA_TYPE, NMANDATORY => NMANDATORY);
RARG := TARG_MAKE(SNAME => SNAME,
STITLE => STITLE,
NDATA_TYPE => NDATA_TYPE,
NMANDATORY => NMANDATORY,
SVALUE => SVALUE);
/* Обновляем аргумент в коллекции */
begin
RARGS(NINDEX) := RARG;