Правила обновления пригодности

Правила обновления пригодности указывают SberMobile Server, когда нужно перерассчитывать выражение пригодности для определенного контекста, чтобы проверить, становится ли он пригоден для ресурса. Каждое правило обновления пригодности состоит из:

  • Маски контекстов, в которой нужно мониторить события

  • Имени События, которое проверяется

  • Целевого выражения, которое, если оно обозначено, указывает на контекст, чью пригодность нужно проверить. Если Целевое выражение не определено (что бывает в большинстве случаев), система проверяет пригодность контекста, в котором случилось Событие.

Среда вычисления целевого выражения:

Контекст по умолчанию

Контекст события, которое запустило правило обновления пригодности.

Таблица данных по умолчанию

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

Строка по умолчанию

0

Переменные среды

Только стандартные переменные.

Предположим, что мы хотим создать отчет, который пригоден для всех контекстов устройств, в описании которых есть префикс Collector_. Мы можем использовать следующее Выражение пригодности:

startsWith({info$type}, "device.") && startsWith({info$description}, "Collector_")

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

  • Маска: users.*.devices.*

  • Событие: infoChanged

  • Целевое выражение: <Not Set>

Это правило активируется каждый раз, когда случается событие infoChanged в любом контексте устройства. Это происходит, когда меняется переменная info, т.е. когда происходит изменение описания контекста. Правило вызовет перерасчет Validity Expression для контекста устройства, чье описание поменялось, и если новое описание начинается с Collector_, действие Запустить отчет добавляется к устройству.

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

aggregate({users.admin.devgroups.test:visibleChildren}, "{env/previous} + ({path} == '" + dc() + "' ? 1 : 0)", 0) > 0

Это выражение пригодности использует функцию aggregate() для представления всех строк в таблице visibleChildren каждого контекста. Если поле path в текущей строке равно пути контекста, чья пригодность проверяется (возвращается функцией dc()), этот контекст считается найденным среди членов группы и, таким образом, пригодным. В этом случае функция aggregate() возвращает 1 (в ином случае 0).

Если нужно зарегистрировать инструментальную панель в контекстном меню устройств сразу после их добавления в группу test, нужно добавить следующее Правило обновления пригодности:

  • Маска: users.admin.devgroups.test

  • Событие: visibleChildAdded

  • Целевое выражение: {path}

Когда к группе добавляется новый член, в групповом контексте случается событие visibleChildAdded. Целевое выражение ссылается на поле path этого события и, таким образом, Выражение пригодности перерассчитывается для новых добавленных членов (указанных полем path этого события). Поскольку оно всегда возвращает true, действие Открыть инструментальную панель инструментальной панели будет добавляться к устройству.

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

  • Маска: users.admin.devgroups.test

  • Событие: visibleChildRemoved

  • Целевое выражение: {path}

Единственная разница в том, что время события visibleChildRemoved Выражение пригодности вернет как false для контекста, указанного полем path данных события. Поэтому инструментальная панель снимет свою регистрацию с любого устройства, исключенного из группы.