Переменные

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

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

  • Когда вы читаете переменную контекста, вы всегда получаете таблицу данных. Значение может быть получено из хранилища, считано с устройства или сформировано на лету серверным модулем - но в любом случае это таблица.

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

Переменные контекста также известны как свойства, параметры или настройки. В терминологии AggreGate эти слова взаимозаменяемы. Получение/установка свойств контекста через API, получение параметров контекста по сети или изменение настроек контекста через UI по сути означают чтение и запись переменных контекста разными способами.

Не забывайте, что даже простые значения (например, числа и строки) представлены в виде одноклеточных таблиц данных. Если вы читаете переменную Temperature, вы получите таблицу с одной ячейкой, содержащую одно целочисленное поле или поле с плавающей точкой.

Все переменные могут обрабатываться с помощью унифицированных процедур работы с таблицами (например, интеллектуального копирования таблиц данных).

Примеры

Самый простой пример переменной - переменная показания давления, определенная в контексте устройства. Это переменная только для чтения, формат которой содержит всего одно поле с плавающей точкой и строго одну запись.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Was this page helpful?