Определение и реализация функций
При определении функций контекста ваших устройств/агентов/серверов необходимо задать свойства их определений, т.е. имя, описание, формат ввода и вывода, уровень прав доступа, текст справки и группу. Для объявления новой функции создайте экземпляр объекта 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 должны принадлежать группе |
Группа функций определяется вызовом FunctionDefinition.setGroup(). Можно использовать следующий синтаксис:
fd.setGroup(ContextUtils.createGroup(ContextUtils.GROUP_REMOTE, "Maintenance Operations", "Daily"));Функции, добавляемые вручную, должны иметь ненулевую реализацию, полученную из интерфейса FunctionImplementation. Реализация должна анализировать ввод функции, обрабатывать его и генерировать вывод.
![]() | Формат таблицы данных, возвращенный методом реализации функции, должен соответствовать формату вывода, содержащемуся в ее определении. Несоблюдение данного правила приведет к потере данных, поскольку система попытается сконвертировать таблицу данных в формат, предоставленный определением, сохраняя как можно большее количество данных. |
Was this page helpful?

