.. _spec_work-center_navhub_markup: Подключение Хаба к приложению ============================= .. versionadded:: 1.28.0 Разметка :ref:`Навигационного хаба ` описана в справочнике разметки представлений — назначение фреймов, их атрибуты, обязательность, допустимые значения и умолчания смотрите на страницах: - :doc:`desktop ` — атрибут ``hubSelectionName``; - :doc:`navigationHub ` — фрейм выборки-хаба (тайл-компоненты); - :doc:`tiles (контрол секции) ` — связь ролей секций с выборками; - :doc:`tiles (фрейм выборки тайлов) ` — тайлы; - :doc:`tilesGroups ` — группы тайлов. Эта страница описывает то, чего на страницах справочника нет: как выборки Хаба связаны между собой и по каким правилам сервер интерпретирует их данные. Схема связей ------------ Подключение строится на трёх видах выборок — главной выборке приложения, выборке-хабе и выборках тайлов и групп, — связанных по именам в формате ``имя#представление``:: Главная выборка приложения │ ▼ Module_NavigationHub#List — выборка-хаб, фрейм ├─ │ │ └──▶ Module_NavHubPinnedGroups#List — фрейм │ └──────────────────────────▶ Module_NavHubPinned#List — фрейм ├─ └─ Семантика наполнения -------------------- - Сервер открывает выборки Хаба как дочерние от главной выборки приложения при её инициализации, без построения GUI, и читает их данные целиком. Описание Хаба сервер формирует при инициализации приложения; начальная гидрация клиента выполняется асинхронно при создании главного меню. - Секция "Закрепленное" наполняется объединением проектного описания (данные выборок Хаба) и пользовательских настроек, которые сервер хранит отдельно для каждого пользователя. Секции "Часто используемое" и "Недавно закрытые" наполняются только проектными данными истории; их накопление описано на странице :doc:`Наполнение секций истории `. - Секция наполняется, только если есть и запись с её ролью в данных выборки-хаба, и контрол ```` с той же ролью в разметке ````. - Тайлы, не ссылающиеся ни на какую группу или ссылающиеся на несуществующую, попадают в группу "по умолчанию" — при необходимости сервер создаёт её сам. - Дубли тайлов по паре (тип действия, значение действия) в пределах тайл-компонента схлопываются: в секции остаётся один тайл. У тайлов с действием-выборкой в сравнение входят и параметры открытия: тайлы одной выборки с разными параметрами — разные тайлы. Параметры сравниваются как набор пар «имя — значение» без учёта порядка ключей; значения приводятся к строкам, поэтому ``1`` и ``"1"`` совпадают. Параметры открытия выборки -------------------------- Тайл с действием-выборкой может открывать не выборку целиком, а конкретный объект — например, карточку записи или список с заданным фильтром. Для этого в выборке тайлов заводится колонка с параметрами открытия, а её имя указывается в необязательном атрибуте ``actionParamsAttr`` фрейма ````; формат значения описан в справочнике. - При клике сервер открывает выборку, передавая параметры форме так же, как параметры URI-ссылки на выборку или вызова ``openFormEx``: сервер имена параметров не интерпретирует и не проверяет по метаданным выборки. - Если форма той же выборки с теми же параметрами уже открыта, повторный клик активирует её, а не открывает вторую. Исключение — параметры открытия на создание или копирование (``CREATINGMODE``, ``EDITINGTYPE`` со значением, отличным от ``Edit``): с ними форма всегда открывается заново. Тайл без параметров, как и любая форма, открытая без параметров, при каждом клике открывает новую форму. - При закреплении тайла из секций истории параметры переносятся в закреплённый тайл и сохраняются в пользовательских настройках. Диагностика подключения ----------------------- Ошибки наполнения Хаба не прерывают инициализацию приложения: проектные данные проблемной секции не загружаются, а причина в большинстве случаев фиксируется в серверном логе. Секция "Закрепленное" при этом не обязательно пуста: закрепления, сохранённые в пользовательских настройках, выводятся и без проектных данных. Для поиска причины определите, какой из случаев возник. 1. **Секция пуста, записей в логе нет.** Проверьте, что в ```` главной выборки задан атрибут ``hubSelectionName`` и что в данных выборки-хаба есть запись с ролью секции. Секция может быть пустой и штатно — если выборка тайлов не вернула данных. 2. **В логе есть ошибка наполнения секции.** Проверьте, что выборка существует, доступна и содержит в представлении нужный фрейм: без него сопоставление колонок неизвестно. Роль записи в данных выборки-хаба должна совпадать с ролью контрола ```` в разметке ````. Сообщение в логе содержит роль проблемной секции. 3. **Тайл не отображается.** Проверьте параметры открытия: если они заданы, значение должно быть JSON-объектом без ``null``, вложенных объектов и массивов. Тайл с некорректными параметрами не выводится — он открыл бы не тот объект. Причина с идентификатором тайла фиксируется в логе при чтении выборки тайлов. 4. **Тайл отображается, но клик не выполняет действие.** Проверьте значение действия: оно не должно быть пустым, значение действия-выборки должно содержать разделитель ``#``, а операция должна присутствовать в меню главной выборки. Такие ошибки обнаруживаются только при клике: действие пропускается, причина фиксируется в логе. .. seealso:: :doc:`Наполнение секций истории `