Документация: setAppBarTitle, setAppBarShow, findPanelByName описаны и добавлены в пример

This commit is contained in:
Mim 2026-04-08 12:30:04 +03:00
parent 7d6f1283bb
commit cf8d6d44ae
2 changed files with 124 additions and 51 deletions

105
README.md
View File

@ -708,9 +708,9 @@ const MyPanel = () => {
}
```
### API для взаимодействия с WEB-приложением "ПАРУС 8 Онлайн"
### API для взаимодействия с WEB-приложением "ПАРУС 8 Онлайн" и ядром фреймворка
Для взаимодействия панелей с пользовательским интерфейсом "ПАРУС 8 Онлайн" в составе расширения предусмотрен специальный API. Его подключение к компоненте панели осуществляется через контекст `ApplicationCtx` ("app/context/application.js").
Для взаимодействия панелей с пользовательским интерфейсом "ПАРУС 8 Онлайн" в составе расширения предусмотрен специальный API. Его подключение к компоненте панели осуществляется через контекст `ApplicationCtx` ("app/context/application.js"). Данный контекст так же позволяет управлять некоторыми базовыми функциями приложения фреймворка и получать сведения о зарегистрированных панелях.
В состав API входят:
@ -720,6 +720,9 @@ const MyPanel = () => {
- `pOnlineShowDictionary` - функция, отображение раздела "ПАРУС 8 Онлайн" в режиме словаря
- `pOnlineUserProcedure` - функция, исполнение "Пользовательской процедуры"
- `pOnlineUserReport` - функция, печать "Пользовательского отчёта"
- `setAppBarTitle` - функция, установка текста заголовка панели
- `setAppBarShow` - функция, установка флага отображения системного заголовка панели
- `findPanelByName` - функция, поиск зарегистрированной в файле конфигурации фреймвора (`p8panels.config`) панели по уникальному имени
#### `String pOnlineShowTab(Object)`
@ -848,6 +851,36 @@ const MyPanel = () => {
**Результат:** функция не возвращает значимого результата
#### `undefined setAppBarTitle(appBarTitle)`
Изменяет текст заголовка панели.
**Входные параметры:**
`appBarTitle` - необязательный, строка, текст заголовка панели (если не указан - используется заголовок панели `Panels\Panel\caption` из файла конфигурации `p8panels.config`)
**Результат:** функция не возвращает значимого результата
#### `undefined setAppBarShow(appBarShow)`
Скрывает/отображает заголовок панели.
**Входные параметры:**
`appBarShow` - обязательный, логический, флаг отображения заголовка панели (`false` - скрыть заголовок, `true` - отобразить заголовок)
**Результат:** функция не возвращает значимого результата
#### `object findPanelByName(name)`
Возвращает сведения (XML элемент `Panels\Panel` в JSON-интерпретации) о панели из файла конфигурации фреймворка (`p8panels.config`) по её уникальному наименованию (`Panels\Panel\name`).
**Входные параметры:**
`name` - обязательный, строка, уникальное имя панели (указывается в атрибуте `name` XML-элемента `Panels\Panel` файла конфигурации фреймворка `p8panels.config`)
**Результат:** функция возвращает объект, содержащий JSON-интерпретацию XML-элемента `Panel` файла конфигурации `p8panels.config`, соответствующего переданному имени панели (`undefined` - если сведения о панели не были найдены)
Примеры (см. "app/panels/samples/p8online.js"):
```
@ -862,13 +895,20 @@ const STYLES = {
DIVIDER: { margin: "15px" }
};
//Пример: API для взаимодействия с "ПАРУС 8 Онлайн"
//Пример: API для взаимодействия с "ПАРУС 8 Онлайн" и ядром фреймворка
const P8Online = ({ title }) => {
//Собственное состояние
//Собственное состояние - флаг отображения пользовательского текста заголовка
const [titleCustom, setTitleCustom] = useState(false);
//Собственное состояние - отображение заголовка
const [titleVisible, setTitleVisible] = useState(true);
//Собственное состояние - выбранный контрагент
const [agent, setAgent] = useState("");
//Подключение к контексту приложения
const { pOnlineShowUnit, pOnlineShowTab, pOnlineShowDocument, pOnlineShowDictionary } = useContext(ApplicationCtx);
const { pOnlineShowUnit, pOnlineShowTab, pOnlineShowDocument, pOnlineShowDictionary, setAppBarTitle, setAppBarShow, findPanelByName } =
useContext(ApplicationCtx);
//Генерация содержимого
return (
@ -876,20 +916,44 @@ const P8Online = ({ title }) => {
<Typography sx={STYLES.TITLE} variant={"h6"}>
{title}
</Typography>
{/* Изменение текста заголовка */}
{titleVisible && (
<>
<Button
variant="contained"
onClick={() => {
setAppBarTitle(titleCustom ? "" : "Пользовательский текст");
setTitleCustom(!titleCustom);
}}
>
{`${titleCustom ? "Восстановить" : "Изменить"} текст заголовка`}
</Button>
<Divider sx={STYLES.DIVIDER} />
</>
)}
{/* Сокрытие/отображение заголовка */}
<Button
variant="contained"
onClick={() => {
setAppBarShow(!titleVisible);
setTitleVisible(!titleVisible);
}}
>
{`${titleVisible ? "Скрыть" : "Отобразить"} заголовок`}
</Button>
<Divider sx={STYLES.DIVIDER} />
{/* Поиск панели */}
<Button variant="contained" onClick={() => console.log(findPanelByName("Samples"))}>
Вывести в консоль сведения о данной панели
</Button>
<Divider sx={STYLES.DIVIDER} />
{/* Открыть новую закладку */}
<Button variant="contained" onClick={() => pOnlineShowTab({ caption: "PARUS.COM", url: "https://www.parus.com" })}>
Открыть закладку
</Button>
<Divider sx={STYLES.DIVIDER} />
{/* Открыть раздел */}
<Button
variant="contained"
onClick={() => {
pOnlineShowUnit({
unitCode: "Contracts"
});
}}
>
<Button variant="contained" onClick={() => pOnlineShowUnit({ unitCode: "Contracts" })}>
Открыть раздел Договоры
</Button>
<Divider sx={STYLES.DIVIDER} />
@ -899,12 +963,7 @@ const P8Online = ({ title }) => {
onClick={() => {
pOnlineShowDictionary({
unitCode: "AGNLIST",
inputParameters: [
{
name: "in_AGNABBR",
value: agent
}
],
inputParameters: [{ name: "in_AGNABBR", value: agent }],
callBack: res => (res.success === true ? setAgent(res.outParameters.out_AGNABBR) : null)
});
}}
@ -917,13 +976,7 @@ const P8Online = ({ title }) => {
<Divider sx={STYLES.DIVIDER} />
<Button
variant="contained"
onClick={() => {
pOnlineShowDocument({
unitCode: "AGNLIST",
document: agent,
inRnParameter: "in_AGNABBR"
});
}}
onClick={() => pOnlineShowDocument({ unitCode: "AGNLIST", document: agent, inRnParameter: "in_AGNABBR" })}
>{`Показать контрагента "${agent}"`}</Button>
</>
) : null}

View File

@ -1,6 +1,6 @@
/*
Парус 8 - Панели мониторинга - Примеры для разработчиков
Пример: API для взаимодействия с "ПАРУС 8 Онлайн"
Пример: API для взаимодействия с "ПАРУС 8 Онлайн" и ядром фреймворка
*/
//---------------------
@ -27,13 +27,20 @@ const STYLES = {
//Тело модуля
//-----------
//Пример: API для взаимодействия с "ПАРУС 8 Онлайн"
//Пример: API для взаимодействия с "ПАРУС 8 Онлайн" и ядром фреймворка
const P8Online = ({ title }) => {
//Собственное состояние
//Собственное состояние - флаг отображения пользовательского текста заголовка
const [titleCustom, setTitleCustom] = useState(false);
//Собственное состояние - флаг отображения заголовка
const [titleVisible, setTitleVisible] = useState(true);
//Собственное состояние - выбранный контрагент
const [agent, setAgent] = useState("");
//Подключение к контексту приложения
const { pOnlineShowUnit, pOnlineShowTab, pOnlineShowDocument, pOnlineShowDictionary } = useContext(ApplicationCtx);
const { pOnlineShowUnit, pOnlineShowTab, pOnlineShowDocument, pOnlineShowDictionary, setAppBarTitle, setAppBarShow, findPanelByName } =
useContext(ApplicationCtx);
//Генерация содержимого
return (
@ -41,20 +48,44 @@ const P8Online = ({ title }) => {
<Typography sx={STYLES.TITLE} variant={"h6"}>
{title}
</Typography>
{/* Изменение текста заголовка */}
{titleVisible && (
<>
<Button
variant="contained"
onClick={() => {
setAppBarTitle(titleCustom ? "" : "Пользовательский текст");
setTitleCustom(!titleCustom);
}}
>
{`${titleCustom ? "Восстановить" : "Изменить"} текст заголовка`}
</Button>
<Divider sx={STYLES.DIVIDER} />
</>
)}
{/* Сокрытие/отображение заголовка */}
<Button
variant="contained"
onClick={() => {
setAppBarShow(!titleVisible);
setTitleVisible(!titleVisible);
}}
>
{`${titleVisible ? "Скрыть" : "Отобразить"} заголовок`}
</Button>
<Divider sx={STYLES.DIVIDER} />
{/* Поиск панели */}
<Button variant="contained" onClick={() => console.log(findPanelByName("Samples"))}>
Вывести в консоль сведения о данной панели
</Button>
<Divider sx={STYLES.DIVIDER} />
{/* Открыть новую закладку */}
<Button variant="contained" onClick={() => pOnlineShowTab({ caption: "PARUS.COM", url: "https://www.parus.com" })}>
Открыть закладку
</Button>
<Divider sx={STYLES.DIVIDER} />
{/* Открыть раздел */}
<Button
variant="contained"
onClick={() => {
pOnlineShowUnit({
unitCode: "Contracts"
});
}}
>
<Button variant="contained" onClick={() => pOnlineShowUnit({ unitCode: "Contracts" })}>
Открыть раздел Договоры
</Button>
<Divider sx={STYLES.DIVIDER} />
@ -64,12 +95,7 @@ const P8Online = ({ title }) => {
onClick={() => {
pOnlineShowDictionary({
unitCode: "AGNLIST",
inputParameters: [
{
name: "in_AGNABBR",
value: agent
}
],
inputParameters: [{ name: "in_AGNABBR", value: agent }],
callBack: res => (res.success === true ? setAgent(res.outParameters.out_AGNABBR) : null)
});
}}
@ -82,13 +108,7 @@ const P8Online = ({ title }) => {
<Divider sx={STYLES.DIVIDER} />
<Button
variant="contained"
onClick={() => {
pOnlineShowDocument({
unitCode: "AGNLIST",
document: agent,
inRnParameter: "in_AGNABBR"
});
}}
onClick={() => pOnlineShowDocument({ unitCode: "AGNLIST", document: agent, inRnParameter: "in_AGNABBR" })}
>{`Показать контрагента "${agent}"`}</Button>
</>
) : null}