Манипулирование переменными

Этот раздел объясняет, как манипулировать переменными контекста программным путем.

Нахождение доступных переменных

Существует несколько способов получения списка переменных из Context:

  • getVariableDefinitions() - этот метод вернет список всех переменных в контексте
  • getVariableDefinitions(CallerController caller) - этот метод вернет список переменных, доступных вызывающему (как для чтения, так и для записи)
  • getVariableDefinitions(String group) - этот метод вернет список переменных, принадлежащих определенной группе или ее подгруппе
  • getVariableDefinitions(CallerController caller, String group) - этот метод вернет список переменных, принадлежащих определенной группе и доступных вызывающему

List<VariableDefinition> variables = context.getVariableDefinitions(ContextUtils.GROUP_REMOTE); // Finding all variables in group "remote"

Для извлечения одного определения переменной по ее имени вызовите метод getVariableDefinition(String name). Метод getVariableDefinition(String name, CallerController caller) вернет определение или ноль, если переменная недоступна вызывающему.

Переменные чтения и записи

Интерфейс Context имеет два основных метода манипулирования значениями переменных:

  • getVariable()
  • setVariable()

Эти методы позволяют читать и записывать значения переменных контекста.

Чтение переменных

Метод getVariable() читает значения перменной и возвращает DataTable, представляющую эти значения. Она принимает один или два аргумента: имя переменной для чтения и опциональный экземпляр CallerController, который включает права доступа вызывающей стороны (см. Работа с правами доступа).

При получения таблицы значений переменной вы получаете доступ к ее данным. См. Манипулирование таблицами данных.

Вот пример чтения значения переменной:

DataTable variableValue = context.getVariable("tabularVariable");

Запись перменных

Для настройки переменной существует два основных способа:

  • Путем предоставления предварительно подготовленного объекта DataTable. Этот объект можно создать с нуля программным способом или получить и модифицировать через getVariable().
  • Путем предоставления отдельных значений ячеек.

Пример 1 - настройка значения переменной с использованием встроенной таблицы данных:

DataTable variableValue = new SimpleDataTable(context.getVariableDefinition("tabularVariable").getFormat()); // Creating empty value

 

variableValue.addRecord().addString("str1").addInt(111); // Adding a record

variableValue.addRecord().addString("str2").addInt(222); // Adding another one

 

context.setVariable("tabularVariable", variableValue); // Setting variable value

Пример 2 - модификация предыдущего значения переменной:

DataTable variableValue = context.getVariable("tabularVariable");

 

variableValue.addRecord().addString("str1").addInt(111); // Adding a record

variableValue.addRecord().addString("str2").addInt(222); // Adding another one

 

context.setVariable("tabularVariable", variableValue); // Setting variable value

Пример 3 - настройка значения переменной с использованием списка значений ячеек:

context.setVariable("tabularVariable", "str1", 111); // Supplying cell values for the first record of new variable value

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

Проще говоря, любая модификация переменной требует вызова setVariable().

Получение доступа к истории переменных

Существует два способа получить доступ к историческим значениям переменных, хранящихся в базе данных:

  • Вызвать функцию variableHistory из контекста Утилиты. Этот способ работает как локально (внутри драйверов/плагинов сервера), так и удаленно (через API сервера).
  • Вызвать статический метод Java ServerContextUtils.getVariableHistory(). Этот способ чуть быстрее предыдущего, но работать он будет только внутри виртуальной машины Java (т.е. в драйверах/плагинах).

Полная сигнатура метода ServerContextUtils.getVariableHistory():

public static Iterator<Pair<Date, DataTable>> getVariableHistory(ServerContextManager cm, CallerController caller, String context, String variable, Date fromDate, Date toDate, Integer maxResults,

     boolean sortAscending) throws DaoException

Вызов функции variablehistory

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

DataTable history = utilsContext.callFunction(UtilitiesContextConstants.F_VARIABLE_HISTORY, getCallerController(), con.getPath(), vd.getName()); // Other parameters omitted

 

for (DataRecord rec : history)

{

  // Process historical values

}

Использование класса утилит контекста сервера

Статический способ класса ServerContextUtils, который возвращает исторические значения переменной, имеет следующую сигнатуру:

public static Map<Date, DataTable> getVariableHistory(CallerController caller, String context, String variable, Date fromDate, Date toDate, Integer maxResults, boolean sortAscending)

      throws DaoException, ContextException, DataTableException

Он возвращает карту временных меток, указывающую время, когда были сохранены значения и сами значения.

Использование вспомогательных констант

Интерфейсы, которые расположены в пакете com.tibbo.aggregate.common.server, предоставляют константы строк, которые подходят именам большинства переменных контекста сервера и их полям ввода/вывода.

Использование этих констант всегда предпочтительнее, чем использование констант строк, определенных в вашем собственном коде. Это обеспечит безошибочный код, если некоторые переменные или поля будут переименованы или пермещены в будущих версиях SberMobile Server.