Перейти к содержанию

Переменные в сценарии. Определения, настройка и использование

Определения

Переменные — это именованные объекты, с помощью которых можно манипулировать данными.

Переменные можно использовать для передачи данных между сценарием, записями, процессами и внешними системами.

Переменные в сценарии аналогичны атрибутам, но не привязаны к какому-либо шаблону.

В сценариях можно обращаться к системным переменным, локальным переменным сценария и переменным приложения.

Системные переменные

Системные переменные в сценарии инициализируются при его срабатывании.

Вне сценария системные переменные могут иметь другие значения и могут быть недоступны.

Предусмотрены следующие системные переменные:

  • BusinessObject — ID записи, связанной с текущим экземпляром шаблона процесса в сценариях по событиям «Вход токена» и «Выход токена».
  • origin — значение зависит от типа события, вызвавшего сценарий:
    • событие «Нажатие кнопки» — ID записи, экземпляра процесса, задачи или аккаунта, для которого была нажата кнопка;
    • события «Создание записи», «Изменение записи» — ID записи;
    • события «Запуск процесса», «Вход токена», «Выход токена» — ID экземпляра процесса.
  • ProcessObject — ID экземпляра процесса в сценариях по событиям «Запуск процесса», «Вход токена», «Выход токена».
  • dialogVariablesлокальные переменные кнопки, которая вызвала сценарий по событию «Нажатие кнопки». Значения локальных переменных кнопки задаются в диалоговом окне для кнопки. См. пример.
  • IncomingMessage — в эту переменную можно поместить значения атрибутов ответа на HTTP-запрос в сценариях по событию «Получено сообщение».
    • Атрибуты ответа настраиваются в свойствах пути передачи данных «Получение HTTP-запросов».
    • Чтобы изменить значения атрибутов ответа, используйте действие «Изменить значения переменных»: в поле «Набор переменных» укажите IncomingMessage, добавьте переменные в таблицу и задайте их значения.
  • timeZoneOffset — смещение часового пояса сервера в минутах, тип данных — «Длительность».
  • requestTime — текущее время, тип данных «Дата и время».

Локальные переменные сценария

Локальные переменные сценария инициализируются с помощью действий сценария.

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

В сценариях предусмотрены следующие локальные переменные:

  • Переменная, хранящая ID объекта, используемого для текущей итерации, в действии «Повторять по количеству объектов».
  • Переменная, хранящая номер текущей итерации в действии «Повторять по числовому счётчику».
  • Набор переменных, заданных в действии «Изменить значения переменных».
  • Переменные для успешного ответа и ответа с ошибкой в действии «Отправить сообщение».
  • Переменная, хранящая ID документа, в действии «Создать документ по шаблону».

Переменные типа «Объект»

С помощью действия «Изменить значения переменных» можно передавать переменные типа «Объект». Для этого необходимо создать родительскую переменную и добавить к ней дочерние:

  • Создайте переменную, оставив её значение пустым.
  • Установите флажок у имени родительской переменной в списке и нажмите кнопку «Создать».
  • Дважды нажмите значок рядом с родительской переменной.
  • В таблице отобразится дочерняя переменная.

Использование переменных в формулах и выражениях N3

Чтобы обратиться к переменной в формуле, укажите её системное имя с префиксом $$.

Например, чтобы присвоить атрибуту значение ID процесса, связанного с шаблоном записи, используйте формулу:

FORMAT("{0}", LIST($$ProcessObject))

В выражениях N3 с переменными следует работать как с атрибутами. Чтобы обратиться к переменной, требуется импортировать функции для работы с ними.

Например, чтобы присвоить атрибуту значение ID процесса, связанного с шаблоном записи, используйте выражение:

# Импортируем функции для работы с переменными
@prefix variable: <http://comindware.com/ontology/session/variable#>.
@prefix session: <http://comindware.com/ontology/session#>.
@prefix string: <http://www.w3.org/2000/10/swap/string#>.
@prefix cmwstring: <http://comindware.com/logics/string#>.

{
# Находим значение системной переменной ProcessObject
# и помещаем его в ?ProcessObject.
session:context variable:ProcessObject ?ProcessObject.
# Форматируем ?ProcessObject в строку и помещаем в ?FullId.
("{0}" ?ProcessObject) string:format ?FullId.
# Обрезаем префикс "user." и помещаем ID процесса в атрибут.
(?FullId 5) cmwstring:substring ?value.
}

Практический пример

Настроим сценарий для массовой корректировки записей в табеле трудозатрат с использованием локальных переменных кнопки.

  1. Создайте шаблон записи «Трудозатраты» с атрибутом «Затраченное время» типа «Длительность».
  2. Создайте шаблон записи «Табели трудозатрат» и добавьте в него атрибут «Записи трудозатрат» со следующими свойствами:

    • Тип данных: запись
    • Связанный шаблон: Трудозатраты
    • Хранить несколько значений: флажок установлен
  3. В шаблоне «Табели трудозатрат» создайте кнопку «Скорректировать время» со следующими свойствами:

    • Контекст операции: запись
    • Операция: вызвать событие «Нажата кнопка»
    • Сохранять запись после выполнения: флажок установлен
    • Результат выполнения: обновить данные
  4. На вкладке «Локальные переменные» добавьте локальную переменную «Новое время» со следующими свойствами:

    • Тип данных: длительность
    • Системное имя: newTime
  5. На вкладке «Свойства» установите флажок «Отображать диалоговое окно» и настройте диалоговое окно:

    • Отображаемое название: Введите затраченное время.
    • Поместите на форму переменную «Новое время».
  6. Настройте форму для шаблона записи «Табели трудозатрат»:

    • Поместите на форму атрибут «Записи трудозатрат» как таблицу.
    • Поместите кнопку «Скорректировать время» в область кнопок таблицы «Записи трудозатрат».
    • В таблицу «Записи трудозатрат» поместите столбцы «ID» и «Затраченное время».
  7. Настройте сценарий со следующим событием:

    • Тип: нажатие кнопки
    • Контекстный шаблон: Табели трудозатрат
    • Кнопка: Скорректировать время
  8. Добавьте действие «Повторять по количеству объектов» со следующими свойствами:

    • Переменнаяrec
    • Атрибут или выражение для поиска объектов: атрибут «Записи трудозатрат»
  9. Добавьте действие «Сменить контекст» внутрь действия «Повторять по количеству объектов» со следующими свойствами:

    • Целевой шаблон записи: Трудозатраты
    • Атрибут или выражение для поиска объектов: формула $$rec
  10. Добавьте действие «Изменить значения атрибутов» внутрь действия «Сменить контекст».

  11. В действии «Изменить значения атрибутов» на вкладке «Дополнительно» установите флажок «Сбрасывать кэш значений».
  12. На вкладке «Основные» добавьте в таблицу атрибут «Затраченное время»:

    • Операция со значениями: Заменить.
    • Значение:

      • Формула: $$dialogVariables->newTime

      или

      • N3:
      # Импортируем функции для работы с переменными
      @prefix variable: <http://comindware.com/ontology/session/variable#>.
      @prefix session: <http://comindware.com/ontology/session#>.

      {
      # Помещаем системную переменную dialogVariables в ?dialogVariables.
      session:context variable:dialogVariables ?dialogVariables.
      # Находим в ?dialogVariables значение переменной newTime.
      ?dialogVariables variable:newTime ?value.
      }

Пример сценария с использованием переменных

Пример сценария с использованием переменных

Тестирование

  1. Создайте запись в шаблоне «Табели трудозатрат».
  2. На форме «Табель» создайте несколько записей в таблице «Записи трудозатрат» и не заполняйте поле «Затраченное время».
  3. Сохраните запись.
  4. Нажмите кнопку «Скорректировать время».
  5. Отобразится диалоговое окно «Введите затраченное время».
  6. В поле «Новое время» введите желаемое значение.
  7. Во всех записях в таблице «Записи трудозатрат» будет установлено затраченное время, которое вы ввели в диалоговом окне.
К началу