Добавление ссылок в таблицы

Инструментальная панель SberMobile, представляющая обзор инфраструктуры устройств, обычно содержит несколько таблиц, в которых можно найти:

  • Устройства, имеющие некоторые неполадки в данный момент
  • Устройства, имеющие чрезвычайно высокие или низкие показатели производительности
  • Другие ресурсы, такие как группы устройств, сегменты сети и т.д.

Такие таблицы полезны сами по себе, но операторам хотелось бы, чтобы при нажатии на определенном ряду с именем устройства в таблице могло вызываться определенное действие, ассоциирующееся с этим устройством, т.е. открытие его "персональной" инструментальной панели.

Этот урок объясняет, как добавлять ссылки к таблице.

Теория

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

Технически ссылки отрисовываются в ячейках таблицы, использующей Отрисовщик ссылок. Значение, содержащееся в ячейке, будет отображаться как привязка ссылки (т.е. текст ссылки). Текст ссылки, т.е. действие, которое вызывается при нажатии на ссылку, содержится в опциях редактора.

Однако если мы зададим опции статического редактора для поля этой таблицы, каждая ссылка в ряду приведет к той же цели. Нужно, чтобы у каждой ссылки была собственная цель, поэтому мы используем следующий метод, чтобы динамически задать опции редктора:

  • Добавьте новую колонку к таблице. Значение этой колонки в каждом ряду содержит цель ссылки для ссылки, содержащейся в другой ссылке того же ряда.
  • Скройте вышеобозначенную колонку, чтобы она не отображалась в таблице.
  • Используйте привязку для получения значения вышеобозначенного скрытого поля и настройте опции редактора поля ссылки. Эта привязка работает по рядам, предлагая отдельные опции редактирования для всех ссылок.

Реализация

Предположим, у нас есть таблица, отображающая показатели температуры разных устройств. Она имеет две колонки: Устройство (имя устройства: device) и Температура (имя поля: temperature). Мы хотим, чтобы по колонке Устройство можно было кликать, открывая ассоциируемую с ним инструментальную панель (например, график температур).

1. Добавление скрытых колонок

Значения в колонке Устройства являются описаниями устройств, не их системных идентификаторов. Таким образом, нужно добавить новую скрытую колонку context, в которой будет обозначен путь контекстов устройств. Существует множество способов это сделать. Например, если мы делаем привязку запроса, мы может добавить ссылку к полю CONTEXT_ID:

SELECT 

  data$CONTEXT_ID AS context,

  data.info$icon AS icon,

  data.contextStatus$status AS status,

  data.info$description AS device, 

  data.temperature$temperature AS temperature

FROM

  users.*.devices.*:info:contextStatus:temperature AS data

Обратите внимание, что запрос будет иметь результатом таблицу с пятью колонками:

  • Путь первой колонки контекста устройства, который будет скрыт.
  • Вторая и третья колонки содержат основные идентификаторы иконки и статуса устройства. Они будут использоваться для отображения иконки статуса устройства рядом со ссылкой. Эти колонки будут также скрыты.
  • Четвертая и пятая колонки будут отображать ссылку устройства и чтение температуры устройства.

Результат запроса будет следующим:

2. Добавление привязки ссылки

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

device#options='action/'+{context}+':configure$' + {icon} + ({status} != null ? '_' + {status} : '')

Цель привязки - device#options. Она задает параметры редактора в каждой ячейке колонки device.

Выражение привязки - 'action/'+{context}+':configure$' + {icon} + ({status} != null ? '_' + {status} : ''). Она формирует строку редакторских опций, которая является ссылкой на действие, которое нужно запускать при нажатии на ссылку.

Актуальный текст параметров редактора, возвращенный вышеобозначенным выражением, будет выглядеть следующим образом (пример): action/users.admin.devices.thermometer1:configure$device_21.

Вышеобозначенные опции заставляют систему запустить действие configure из контекста users.admin.devices.thermometer1, соответствующее устройству термометр. Строка device_21 обозначает идентификатор иконки, представляющей состояние текущего устройства. Действие конфигурирования открывает инструментальную панель(и) устройства.

Значения для контекстного имени и статуса/иконки устройств берутся из скрытых полей, определеных в нашем запросе.

Если вам не нужны иконки рядом со ссылками, вы можете убрать вторую и третью линии из пункта SELECT этого запроса и использовать простую привязку:

device#options='action/'+{context}+':configure'

Запросы SberMobile имеют свойство Формат выхода, который был разработан для добавления необходимых отметок к результатам запроса. Можно использовать следующий формат выхода, чтобы скрыть наши дополнительные колонки и добавить привязки ссылок:

<<context><S><F=H><A=>>

<<icon><S><F=H><A=>>

<<status><S><F=H><A=>>

<<device><S><A=><D=Device><E=reference>>

<<temperature><F><A=><D=Temperature>>

<B=<device#options='action/'+{context}+':configure$' + {icon} + ({status} != null ? '_' + {status} : '')>>

Этот формат выхода вносит следующие необходимые исправления в формат выхода запроса по умолчанию:

  • Настраивает скрытый флажок в колонках context, icon и status
  • Настраивает редактор reference в колонке device
  • Добавляет привязку ссылки

Вот и все! Теперь можно ссылаться на запрос из инструментальной панели для просмотра статистики температуры на интерфейсе оператора первой линии.

Финальная таблица со ссылками: