Переменные

Переменные содержат данные, относящиеся к контексту. В AggreGate Server, значение каждой переменной представляет собой Таблицу данных. Даже простые скалярные (например, числовые и строковые) значения представлены в виде таблиц данных, состоящих из одной ячейки. Это помогает использовать общий подход при обработке значений переменных. Все переменные можно обрабатывать при помощи стандартных операций с таблицами (таких как интеллектуальное копирование таблицы данных).

Переменные контекста иногда называются свойствами. Эти два слова взаимозаменяемы в языке AggreGate. Они означают одно и то же.

Примеры

В контексте Пользователь находится переменная childInfo ("Информация о пользователе"). Ее значение всегда содержит одну запись (как обусловлено Форматом переменной) с несколькими полями, в которых содержится информация об имени, фамилии пользователя, его номере телефона и т.д.

В контексте Фильтр событий находится переменная rules ("Правила фильтра"). Ее значение может включать несколько записей ("строк"), каждая из которых описывает тип события, которое должно отображаться во время активации фильтра событий.

Определение переменной

Каждая переменная задается при помощи Определения переменной, которое содержит несколько опций:

  • Имя переменной. Имя - это уникальный ID переменной внутри контекста, в котором переменная определена. Представляет собой строку, в состав которой могут входить только английские буквы, числа и символ нижнего подчеркивания ("_").

  • Формат переменной. Формат таблицы данных для переменной. Определяет, как может выглядеть переменная - минимальное и максимальное количество рядов, типы полей, возможные значения полей, правила пригодности и т.д. Некоторые переменные имеют динамический формат, т.е. их формат может быть представлен любой Таблицей данных.

  • Доступна для чтения. Флажок, указывающий на то, что можно получить значение переменной из контекста. В По факту, абсолютное большинство переменных читаемы.

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

  • Описание. Удобное для чтения описание переменной.

  • Справка. Подробное описание переменной (опционально).

  • Группа. Указывает на то, что переменная принадлежит группе переменных. Группа может быть не определена, т.е. в неё могут входить переменные, которые не принадлежат ни к одной группе. Группы помогают выбирать количество переменных для обработки. Например, контекст Устройства может включать в себя действие Конфигурировать для настройки Учетной записи Device, и другое действие для настройки аппаратного устройства. Каждое действие будет оперировать всеми переменными отдельной группы. Имя группы может быть задано заранее на AggreGate Server или получено от какого-либо аппаратного устройства, однако, изменить его нельзя.

  • Разрешения на чтение. Необходимый уровень прав доступа для получения значения данной переменной.

  • Разрешения на запись. Необходимый уровень прав доступа для изменения значения данной переменной.

Чтение и запись

Успешная операция чтения переменной возвращает текущее значение переменной в форме таблицы данных. Эта таблица всегда соответствует формату переменной, если он не динамический.

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

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

Внутренне переменные разделены на несколько типов:

  • Структуры в памяти, которые не сохраняются при остановке AggreGate Server>.

  • Долговременные настройки, которые сохраняются в базе данных.

  • Настройки устройств, которые читаются/записываются с удаленного устройства и кэшируются сервером.

  • "Виртуальные" переменные. Значение виртуальных переменных формируется на лету и не сохраняется постоянно.

Если при установке или получении значений переменных возникли проблемы, может появиться сигнал исключения. В случае выполнения операции "получить переменную", никакое значение не возвращается. Операция "Задать переменную" может вызвать исключение по какой-то другой причине, даже если значение переменной действительно было задано. Исключение содержит текстовое описание проблемы.

Работа с переменными

В большинстве случаев, значения переменных можно просматривать и редактировать при помощи компонента UI Редактор свойств. Редактор свойств использует компонент Редактор таблиц данных для отрисовки и редактирования значения каждой отдельной переменной.

События обновления переменной

Каждый раз при обновлении переменной, генерируется особое событие Обновление. Данные события содержат новое значение переменной и время обновления. В некоторых случаях в AggreGate Server также генерируется событие Изменение.

Подписка на обновленное событие помогает реагировать на изменения переменных.

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

Статус переменной

Переменные контекстов в AggreGate могут также иметь свой статус. Статус переменной представляет собой комбинацию кода статуса и его описания, удобного для чтения.

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