4.1.6.1. Подключение Хаба к приложению

Added in version 1.28.0.

Разметка Навигационного хаба описана в справочнике разметки представлений — назначение фреймов, их атрибуты, обязательность, допустимые значения и умолчания смотрите на страницах:

Эта страница описывает то, чего на страницах справочника нет: как выборки Хаба связаны между собой и по каким правилам сервер интерпретирует их данные.

4.1.6.1.1. Схема связей

Подключение строится на трёх видах выборок — главной выборке приложения, выборке-хабе и выборках тайлов и групп, — связанных по именам в формате имя#представление:

Главная выборка приложения
  <desktop hubSelectionName="Module_NavigationHub#List"/>
     │
     ▼
Module_NavigationHub#List  — выборка-хаб, фрейм <navigationHub>
  ├─ <tiles role="favorites" selectionName="Module_NavHubPinned#List"
  │         groupsSelectionName="Module_NavHubPinnedGroups#List"/>
  │       │                       └──▶ Module_NavHubPinnedGroups#List — фрейм <tilesGroups>
  │       └──────────────────────────▶ Module_NavHubPinned#List      — фрейм <tiles>
  ├─ <tiles role="popular" selectionName="Module_NavHubHistory#Popular"/>
  └─ <tiles role="latest"  selectionName="Module_NavHubHistory#Latest"/>

4.1.6.1.2. Семантика наполнения

  • Сервер открывает выборки Хаба как дочерние от главной выборки приложения при её инициализации, без построения GUI, и читает их данные целиком. Описание Хаба сервер формирует при инициализации приложения; начальная гидрация клиента выполняется асинхронно при создании главного меню.

  • Секция “Закрепленное” наполняется объединением проектного описания (данные выборок Хаба) и пользовательских настроек, которые сервер хранит отдельно для каждого пользователя. Секции “Часто используемое” и “Недавно закрытые” наполняются только проектными данными истории; их накопление описано на странице Наполнение секций истории.

  • Секция наполняется, только если есть и запись с её ролью в данных выборки-хаба, и контрол <tiles> с той же ролью в разметке <navigationHub>.

  • Тайлы, не ссылающиеся ни на какую группу или ссылающиеся на несуществующую, попадают в группу “по умолчанию” — при необходимости сервер создаёт её сам.

  • Дубли тайлов по паре (тип действия, значение действия) в пределах тайл-компонента схлопываются: в секции остаётся один тайл. У тайлов с действием-выборкой в сравнение входят и параметры открытия: тайлы одной выборки с разными параметрами — разные тайлы. Параметры сравниваются как набор пар «имя — значение» без учёта порядка ключей; значения приводятся к строкам, поэтому 1 и "1" совпадают.

4.1.6.1.3. Параметры открытия выборки

Тайл с действием-выборкой может открывать не выборку целиком, а конкретный объект — например, карточку записи или список с заданным фильтром. Для этого в выборке тайлов заводится колонка с параметрами открытия, а её имя указывается в необязательном атрибуте actionParamsAttr фрейма <tiles>; формат значения описан в справочнике.

  • При клике сервер открывает выборку, передавая параметры форме так же, как параметры URI-ссылки на выборку или вызова openFormEx: сервер имена параметров не интерпретирует и не проверяет по метаданным выборки.

  • Если форма той же выборки с теми же параметрами уже открыта, повторный клик активирует её, а не открывает вторую. Исключение — параметры открытия на создание или копирование (CREATINGMODE, EDITINGTYPE со значением, отличным от Edit): с ними форма всегда открывается заново. Тайл без параметров, как и любая форма, открытая без параметров, при каждом клике открывает новую форму.

  • При закреплении тайла из секций истории параметры переносятся в закреплённый тайл и сохраняются в пользовательских настройках.

4.1.6.1.4. Диагностика подключения

Ошибки наполнения Хаба не прерывают инициализацию приложения: проектные данные проблемной секции не загружаются, а причина в большинстве случаев фиксируется в серверном логе. Секция “Закрепленное” при этом не обязательно пуста: закрепления, сохранённые в пользовательских настройках, выводятся и без проектных данных.

Для поиска причины определите, какой из случаев возник.

  1. Секция пуста, записей в логе нет. Проверьте, что в <desktop> главной выборки задан атрибут hubSelectionName и что в данных выборки-хаба есть запись с ролью секции. Секция может быть пустой и штатно — если выборка тайлов не вернула данных.

  2. В логе есть ошибка наполнения секции. Проверьте, что выборка существует, доступна и содержит в представлении нужный фрейм: без него сопоставление колонок неизвестно. Роль записи в данных выборки-хаба должна совпадать с ролью контрола <tiles> в разметке <navigationHub>. Сообщение в логе содержит роль проблемной секции.

  3. Тайл не отображается. Проверьте параметры открытия: если они заданы, значение должно быть JSON-объектом без null, вложенных объектов и массивов. Тайл с некорректными параметрами не выводится — он открыл бы не тот объект. Причина с идентификатором тайла фиксируется в логе при чтении выборки тайлов.

  4. Тайл отображается, но клик не выполняет действие. Проверьте значение действия: оно не должно быть пустым, значение действия-выборки должно содержать разделитель #, а операция должна присутствовать в меню главной выборки. Такие ошибки обнаруживаются только при клике: действие пропускается, причина фиксируется в логе.