Шаблонизация

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

OpenBPM Engine поддерживает движки шаблонов, которые реализованы как скриптовые движки, совместимые с JSR-223. В результате шаблоны можно использовать везде, где можно использовать скрипты.

В community-дистрибутивах OpenBPM Engine «из коробки» предоставляется следующий движок шаблонов:

Реализацию обёртки скриптового движка для Freemarker можно найти в репозитории camunda-bpmn-platform https://github.com/camunda/camunda-bpm-platform/tree/master/freemarker-template-engine.

Следующие движки шаблонов предоставляются как необязательные community-расширения:

Реализации обёрток скриптовых движков можно найти в репозитории community hub camunda-7-template-engines-jsr223.

Установка движка шаблонов

Установка движка шаблонов для встроенного процессного движка

Движок шаблонов должен устанавливаться так же, как и скриптовый движок. Это означает, что движок шаблонов должен быть добавлен в classpath процессного движка.

При использовании встроенного процессного движка библиотеки шаблонов должны быть добавлены в деплоймент приложения. При использовании процессного движка в maven-проекте war зависимости движка шаблонов должны быть добавлены как зависимости в maven-файл pom.xml:

OpenBPM Engine BOM /get-started/apache-maven/ содержит только официально поддерживаемый движок шаблонов freemarker. Для движков шаблонов, развиваемых сообществом, см. Maven coordinates ниже.

<dependencies>

  <!-- freemarker -->
  <dependency>
    <groupId>io.openbpm.template-engines</groupId>
    <artifactId>openbpm-engine-template-engines-freemarker</artifactId>
  </dependency>

</dependencies>

Ниже приведены Maven coordinates расширений от community:

<dependencies>

  <!-- saxon xquery -->
  <dependency>
    <groupId>org.camunda.community.template.engine</groupId>
    <artifactId>camunda-7-template-engine-xquery</artifactId>
  </dependency>

  <!-- saxon xslt -->
  <dependency>
    <groupId>org.camunda.community.template.engine</groupId>
    <artifactId>camunda-7-template-engine-xslt</artifactId>
  </dependency>

  <!-- apache velocity -->
  <dependency>
    <groupId>org.camunda.community.template.engine</groupId>
    <artifactId>camunda-7-template-engine-velocity</artifactId>
  </dependency>

</dependencies>

Установка движка шаблонов в общий процессный движок

При использовании общего процессного движка, движок шаблонов должен быть добавлен в общий classpath процессного движка. Процедура зависит от application server. В Apache Tomcat библиотеки необходимо добавить в общую папку lib/.

FreeMarker предустановлен в дистрибутив OpenBPM Engine

Использование движка шаблонов

Если библиотека движка шаблонов находится в classpath, вы можете использовать шаблоны везде в BPMN-процессе, где вы можете использовать скрипты, например в script task или в inputOutput mapping. Движок шаблонов FreeMarker является частью дистрибутива OpenBPM Engine.

Внутри шаблона доступны все переменные процесса области видимости (scope) соответствующего BPMN-элемента. Шаблон также может быть загружен из внешнего ресурса, как описано в разделе script-source.

Следующий пример показывает шаблон FreeMarker, результат которого сохраняется в переменную процесса text.

<scriptTask id="templateScript" scriptFormat="freemarker" camunda:resultVariable="text">
  <script>
    Dear ${customer},

    thank you for working with Camunda ${version}.

    Greetings,
    Camunda Developers
  </script>
</scriptTask>

В inputOutput mapping может быть очень полезно использовать внешний шаблон для генерации payload для camunda:connector.

<bpmn2:serviceTask id="soapTask" name="Send SOAP request">
  <bpmn2:extensionElements>
    <camunda:connector>
      <camunda:connectorId>soap-http-connector</camunda:connectorId>
      <camunda:inputOutput>

        <camunda:inputParameter name="soapEnvelope">
          <camunda:script scriptFormat="freemarker" resource="soapEnvelope.ftl" />
        </camunda:inputParameter>

        <!-- ... remaining connector config omitted -->

      </camunda:inputOutput>
    </camunda:connector>
  </bpmn2:extensionElements>
</bpmn2:serviceTask>

Использование XSLT в качестве движка шаблонов

Использование движка шаблонов XSLT во встроенном процессном движке

При использовании встроенного процессного движка библиотека движка габлонов XSLT должна быть добавлена в деплоймент приложения. При использовании процессного движка в maven-проекте war зависимость движка шаблонов должна быть добавлена как зависимость в maven-файл pom.xml:

<dependencies>

  <!-- XSLT -->
  <dependency>
    <groupId>org.camunda.community.template.engine</groupId>
    <artifactId>camunda-7-template-engine-xslt</artifactId>
  </dependency>

</dependencies>

Использование XSLT-шаблонов

Ниже приведён пример скрипт задачи, используемой для выполнения XSLT-шаблона:

<bpmn2:scriptTask id="ScriptTask_1" name="convert input"
                  scriptFormat="xslt"
                  camunda:resource="org/camunda/bpm/example/xsltexample/example.xsl"
                  camunda:resultVariable="xmlOutput">

  <bpmn2:extensionElements>
    <camunda:inputOutput>
      <camunda:inputParameter name="camunda_source">${customers}</camunda:inputParameter>
    </camunda:inputOutput>
  </bpmn2:extensionElements>

</bpmn2:scriptTask>

Как показано в примере выше, на исходный XSL-файл можно сослаться с помощью атрибута camunda:resource. Он может быть загружен из classpath или из деплоймента (базы данных) так же, как это описано для script tasks.

Результат преобразования можно сопоставить (mapped) с переменной с помощью атрибута camunda:resultVariable.

Наконец, входные данные преобразования должны быть сопоставлены с использованием специальной переменной camunda_source через mapping <camunda:inputParameter …​ />.

Полный пример XSLT Template Engine можно найти в репозитории примеров.

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

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

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