Скриптовая задача

Этот раздел перенесён из документации Camunda 7 и в дальнейшем будет доработан с учётом особенностей OpenBPM Engine

Скриптовая задача (Script Task) — это автоматизированная активность. Когда выполнение процесса достигает скриптовой задачи, выполняется соответствующий скрипт.

script task

Скриптовая задача определяется указанием скрипта и атрибута scriptFormat.

<scriptTask id="theScriptTask" name="Execute script" scriptFormat="groovy">
  <script>
    sum = 0
    for ( i in inputArray ) {
      sum += i
    }
  </script>
</scriptTask>

Значение атрибута scriptFormat должно быть именем, совместимым с JSR-223 (Scripting for the Java Platform). Если вы хотите использовать (совместимый с JSR-223) движок скриптов, необходимо добавить соответствующий JAR-файл в classpath и использовать корректное имя.

Исходный код скрипта должен быть добавлен как текстовое содержимое дочернего элемента script. В качестве альтернативы исходный код может быть задан в виде выражения или внешнего ресурса. Дополнительную информацию о возможных способах задания исходного кода скрипта см. в соответствующем разделе.

Общую информацию о работе со скриптами в процессном движке см. в разделе Скриптинг.

OpenBPM Engine должна работать с большинством реализаций скриптовых движков, совместимых с JSR-223. Мы тестируем интеграцию с Groovy, JavaScript, JRuby и Jython. Подробнее см. раздел Зависимости сторонних библиотек в Руководстве пользователя.

Переменные в скриптах

Все переменные процесса, доступные через выполнение (execution), которое достигает скриптовой задачи, могут использоваться внутри скрипта. В приведённом ниже примере скриптовая переменная inputArray фактически является переменной процесса (массив целых чисел).

<script>
    sum = 0
    for ( i in inputArray ) {
      sum += i
    }
</script>

Также возможно устанавливать переменные процесса в скрипте. Переменные можно устанавливать с помощью методов setVariable(…​), предоставляемых интерфейсом VariableScope:

<script>
    sum = 0
    for ( i in inputArray ) {
      sum += i
    }
    execution.setVariable("sum", sum);
</script>

Включение автоматического сохранения переменных скрипта

При установке свойства autoStoreScriptVariables в значение true в конфигурации процессного движка, движок автоматически сохраняет все глобальные переменные скрипта как переменные процесса.

Для использования этой возможности необходимо:

  • установить autoStoreScriptVariables в true в конфигурации процессного движка;

  • помечать все переменные скрипта, которые не должны сохраняться как переменные процесса, с помощью ключевого слова def: def sum = 0. В этом случае переменная sum не будет сохранена как переменная процесса.

Флаг конфигурации autoStoreScriptVariables поддерживается только для скриптовых задач на Groovy. Если он включён для других языков скриптов, не гарантируется, какие переменные будут экспортированы движком скриптов. Например, Ruby не экспортирует ни одну из переменных скрипта.

Примечание: следующие имена зарезервированы и не могут использоваться в качестве имён переменных: out, out:print, lang:import, context, elcontext.

Результаты скрипта

Возвращаемое значение скриптовой задачи может быть присвоено уже существующей или новой переменной процесса путём указания имени переменной процесса в качестве строкового значения атрибута camunda:resultVariable в определении скриптовой задачи. Любое существующее значение соответствующей переменной процесса будет перезаписано результатом выполнения скрипта. Если имя результирующей переменной не указано, результат выполнения скрипта игнорируется.

<scriptTask id="theScriptTask" name="Execute script" scriptFormat="juel" camunda:resultVariable="myVar">
  <script>#\{echo}</script>
</scriptTask>

В приведённом выше примере результат выполнения скрипта (значение разрешённого выражения #{echo}) устанавливается в переменную процесса с именем myVar после завершения выполнения скрипта.

Обратите внимание, что при использовании camunda:resultVariable в конструкции с множественным выполнением (multi-instance), например в multi-instance подпроцессе, результирующая переменная будет перезаписываться при каждом завершении задачи, что может выглядеть как случайное поведение. Подробнее см. camunda:resultVariable.

Расширения OpenBPM Engine

Attributes

Extension Elements

Constraints

Атрибут camunda:exclusive учитывается только в том случае, если атрибут camunda:asyncBefore или camunda:asyncAfter установлен в значение true

Лицензия и атрибуция

Эта документация была создана на базе материала "Camunda 7 Docs" от Camunda, находится под лицензией Creative Commons Attribution-ShareAlike 3.0 Unported License .

Оригинал документации: https://docs.camunda.org