Определение и реализация действий

При определении действий контекста вашего сервера необходимо задать свойства определений, т.е. имя, описание, формат, уровень прав доступа, текст справки и группу.

Многие классы, которые относятся к действиям, чаще являются частями AggreGate Server, нежели Java SDK с открытым исходным кодом. Эти классы недоступны в исходном коде. Чтобы получить доступ к этим классам, необходимо добавить следующие файлы JAR к пути класса:

  • aggregate-commons.jar
  • server-core.jar

Эти файлы JAR можно найти в подпапке /jar установочной папки AggreGate Server.

Для объявления нового действия создайте экземпляр объекта ServerActionDefinition и задайте его свойства. Пример:

// Creating the definition and providing action implementation class

ServerActionDefinition ad = new ServerActionDefinition("configurationWizard", ActionImplementationClass.class);

 

// Setting action description

ad.setDescription("Configuration Wizard");

 

// Setting permission level

ad.setPermissions(ServerPermissionChecker.getManagerPermissions());

После завершения добавьте определение действия к контексту путем вызова метода Context.addActionDefinition(). Плагины и драйверы сервера должны добавлять действия из методов install() и start().

Реализация действий

Реализация действий - это класс, включенный в класс ServerAction. Он должен заменить метод execute(), выполняющий данное действие, т.е. скомбинировать операции сервера и взаимодействия с человеком-оператором.

Как только действие запускается оператором (или в автономном режиме), создается новый экземпляр объекта реализации действия и вызывается его метод execute().

У иерархии ServerAction есть следующие методы предоставления доступа в среду действий, доступных во время выполнения:

  • getDefiningContext() возвращает Context действие, которое было вызвано.
  • getActionDefintion() возвращает ActionDefinition действия.
  • getActionContext() возвращает экземпляр ServerActionContext, который содержит расширенную информацию о среде выполнения.

Вот пример простой реализации действия:

public class ShowReportAction extends ServerAction

{

  @Override

  public ActionResult execute(ServerActionInput parameters) throws ContextException

  {

    DataTable deviceStatusTable = getDefiningContext().getVariable("status", getCallerController());

 

    String status = deviceStatusTable.rec().getString("statusMessage");

    

    getProcessor().showMessage("Current Device Status", "Device Status: " + status);

  }

}

Взаимодействие с оператором

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

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

Вот неполный список доступных вызовов процедур пользовательского интерфейса:

Метод ServerActionCommandProcessor

Процедура пользовательского интерфейса

browse()

Просмотреть

confirm()

Подтвердить

editCode()

Редактировать код

editData()

Редактировать данные

editProperties()

Редактировать свойства

editText()

Редактировать текст

launchWidget()

Запустить виджет

selectContext()

Выбрать объекты (только выбор контекста активен)

selectEntities()

Выбрать объекты

showEventLog()

Показать журнал событий

showError()

Показать ошибку

showGuide()

Запустить интерактивные практические уроки

showMessage()

Показать сообщение

showReport()

Показать отчет

showSystemTree()

Показать системное дерево