Определение и реализация функций

При определении функций контекста ваших устройств/агентов/серверов необходимо задать свойства их определений, т.е. имя, описание, формат ввода и вывода, уровень прав доступа, текст справки и группу. Для объявления новой функции создайте экземпляр объекта FunctionDefinition и задайте его свойства. Вот пример:

// Creating function input format (scalar, integer)

FieldFormat iff = FieldFormat.create("demoOperationInputField", FieldFormat.INTEGER_FIELD);

TableFormat inputFormat = new TableFormat(1, 1, iff);

   

// Creating function output format (scalar, string)

FieldFormat off = FieldFormat.create("demoOperationOutputField", FieldFormat.STRING_FIELD);

TableFormat outputFormat = new TableFormat(1, 1, off);

    

// Creating function (operation) definition. Note that function group should not be changed.

FunctionDefinition fd = new FunctionDefinition("demoOperation", inputFormat, outputFormat, "Demo Operation", ContextUtils.GROUP_DEFAULT);

После этого добавьте определение функции к контексту:

  • Определения функций контекста драйвера устройства, соответствующие операциям устройства, должны возвращаться переопределенным методом DeviceDriver.readFunctionDefinitions(). Сервер добавит определения функции к контексту устройства и создаст для них определения действия.
  • Плагины сервера должны добавлять функции из методов install() и start().
  • Агенты на базе Java должны добавлять функции после создания объекта Agent через Agent.getContext().addFunctionDefinition().
  • Наконец, скрипты (как скрипты сервера, так и виджета) обычно не должны добавлять никаких функций.

Для функций сервера также необходимо определить уровень прав доступа:

// Setting permission level

fd.setPermissions(ServerPermissionChecker.getManagerPermissions());

Функции работы устройства, предоставляемые драйвером устройства, вместе с функциями Agent должны принадлежать группе remote. Если вы хотите сгруппировать их логически (и поместить во вложенное меню контекстов), добавьте описание группы к имени группы, используя "|" в качестве разделителя, например remote|Maintenance Operations. Также возможно использовать вложенные группы, например, remote|Maintenance Operations|Daily.

Группа функций определяется вызовом FunctionDefinition.setGroup(). Можно использовать следующий синтаксис:

fd.setGroup(ContextUtils.createGroup(ContextUtils.GROUP_REMOTE, "Maintenance Operations", "Daily"));

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

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