From 52e54e15d4673532d02d207fe927f52a054473e3 Mon Sep 17 00:00:00 2001 From: Max Starikov Date: Wed, 25 Jun 2025 14:02:01 +0200 Subject: [PATCH 1/2] add ssh deployment --- .github/workflows/deploy.yml | 44 ++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 .github/workflows/deploy.yml diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..013ebda --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,44 @@ +name: Deploy Docusaurus Website + +on: + workflow_dispatch: + +jobs: + deploy: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up Node.js + uses: actions/setup-node@v3 + with: + node-version: '20' + + - name: Install dependencies + run: npm install + + - name: Build Operaton site + run: | + npm run build || echo "Build failed, proceeding anyway if build/ exists" + + - name: Check if build directory exists + run: | + if [ ! -d "build" ]; then + echo "Build directory does not exist. Exiting." + exit 1 + fi + + - name: Set up SSH key + run: | + mkdir -p ~/.ssh + echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa + chmod 600 ~/.ssh/id_rsa + ssh-keyscan -p ${{ secrets.SSH_PORT }} ${{ secrets.SSH_HOST }} >> ~/.ssh/known_hosts + + - name: Deploy to remote server via rsync + run: | + rsync -avz --delete ./build/ ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:${{ secrets.SSH_PATH }} + env: + RSYNC_RSH: ssh -p ${{ secrets.SSH_PORT }} From f351891cd9714a4f8f7db8deefd34266a3ef01bd Mon Sep 17 00:00:00 2001 From: Max Starikov Date: Thu, 11 Sep 2025 08:38:43 +0200 Subject: [PATCH 2/2] - fix internal links - replace links into generated Java API pages to appropriate source code - replace internal links to internal pages which are not part of operator with external links - extract svg into separate files to fix JSX build fix image --- .../installation/database-schema.md | 2 +- .../installation/operaton-bpm-run.md | 12 +- .../introduction/downloading-operaton.md | 2 +- .../introduction/implemented-standards.md | 4 +- docs/documentation/reference/bpmn20/index.md | 611 ++---------- docs/documentation/reference/cmmn11/index.md | 36 +- .../migration/{10-to-11.md => v10-to-11.md} | 4 +- .../descriptors/processes-xml.md | 6 +- .../tags/process-engine.md | 112 +-- .../custom-extensions/operaton-attributes.md | 2 +- .../dmn/decision-table/hit-policy.md | 2 +- .../reference/dmn/decision-table/input.md | 2 +- .../reference/dmn/decision-table/output.md | 2 +- .../reference/dmn/decision-table/rule.md | 2 +- .../dmn/feel/legacy/language-elements.md | 2 +- .../reference/rest/overview/embeddability.md | 2 +- .../configuring-spin-integration.md | 2 +- .../user-guide/dmn-engine/data-types.md | 2 +- .../user-guide/dmn-engine/embed.md | 28 +- .../dmn-engine/evaluate-decisions.md | 6 +- .../dmn-engine/feel/legacy-behavior.md | 4 +- .../user-guide/dmn-engine/testing.md | 6 +- .../ext-client/spring-boot-starter.md | 12 +- .../bpmn-model-api/fluent-builder-api.md | 2 +- .../model-api/cmmn-model-api/limitations.md | 2 +- .../the-process-application-class.md | 2 +- .../user-guide/process-engine/connectors.md | 2 +- .../database/database-configuration.md | 2 +- .../process-engine/decisions/bpmn-cmmn.md | 2 +- .../decisions/decision-service.md | 2 +- .../process-engine/decisions/history.md | 6 +- .../process-engine/delegation-code.md | 2 +- .../process-engine/error-handling.md | 2 +- .../process-engine/expression-language.md | 8 +- .../process-engine/external-tasks.md | 2 +- .../history/custom-implementation.md | 2 +- .../history/history-configuration.md | 2 +- .../history/user-operation-log.md | 4 +- .../process-engine/identity-service.md | 6 +- .../user-guide/process-engine/incidents.md | 2 +- .../user-guide/process-engine/metrics.md | 6 +- .../process-engine/multi-tenancy.md | 8 +- .../process-engine/password-hashing.md | 4 +- .../process-engine/password-policy.md | 2 +- .../process-engine/process-diagram-api.md | 2 +- .../process-instance-migration copy.md | 882 ++++++++++++++++++ .../user-guide/process-engine/scripting.md | 6 +- .../user-guide/process-engine/templating.md | 2 +- docs/documentation/user-guide/security.md | 2 +- .../spring-security.md | 6 +- docs/documentation/webapps/admin/auditing.md | 2 +- .../documentation/webapps/cockpit/auditing.md | 2 +- .../bpmn/process-instance-migration.md | 125 --- .../webapps/cockpit/extend/plugins.md | 4 +- .../webapps/tasklist/task-lifecycle.md | 2 +- docs/get-started/apache-maven.md | 10 +- .../archive/java-process-app/deploy.md | 2 +- .../archive/java-process-app/forms.md | 2 +- .../archive/java-process-app/install.md | 2 +- .../archive/java-process-app/project-setup.md | 4 +- .../archive/java-process-app/service-task.md | 2 +- .../archive/javaee7/complete-process.md | 4 +- docs/get-started/archive/javaee7/install.md | 2 +- .../archive/javaee7/project-setup.md | 2 +- .../archive/javaee7/service-task.md | 4 +- docs/get-started/archive/javaee7/task-form.md | 2 +- docs/get-started/dmn/deploy.md | 12 +- docs/get-started/dmn/drg.md | 8 +- docs/get-started/dmn/install.md | 2 +- docs/get-started/dmn/model.md | 26 +- docs/get-started/dmn/project-setup.md | 2 +- .../quick-start/decision-automation.md | 2 +- docs/get-started/spring-boot/configuration.md | 2 +- docs/security/{operations.md => index.md} | 2 +- static/img/reference/bpmn20/image01.svg | 6 + static/img/reference/bpmn20/image02.svg | 6 + static/img/reference/bpmn20/image03.svg | 8 + static/img/reference/bpmn20/image04.svg | 8 + static/img/reference/bpmn20/image05.svg | 9 + static/img/reference/bpmn20/image06.svg | 9 + static/img/reference/bpmn20/image07.svg | 10 + static/img/reference/bpmn20/image08.svg | 11 + static/img/reference/bpmn20/image09.svg | 7 + static/img/reference/bpmn20/image10.svg | 10 + static/img/reference/bpmn20/image11.svg | 7 + static/img/reference/bpmn20/image12.svg | 7 + static/img/reference/bpmn20/image13.svg | 6 + static/img/reference/bpmn20/image14.svg | 7 + static/img/reference/bpmn20/image15.svg | 9 + static/img/reference/bpmn20/image16.svg | 7 + static/img/reference/bpmn20/image17.svg | 7 + static/img/reference/bpmn20/image18.svg | 7 + static/img/reference/bpmn20/image19.svg | 9 + static/img/reference/bpmn20/image20.svg | 9 + static/img/reference/bpmn20/image21.svg | 7 + static/img/reference/bpmn20/image22.svg | 7 + static/img/reference/bpmn20/image23.svg | 8 + static/img/reference/bpmn20/image24.svg | 6 + static/img/reference/bpmn20/image25.svg | 5 + static/img/reference/bpmn20/image26.svg | 5 + static/img/reference/bpmn20/image27.svg | 3 + static/img/reference/bpmn20/image28.svg | 6 + static/img/reference/bpmn20/image29.svg | 6 + static/img/reference/bpmn20/image30.svg | 6 + static/img/reference/bpmn20/image31.svg | 5 + static/img/reference/bpmn20/image32.svg | 5 + static/img/reference/bpmn20/image33.svg | 5 + static/img/reference/bpmn20/image34.svg | 5 + static/img/reference/bpmn20/image35.svg | 4 + static/img/reference/bpmn20/image36.svg | 7 + static/img/reference/bpmn20/image37.svg | 7 + static/img/reference/bpmn20/image38.svg | 7 + static/img/reference/bpmn20/image39.svg | 6 + static/img/reference/bpmn20/image40.svg | 6 + static/img/reference/bpmn20/image41.svg | 6 + static/img/reference/bpmn20/image42.svg | 6 + static/img/reference/bpmn20/image43.svg | 6 + static/img/reference/bpmn20/image44.svg | 6 + static/img/reference/bpmn20/image45.svg | 5 + static/img/reference/bpmn20/image46.svg | 5 + static/img/reference/bpmn20/image47.svg | 5 + static/img/reference/bpmn20/image48.svg | 5 + static/img/reference/bpmn20/image49.svg | 5 + static/img/reference/bpmn20/image50.svg | 6 + static/img/reference/bpmn20/image51.svg | 6 + static/img/reference/bpmn20/image52.svg | 6 + static/img/reference/bpmn20/image53.svg | 5 + static/img/reference/bpmn20/image54.svg | 5 + static/img/reference/bpmn20/image55.svg | 5 + static/img/reference/bpmn20/image56.svg | 5 + static/img/reference/bpmn20/image57.svg | 4 + static/img/reference/bpmn20/image58.svg | 6 + static/img/reference/bpmn20/image59.svg | 5 + static/img/reference/bpmn20/image60.svg | 4 + static/img/reference/bpmn20/image61.svg | 6 + static/img/reference/bpmn20/image62.svg | 6 + static/img/reference/bpmn20/image63.svg | 5 + static/img/reference/bpmn20/image64.svg | 5 + static/img/reference/bpmn20/image65.svg | 5 + static/img/reference/bpmn20/image66.svg | 4 + static/img/reference/bpmn20/image67.svg | 4 + static/img/reference/bpmn20/image68.svg | 6 + static/img/reference/bpmn20/image69.svg | 5 + static/img/reference/bpmn20/image70.svg | 5 + static/img/reference/bpmn20/image71.svg | 4 + static/img/reference/bpmn20/image72.svg | 5 + static/img/reference/bpmn20/image73.svg | 4 + static/img/reference/bpmn20/image74.svg | 6 + static/img/reference/bpmn20/image75.svg | 6 + static/img/reference/bpmn20/image76.svg | 6 + static/img/reference/bpmn20/image77.svg | 5 + static/img/reference/bpmn20/image78.svg | 5 + static/img/reference/bpmn20/image79.svg | 5 + static/img/reference/bpmn20/image80.svg | 5 + static/img/reference/bpmn20/image81.svg | 4 + static/img/reference/bpmn20/image82.svg | 6 + static/img/reference/bpmn20/image83.svg | 6 + static/img/reference/bpmn20/image84.svg | 6 + static/img/reference/bpmn20/image85.svg | 5 + static/img/reference/bpmn20/image86.svg | 5 + static/img/reference/bpmn20/image87.svg | 5 + 161 files changed, 1712 insertions(+), 868 deletions(-) rename docs/documentation/reference/cmmn11/migration/{10-to-11.md => v10-to-11.md} (95%) create mode 100644 docs/documentation/user-guide/process-engine/process-instance-migration copy.md rename docs/security/{operations.md => index.md} (51%) create mode 100644 static/img/reference/bpmn20/image01.svg create mode 100644 static/img/reference/bpmn20/image02.svg create mode 100644 static/img/reference/bpmn20/image03.svg create mode 100644 static/img/reference/bpmn20/image04.svg create mode 100644 static/img/reference/bpmn20/image05.svg create mode 100644 static/img/reference/bpmn20/image06.svg create mode 100644 static/img/reference/bpmn20/image07.svg create mode 100644 static/img/reference/bpmn20/image08.svg create mode 100644 static/img/reference/bpmn20/image09.svg create mode 100644 static/img/reference/bpmn20/image10.svg create mode 100644 static/img/reference/bpmn20/image11.svg create mode 100644 static/img/reference/bpmn20/image12.svg create mode 100644 static/img/reference/bpmn20/image13.svg create mode 100644 static/img/reference/bpmn20/image14.svg create mode 100644 static/img/reference/bpmn20/image15.svg create mode 100644 static/img/reference/bpmn20/image16.svg create mode 100644 static/img/reference/bpmn20/image17.svg create mode 100644 static/img/reference/bpmn20/image18.svg create mode 100644 static/img/reference/bpmn20/image19.svg create mode 100644 static/img/reference/bpmn20/image20.svg create mode 100644 static/img/reference/bpmn20/image21.svg create mode 100644 static/img/reference/bpmn20/image22.svg create mode 100644 static/img/reference/bpmn20/image23.svg create mode 100644 static/img/reference/bpmn20/image24.svg create mode 100644 static/img/reference/bpmn20/image25.svg create mode 100644 static/img/reference/bpmn20/image26.svg create mode 100644 static/img/reference/bpmn20/image27.svg create mode 100644 static/img/reference/bpmn20/image28.svg create mode 100644 static/img/reference/bpmn20/image29.svg create mode 100644 static/img/reference/bpmn20/image30.svg create mode 100644 static/img/reference/bpmn20/image31.svg create mode 100644 static/img/reference/bpmn20/image32.svg create mode 100644 static/img/reference/bpmn20/image33.svg create mode 100644 static/img/reference/bpmn20/image34.svg create mode 100644 static/img/reference/bpmn20/image35.svg create mode 100644 static/img/reference/bpmn20/image36.svg create mode 100644 static/img/reference/bpmn20/image37.svg create mode 100644 static/img/reference/bpmn20/image38.svg create mode 100644 static/img/reference/bpmn20/image39.svg create mode 100644 static/img/reference/bpmn20/image40.svg create mode 100644 static/img/reference/bpmn20/image41.svg create mode 100644 static/img/reference/bpmn20/image42.svg create mode 100644 static/img/reference/bpmn20/image43.svg create mode 100644 static/img/reference/bpmn20/image44.svg create mode 100644 static/img/reference/bpmn20/image45.svg create mode 100644 static/img/reference/bpmn20/image46.svg create mode 100644 static/img/reference/bpmn20/image47.svg create mode 100644 static/img/reference/bpmn20/image48.svg create mode 100644 static/img/reference/bpmn20/image49.svg create mode 100644 static/img/reference/bpmn20/image50.svg create mode 100644 static/img/reference/bpmn20/image51.svg create mode 100644 static/img/reference/bpmn20/image52.svg create mode 100644 static/img/reference/bpmn20/image53.svg create mode 100644 static/img/reference/bpmn20/image54.svg create mode 100644 static/img/reference/bpmn20/image55.svg create mode 100644 static/img/reference/bpmn20/image56.svg create mode 100644 static/img/reference/bpmn20/image57.svg create mode 100644 static/img/reference/bpmn20/image58.svg create mode 100644 static/img/reference/bpmn20/image59.svg create mode 100644 static/img/reference/bpmn20/image60.svg create mode 100644 static/img/reference/bpmn20/image61.svg create mode 100644 static/img/reference/bpmn20/image62.svg create mode 100644 static/img/reference/bpmn20/image63.svg create mode 100644 static/img/reference/bpmn20/image64.svg create mode 100644 static/img/reference/bpmn20/image65.svg create mode 100644 static/img/reference/bpmn20/image66.svg create mode 100644 static/img/reference/bpmn20/image67.svg create mode 100644 static/img/reference/bpmn20/image68.svg create mode 100644 static/img/reference/bpmn20/image69.svg create mode 100644 static/img/reference/bpmn20/image70.svg create mode 100644 static/img/reference/bpmn20/image71.svg create mode 100644 static/img/reference/bpmn20/image72.svg create mode 100644 static/img/reference/bpmn20/image73.svg create mode 100644 static/img/reference/bpmn20/image74.svg create mode 100644 static/img/reference/bpmn20/image75.svg create mode 100644 static/img/reference/bpmn20/image76.svg create mode 100644 static/img/reference/bpmn20/image77.svg create mode 100644 static/img/reference/bpmn20/image78.svg create mode 100644 static/img/reference/bpmn20/image79.svg create mode 100644 static/img/reference/bpmn20/image80.svg create mode 100644 static/img/reference/bpmn20/image81.svg create mode 100644 static/img/reference/bpmn20/image82.svg create mode 100644 static/img/reference/bpmn20/image83.svg create mode 100644 static/img/reference/bpmn20/image84.svg create mode 100644 static/img/reference/bpmn20/image85.svg create mode 100644 static/img/reference/bpmn20/image86.svg create mode 100644 static/img/reference/bpmn20/image87.svg diff --git a/docs/documentation/installation/database-schema.md b/docs/documentation/installation/database-schema.md index 6cc17de..27b75e7 100644 --- a/docs/documentation/installation/database-schema.md +++ b/docs/documentation/installation/database-schema.md @@ -14,7 +14,7 @@ Consult the installation guide related to your setup to configure the database f This guide will not detail how to set up an instance of your target database or how to create a schema object on it. Consult the documentation of your target database on how to do that. -Operaton supports a variety of databases that are documented in the [supported environments](../introduction/supported-environments.md#databases). +Operaton supports a variety of databases that are documented in the [supported environments](../introduction/supported-environments.md#Databases). Operaton supports the following ways of installing the database schema: diff --git a/docs/documentation/installation/operaton-bpm-run.md b/docs/documentation/installation/operaton-bpm-run.md index 1aae72b..74b8515 100644 --- a/docs/documentation/installation/operaton-bpm-run.md +++ b/docs/documentation/installation/operaton-bpm-run.md @@ -24,9 +24,9 @@ java -version If you need to install Java Runtime Environment, you can [find the download from Oracle here](https://www.oracle.com/java/technologies/javase-downloads.html). # Installation Procedure -1. Download the pre-packed distribution of [Operaton here](tbd). -1. Unpack the distro to a directory. -1. Configure the distro as described in the [User Guide](../user-guide/operaton-bpm-run.md). -1. Start Operaton Run by executing the start script (start.bat for Windows, start.sh for Linux/Mac). -1. Access the Operaton webapps (Cockpit, Tasklist, Admin) via http://localhost:8080/operaton/app/. -1. Access the [REST API](../reference/rest/overview/index.md) via http://localhost:8080/engine-rest (e.g. http://localhost:8080/engine-rest/engine). +1. Download the pre-packed distribution of [Operaton here](https://operaton.org/download/). +2. Unpack the distro to a directory. +3. Configure the distro as described in the [User Guide](../user-guide/operaton-bpm-run.md). +4. Start Operaton Run by executing the start script (start.bat for Windows, start.sh for Linux/Mac). +5. Access the Operaton webapps (Cockpit, Tasklist, Admin) via http://localhost:8080/operaton/app/. +6. Access the [REST API](../reference/rest/overview/index.md) via http://localhost:8080/engine-rest (e.g. http://localhost:8080/engine-rest/engine). diff --git a/docs/documentation/introduction/downloading-operaton.md b/docs/documentation/introduction/downloading-operaton.md index ad19b13..ca28c7b 100644 --- a/docs/documentation/introduction/downloading-operaton.md +++ b/docs/documentation/introduction/downloading-operaton.md @@ -51,7 +51,7 @@ The full distribution bundles ::: :::note[Wildfly Application Server] - Wildfly Application Server is provided as part of the archives as a convenience. For a copy of the source code, the full set of attribution notices, and other relevant information please see https://github.com/wildfly/wildfly. We will also provide you with a copy of the source code if you [contact our Open-Source Compliance Team](https://docs.operaton.org/manual/latest/introduction/licenses/#contact) at any time within three years of you downloading an archive (for which we may charge a nominal sum). Wildfly Application Server is copyright © JBoss, Home of Professional Open Source, 2010, Red Hat Middleware LLC [..and contributors]. + Wildfly Application Server is provided as part of the archives as a convenience. For a copy of the source code, the full set of attribution notices, and other relevant information please see https://github.com/wildfly/wildfly. We will also provide you with a copy of the source code if you [contact our Open-Source Compliance Team](../introduction/licenses.md#contact) at any time within three years of you downloading an archive (for which we may charge a nominal sum). Wildfly Application Server is copyright © JBoss, Home of Professional Open Source, 2010, Red Hat Middleware LLC [..and contributors]. ::: See the [Installation Guide][installation-guide-full] for additional details. diff --git a/docs/documentation/introduction/implemented-standards.md b/docs/documentation/introduction/implemented-standards.md index c8544b9..86bb274 100644 --- a/docs/documentation/introduction/implemented-standards.md +++ b/docs/documentation/introduction/implemented-standards.md @@ -51,10 +51,10 @@ Operaton supports the 1.1 version of DMN. [modelers]: ../modeling-bpmn/index.md [BPMN Modeling Tutorial]: https://operaton.org/bpmn/tutorial/ [BPMN Modeling Reference]: https://operaton.org/bpmn/reference/ -[Quick Start (Java / JS)]: /get-started/quick-start/ +[Quick Start (Java / JS)]: ../../get-started/quick-start/index.md [BPMN Implementation Reference]: ../reference/bpmn20/index.md [CMMN Implementation Reference]: ../reference/cmmn11/index.md -[DMN Getting Started]: /get-started/dmn11/ +[DMN Getting Started]: ../../get-started/dmn/index.md [DMN Implementation Reference]: ../reference/dmn/index.md [DMN Modeling Tutorial]: https://operaton.org/dmn/tutorial/ [Process Engine]: ../user-guide/process-engine/index.md diff --git a/docs/documentation/reference/bpmn20/index.md b/docs/documentation/reference/bpmn20/index.md index da08016..4ef2bbd 100644 --- a/docs/documentation/reference/bpmn20/index.md +++ b/docs/documentation/reference/bpmn20/index.md @@ -23,22 +23,12 @@ The elements marked in orang

Participants

-
+
- - - - Pool - - +
-
- - - - Lane - - +
+
@@ -47,55 +37,25 @@ The elements marked in orang

Subprocesses

- - - - - - Subprocess - - +
- - - - - - Call Activity - - +
- - - - - - Event - Subprocess - - +
- - - - - - - Transaction - - + @@ -106,117 +66,52 @@ The elements marked in orang

Tasks

- - - - Service Task - - - - - - +
- - - - User Task - - - - - - - +
- - - - Script Task - - - +
- - - - Business Rule - Task - - - - - +
- - - - Manual Task - - - +
- - - - Receive Task - - - +
- - - - Undefined Task - - +
- - - - Send Task - - - +
- - - - Receive Task - (instantiated) - - - - +
@@ -224,107 +119,49 @@ The elements marked in orang

Gateways

- - - - XOR - - - +
- - - - OR - - - +
- - - - AND - - - +
- - - - Event - - - - - +
- - - - Complex - - - - - +

Data

- - - - Data - Object - - +
- - - - Data - Store - - +

Artifacts

- - - - Text - - Annotation - - +
- - - - Group - - +
@@ -370,11 +207,7 @@ chapter of the [BPMN Modeling Reference](http://operaton.org/bpmn/reference.html None - - - - - + @@ -382,131 +215,58 @@ chapter of the [BPMN Modeling Reference](http://operaton.org/bpmn/reference.html - - - - - + - - - + Message - - - - - - + - - - - - - + - - - - - - + - - - - - + - - - - - + - - - - - + - - - - - + - - - - + Timer - - - - - - - + - - - - - - - + - - - - - - - + - - - - - - + - - - - - - + - - - - - - + @@ -514,49 +274,22 @@ chapter of the [BPMN Modeling Reference](http://operaton.org/bpmn/reference.html Conditional - - - - - - + - - - - - - + - - - - - - + - - - - - + - - - - - + - - - - - + @@ -567,159 +300,80 @@ chapter of the [BPMN Modeling Reference](http://operaton.org/bpmn/reference.html - - - - - + - - - - - + Signal - - - - - - + - - - - - - + - - - - - - + - - - - - + - - - - - + - - - - - + - - - - - + - - - - + Error - - - - - - + - - - - - + - - - - + Escalation - - - - - - + - - - - - - + - - - - - + - - - - - + - - - - - + - - - - + @@ -732,45 +386,26 @@ chapter of the [BPMN Modeling Reference](http://operaton.org/bpmn/reference.html - - - - + Compensation - - - - - - + - - - - - + - - - - - + - - - - + @@ -780,128 +415,60 @@ chapter of the [BPMN Modeling Reference](http://operaton.org/bpmn/reference.html - - - - - + - - - - + Multiple - - - - - - + - - - - - - + - - - - - - + - - - - - + - - - - - + - - - - - + - - - - - + - - - - + Multiple Parallel - - - - - - + - - - - - - + - - - - - - + - - - - - + - - - - - + - - - - - + diff --git a/docs/documentation/reference/cmmn11/index.md b/docs/documentation/reference/cmmn11/index.md index 4fa8e25..90cc2f9 100644 --- a/docs/documentation/reference/cmmn11/index.md +++ b/docs/documentation/reference/cmmn11/index.md @@ -21,11 +21,11 @@ The elements marked in orange are suppo

Grouping

- +
- +
@@ -37,22 +37,22 @@ The elements marked in orange are suppo

Tasks

- +
- +
- +
- +
@@ -67,7 +67,7 @@ The elements marked in orange are suppo

Event-Triggered Elements

- +
@@ -105,34 +105,34 @@ The elements marked in orange are suppo - Entry Criterion + Entry Criterion - Exit Criterion + Exit Criterion - AutoComplete + AutoComplete - Manual Activation + Manual Activation - Required + Required - Repetition + Repetition - Case Plan Model + Case Plan Model @@ -147,9 +147,9 @@ The elements marked in orange are suppo - + - Stage + Stage @@ -173,7 +173,7 @@ The elements marked in orange are suppo - Task + Task @@ -195,7 +195,7 @@ The elements marked in orange are suppo - Milestone + Milestone diff --git a/docs/documentation/reference/cmmn11/migration/10-to-11.md b/docs/documentation/reference/cmmn11/migration/v10-to-11.md similarity index 95% rename from docs/documentation/reference/cmmn11/migration/10-to-11.md rename to docs/documentation/reference/cmmn11/migration/v10-to-11.md index f24e6d1..ee61098 100644 --- a/docs/documentation/reference/cmmn11/migration/10-to-11.md +++ b/docs/documentation/reference/cmmn11/migration/v10-to-11.md @@ -39,7 +39,7 @@ In order to update existing CMMN 1.0 XMLs to valid CMMN 1.1 the following adjust <condition>
   - <body>${any-expression}<body> + <body>${any-expression}<body>
</condition> @@ -47,7 +47,7 @@ In order to update existing CMMN 1.0 XMLs to valid CMMN 1.1 the following adjust CMMN 1.1 - <condition>${any-expression}</condition> + <condition>${any-expression}</condition> diff --git a/docs/documentation/reference/deployment-descriptors/descriptors/processes-xml.md b/docs/documentation/reference/deployment-descriptors/descriptors/processes-xml.md index 3c562f3..3643f0e 100644 --- a/docs/documentation/reference/deployment-descriptors/descriptors/processes-xml.md +++ b/docs/documentation/reference/deployment-descriptors/descriptors/processes-xml.md @@ -14,7 +14,7 @@ menu: The `processes.xml` file is deployed as part of a process application and is used for configuration of the deployment of BPMN 2.0 resource files. Additionally, it can be used to configure process engines which are started / stopped with the deployment of the application. -See the [processes.xml](../../../user-guide/process-applications/the-processes-xml-deployment-descriptor.md) section of the User Guide for more details.. +See the [processes.xml](../../../user-guide/process-applications/the-processes-xml-deployment-descriptor.md) section of the User Guide for more details.. # Xml Schema Namespace @@ -65,12 +65,12 @@ The `processes.xml` may be left blank (can be empty). In this case, default valu <process-engine> <process-application> false - See process-engine Reference + See process-engine Reference <process-archive> <process-application> false - See process-archive Reference + See process-archive Reference diff --git a/docs/documentation/reference/deployment-descriptors/tags/process-engine.md b/docs/documentation/reference/deployment-descriptors/tags/process-engine.md index df1df48..6524ed7 100644 --- a/docs/documentation/reference/deployment-descriptors/tags/process-engine.md +++ b/docs/documentation/reference/deployment-descriptors/tags/process-engine.md @@ -75,7 +75,7 @@ The following example shows an XML snippet which can be placed in both [processe

Text Content: - The name of the job acquisition to be used for this process engine. Job acquisitions are configured in the bpm-platform.xml file. + The name of the job acquisition to be used for this process engine. Job acquisitions are configured in the bpm-platform.xml file.

Example: @@ -95,11 +95,11 @@ The following example shows an XML snippet which can be placed in both [processe

Text Content: - The fully qualified classname of the Process Engine Configuration class to be used for this process engine. The class must be a subclass of ProcessEngineConfigurationImpl. + The fully qualified classname of the Process Engine Configuration class to be used for this process engine. The class must be a subclass of ProcessEngineConfigurationImpl.

Default Value: - StandaloneProcessEngineConfiguration + StandaloneProcessEngineConfiguration

Example:
@@ -176,7 +176,7 @@ The following example shows an XML snippet which can be placed in both [processe <process-engine> false - Container element for providing a set of process engine plugin configurations. + Container element for providing a set of process engine plugin configurations.

Attributes: None. @@ -192,7 +192,7 @@ The following example shows an XML snippet which can be placed in both [processe <plugins> false - Container element for providing an individual process engine plugin configuration. + Container element for providing an individual process engine plugin configuration.

Attributes: None. @@ -208,14 +208,14 @@ The following example shows an XML snippet which can be placed in both [processe <plugin> false - Sets the classname of a process engine plugin. + Sets the classname of a process engine plugin.

Attributes: None.

Text Content: - The fully qualified classname of a process engine plugin. Must be an implementation of ProcessEnginePlugin + The fully qualified classname of a process engine plugin. Must be an implementation of ProcessEnginePlugin

@@ -235,7 +235,7 @@ The following is a list with the most commonly used process engine configuration authorizationEnabled Boolean - Activates authorization checks. + Activates authorization checks. @@ -272,7 +272,7 @@ The following is a list with the most commonly used process engine configuration databaseSchemaUpdate String - Sets the value for process engine database schema creation. + Sets the value for process engine database schema creation.

Values: false, create-drop, true.

@@ -299,7 +299,7 @@ The following is a list with the most commonly used process engine configuration defaultUserPermissionNameForTask String - Set the default permisson to work on a task. Allowed values are UPDATE or TASK_WORK. Default value: UPDATE. + Set the default permisson to work on a task. Allowed values are UPDATE or TASK_WORK. Default value: UPDATE. @@ -331,7 +331,7 @@ The following is a list with the most commonly used process engine configuration enableExceptionsAfterUnhandledBpmnError Boolean - If set to true, Process Engine Exception is thrown when unhandled BPMN Error occurs. Default value: false + If set to true, Process Engine Exception is thrown when unhandled BPMN Error occurs. Default value: false

Values: true, false (Boolean).

@@ -342,7 +342,7 @@ The following is a list with the most commonly used process engine configuration enableExpressionsInAdhocQueries Boolean - If set to true, expressions can be used when creating and executing adhoc queries. For details, see the section on security considerations for custom code in the user guide. + If set to true, expressions can be used when creating and executing adhoc queries. For details, see the section on security considerations for custom code in the user guide. Default value is false.

Values: true, false (Boolean). @@ -354,7 +354,7 @@ The following is a list with the most commonly used process engine configuration enableExpressionsInStoredQueries Boolean - If set to true, expressions can be used when creating and executing stored queries. For details, see the section on security considerations for custom code in the user guide. + If set to true, expressions can be used when creating and executing stored queries. For details, see the section on security considerations for custom code in the user guide. Default value is true.

Values: true, false (Boolean). @@ -412,7 +412,7 @@ The following is a list with the most commonly used process engine configuration failedJobRetryTimeCycle String - Sets how often a job is retried after a fail and how long the engine should wait until it tries to execute a job again. See the user guide + Sets how often a job is retried after a fail and how long the engine should wait until it tries to execute a job again. See the user guide for more details on this setting. @@ -433,7 +433,7 @@ The following is a list with the most commonly used process engine configuration Boolean If the value of this flag is set to true, - Historic Instance Permissions + Historic Instance Permissions are enabled. Default value is false.

Values: true, false (Boolean). @@ -445,7 +445,7 @@ The following is a list with the most commonly used process engine configuration enforceSpecificVariablePermission Boolean - If the value of this flag is set to true, the default permissions to see/read variables are: + If the value of this flag is set to true, the default permissions to see/read variables are:

  • READ_INSTANCE_VARIABLE, READ_HISTORY_VARIABLE, and READ_TASK_VARIABLE on Process Definition resource, and READ_VARIABLE on Task resource
  • READ_VARIABLE on Historic Task resource
  • @@ -462,7 +462,7 @@ The following is a list with the most commonly used process engine configuration history String - Sets the level of the process engine history. + Sets the level of the process engine history.

    Values: none, activity, audit, full.

    @@ -488,9 +488,9 @@ The following is a list with the most commonly used process engine configuration historyRemovalTimeStrategy String - Controls if and when the removal time of an historic instance is set. + Controls if and when the removal time of an historic instance is set. The default value is end.
    - Please also see the historyCleanupStrategy + Please also see the historyCleanupStrategy configuration parameter.

    Values: start, end, none (String). @@ -504,7 +504,7 @@ The following is a list with the most commonly used process engine configuration used as the Metrics Reporter identifier.

    A custom hostname can be generated by providing an implementation of the - HostnameProvider + HostnameProvider interface and and setting the engine property hostnameProvider to an instance of that class.

    @@ -560,7 +560,7 @@ The following is a list with the most commonly used process engine configuration The default value is false.

    - Note: The recommended transaction isolation level that ensures the correct behaviour of the engine is READ_COMMITTED. + Note: The recommended transaction isolation level that ensures the correct behaviour of the engine is READ_COMMITTED.

    Values: true, false (Boolean). @@ -571,7 +571,7 @@ The following is a list with the most commonly used process engine configuration Controls if the engine executes the jdbc statements as Batch or not.

    - Default is true, but this has to be disabled for some databases. See the user guide for further details. + Default is true, but this has to be disabled for some databases. See the user guide for further details.

    @@ -580,7 +580,7 @@ The following is a list with the most commonly used process engine configuration Boolean Controls whether the job executor acquires the next jobs to execute ordered by due date. Default value is false. See the - user guide + user guide for more details on this setting.

    Values: true, false (Boolean). @@ -593,7 +593,7 @@ The following is a list with the most commonly used process engine configuration Boolean Controls whether the job executor acquires the next jobs to execute ordered by job priority. Default value is false. See the - user guide + user guide for more details on this setting.

    Values: true, false (Boolean). @@ -606,7 +606,7 @@ The following is a list with the most commonly used process engine configuration Boolean Controls whether the process engine starts with an active job executor or not. For a shared process engine configuration, the default value is true. For an embedded process engine configuration, the default value is false. See the - user guide + user guide for more details on this setting.

    Values: true, false (Boolean). @@ -630,7 +630,7 @@ The following is a list with the most commonly used process engine configuration Boolean Controls whether the job executor prefers due timer jobs over other job types. Default value is false. See the - user guide + user guide for more details on this setting.

    Values: true, false (Boolean). @@ -676,7 +676,7 @@ The following is a list with the most commonly used process engine configuration When set to true, the acquisition & execution of the aforementioned jobs will be performed exclusively.

    - See the user guide for more details. + See the user guide for more details.

    Default value: false
    @@ -689,7 +689,7 @@ The following is a list with the most commonly used process engine configuration skipHistoryOptimisticLockingExceptions Boolean - Controls if the engine will throw OptimisticLockingExceptions on UPDATE or DELETE operations for historical data or not. + Controls if the engine will throw OptimisticLockingExceptions on UPDATE or DELETE operations for historical data or not. The default is true. To preserve the previous behavior (≤ 7.9), the flag must be set to false.

    Values: true, false (Boolean). @@ -716,7 +716,7 @@ The following is a list with the most commonly used process engine configuration Boolean Controls whether the process engine performs tenant checks to ensure that an authenticated user can only access data that belongs to one of his tenants. Default value is true. - See the user guide for more details. + See the user guide for more details.

    Values: true, false (Boolean).

    @@ -729,7 +729,7 @@ The following is a list with the most commonly used process engine configuration Sets the number of batch execution jobs created per batch seed job invocation. - See the + See the user guide for more information on batch execution. Default value: 100 @@ -740,7 +740,7 @@ The following is a list with the most commonly used process engine configuration Integer Sets the number of invocations a single batch execution job executes. - See the + See the user guide for more information on batch execution. Default value: 1 @@ -754,7 +754,7 @@ The following is a list with the most commonly used process engine configuration batch type. Unless specified in this map, the value of 'invocationsPerBatchJob' is used for batch operations.

    Read more in the - User Guide. + User Guide. @@ -764,7 +764,7 @@ The following is a list with the most commonly used process engine configuration Sets the poll interval of the batch monitor job to check for batch completion in seconds. - See the + See the user guide for more information on batch execution. Default value: 30 @@ -775,7 +775,7 @@ The following is a list with the most commonly used process engine configuration Integer Sets the default batch job priority. - See the + See the user guide for more information on job prioritization. Default value: 0 @@ -785,7 +785,7 @@ The following is a list with the most commonly used process engine configuration deploymentLockUsed Boolean - Sets if the process engine must acquire an exclusive lock when creating a deployment. + Sets if the process engine must acquire an exclusive lock when creating a deployment. Default value: true @@ -794,7 +794,7 @@ The following is a list with the most commonly used process engine configuration compositeIncidentHandlersEnabled Boolean - Sets if the incidents can be handled by multiple handlers for the same incident type. + Sets if the incidents can be handled by multiple handlers for the same incident type.

    Default value is false.

    @@ -819,7 +819,7 @@ The following is a list with the most commonly used process engine configuration javaSerializationFormatEnabled Boolean - Sets if Java serialization format can be used, when setting variables by their serialized representation. Default value: false + Sets if Java serialization format can be used, when setting variables by their serialized representation. Default value: false @@ -827,7 +827,7 @@ The following is a list with the most commonly used process engine configuration deserializationTypeValidationEnabled Boolean - Sets if validation of types should be performed before JSON and XML deserialization. See Security Instructions for further information. Default value: false + Sets if validation of types should be performed before JSON and XML deserialization. See Security Instructions for further information. Default value: false @@ -835,7 +835,7 @@ The following is a list with the most commonly used process engine configuration deserializationAllowedPackages String - Sets the allowed package names of types that are analyzed before JSON and XML deserialization if deserializationTypeValidationEnabled is set to true. With the default validator, this can be a comma-separated list of allowed package names. Only the defined packages and their sub-packages will be allowed in conjunction with the deserializationAllowedClasses. Also, the default validator always allows types within the package "java.lang" and all sub-packages. See Security Instructions for further information. Default value: null + Sets the allowed package names of types that are analyzed before JSON and XML deserialization if deserializationTypeValidationEnabled is set to true. With the default validator, this can be a comma-separated list of allowed package names. Only the defined packages and their sub-packages will be allowed in conjunction with the deserializationAllowedClasses. Also, the default validator always allows types within the package "java.lang" and all sub-packages. See Security Instructions for further information. Default value: null @@ -843,7 +843,7 @@ The following is a list with the most commonly used process engine configuration deserializationAllowedClasses String - Sets the allowed class names of types that are analyzed before JSON and XML deserialization if deserializationTypeValidationEnabled is set to true. With the default validator, this can be a comma-separated list of class names. Only the defined class names will be allowed in conjunction with the deserializationAllowedPackages. Also, the default validator always allows the following types: java.util.ArrayList, java.util.Arrays$ArrayList, java.util.HashMap, java.util.HashSet, java.util.LinkedHashMap, java.util.LinkedHashSet, java.util.LinkedList, java.util.Properties, java.util.TreeMap, java.util.TreeSet. See Security Instructions for further information. Default value: null + Sets the allowed class names of types that are analyzed before JSON and XML deserialization if deserializationTypeValidationEnabled is set to true. With the default validator, this can be a comma-separated list of class names. Only the defined class names will be allowed in conjunction with the deserializationAllowedPackages. Also, the default validator always allows the following types: java.util.ArrayList, java.util.Arrays$ArrayList, java.util.HashMap, java.util.HashSet, java.util.LinkedHashMap, java.util.LinkedHashSet, java.util.LinkedList, java.util.Properties, java.util.TreeMap, java.util.TreeSet. See Security Instructions for further information. Default value: null @@ -886,7 +886,7 @@ The following is a list with the most commonly used process engine configuration When defining a limit of maximum results, an authenticated user cannot perform a query with an unbounded number of results or a paginated query that exceeds the limit. Read more about it in the - User Guide. + User Guide.

    Note: To gain the full feature set of the Webapps, and not suffer any UX degradation due to unavailable data, the queryMaxResultsLimit must be set to 2000. If you use Optimize it is recommended to set the value to 10 000, so the import of the data to Optimize works out of the box.

    The default value is 231-1. @@ -911,7 +911,7 @@ The following is a list with the most commonly used process engine configuration List Define a list of instances of FeelCustomFunctionProvider.

    - Read more about it in the User Guide. + Read more about it in the User Guide. @@ -932,7 +932,7 @@ The following is a list with the most commonly used process engine configuration should still perform output mapping. When set to true, output mapping will not be done for any activity that was canceled. This might be helpful when it is not certain which variables will be available when the activity is canceled (e.g. when an external task does not return an expected variable).

    -

    This flag is often used together with operaton:errorEventDefinition extension elements on external service tasks.

    +

    This flag is often used together with operaton:errorEventDefinition extension elements on external service tasks.

    Default value: false

    @@ -1005,7 +1005,7 @@ The following is a list with the most commonly used process engine configuration disableExceptionCode Boolean - Disables the entire exception error code feature. No exception error codes are assigned. + Disables the entire exception error code feature. No exception error codes are assigned.

    Default value is false.

    @@ -1018,7 +1018,7 @@ The following is a list with the most commonly used process engine configuration disableBuiltinExceptionCodeProvider Boolean - Disables the default implementation of ExceptionCodeProvider which allows overriding the reserved exception codes. + Disables the default implementation of ExceptionCodeProvider which allows overriding the reserved exception codes.

    Default value is false.

    @@ -1029,14 +1029,14 @@ The following is a list with the most commonly used process engine configuration customExceptionCodeProvider - ExceptionCodeProvider + ExceptionCodeProvider Allows registering a custom implementation of the exception code provider allowing to provide custom exception codes.

    Default value is null.

    - Read more in the User Guide. + Read more in the User Guide.

    @@ -1068,7 +1068,7 @@ The following is a list with the most commonly used process engine configuration

    Default value is 1L.
    - More information about security aspects of this configuration can be found in the security guide. + More information about security aspects of this configuration can be found in the security guide.

    Currently supported operations: @@ -1090,9 +1090,9 @@ The following is a list with the most commonly used process engine configuration historyCleanupStrategy String - Controls which History cleanup strategy is used. + Controls which History cleanup strategy is used. The default value is removalTimeBased.
    - Please also see the historyRemovalTimeStrategy configuration parameter.

    + Please also see the historyRemovalTimeStrategy configuration parameter.

    Values: removalTimeBased, endTimeBased. @@ -1104,13 +1104,13 @@ The following is a list with the most commonly used process engine configuration historyCleanupBatchWindowStartTime String - History cleanup batch window start time in the format HH:mmZ (Z is for RFC 822 time zone) or HH:mm. E.g., 20:00+0100 or 20:00. In case of null, no batch window is considered to be configured + History cleanup batch window start time in the format HH:mmZ (Z is for RFC 822 time zone) or HH:mm. E.g., 20:00+0100 or 20:00. In case of null, no batch window is considered to be configured and history cleanup can only be called manually. historyCleanupBatchWindowEndTime String - History cleanup batch window end time in the format HH:mmZ (Z is for RFC 822 time zone) or HH:mm. E.g., 23:00-0300 or 23:00. In case batchWindowEndTime exceeds batchWindowStartTime it is considered + History cleanup batch window end time in the format HH:mmZ (Z is for RFC 822 time zone) or HH:mm. E.g., 23:00-0300 or 23:00. In case batchWindowEndTime exceeds batchWindowStartTime it is considered to be on the same date (e.g., cleanup runs each day between 20:00 and 23:00). Otherwise it is considered to be on the next calendar day (e.g., cleanup starts each day at 20:00 and finishes the next day at 01:00). Default value is 00:00. @@ -1118,7 +1118,7 @@ The following is a list with the most commonly used process engine configuration mondayHistoryCleanupBatchWindowStartTime String - History cleanup batch window start time for Mondays. Requires the same format as historyCleanupBatchWindowStartTime. + History cleanup batch window start time for Mondays. Requires the same format as historyCleanupBatchWindowStartTime. In case it is not configured, batch window configured with historyCleanupBatchWindowStartTime and historyCleanupBatchWindowEndTime will be used for this day of week. @@ -1126,7 +1126,7 @@ The following is a list with the most commonly used process engine configuration mondayHistoryCleanupBatchWindowEndTime String - History cleanup batch window end time for Mondays. Requires the same format and follows the same logic + History cleanup batch window end time for Mondays. Requires the same format and follows the same logic as historyCleanupBatchWindowEndTime. @@ -1216,7 +1216,7 @@ The following is a list with the most commonly used process engine configuration Activates metrics for history cleanup. Default value is true.

    Note that history cleanup metrics are collected only when - general metrics collection is not disabled. + general metrics collection is not disabled. @@ -1224,7 +1224,7 @@ The following is a list with the most commonly used process engine configuration Boolean Configures whether the engine participates in history cleanup or not. The default value is true. - For more details, please see Cleanup Execution Participation per Node + For more details, please see Cleanup Execution Participation per Node in the User Guide. diff --git a/docs/documentation/reference/dmn/custom-extensions/operaton-attributes.md b/docs/documentation/reference/dmn/custom-extensions/operaton-attributes.md index 79e084a..fe31882 100644 --- a/docs/documentation/reference/dmn/custom-extensions/operaton-attributes.md +++ b/docs/documentation/reference/dmn/custom-extensions/operaton-attributes.md @@ -9,7 +9,7 @@ menu: parent: "dmn-ref-extensions" description: "Reference of Operaton Extension Attributes for DMN." -aliases: [reference/dmn11/custom-extensions/operaton-attributes/] +aliases: [reference/dmn/custom-extensions/operaton-attributes/] --- The following attributes are extension attributes for the `camunda` namespace `http://operaton.org/schema/1.0/dmn`. diff --git a/docs/documentation/reference/dmn/decision-table/hit-policy.md b/docs/documentation/reference/dmn/decision-table/hit-policy.md index 9f178be..ea4fa1c 100644 --- a/docs/documentation/reference/dmn/decision-table/hit-policy.md +++ b/docs/documentation/reference/dmn/decision-table/hit-policy.md @@ -10,7 +10,7 @@ menu: parent: "dmn-ref-decision-table" description: "Specify what is part of the result of a Decision Table Evaluation" -aliases: [reference/dmn11/decision-table/hit-policy/] +aliases: [reference/dmn/decision-table/hit-policy/] --- ![Hit Policy](./img/hit-policy.png) diff --git a/docs/documentation/reference/dmn/decision-table/input.md b/docs/documentation/reference/dmn/decision-table/input.md index 9de9a57..c490333 100644 --- a/docs/documentation/reference/dmn/decision-table/input.md +++ b/docs/documentation/reference/dmn/decision-table/input.md @@ -10,7 +10,7 @@ menu: parent: "dmn-ref-decision-table" description: "Specify the Inputs of Decision Tables" -aliases: [reference/dmn11/decision-table/input/] +aliases: [reference/dmn/decision-table/input/] --- ![Input](./img/input.png) diff --git a/docs/documentation/reference/dmn/decision-table/output.md b/docs/documentation/reference/dmn/decision-table/output.md index 7d7d888..aa07a97 100644 --- a/docs/documentation/reference/dmn/decision-table/output.md +++ b/docs/documentation/reference/dmn/decision-table/output.md @@ -10,7 +10,7 @@ menu: parent: "dmn-ref-decision-table" description: "Specify the Output of Decision Tables" -aliases: [reference/dmn11/decision-table/output/] +aliases: [reference/dmn/decision-table/output/] --- ![Example img](./img/output.png)Output" class="no-lightbox diff --git a/docs/documentation/reference/dmn/decision-table/rule.md b/docs/documentation/reference/dmn/decision-table/rule.md index 1bef89e..68322bb 100644 --- a/docs/documentation/reference/dmn/decision-table/rule.md +++ b/docs/documentation/reference/dmn/decision-table/rule.md @@ -10,7 +10,7 @@ menu: parent: "dmn-ref-decision-table" description: "Specify Conditions and Conclusions" -aliases: [reference/dmn11/decision-table/rule/] +aliases: [reference/dmn/decision-table/rule/] --- ![Example img](./img/rule.png)Rule" class="no-lightbox diff --git a/docs/documentation/reference/dmn/feel/legacy/language-elements.md b/docs/documentation/reference/dmn/feel/legacy/language-elements.md index 4bc1fca..408dda0 100644 --- a/docs/documentation/reference/dmn/feel/legacy/language-elements.md +++ b/docs/documentation/reference/dmn/feel/legacy/language-elements.md @@ -10,7 +10,7 @@ menu: parent: "dmn-ref-feel-legacy" description: "Supported FEEL Language Elements" -aliases: [reference/dmn11/feel/legacy/language-elements/] +aliases: [reference/dmn/feel/legacy/language-elements/] --- :::note[Heads Up!] diff --git a/docs/documentation/reference/rest/overview/embeddability.md b/docs/documentation/reference/rest/overview/embeddability.md index 0723fd5..c4a367f 100644 --- a/docs/documentation/reference/rest/overview/embeddability.md +++ b/docs/documentation/reference/rest/overview/embeddability.md @@ -24,7 +24,7 @@ Furthermore, the engine classes and Jackson's `com.fasterxml.jackson.jaxrs:jacks **Step 1:** Add the REST API to your project as a Maven dependency. :::note - Please import the [Operaton BOM](/get-started/apache-maven/) to ensure correct versions for every Operaton project. + Please import the [Operaton BOM](../../../../get-started/apache-maven.md) to ensure correct versions for every Operaton project. ::: ```xml diff --git a/docs/documentation/user-guide/data-formats/configuring-spin-integration.md b/docs/documentation/user-guide/data-formats/configuring-spin-integration.md index d885a55..2b250ed 100644 --- a/docs/documentation/user-guide/data-formats/configuring-spin-integration.md +++ b/docs/documentation/user-guide/data-formats/configuring-spin-integration.md @@ -64,7 +64,7 @@ The Spin process engine plugin provides the following configuration options: ## Maven coordinates -Import the [Operaton BOM](/get-started/apache-maven/) to ensure that you use the right version of Spin that is tested to work with your version of the process engine. +Import the [Operaton BOM](../../../get-started/apache-maven.md) to ensure that you use the right version of Spin that is tested to work with your version of the process engine. All Spin artifacts have the group id `org.operaton.spin`, so in order to import `operaton-spin-core`, we can write: diff --git a/docs/documentation/user-guide/dmn-engine/data-types.md b/docs/documentation/user-guide/dmn-engine/data-types.md index 0db5219..d4f9ad2 100644 --- a/docs/documentation/user-guide/dmn-engine/data-types.md +++ b/docs/documentation/user-guide/dmn-engine/data-types.md @@ -142,7 +142,7 @@ types. For example, you can add a new type for time or change the transformation to support a different date format or localized boolean constants. -To do this, implement a new [DmnDataTypeTransformer](org/operaton/bpm/dmn/engine/impl/spi/type/DmnDataTypeTransformer.html). The transformation is processed in the `transform()` method and returns a typed value. If it cannot successfully transform a value, it must throw an `IllegalArgumentException`. +To do this, implement a new [DmnDataTypeTransformer](https://github.com/operaton/operaton/blob/main/engine-dmn/engine/src/main/java/org/operaton/bpm/dmn/engine/impl/spi/type/DmnDataTypeTransformer.java). The transformation is processed in the `transform()` method and returns a typed value. If it cannot successfully transform a value, it must throw an `IllegalArgumentException`. ```java public class CustomDataTypeTransformer implements DmnDataTypeTransformer { diff --git a/docs/documentation/user-guide/dmn-engine/embed.md b/docs/documentation/user-guide/dmn-engine/embed.md index a8bf948..9b87ca4 100644 --- a/docs/documentation/user-guide/dmn-engine/embed.md +++ b/docs/documentation/user-guide/dmn-engine/embed.md @@ -22,10 +22,10 @@ project. It then shows how to configure and build a new DMN engine instance. The Operaton DMN engine is released to Maven Central. -Start by importing the [`operaton-engine-dmn` BOM](/get-started/apache-maven/#operaton-dmn-engine-bom) +Start by importing the [`operaton-engine-dmn` BOM](../../../get-started/apache-maven.md#operaton-dmn-engine-bom) to ensure correct dependency management. -Next, include the [`operaton-engine-dmn`](/get-started/apache-maven/#operaton-dmn) +Next, include the [`operaton-engine-dmn`](../../../get-started/apache-maven.md#operaton-dmn) artifact in the `dependencies` section. # Building a DMN Engine @@ -50,7 +50,7 @@ This section gives more insights of embedded DMN engine configuration. In case y ## Decision Table Evaluation Listeners -The DMN engine configuration allows you add a custom decision table [evaluation listener](org/operaton/bpm/dmn/engine/delegate/DmnDecisionTableEvaluationListener.html). +The DMN engine configuration allows you add a custom decision table [evaluation listener](https://github.com/operaton/operaton/blob/main/engine-dmn/engine/src/main/java/org/operaton/bpm/dmn/engine/delegate/DmnDecisionTableEvaluationListener.java). A decision table evaluation listener is notified after a decision table has been evaluated. It receives an evaluation event which contains the result of the evaluation. You can decide if the listener should be notified before or after the default listeners. ```java @@ -71,7 +71,7 @@ configuration.getCustomPostDecisionTableEvaluationListeners() ``` A specialized evaluation listener is the -[metric collector](org/operaton/bpm/dmn/engine/spi/DmnEngineMetricCollector.html) +[metric collector](https://github.com/operaton/operaton/blob/main/engine-dmn/engine/src/main/java/org/operaton/bpm/dmn/engine/spi/DmnEngineMetricCollector.java) , which records the number of executed decision elements. This metric can be used to monitor the workload of a decision engine. ```java @@ -87,7 +87,7 @@ configuration.setEngineMetricCollector(metricCollector); ``` ## Decision Evaluation Listeners -The DMN engine configuration allows you add a custom [decision evaluation listener](org/operaton/bpm/dmn/engine/delegate/DmnDecisionEvaluationListener.html). A decision evaluation listener is +The DMN engine configuration allows you add a custom [decision evaluation listener](https://github.com/operaton/operaton/blob/main/engine-dmn/engine/src/main/java/org/operaton/bpm/dmn/engine/delegate/DmnDecisionEvaluationListener.java). A decision evaluation listener is notified after a decision with all the required decisions has been evaluated. It receives an evaluation event which contains the result of the evaluation. You can decide if the listener should be notified before or after the default listeners. @@ -117,16 +117,16 @@ Please be aware that these APIs are **not** part of the [public API](../../intro ::: -The [default DMN engine configuration](org/operaton/bpm/dmn/engine/impl/DefaultDmnEngineConfiguration.html) +The [default DMN engine configuration](https://github.com/operaton/operaton/blob/main/engine-dmn/engine/src/main/java/org/operaton/bpm/dmn/engine/impl/DefaultDmnEngineConfiguration.java) has further customization and extension points. ## Customize DMN Transformation -It is possible to customize the transformation of DMN by providing a [DMN transformer](org/operaton/bpm/dmn/engine/impl/spi/transform/DmnTransformer.html) or configuring the [default one](org/operaton/bpm/dmn/engine/impl/transform/DefaultDmnTransformer.html). +It is possible to customize the transformation of DMN by providing a [DMN transformer](https://github.com/operaton/operaton/blob/main/engine-dmn/engine/src/main/java/org/operaton/bpm/dmn/engine/impl/spi/transform/DmnTransformer.java) or configuring the [default one](https://github.com/operaton/operaton/blob/main/engine-dmn/engine/src/main/java/org/operaton/bpm/dmn/engine/impl/transform/DefaultDmnTransformer.java). ### Register DMN Transform Listeners -The simplest customization is to provide a [transform listener](org/operaton/bpm/dmn/engine/impl/spi/transform/DmnTransformListener.html). The Listener is notified after a DMN element is +The simplest customization is to provide a [transform listener](https://github.com/operaton/operaton/blob/main/engine-dmn/engine/src/main/java/org/operaton/bpm/dmn/engine/impl/spi/transform/DmnTransformListener.java). The Listener is notified after a DMN element is transformed. The listener can modify the transformed object. ```java @@ -146,11 +146,11 @@ configuration.getTransformer() ### Register DMN Element Transform Handler While the transform listener allows modifying of the transformed objects, it does not support instantiating custom subclasses. -This can be achieved using a custom [transform handler](org/operaton/bpm/dmn/engine/impl/spi/transform/DmnElementTransformHandler.html). +This can be achieved using a custom [transform handler](https://github.com/operaton/operaton/blob/main/engine-dmn/engine/src/main/java/org/operaton/bpm/dmn/engine/impl/spi/transform/DmnElementTransformHandler.java). A transform handler is registered for a given [DMN model API] type like a `DecisionTable`. -First, implement a transform handler which can transform a [decision table](org/operaton/bpm/model/dmn/instance/DecisionTable.html). +First, implement a transform handler which can transform a [decision table](https://github.com/operaton/operaton/blob/main/model-api/dmn-model/src/main/java/org/operaton/bpm/model/dmn/instance/DecisionTable.java). ```java public class MyDecisionTableHandler extends DmnElementTransformHandler { @@ -289,7 +289,7 @@ Just make sure that the corresponding libraries are available on the classpath a The default DMN engine resolves the supported expression and script languages using different providers. -To evaluate `JUEL` expressions, the DMN engine uses the ElProvider configured in the +To evaluate `JUEL` expressions, the DMN engine uses the [ElProvider](https://github.com/operaton/operaton/blob/main/engine-dmn/engine/src/main/java/org/operaton/bpm/dmn/engine/impl/spi/el/ElProvider.java) configured in the DMN engine configuration. To use another implementation of the Unified Expression Language, replace this implementation. ```java @@ -301,7 +301,7 @@ DefaultDmnEngineConfiguration configuration = (DefaultDmnEngineConfiguration) Dm configuration.setElProvider(new MyElProvider()); ``` -To configure the `FEEL` engine used you can provide a custom FeelEngineFactory. +To configure the `FEEL` engine used you can provide a custom [FeelEngineFactory](https://github.com/operaton/operaton/blob/main/engine-dmn/feel-api/src/main/java/org/operaton/bpm/dmn/feel/impl/FeelEngineFactory.java). ```java // with a default DMN engine configuration @@ -312,7 +312,7 @@ DefaultDmnEngineConfiguration configuration = (DefaultDmnEngineConfiguration) Dm configuration.setFeelEngineFactory(new MyFeelEngineFactory()); ``` -Script languages are resolved by the DmnScriptEngineResolver. To customize the script engine resolving, provide an own implementation. +Script languages are resolved by the [DmnScriptEngineResolver](https://github.com/operaton/operaton/blob/main/engine-dmn/engine/src/main/java/org/operaton/bpm/dmn/engine/impl/spi/el/DmnScriptEngineResolver.java). To customize the script engine resolving, provide an own implementation. ```java // with a default DMN engine configuration @@ -333,7 +333,7 @@ For more information on how to configure and use SLF4J, please refer to the [user manual]. -[evaluation listener]: DmnDecisionTableEvaluationListener Interface +[evaluation listener]: DmnDecisionTableEvaluationListener Interface [DMN model API]: https://github.com/operaton/operaton-dmn-model [data types]: ../../user-guide/dmn-engine/data-types.md [hit policies]: ../reference/dmn/decision-table/hit-policy.md diff --git a/docs/documentation/user-guide/dmn-engine/evaluate-decisions.md b/docs/documentation/user-guide/dmn-engine/evaluate-decisions.md index ba3310b..b5e5816 100644 --- a/docs/documentation/user-guide/dmn-engine/evaluate-decisions.md +++ b/docs/documentation/user-guide/dmn-engine/evaluate-decisions.md @@ -12,11 +12,11 @@ menu: --- -The DMN engine interface exposes methods for parsing and evaluating DMN Decisions. +The DMN engine [interface](https://github.com/operaton/operaton/blob/main/engine-dmn/engine/src/main/java/org/operaton/bpm/dmn/engine/DmnEngine.java) exposes methods for parsing and evaluating DMN Decisions. # Parse Decisions -Decisions can be parsed from an `InputStream` or transformed from a DmnModelInstance. +Decisions can be parsed from an `InputStream` or transformed from a [DmnModelInstance](https://github.com/operaton/operaton/blob/main/model-api/dmn-model/src/main/java/org/operaton/bpm/model/dmn/DmnModelInstance.java). This example shows how to parse a decision from an input stream: @@ -244,7 +244,7 @@ decisionResult.getSingleEntry(); ``` Note that the decision can also be evaluated using the -evaluateDecisionTable() method if it is implemented as [decision table]. In this case, evaluation returns a DmnDecisionTableResult which is semantically equal and provides the same methods as a +evaluateDecisionTable() method if it is implemented as [decision table]. In this case, evaluation returns a DmnDecisionTableResult which is semantically equal and provides the same methods as a `DmnDecisionResult`. ## Decisions with Required Decisions diff --git a/docs/documentation/user-guide/dmn-engine/feel/legacy-behavior.md b/docs/documentation/user-guide/dmn-engine/feel/legacy-behavior.md index 3193e25..c29f0d5 100644 --- a/docs/documentation/user-guide/dmn-engine/feel/legacy-behavior.md +++ b/docs/documentation/user-guide/dmn-engine/feel/legacy-behavior.md @@ -32,5 +32,5 @@ simple unary tests. ::: [legacy behavior flag]: ../../../reference/deployment-descriptors/tags/process-engine.md#dmnFeelEnableLegacyBehavior -[fluent feel flag setter]: ../org/operaton/bpm/dmn/engine/impl/DefaultDmnEngineConfiguration.html#enableFeelLegacyBehavior -[feel flag setter](org/operaton/bpm/dmn/engine/impl/DefaultDmnEngineConfiguration.html#setEnableFeelLegacyBehavior) +[fluent feel flag setter]: https://github.com/operaton/operaton/blob/main/engine-dmn/engine/src/main/java/org/operaton/bpm/dmn/engine/impl/DefaultDmnEngineConfiguration.java#enableFeelLegacyBehavior +[feel flag setter](https://github.com/operaton/operaton/blob/main/engine-dmn/engine/src/main/java/org/operaton/bpm/dmn/engine/impl/DefaultDmnEngineConfiguration.java#setEnableFeelLegacyBehavior) diff --git a/docs/documentation/user-guide/dmn-engine/testing.md b/docs/documentation/user-guide/dmn-engine/testing.md index 55140ff..f821352 100644 --- a/docs/documentation/user-guide/dmn-engine/testing.md +++ b/docs/documentation/user-guide/dmn-engine/testing.md @@ -13,7 +13,7 @@ menu: --- To easily test DMN decisions in a JUnit test, the DMN engine provides a -JUnit Rule. The DmnEngineRule creates a new default DMN engine. The DMN engine can be used in test cases to parse and evaluate decisions. +JUnit Rule. The [DmnEngineRule](https://github.com/operaton/operaton/blob/main/engine-dmn/engine/src/main/junit4/org/operaton/bpm/dmn/engine/test/DmnEngineRule.java) creates a new default DMN engine. The DMN engine can be used in test cases to parse and evaluate decisions. ```java public class DecisionTest { @@ -63,6 +63,6 @@ public class DecisionTest { } ``` -The [DmnDecisionResult](org/operaton/bpm/dmn/engine/DmnDecisionResult.html) implements the interface `List`. Whereas the -[DmnDecisionResultEntries](org/operaton/bpm/dmn/engine/DmnDecisionResultEntries.html) implements the interface `Map`. +The [DmnDecisionResult](https://github.com/operaton/operaton/blob/main/engine-dmn/engine/src/main/java/org/operaton/bpm/dmn/engine/DmnDecisionResult.java) implements the interface `List`. Whereas the +[DmnDecisionResultEntries](https://github.com/operaton/operaton/blob/main/engine-dmn/engine/src/main/java/org/operaton/bpm/dmn/engine/DmnDecisionResultEntries.java) implements the interface `Map`. This allows you to use common `List` or `Map` asserts. diff --git a/docs/documentation/user-guide/ext-client/spring-boot-starter.md b/docs/documentation/user-guide/ext-client/spring-boot-starter.md index cc4c7db..d434e6e 100644 --- a/docs/documentation/user-guide/ext-client/spring-boot-starter.md +++ b/docs/documentation/user-guide/ext-client/spring-boot-starter.md @@ -184,9 +184,9 @@ Available properties: - - - + + + @@ -330,9 +330,9 @@ Available properties:
    Property nameDescriptionDefault valueProperty nameDescriptionDefault value
    - - - + + + diff --git a/docs/documentation/user-guide/model-api/bpmn-model-api/fluent-builder-api.md b/docs/documentation/user-guide/model-api/bpmn-model-api/fluent-builder-api.md index 1be1a7d..62a123e 100644 --- a/docs/documentation/user-guide/model-api/bpmn-model-api/fluent-builder-api.md +++ b/docs/documentation/user-guide/model-api/bpmn-model-api/fluent-builder-api.md @@ -336,4 +336,4 @@ overlapping elements in the diagram. Branches of gateways are placed one below the other. Auto layout is not provided, therefore the elements of different branches may overlap. -[multi-instance]: ../../../../reference/bpmn20/tasks/task-markers/#multiple-instance +[multi-instance]: ../../../../documentation/reference/bpmn20/tasks/task-markers.md#multiple-instance diff --git a/docs/documentation/user-guide/model-api/cmmn-model-api/limitations.md b/docs/documentation/user-guide/model-api/cmmn-model-api/limitations.md index 6b9d513..60acba6 100644 --- a/docs/documentation/user-guide/model-api/cmmn-model-api/limitations.md +++ b/docs/documentation/user-guide/model-api/cmmn-model-api/limitations.md @@ -15,4 +15,4 @@ The CMMN model API is able to read CMMN 1.1 as well as CMMN 1.0 models. Its prim * `ModelElementType#getTypeNamespace()` returns CMMN 1.1 namespace for elements which are present in CMMN 1.0 and CMMN 1.1 * `CMMN#createEmptyModel()` always creates a CMMN 1.1 model. CMMN 1.0 models cannot be created anymore. * It is not possible to change and save an existing CMMN 1.0 model. -* CMMN 1.0 attributes and elements that have been removed in CMMN 1.1 cannot be added to a CMMN 1.1 model. Their accessor methods are marked `@Deprecated`. For a list of affected elements confer the [guide on migrating CMMN models between specification versions](../../../reference/cmmn11/migration/10-to-11.md). +* CMMN 1.0 attributes and elements that have been removed in CMMN 1.1 cannot be added to a CMMN 1.1 model. Their accessor methods are marked `@Deprecated`. For a list of affected elements confer the [guide on migrating CMMN models between specification versions](../../../reference/cmmn11/migration/v10-to-11.md). diff --git a/docs/documentation/user-guide/process-applications/the-process-application-class.md b/docs/documentation/user-guide/process-applications/the-process-application-class.md index da3f201..afb1af6 100644 --- a/docs/documentation/user-guide/process-applications/the-process-application-class.md +++ b/docs/documentation/user-guide/process-applications/the-process-application-class.md @@ -113,7 +113,7 @@ Both options are explained in greater detail below. The most convenient option for deploying a process application to a Java EE EJB container is by adding the following maven dependency to your maven project: :::note - Please import the [Operaton BOM](/get-started/apache-maven/) to ensure correct versions for every Operaton project. + Please import the [Operaton BOM](../../../get-started/apache-maven.md) to ensure correct versions for every Operaton project. ::: ```xml diff --git a/docs/documentation/user-guide/process-engine/connectors.md b/docs/documentation/user-guide/process-engine/connectors.md index 8b60930..d44bb6f 100644 --- a/docs/documentation/user-guide/process-engine/connectors.md +++ b/docs/documentation/user-guide/process-engine/connectors.md @@ -46,7 +46,7 @@ The following `connect` artifacts exist: # Maven Coordinates :::note - Please import the [Operaton BOM](/get-started/apache-maven/) to ensure correct versions for every Operaton project. + Please import the [Operaton BOM](../../..//get-started/apache-maven.md) to ensure correct versions for every Operaton project. ::: diff --git a/docs/documentation/user-guide/process-engine/database/database-configuration.md b/docs/documentation/user-guide/process-engine/database/database-configuration.md index 0383279..dea0c1f 100644 --- a/docs/documentation/user-guide/process-engine/database/database-configuration.md +++ b/docs/documentation/user-guide/process-engine/database/database-configuration.md @@ -68,7 +68,7 @@ Note that Operaton does not ship with a library that allows to define such a dat The following properties can be set, regardless of whether you are using the JDBC or data source approach: -* `databaseType`: It's normally not necessary to specify this property as it is automatically analyzed from the database connection meta data. Should only be specified in case automatic detection fails. Possible values: {h2, mysql, oracle, postgres, mssql, db2, mariadb}. This setting will determine which create/drop scripts and queries will be used. See the 'supported databases' section for an overview of which types are supported. +* `databaseType`: It's normally not necessary to specify this property as it is automatically analyzed from the database connection meta data. Should only be specified in case automatic detection fails. Possible values: {h2, mysql, oracle, postgres, mssql, db2, mariadb}. This setting will determine which create/drop scripts and queries will be used. See the 'supported databases' section for an overview of which types are supported. * `databaseSchemaUpdate`: Allows to set the strategy to handle the database schema on process engine boot and shutdown. * `true` (default): Upon building the process engine, a check is performed whether the Operaton tables exist in the database. If they don't exist, they are created. It must be ensured that the version of the DB schema matches the version of the process engine library, unless performing a Rolling Update. Updates of the database schema have to be done manually as described in the [Update and Migration Guide](../../../update/index.md). * `false`: Does not perform any checks and assumes that the Operaton table exist in the database. It must be ensured that the version of the DB schema matches the version of the process engine library, unless performing a Rolling Update. Updates of the database schema have to be done manually as described in the [Update and Migration Guide](../../../update/index.md). diff --git a/docs/documentation/user-guide/process-engine/decisions/bpmn-cmmn.md b/docs/documentation/user-guide/process-engine/decisions/bpmn-cmmn.md index a26ab73..d2bbbcf 100644 --- a/docs/documentation/user-guide/process-engine/decisions/bpmn-cmmn.md +++ b/docs/documentation/user-guide/process-engine/decisions/bpmn-cmmn.md @@ -388,7 +388,7 @@ These APIs are **not** part of the [public API](../../../introduction/public-api ::: It is possible to add own functions which can be used inside JUEL expressions. -Therefore a new [FunctionMapper](org/operaton/bpm/engine/impl/javax/el/FunctionMapper.html) has to be implemented. The function mapper than +Therefore a new [FunctionMapper](https://jakarta.ee/specifications/platform/9/apidocs/jakarta/el/functionmapper) has to be implemented. The function mapper than has to be added to the process engine configuration after it was initialized. diff --git a/docs/documentation/user-guide/process-engine/decisions/decision-service.md b/docs/documentation/user-guide/process-engine/decisions/decision-service.md index 7a0323a..e9ecc27 100644 --- a/docs/documentation/user-guide/process-engine/decisions/decision-service.md +++ b/docs/documentation/user-guide/process-engine/decisions/decision-service.md @@ -99,7 +99,7 @@ String result = decisionResult.getSingleEntry(); ``` Note that the decision result also provides methods to get typed output entries. -A complete list of all methods can be found in the [Java Docs](/org/operaton/bpm/dmn/engine/DmnDecisionResult). +A complete list of all methods can be found in the [DmnDecisionResult](https://github.com/operaton/operaton/blob/main/engine-dmn/engine/src/main/java/org/operaton/bpm/dmn/engine/DmnDecisionResult.java). If the decision is implemented as [decision table] then it can also be evaluated using one of the evaluateDecisionTable methods. In this case, the evaluation returns a DmnDecisionTableResult which is semantically equal and provide the same methods as a diff --git a/docs/documentation/user-guide/process-engine/decisions/history.md b/docs/documentation/user-guide/process-engine/decisions/history.md index 92cbd21..c9e39c7 100644 --- a/docs/documentation/user-guide/process-engine/decisions/history.md +++ b/docs/documentation/user-guide/process-engine/decisions/history.md @@ -103,7 +103,7 @@ List historicDecisions = processEngine # The Historic Decision Instance -The [HistoricDecisionInstance](/org/operaton/bpm/engine/history/HistoricDecisionInstance) contains information about a single +The [HistoricDecisionInstance](https://github.com/operaton/operaton/blob/main/engine/src/main/java/org/operaton/bpm/engine/history/HistoricDecisionInstance.java) contains information about a single evaluation of a decision. ```java @@ -143,7 +143,7 @@ reference]. ## Historic Decision Input Instance -The [HistoricDecisionInputInstance](org/operaton/bpm/engine/history/HistoricDecisionInputInstance) represents one input of an +The [HistoricDecisionInputInstance](https://github.com/operaton/operaton/blob/main/engine/src/main/java/org/operaton/bpm/engine/history/HistoricDecisionInputInstance.java) represents one input of an evaluated decision (e.g., an input clause of a decision table). ```java @@ -168,7 +168,7 @@ input specifies a type. ## Historic Decision Output Instance -The [HistoricDecisionOutputInstance](org/operaton/bpm/engine/history/HistoricDecisionOutputInstance) represents one output entry of an +The [HistoricDecisionOutputInstance](https://github.com/operaton/operaton/blob/main/engine/src/main/java/org/operaton/bpm/engine/history/HistoricDecisionOutputInstance.java) represents one output entry of an evaluated decision. If the decision is implemented as decision table, the `HistoricDecisionInstance` contains one `HistoricDecisionOutputInstance` for each output clause and matched rule. diff --git a/docs/documentation/user-guide/process-engine/delegation-code.md b/docs/documentation/user-guide/process-engine/delegation-code.md index 03d0c8c..14609fa 100644 --- a/docs/documentation/user-guide/process-engine/delegation-code.md +++ b/docs/documentation/user-guide/process-engine/delegation-code.md @@ -39,7 +39,7 @@ interface, which requires us to implement the `execute(DelegateExecution)` method. It's this operation that will be called by the engine and which needs to contain the business logic. Process instance information such as process variables and other information can be accessed and -manipulated through the DelegateExecution interface (click on the link for a detailed Javadoc of its operations). +manipulated through the [DelegateExecution](https://github.com/operaton/operaton/blob/main/engine/src/main/java/org/operaton/bpm/engine/delegate/DelegateExecution.java) interface (click on the link for a detailed Javadoc of its operations). ```java public class ToUppercase implements JavaDelegate { diff --git a/docs/documentation/user-guide/process-engine/error-handling.md b/docs/documentation/user-guide/process-engine/error-handling.md index 3c179b8..10f3106 100644 --- a/docs/documentation/user-guide/process-engine/error-handling.md +++ b/docs/documentation/user-guide/process-engine/error-handling.md @@ -43,7 +43,7 @@ Example: ![Example img](./img/error-result-xor.png)Error Result XOR -We trigger a "check data completeness" task. The Java Service might throw a "DataIncompleteException". However, if we check for completeness, incomplete data is not an exception, but an expected result, so we prefer to use an XOR-Gateway in the process flow which evaluates a process variable, e.g., "#{dataComplete==false}". +We trigger a "check data completeness" task. The Java Service might throw a "DataIncompleteException". However, if we check for completeness, incomplete data is not an exception, but an expected result, so we prefer to use an XOR-Gateway in the process flow which evaluates a process variable, e.g., "#{dataComplete==false}". ## BPMN 2.0 Error Event diff --git a/docs/documentation/user-guide/process-engine/expression-language.md b/docs/documentation/user-guide/process-engine/expression-language.md index a44493f..c5dc9de 100644 --- a/docs/documentation/user-guide/process-engine/expression-language.md +++ b/docs/documentation/user-guide/process-engine/expression-language.md @@ -200,7 +200,7 @@ elements which can be provided with a JUEL expression. The expression is evaluat `ExternalTaskService#handleFailure`. If the expression evaluates to `true`, a BPMN error is thrown which can be caught by an [Error Boundary Event](../../reference/bpmn20/events/error-events.md#error-boundary-event). -In the scope of an External Task, expressions have access to the ExternalTaskEntity object via the key `externalTask` which provides getter methods for `errorMessage`, `errorDetails`, `workerId`, `retries` and more. +In the scope of an External Task, expressions have access to the ExternalTaskEntity object via the key `externalTask` which provides getter methods for `errorMessage`, `errorDetails`, `workerId`, `retries` and more. **Examples:** @@ -264,7 +264,7 @@ evaluating expressions: - + - + - + diff --git a/docs/documentation/user-guide/process-engine/external-tasks.md b/docs/documentation/user-guide/process-engine/external-tasks.md index 29b3ec2..65b66a9 100644 --- a/docs/documentation/user-guide/process-engine/external-tasks.md +++ b/docs/documentation/user-guide/process-engine/external-tasks.md @@ -65,7 +65,7 @@ In addition, other *service-task-like* elements such as send tasks, business rul ### Error Event Definitions -External tasks allow for the definition of error events that throw a specified BPMN error. This can be done by adding a [operaton:errorEventDefinition](../../reference/bpmn20/custom-extensions/extension-elements.md#erroreventdefinition) extension element to the task's definition. Compared to the `bpmn:errorEventDefinition`, the `operaton:errorEventDefinition` elements accept an additional `expression` attribute which supports any JUEL expression. Within the expression, you have access to the ExternalTaskEntity object via the key `externalTask` which provides getter methods +External tasks allow for the definition of error events that throw a specified BPMN error. This can be done by adding a [operaton:errorEventDefinition](../../reference/bpmn20/custom-extensions/extension-elements.md#erroreventdefinition) extension element to the task's definition. Compared to the `bpmn:errorEventDefinition`, the `operaton:errorEventDefinition` elements accept an additional `expression` attribute which supports any JUEL expression. Within the expression, you have access to the [ExternalTaskEntity](https://github.com/operaton/operaton/blob/main/engine/src/main/java/org/operaton/bpm/engine/externaltask/ExternalTask.java) object via the key `externalTask` which provides getter methods for `errorMessage`, `errorDetails`, `workerId`, `retries` and more. The expression is evaluated on invocations of `ExternalTaskService#complete` and diff --git a/docs/documentation/user-guide/process-engine/history/custom-implementation.md b/docs/documentation/user-guide/process-engine/history/custom-implementation.md index 8f95bb6..2183153 100644 --- a/docs/documentation/user-guide/process-engine/history/custom-implementation.md +++ b/docs/documentation/user-guide/process-engine/history/custom-implementation.md @@ -24,7 +24,7 @@ Once the event has reached the History Event Handler, it can be processed and st Exchanging the History Event Handler with a custom implementation allows users to plug in a custom History Backend. To do so, two main steps are required: -* Provide a custom implementation of the HistoryEventHandler interface. +* Provide a custom implementation of the [HistoryEventHandler](https://github.com/operaton/operaton/blob/main/engine/src/main/java/org/operaton/bpm/engine/impl/history/handler/HistoryEventHandler.java) interface. * Wire the custom implementation in the process engine configuration. :::note[Composite History Handling] diff --git a/docs/documentation/user-guide/process-engine/history/history-configuration.md b/docs/documentation/user-guide/process-engine/history/history-configuration.md index 9a6ae6f..5477255 100644 --- a/docs/documentation/user-guide/process-engine/history/history-configuration.md +++ b/docs/documentation/user-guide/process-engine/history/history-configuration.md @@ -36,7 +36,7 @@ The history level controls the amount of data the process engine provides via th * Historic External Task Log CREATED, DELETED, FAILED, SUCCESSFUL: fired as an external task has been created, deleted or an external task execution has been reported to fail or succeed. * `AUTO`: The level `auto` is useful if you are planning to run multiple engines on the same database. In that case, all engines have to use the same history level. Instead of manually keeping your configurations in sync, use the level `auto` and the engine determines the level already configured in the database automatically. If none is found, the default value `audit` is used. Keep in mind: If you are planning to use custom history levels, you have to register the custom levels for every configuration, otherwise an exception is thrown. -If you need to customize the amount of history events logged, you can provide a custom implementation HistoryEventProducer and wire it in the process engine configuration. +If you need to customize the amount of history events logged, you can provide a custom implementation [HistoryEventProducer](https://github.com/operaton/operaton/blob/main/engine/src/main/java/org/operaton/bpm/engine/impl/history/producer/HistoryEventProducer.java) and wire it in the process engine configuration. In case of specific needs, you can also create a [custom history level](../history/custom-implementation.md#implement-a-custom-history-level). diff --git a/docs/documentation/user-guide/process-engine/history/user-operation-log.md b/docs/documentation/user-guide/process-engine/history/user-operation-log.md index e231b34..a8e0fc9 100644 --- a/docs/documentation/user-guide/process-engine/history/user-operation-log.md +++ b/docs/documentation/user-guide/process-engine/history/user-operation-log.md @@ -29,9 +29,9 @@ The log consists of *operations* and *entries*. An operation corresponds to one A user operation log entry has the following properties: * **Operation ID**: A generated id that uniquely identifies a performed operation. Multiple log entries that are part of one operation reference the same operation ID. -* **Operation Type**: The name of the performed operation. Available operation types are listed in the interface org.operaton.bpm.engine.history.UserOperationLogEntry. Note that one operation can consist of multiple types, for example a cascading API operation is one user operation, but is split into multiple types of operations. +* **Operation Type**: The name of the performed operation. Available operation types are listed in the interface [org.operaton.bpm.engine.history.UserOperationLogEntry](https://github.com/operaton/operaton/blob/main/engine/src/main/java/org/operaton/bpm/engine/history/UserOperationLogEntry.java). Note that one operation can consist of multiple types, for example a cascading API operation is one user operation, but is split into multiple types of operations. * **Entity Type**: An identifier of the type of the entity that was addressed by the operation. Available entity types are listed in the class org.operaton.bpm.engine.EntityTypes. Like the operation type, one operation may address more than one type of entity. -* **Category**: The name of the category the operation is associated with. Available categories are listed in the interface org.operaton.bpm.engine.history.UserOperationLogEntry. For example, all task related runtime operations like claiming and completing tasks fall into the category . +* **Category**: The name of the category the operation is associated with. Available categories are listed in the interface [org.operaton.bpm.engine.history.UserOperationLogEntry](https://github.com/operaton/operaton/blob/main/engine/src/main/java/org/operaton/bpm/engine/history/UserOperationLogEntry.java). For example, all task related runtime operations like claiming and completing tasks fall into the category . * **Annotation**: An arbitrary text annotation set by a user for auditing reasons. Multiple log entries that belong to an operation have the same annotation. * **Entity IDs**: A job log entry contains the entity IDs that serve to identify the entities addressed by the operation. For example, an operation log entry on a task contains the id of the task as well as the id of the process instance the task belongs to. As a second example, a log entry for suspending all process instances of a process definition does not contain individual process instance IDs but only the process definition ID. * **User ID**: The ID of the user who performed the operation. diff --git a/docs/documentation/user-guide/process-engine/identity-service.md b/docs/documentation/user-guide/process-engine/identity-service.md index 446649a..2cd724f 100644 --- a/docs/documentation/user-guide/process-engine/identity-service.md +++ b/docs/documentation/user-guide/process-engine/identity-service.md @@ -32,8 +32,8 @@ Operaton distinguishes between read-only and writable user repositories. A read- To provide a custom identity provider implementation, the following interfaces can be implemented: -* org.operaton.bpm.engine.impl.identity.ReadOnlyIdentityProvider -* org.operaton.bpm.engine.impl.identity.WritableIdentityProvider +* org.operaton.bpm.engine.impl.identity.ReadOnlyIdentityProvider +* org.operaton.bpm.engine.impl.identity.WritableIdentityProvider # Custom Whitelist for User, Group and Tenant IDs @@ -69,7 +69,7 @@ The LDAP identity service provides read-only access to an LDAP-based user/group To use the LDAP identity service, the `operaton-identity-ldap.jar` library has to be added to the classloader of the process engine. :::note - Please import the [Operaton BOM](/get-started/apache-maven/) to ensure correct versions for every Operaton project. + Please import the [Operaton BOM](../../../get-started/apache-maven.md) to ensure correct versions for every Operaton project. ::: ```xml diff --git a/docs/documentation/user-guide/process-engine/incidents.md b/docs/documentation/user-guide/process-engine/incidents.md index d478fc0..cf80bba 100644 --- a/docs/documentation/user-guide/process-engine/incidents.md +++ b/docs/documentation/user-guide/process-engine/incidents.md @@ -120,4 +120,4 @@ All additional incident handlers will be added as sub handlers to the `Composite By default, the main handler is `DefaultIncidentHandler`. To override the main handler, create a `CompositeIncidentHandler` with your own main `IncidentHandler` and initialize the incident handlers in the engine configuration before setting up the engine. See javadoc for more details -Composite Incident Handler. \ No newline at end of file +[Composite Incident Handler](https://github.com/operaton/operaton/blob/main/engine/src/main/java/org/operaton/bpm/engine/impl/incident/CompositeIncidentHandler.java). \ No newline at end of file diff --git a/docs/documentation/user-guide/process-engine/metrics.md b/docs/documentation/user-guide/process-engine/metrics.md index a5f9f7b..dee9f55 100644 --- a/docs/documentation/user-guide/process-engine/metrics.md +++ b/docs/documentation/user-guide/process-engine/metrics.md @@ -119,7 +119,7 @@ The following table describes the built-in metrics. The identifiers of all built # Querying -Metrics can be queried by making a MetricsQuery offered by the `ManagementService`. For example, the following query retrieves the number of all executed activity instances throughout the entire history of reporting: +Metrics can be queried by making a [MetricsQuery](https://github.com/operaton/operaton/blob/main/engine/src/main/java/org/operaton/bpm/engine/management/MetricsQuery.java) offered by the `ManagementService`. For example, the following query retrieves the number of all executed activity instances throughout the entire history of reporting: ```java long numCompletedActivityInstances = managementService @@ -172,12 +172,12 @@ Metrics are reported with an identifier of the reporting party. This identifier reports to individual engine instances when making a metrics query. For example in a cluster, load metrics can be related to individual cluster nodes. By default the process engine generates a reporter id as `$`. The generation can be customized by implementing the -interface org.operaton.bpm.engine.impl.history.event.HostnameProvider +interface [org.operaton.bpm.engine.impl.history.event.HostnameProvider](https://github.com/operaton/operaton/blob/main/engine/src/main/java/org/operaton/bpm/engine/impl/history/event/HostnameProvider.java) and setting the engine property `hostnameProvider` to an instance of that class. :::note[Heads Up!] The -org.operaton.bpm.engine.impl.metrics.MetricsReporterIdProvider +[org.operaton.bpm.engine.impl.metrics.MetricsReporterIdProvider](https://github.com/operaton/operaton/blob/main/engine/src/main/java/org/operaton/bpm/engine/impl/metrics/MetricsReporterIdProvider.java) interface and the corresponding `metricsReporterIdProvider` engine property have been deprecated. ::: diff --git a/docs/documentation/user-guide/process-engine/multi-tenancy.md b/docs/documentation/user-guide/process-engine/multi-tenancy.md index 8983932..4f3c34f 100644 --- a/docs/documentation/user-guide/process-engine/multi-tenancy.md +++ b/docs/documentation/user-guide/process-engine/multi-tenancy.md @@ -181,7 +181,7 @@ runtimeService ### Send a Signal -The [Signal API](../../reference/bpmn20/events/signal-events.md#signal-api) can be used to deliver a signal to one or all tenants. Pass the tenant identifier to the SignalEventReceivedBuilder to deliver the signal to a specific tenant. If no identifier is passed then the signal is delivered to all tenants. +The [Signal API](../../reference/bpmn20/events/signal-events.md#signal-api) can be used to deliver a signal to one or all tenants. Pass the tenant identifier to the [SignalEventReceivedBuilder](https://github.com/operaton/operaton/blob/main/engine/src/main/java/org/operaton/bpm/engine/runtime/SignalEventReceivedBuilder.java) to deliver the signal to a specific tenant. If no identifier is passed then the signal is delivered to all tenants. ```java runtimeService @@ -194,7 +194,7 @@ When a signal is thrown within a process (i.e., intermediate signal event or sig ### Create a Case Instance -To create an instance by key of a case definition which is deployed for multiple tenants, the tenant identifier has to be passed to the CaseInstanceBuilder. +To create an instance by key of a case definition which is deployed for multiple tenants, the tenant identifier has to be passed to the [CaseInstanceBuilder](https://github.com/operaton/operaton/blob/main/engine/src/main/java/org/operaton/bpm/engine/runtime/CaseInstanceBuilder.java). ```java caseService @@ -205,7 +205,7 @@ caseService ### Evaluate a Decision Table -To evaluate a decision table by key which is deployed for multiple tenants, the tenant identifier has to be passed to the DecisionEvaluationBuilder. +To evaluate a decision table by key which is deployed for multiple tenants, the tenant identifier has to be passed to the [DecisionEvaluationBuilder](https://github.com/operaton/operaton/blob/main/engine/src/main/java/org/operaton/bpm/engine/dmn/DecisionEvaluationBuilder.java). ```java decisionService @@ -379,7 +379,7 @@ repositoryService.createProcessDefinitionQuery() ### Instantiate a Shared Definition When creating (starting) a new process instance, the tenant id of the process definition is propagated to the process instance. -Shared resources do not have a tenant id which means that no tenant id is propagated automatically. To have the tenant id of the user who starts the process instances assigned to the process instance, an implementation of the TenantIdProvider SPI needs to be provided. +Shared resources do not have a tenant id which means that no tenant id is propagated automatically. To have the tenant id of the user who starts the process instances assigned to the process instance, an implementation of the [TenantIdProvider](https://github.com/operaton/operaton/blob/main/engine/src/main/java/org/operaton/bpm/engine/impl/cfg/multitenancy/TenantIdProvider.java) SPI needs to be provided. The `TenantIdProvider` receives a callback when an instance of a process definition, case definition or decision definition is created. It can then assign a tenant id to the newly created instance (or not). diff --git a/docs/documentation/user-guide/process-engine/password-hashing.md b/docs/documentation/user-guide/process-engine/password-hashing.md index 5e7b84e..8eecec2 100644 --- a/docs/documentation/user-guide/process-engine/password-hashing.md +++ b/docs/documentation/user-guide/process-engine/password-hashing.md @@ -44,7 +44,7 @@ public class MyPasswordEncryptor implements PasswordEncryptor { } ``` -Once this is done, you can use the process engine configuration to plug in the custom implementation by the setting the `passwordEncryptor` property to your custom implementation, e.g., `MyPasswordEncryptor`. See [Process Engine Bootstrapping](../process-engine-bootstrapping) on where you have to set the property for your Operaton environment. +Once this is done, you can use the process engine configuration to plug in the custom implementation by the setting the `passwordEncryptor` property to your custom implementation, e.g., `MyPasswordEncryptor`. See [Process Engine Bootstrapping](process-engine-bootstrapping.md) on where you have to set the property for your Operaton environment. Note that, even if you have already users created with passwords hashed by other algorithms, e.g., old custom algorithms or the Operaton default hash algorithm `SHA-512`, they can still automatically be resolved by the engine although you have added your custom algorithm afterwards. The property `customPasswordChecker` is a list of hashing algorithms to be used to check (older) passwords. The Operaton default hashing algorithms are automatically added, so please only add your previous custom `passwordEncryptor` implementation to that list. @@ -69,4 +69,4 @@ public class MyCustomSaltGenerator implements SaltGenerator { } ``` -Once this is done, you can use the process engine configuration to plug in the custom implementation by the setting the `saltGenerator` property to your custom implementation, e.g., `MyCustomSaltGenerator`. See [Process Engine Bootstrapping](../process-engine-bootstrapping) on where you have to set the property for your Operaton environment. +Once this is done, you can use the process engine configuration to plug in the custom implementation by the setting the `saltGenerator` property to your custom implementation, e.g., `MyCustomSaltGenerator`. See [Process Engine Bootstrapping](process-engine-bootstrapping.md) on where you have to set the property for your Operaton environment. diff --git a/docs/documentation/user-guide/process-engine/password-policy.md b/docs/documentation/user-guide/process-engine/password-policy.md index 213608e..37e03b7 100644 --- a/docs/documentation/user-guide/process-engine/password-policy.md +++ b/docs/documentation/user-guide/process-engine/password-policy.md @@ -28,7 +28,7 @@ The built-in password policy requires all passwords to meet the following criter # Customize the Password Policy -You can use the process engine configuration to enable / disable the password policy or plug in a custom policy. See [Process Engine Bootstrapping](../process-engine-bootstrapping) on how to set properties for your Operaton environment. +You can use the process engine configuration to enable / disable the password policy or plug in a custom policy. See [Process Engine Bootstrapping](process-engine-bootstrapping.md) on how to set properties for your Operaton environment. To enable or disable the password policy checks you need to set the `enablePasswordPolicy` property. diff --git a/docs/documentation/user-guide/process-engine/process-diagram-api.md b/docs/documentation/user-guide/process-engine/process-diagram-api.md index 609fb9e..d7a9514 100644 --- a/docs/documentation/user-guide/process-engine/process-diagram-api.md +++ b/docs/documentation/user-guide/process-engine/process-diagram-api.md @@ -22,7 +22,7 @@ The previous JavaScript BPMN renderer can still be found at [operaton-bpmn.js](h # bpmn.io Diagram Renderer -To render a process diagram, you need to retrieve the diagram XML via the Java- or [REST API](../getProcessDefinitionBpmn20XmlByKey#Process-Definition). The following example shows how to render the process XML using bpmn.io. For more documentation regarding the annotation of the diagram and user interaction, please refer to the [bpmn.io](https://github.com/bpmn-io/bpmn-js) page. +To render a process diagram, you need to retrieve the diagram XML via the [Java](https://github.com/operaton/operaton/blob/main/engine/src/main/java/org/operaton/bpm/engine/RepositoryService.java) - or [REST API](../../reference/rest/specification.md#Process-Definition). The following example shows how to render the process XML using bpmn.io. For more documentation regarding the annotation of the diagram and user interaction, please refer to the [bpmn.io](https://github.com/bpmn-io/bpmn-js) page. ```javascript var BpmnViewer = require('bpmn-js'); diff --git a/docs/documentation/user-guide/process-engine/process-instance-migration copy.md b/docs/documentation/user-guide/process-engine/process-instance-migration copy.md new file mode 100644 index 0000000..8bb243f --- /dev/null +++ b/docs/documentation/user-guide/process-engine/process-instance-migration copy.md @@ -0,0 +1,882 @@ +--- + +title: 'Process Instance Migration' +sidebar_position: 115 + +menu: + main: + identifier: "user-guide-process-engine-process-instance-migration" + parent: "user-guide-process-engine" + +--- + +Whenever a new version of a process definition is deployed, existing process instances that run +on previous versions are not affected. That means, the new process definition does not apply +to them automatically. If process instances are supposed to continue execution on a different process +definition, the *process instance migration* API can be employed. + +Migration consists of two parts: + +1. Creating a *migration plan* that describes how process instances are to be migrated from one +process definition to another +2. Applying the migration plan to a set of process instances + +A migration plan consists of a set of *migration instructions* that in essence are mappings between +activities of the two process definitions. In particular, it maps an activity of the *source process definition*, +i.e., the definition process instances are migrated from, to an activity of the *target process definition*, +i.e., the definition process instances are migrated to. A migration instruction ensures that an instance of the source +activity is migrated into an instance of the target activity. A migration plan is complete when there are instructions for +all active source activities. + +Migration instructions have the purpose to map semantically equivalent activities. In consequence, migration +interferes with activity instance state as little as possible which ensures a seamless transition. +For example, this means that a migrated user task instance is not re-assigned. From the assignee's point of view, migration +is mostly transparent, so that a task that was started before migration can be completed successfully after migration. +The same principle is applied to the other BPMN element types. + +For cases in which activities are not semantically equivalent, +we recommend combining migration with the [process instance modification API](../process-engine/process-instance-modification.md), e.g., +canceling an activity instance before migration and starting a new instance after migration. + +In the remainder of this section, the following process models are used to illustrate the API and effects of migration unless otherwise noted: + +Process `exampleProcess:1`: + +
    + +Process `exampleProcess:2`: + +
    + +# Process Instance Migration by Example + +We can define a migration plan using the API entrance point `RuntimeService#createMigrationPlan`. +It returns a fluent builder to create a migration plan. For our example, the code looks like: + +```java +MigrationPlan migrationPlan = processEngine.getRuntimeService() + .createMigrationPlan("exampleProcess:1", "exampleProcess:2") + .mapActivities("assessCreditWorthiness", "assessCreditWorthiness") + .mapActivities("validateAddress", "validatePostalAddress") + .mapActivities("archiveApplication", "archiveApplication") + .build(); +``` + +The `mapActivities` invocations each specify a migration instruction and express that instances +of the first activity should become instances of the second activity. + +Let us assume that we have a process instance in the following activity instance state: + +``` +ProcessInstance +├── Archive Application +└── Assess Credit Worthiness + └── Validate Address +``` + +In order to migrate this process instance according to the defined migration plan, the API method +`RuntimeService#newMigration` can be used: + +```java +MigrationPlan migrationPlan = ...; +List processInstanceIds = ...; + +runtimeService.newMigration(migrationPlan) + .processInstanceIds(processInstanceIds) + .execute(); +``` + +The resulting activity instance state is: + +``` +ProcessInstance +├── Handle Application Receipt +│ └── Archive Application +└── Assess Credit Worthiness + └── Validate Postal Address +``` + +The following things have happened: + +* An instance of the embedded subprocess *Handle Application Receipt* was added to reflect the new sub process in `exampleProcess:2` +* The activity instances for *Archive Application*, *Assess Credit Worthiness*, and *Validate Postal Address* have been migrated + +What does the second point mean in particular? Since there is a migration instruction for these activity instances they are +migrated. The entities that comprise this instance are updated to reference the new activity and process definition. Besides that, activity instances, task instances and +variable instances are preserved. + +Before migration, there was a task instance +in the tasklist of an accountant to perform the *Validate Address* activity. After migration, the same task instance still exists and can be completed +successfully. It still has the same properties such as assignee or name. +From the accountant's perspective, migration is completely transparent while working on a task. + + +# API + +The following gives a structured overview of the Java API for process instance migration. Note that these operations are also available +via restref text="REST" tag="Migration. + +## Creating a Migration Plan + +A migration plan can be created by using the API `RuntimeService#createMigrationPlan`. +It defines how migration should be performed. +A migration plan contains the IDs of the source and target process definition +as well as a list of migration instructions. A migration instruction is a mapping from activities in +the source process definition to activities in the target process definition. + +For example, the following code creates a valid migration plan: + +```Java +MigrationPlan migrationPlan = processEngine.getRuntimeService() + .createMigrationPlan("exampleProcess:1", "exampleProcess:2") + .mapActivities("assessCreditWorthiness", "assessCreditWorthiness") + .mapActivities("validateAddress", "validatePostalAddress") + .build(); +``` + +All activities can be mapped. Migration instructions must map between activities of the same type. + +Supported activity relationships are: + +* One-to-one relation + +A migration plan is *validated after creation* to detect migration +instructions that are not supported by the process engine. See the [chapter on +creation time validation](#creation-time-validation) for details. + +In addition, a migration plan is *validated before execution* to ensure that it can be applied to a specific process instance. For example, +migration instructions for some activity types are only supported for transition instances (i.e., active asynchronous continuations) but not for +activity instances. See the [chapter on execution time validation](#execution-time-validation) for details. + +:::warning[Validation Limitations] +The process engine can only validate that the process model can be migrated. +But there are other aspects the user has to care about. You can read more +about this in the section about [aspects not covered by +validation](#aspects-not-covered-by-validation). +::: + +### One-to-One Relation Instruction + +```java +MigrationPlanBuilder#mapActivities(String sourceActivityId, String targetActivityId) +``` + +Defining a one-to-one relation instruction means that an instance of the source activity +is migrated into an instance of the target activity. Activity instance, task instance and variable +instance state is preserved when migration is executed. + + +### Updating Event Triggers + +When migrating events, it is possible to decide whether the corresponding event +triggers should be updated or not. See the [BPMN-specific considerations on +events](#events) for details. When generating a migration +plan, it is possible to define this setting for generated instructions on +[User Tasks](#user-task) containing `timeout` task listeners and +between events by using the method `updateEventTrigger`. For example, +the following code generates a migration instruction for a boundary event and +updates its event trigger during migration. + +:::note[Conditional Events] +For conditional events the `#updateEventTrigger` is mandatory. +::: + +```java +MigrationPlan migrationPlan = processEngine.getRuntimeService() + .createMigrationPlan("exampleProcess:1", "exampleProcess:2") + .mapActivities("userTask", "userTask") + .mapActivities("boundary", "boundary") + .updateEventTrigger() + .build(); +``` + +### Set Variables to Process Instances + +Sometimes it is necessary to add variables after migrating the process instances to a new version +of the process definition. For example, when the new process model has a new input mapping which +requires a specific variable which isn't yet present in the migrated process instance. The variables +are set to the process instances' scope. + +Please see below how to call the Java API: + +```java +Map variables = Variables.putValue("my-variable", "my-value"); +MigrationPlan migrationPlan = processEngine.getRuntimeService() + .mapEqualActivities() + .setVariables(variables) + .build(); +``` + +#### Known Limitation + +Currently, it is not possible to set transient variables asynchronously. However, +you can [set transient variables] synchronously. + +[set transient variables]: ../process-engine/variables.md#transient-variables + +## Generating a migration plan + +In addition to manually specifying all migration instructions, the `MigrationPlanBuilder` +is able to generate migration instructions for all *equal* activities in the source +and target process definitions. This can reduce the effort for creating a migration +to only those activities that are not equal. + +Equality of a pair of activities is defined as follows: + +* They are of the same activity type +* They have the same ID +* They belong to the same scope, i.e., their parent BPMN scopes are equal according to this definition. + Process definitions are always equal. + +For example, consider the following code snippet: + +```Java +MigrationPlan migrationPlan = processEngine.getRuntimeService() + .createMigrationPlan("exampleProcess:1", "exampleProcess:2") + .mapEqualActivities() + .mapActivities("validateAddress", "validateProcessAddress") + .build(); +``` + +It creates generated migration instructions for the equal activities +`assessCreditWorthiness`. It adds an additional mapping from `validateAddress` to `validateProcessAddress`. + +### Updating Event Triggers + +Like for individual instructions, it is possible to specify the event trigger update flag +for generated migration instructions by using the `updateEventTriggers` method. +This is equal to calling `updateEventTrigger` on all event migration instructions +which are generated. + +```Java +MigrationPlan migrationPlan = processEngine.getRuntimeService() + .createMigrationPlan("exampleProcess:1", "exampleProcess:2") + .mapEqualActivities() + .updateEventTriggers() + .build(); +``` + +## Executing a migration plan + +Migration plans can be applied to a set of process instances of the source process +definition by using the API Method `RuntimeService#newMigration`. + +The migration can either be executed synchronously (blocking) or asynchronously +(non-blocking) using a [batch][]. + +The following are some reasons to prefer either one or the other: + +- Use synchronous migration if: + - the number of process instances is small + - the migration should be atomic, i.e., it should be executed + immediately and should fail if at least one process instance cannot + be migrated + + +- Use asynchronous migration if: + - the number of process instances is large + - all process instances should be migrated decoupled from the other + instances, i.e., every instance is migrated in its own transaction + - the migration should be executed by another thread, i.e., the job + executor should handle the execution + + +### Selecting process instances to migrate + +Process instances can be selected for migration by either providing a set of process instance IDs +or providing a process instance query. It is also possible to specify both, a list of process instance IDs and a query. +The process instances to be migrated will then be the union of the resulting sets. + +#### List of process instances + +The process instances which should be migrated by a migration plan can either +be specified as a list of the process instance IDs: + +```Java +MigrationPlan migrationPlan = ...; + +List processInstanceIds = ...; + +runtimeService.newMigration(migrationPlan) + .processInstanceIds(processInstanceIds) + .execute(); +``` + +For a static number of process instances, there is a convenience varargs method: + +```Java +MigrationPlan migrationPlan = ...; + +ProcessInstance instance1 = ...; +ProcessInstance instance2 = ...; + +runtimeService.newMigration(migrationPlan) + .processInstanceIds(instance1.getId(), instance2.getId()) + .execute(); +``` + +#### Process Instance Query + +If the instances are not known beforehand, the process instances can be selected by a process instance query: + +```Java +MigrationPlan migrationPlan = ...; + +ProcessInstanceQuery processInstanceQuery = runtimeService + .createProcessInstanceQuery() + .processDefinitionId(migrationPlan.getSourceProcessDefinitionId()); + +runtimeService.newMigration(migrationPlan) + .processInstanceQuery(processInstanceQuery) + .execute(); +``` + + +### Skipping Listeners and Input/Output Mappings + +During migration, activity instances may end or new activity instances may emerge. +Per default, their activities' execution listeners and input/output mappings +are going to be invoked as appropriate. This may not always be the desired behavior. + +For example, if an execution listener expects the existence of a variable to function +properly but that variable does not exist in instances of the source process definition, +then skipping listener invocation can be useful. + +In the API, the two methods `#skipCustomListeners` and `#skipIoMappings` +can be used for this purpose: + +```Java +MigrationPlan migrationPlan = ...; +List processInstanceIds = ...; + +runtimeService.newMigration(migrationPlan) + .processInstanceIds(processInstanceIds) + .skipCustomListeners() + .skipIoMappings() + .execute(); +``` + +### Synchronous migration execution + +To execute the migration synchronously, the `execute` method is used. It will +block until the migration is completed. + +```Java +MigrationPlan migrationPlan = ...; +List processInstanceIds = ...; + +runtimeService.newMigration(migrationPlan) + .processInstanceIds(processInstanceIds) + .execute(); +``` + +Migration is successful if all process instances can be migrated. Confer the +[chapter on validation](#validation) to learn which kind of validation is performed before +a migration plan is executed. + + +### Asynchronous batch migration execution + +To execute the migration asynchronously, the `executeAsync` method is used. It will +return immediately with a reference to the batch which executes the migration. + +```Java +MigrationPlan migrationPlan = ...; +List processInstanceIds = ...; + +Batch batch = runtimeService.newMigration(migrationPlan) + .processInstanceIds(processInstanceIds) + .executeAsync(); +``` + +Using a batch, the process instance migration is split into several jobs which +are executed asynchronously. These batch jobs are executed by the job executor. +See the [batch][] section for more information. A batch is completed if all +batch execution jobs are successfully completed. However, in contrast to the +synchronous migration, it is not guaranteed that either all or no process +instances are migrated. As the migration is split into several independent jobs, +every single job may fail or succeed. + +If a migration job fails, it is retried by the job executor +and if no retries are left, an incident is created. In this case, manual action +is necessary to complete the batch migration: The job's retries can be incremented +or the job can be deleted. Deletion cancels migration of the specific instance but +does not affect the batch beyond that. + +#### Batch migration in a heterogeneous cluster + +As described in the [job executor][] section of the user guide, the process engine +can be used in a heterogeneous cluster where deployments are unevenly distributed across cluster nodes. +The *deployment-aware* job executor only executes jobs for deployments registered with it. +In a heterogeneous cluster, this avoids problems with accessing deployment resources. + +When executing a migration batch, the batch execution jobs are therefore restricted +to the job executor that has a registration for the deployment of the source +process definition. This introduces the requirement that +source and target deployment are registered with the same job executor or else +migration may fail when executing custom code (e.g., execution listeners) in the context +of the target process. Note that it is also possible to +[skip the execution of custom code](#skipping-listeners-and-input-output-mappings) +during migration. + +# BPMN-specific API and Effects + +Depending on the type of the activities a process model contains, migration has varying effects. + +## Tasks + +### User Task + +When a user task is migrated, all properties of the task instance (i.e., `org.operaton.bpm.engine.task.Task`) are preserved apart +from the process definition id and task definition key. The task is not reinitialized: Attributes like assignee or name do not change. + +#### Timeout Task Listeners + +User tasks with attached task listeners of event type `timeout` define persistent event triggers that can be updated or preserved during migration. +For the associated timers, the considerations of [catching events](#events) apply here as well. On migration of the user task, +the following semantics are applied: + +* If a timeout task listener is found in the source and target process definition based on its `id`, its persistent event trigger (i.e. timer) is migrated +* If a timeout task listener in the source process definition is not found in the target definition based on its `id`, then its event trigger is deleted during migration +* If a timeout task listener of the target definition is not the target of a migration instruction, then a new event trigger is initialized during migration + + +### Receive Task + +A receive task defines a persistent event trigger that can be updated or preserved during migration. +The considerations for [intermediate catch events](#events) apply here as well. + +### External Task + +When an active [external task](external-tasks.md) is migrated, all properties of the external task instance (i.e., `org.operaton.bpm.engine.externaltask.ExternalTask`) are preserved +apart from activity id, process definition key, and process definition id. In particular, this means that attributes like topic and lock state do not change. + +It is possible to map activities that are implemented as external tasks to each other even if they have different types. For example, an external send task can be mapped to an external service task. + +## Gateways + +### Inclusive & Parallel Gateway + +Instances of inclusive and parallel gateways represent waiting tokens before the gateway is able to trigger. +They can be migrated to a gateway of the same type in the target process by supplying a migration instruction. + +In addition, the following conditions must hold: + +* The target gateway must have at least the same number of incoming sequence flows as the source gateway +* There must be a valid migration instruction for the scope in which the gateway is contained in +* At most one gateway of the source process definition can be mapped to every gateway in the target process definition + +### Event-based Gateway + +To migrate an event-based gateway instance, a migration instruction to another event-based gateway must be part of the migration plan. +In order to migrate the gateway's event triggers (event subscriptions, jobs), the events following to the gateway can be mapped as well. +See the [events section](#events) for the semantics of instructions between events. + + +## Events + +For all kinds of catching events (start, intermediate, boundary), a migration instruction can be supplied if they define a persistent event +trigger. This is the case for message, conditional, timer, and signal events. + +When mapping events, there are two configuration options: + +1. **The event trigger remains the same**: Even if the target event defines a different trigger (e.g., changed timer configuration), + the migrated event instance is triggered according to the source definition. This is the default behavior + when calling `migrationBuilder.mapActivities("sourceTask", "targetTask")` +2. **The event trigger is updated**: The migrated event instance is triggered according to the target definition. + This behavior can be specified by calling `migrationBuilder.mapActivities("sourceTask", "targetTask").updateEventTrigger()` + +:::note[Timer Events] + Using `#updateEventTrigger` with a timer event does not take into account that a certain amount of time has already elapsed before migration. + In consequence, the event trigger is reset according to the target event. + + Consider the following two processes where the configuration of the boundary event changes: + + Process `timerBoundary:1`: + +
    + + Process `timerBoundary:2`: + +
    + + Specifying the instruction `migrationBuilder.mapActivities("timer", "timer").updateEventTrigger()` is going to reinitialize the timer job. + In effect, the boundary event fires ten days after migration. In contrast, if `updateEventTrigger` is not used, then the + timer job configuration is preserved. In effect, it is going to trigger five days after the activity was started regardless of when the migration is performed. +::: + +:::note[Conditional Events] +The usage of `#updateEventTrigger` is mandatory for migrating conditional events. The condition is overridden by the condition of the new conditional event. +::: + + +### Boundary Event + +Boundary events can be mapped from the source to the target process definition along with the activity that they are attached to. The following applies: + +* If a boundary event is mapped, its persistent event trigger (for timers, conditionals, messages, and signals) is migrated +* If a boundary event in the source process definition is not mapped, then its event trigger is deleted during migration +* If a boundary event of the target definition is not the target of a migration instruction, then a new event trigger is initialized during migration + + +### Start Event + +Start events of event sub processes can be mapped from source to target with similar semantics as boundary events. In particular: + +* If a start event is mapped, its persistent event trigger (for timers, conditionals, messages, and signals) is migrated +* If a start event in the source process definition is not mapped, then its event trigger is deleted during migration +* If a start event of the target definition is not the target of a migration instruction, then a new event trigger is initialized during migration + + +### Intermediate Catch Event + +Intermediate catch events must be mapped if a process instance is waiting for that event during migration. + + +### Compensation Event + +#### Migrating Compensation Events + +When migrating process instances with active compensation subscriptions, the following rules apply: + +* The corresponding compensation catch events must be mapped +* After migration, compensation can be triggered from the same migrated scope as before migration or its closest migrated ancestor +* In order to preserve the variable snapshots of parent scopes, those scopes must be mapped as well. + +Process instances with active compensation subscriptions can be migrated by mapping the corresponding catching compensation events. +This tells the migration API which compensation handler of the source process model corresponds to which handler in the target process model. + +Consider this source process: + +
    + +And this target process: + +
    + +Assume a process instance in the following state: + +``` +ProcessInstance +└── Assess Credit Worthiness +``` + +The process instance has a compensation subscription for *Archive Application*. A valid migration plan must +therefore contain a mapping for the compensation boundary event. For example: + +```java +MigrationPlan migrationPlan = processEngine.getRuntimeService() + .createMigrationPlan("compensationProcess:1", "compensationProcess:2") + .mapActivities("archiveApplication", "archiveApplication") + .mapActivities("compensationBoundary", "compensationBoundary") + .build(); +``` + +After migration, compensation can be triggered from the same scope as before migration (or in case that scope is removed, the closest ancestor scope that migrates). +For illustration, consider the following source process: + +
    + +And this target process: + +
    + +When migrating the same process instance state as in the above example, the inner compensation event is **not** going to +trigger compensation of the *Archive Application* activity but only the outer compensation event. + +:::note[Active Compensation] + Migrating process instances with active compensation handlers is not supported yet. +::: + + +#### Adding Compensation Events + +New compensation boundary events contained in the target process definition only take effect for activity instances that are not started or not finished yet. +For example, consider the following two processes: + +Process `compensation:1`: + +
    + +Process `compensation:2`: + +
    + +Furthermore, assume that before migration a process instance is in the following state: + +``` +ProcessInstance +└── Assess Credit Worthiness +``` + +If this process instance is migrated (with *Assess Credit Worthiness* being mapped to its equivalent), then triggering compensation +afterwards is **not** going to compensate *Archive Application*. + + +## Subprocess + +If a migration instruction applies to an embedded/event/transaction sub process, it is migrated to its target sub process in the target process definition. +This preserves sub process state such as variables. In case no instruction applies, the instance is cancelled before migration is performed. +Should the target process definition contain new sub processes that no existing instance migrates to, then these are instantiated as needed during migration. + +Embedded/Event/Transaction sub processes can be mapped interchangeably. For example, it is possible to map an embedded sub process to an event sub process. + +### Call Activity + +Call activities are migrated like any other activity. The called instance, be it a BPMN process or a CMMN case, is not changed. It can be migrated separately. + + +## Flow Node Markers + +### Multi-Instance + +Active multi-instance activities can be migrated if + +* the target activity is multi-instance of the same type (parallel or sequential) +* the target activity is not a multi-instance activity. + +#### Migrating a Multi-instance Activity + +When migrating instances of a multi-instance activity to another multi-instance activity, the migration plan needs to contain two instructions: One for the *inner activity*, i.e., the activity that has multi-instance loop characteristics. And another one for the *multi-instance body*. The body is a BPMN scope that contains the inner activity and that is not visually represented. By convention, it has the id `#multiInstanceBody`. When migrating a multi-instance body and its inner activity, the multi-instance state is preserved. That means, if a parallel multi-instance activity is migrated with two instances out of five being active, then the state is the same after migration. + +#### Removing a Multi-Instance Marker + +If the target activity is not a multi-instance activity, it is sufficient to have an instruction for the inner activity. During migration, the multi-instance variables `nrOfInstances`, `nrOfActiveInstances` and `nrOfCompletedInstances` are removed. The number of inner activity instances is preserved. That means, if there are two out of five active instances before migration, then there are going to be two instances of the target activity after migration. In addition, their `loopCounter` and collection element variables are kept. + + +### Asynchronous Continuations + +When an asynchronous continuation is active, i.e., the corresponding job has not been completed by the job executor yet, it is represented in the form of a *transition instance*. For example, this is the case when job execution failed and an incident has been created. For transition instances the mapping instructions apply just like for activity instances. That means, when there is an instruction from activity `userTask` to activity `newUserTask`, all transition instances that represent an asynchronous continuation before or after `userTask` are migrated to `newUserTask`. In order for this to succeed, the target activity must be asynchronous as well. + +:::warning[Limitation with asyncAfter] + When migrating a transition instance that represents an asynchronous continuation *after* an activity, migration is only successful if the following limitations hold: + + * If the source activity has no outgoing sequence flow, the target activity must not have more than one outgoing sequence flow + * If the source activity has outgoing sequence flows, the target activity must have sequence flows with the same IDs or must have not more than one outgoing sequence flow. This also applies if the source activity has a single sequence flow. +::: + + +# Operational Semantics + +In the following, the exact semantics of migration are documented. Reading this section is recommended to fully understand the effects, power, and limitations of process instance migration. + +## Migration Procedure + +Migration of a process instance follows these steps: + +1. Assignment of migration instructions to activity instances +2. Validation of the instruction assignment +3. Cancellation of unmapped activity instances and event handler entities +4. Migration of mapped activity instances and their dependent instances, + instantiation of newly introduced BPMN scopes, and handler creation for newly introduced events + + +### Assignment of Migration Instructions + +In the first step, migration instructions are assigned to activity instances +of a process instance that is going to be migrated. + + +### Validation of Instruction Assignment + +The created assignment must be executable by the migration logic which is +ensured by the validation step. In particular, the following conditions must hold: + +* Exactly one instruction must apply to a leaf activity instance (e.g., user task) +* At most one instruction must apply to a non-leaf activity instance (e.g., embedded subprocess) +* The overall assignment must be executable. See the [validation chapter](#validation) for details. + + +### Cancellation of Unmapped Activity Instances and Event-Handler Entities + +Non-leaf activity instances to which no migration instructions apply are cancelled. Event handler entities +(e.g., message event subscriptions or timer jobs) are removed when their BPMN elements (e.g., boundary events) +are not migrated. Cancellation is performed before any migration instruction is applied, +so the process instance is still in the pre-migration state. + +The semantics are: + +* The activity instance tree is traversed in a bottom-up fashion and unmapped instances are cancelled +* Activity instance cancellation invokes the activity's end execution listeners and output variable mappings + + +### Migration/Creation of Activity Instances + +Finally, activity instances are migrated and new ones are created as needed. + +The semantics are: + +* The activity instance tree is traversed in a top-down fashion +* If an activity instance is migrated into a BPMN scope to which no parent activity instance + is migrated, then a new activity instance is created +* Creation invokes the activity's start execution listeners and input variable mappings +* An activity instance is migrated according to its assigned migration instruction + + +#### Activity instance migration + +Migrating an activity instance updates the references to the activity and process definition +in the activity instance tree and its execution representation. Furthermore, it migrates or removes +*dependent* instances that belong to the activity instance. Dependent instances are: + +* Variable instances +* Task instances (for user tasks) +* Event subscription instances + + +## Validation + +A migration plan is validated at two points in time: When it is created, its +instructions are validated for static aspects. When it is applied to a +process instance, its instructions are matched to activity instances +and this assignment is validated. + +Validation ensures that none of the limitations stated in this guide lead +to an inconsistent process instance state with undefined behavior after migration. + + +### Creation Time Validation + +For an instruction to be valid when a migration plan is created, it has to fulfill +the following requirements: + +* It has to map activities of the same type +* It has to be a one-to-one mapping +* A migrated activity must remain a descendant of its closest migrating ancestor scope (**Hierarchy Preservation**) +* The migration plan adheres to [BPMN-element-specific considerations](#bpmn-specific-api-and-effects) +* A set variable must not be of type `Object` **AND** its `serializationFormat` must not be `application/x-java-serialized-object` + * Validation is skipped when the engine configuration flag `javaSerializationFormatEnabled` is set to `true` + * Please see [Process Engine Configuration Reference](../../reference/deployment-descriptors/tags/process-engine.md#javaSerializationFormatEnabled) for more details + +If validation reports errors, migration fails with a `MigrationPlanValidationException` +providing a `MigrationPlanValidationReport` object with details on the +validation errors. + + +#### Hierarchy Preservation + +An activity must stay a descendant of its closest ancestor scope that migrates (i.e., that is not cancelled during migration). + +Consider the following migration plan for the example processes shown at the +[beginning of this chapter](../process-engine/process-instance-migration.md): + +```java +MigrationPlan migrationPlan = processEngine.getRuntimeService() + .createMigrationPlan("exampleProcess:1", "exampleProcess:2") + .mapActivities("assessCreditWorthiness", "handleApplicationReceipt") + .mapActivities("validateAddress", "validatePostalAddress") + .build(); +``` + +And a process instance in the following state: + +``` +ProcessInstance +└── Assess Credit Worthiness + └── Validate Address +``` + +The migration plan cannot be applied, because the +hierarchy preservation requirement is violated: The activity *Validate +Address* is supposed to be migrated to *Validate Postal Address*. However, the +parent scope *Assess Credit Worthiness* is migrated to *Handle +Application Receipt*, which does not contain *Validate Postal Address*. + + +### Execution Time Validation + +When a migration plan is applied to a process instance, it is validated beforehand +that the plan is applicable. In particular, the following aspects are checked: + +* **Completeness**: There must be a migration instruction for every instance of leaf activities + (i.e., activities that do not contain other activities) +* **Instruction Applicability**: For certain activity types, only transition instances but not + activity instances can be migrated + +If validation reports errors, migration fails with a `MigratingProcessInstanceValidationException` +providing a `MigratingProcessInstanceValidationReport` object with details on the +validation errors. + +#### Completeness + +Migration is only meaningful if a migration instruction applies to every instance of a leaf activity. Assume a migration plan as follows: + +```java +MigrationPlan migrationPlan = processEngine.getRuntimeService() + .createMigrationPlan("exampleProcess:1", "exampleProcess:2") + .mapActivities("archiveApplication", "archiveApplication") + .build(); +``` + +Now consider a process instance in the following activity instance state: + +``` +ProcessInstance +└── Archive Application +``` + +The plan is complete with respect to this process instance because there is a migration instruction for the activity *Archive Application*. + +Now consider another process instance: + +``` +ProcessInstance +├── Archive Application +└── Assess Credit Worthiness + └── Validate Address +``` + +The migration plan is not valid with respect to this instance because there is no instruction that applies to the instance of *Validate Address*. + + +#### Instruction Applicability + +Migration instructions are used to migrate activity instances as well as transition instances (i.e., active asynchronous continuations). Some +instructions can only be used to migrate transition instances but not activity instances. In general, activity instances can only be +migrated if they are instances of the following element types: + +* Task + * User Task + * Receive Task + * External Task +* Subprocess + * Embedded Sub Process + * Event Sub Process + * Transaction Sub Process + * Call Activity +* Gateways + * Parallel Gateway + * Inclusive Gateway + * Event-based Gateway +* Events + * Boundary Event + * Intermediate Catch Event +* Misc + * Multi-instance Body + +Transition instances can be migrated for any activity type. + +[batch]: ../process-engine/batch.md +[job executor]: ../process-engine/the-job-executor.md#job-execution-in-heterogeneous-clusters +[execution jobs]: ../process-engine/batch.md#execution-jobs + + +### Aspects Not Covered by Validation + +#### Data Consistency + +Process instances contain data such as variables that are specific to how a process is implemented. +Validation cannot ensure that such data is useful in the context of the target process definition. + +#### Deserialization of Object Variables + +[Object type variables](../process-engine/variables.md#supported-variable-values) represent Java objects. That means they have a serialized value along with a Java type name that is used to deserialize the value into a Java object. When migrating between processes of different process +applications, it may occur that an Object variable refers to a Java class that does not exist in the process +application of the target process. + +This scenario is not prevented by validation. Accessing the deserialized value may therefore fail after migration. +If you end up with unusable Object variables, there are two ways to deal with +that situation: + +* Add the missing classes to the target process application +* Convert the inconsistent variable into a variable for which the Java class is present based on its serialized value diff --git a/docs/documentation/user-guide/process-engine/scripting.md b/docs/documentation/user-guide/process-engine/scripting.md index 8bfdc16..b44dbf5 100644 --- a/docs/documentation/user-guide/process-engine/scripting.md +++ b/docs/documentation/user-guide/process-engine/scripting.md @@ -449,9 +449,9 @@ i.e., `$sum`) There are also special variables: -1. `execution`, which is always available if the script is executed in an execution scope (e.g., in a script task) (DelegateExecution). -1. `task`, which is available if the script is executed in a task scope (e.g., a task listener) (DelegateTask). -1. `connector`, which is available if the script is executed in a connector variable scope (e.g., outputParameter of a operaton:connector) (ConnectorVariableScope). +1. `execution`, which is always available if the script is executed in an execution scope (e.g., in a script task) ([DelegateExecution](https://github.com/operaton/operaton/blob/main/engine/src/main/java/org/operaton/bpm/engine/delegate/DelegateExecution.java)). +2. `task`, which is available if the script is executed in a task scope (e.g., a task listener) ([DelegateTask](https://github.com/operaton/operaton/blob/main/engine/src/main/java/org/operaton/bpm/engine/delegate/DelegateTask.java)). +3. `connector`, which is available if the script is executed in a connector variable scope (e.g., outputParameter of a operaton:connector) (ConnectorVariableScope). These variables correspond to the `DelegateExecution`, `DelegateTask` or resp. `ConnectorVariableScope` interface which means that it can be used to get and set variables or access process engine services. diff --git a/docs/documentation/user-guide/process-engine/templating.md b/docs/documentation/user-guide/process-engine/templating.md index 4ddc85e..02e65ab 100644 --- a/docs/documentation/user-guide/process-engine/templating.md +++ b/docs/documentation/user-guide/process-engine/templating.md @@ -43,7 +43,7 @@ application deployment. When using the process engine in a maven `war` project, dependencies must be added as dependencies to the maven `pom.xml` file: :::note - The [Operaton BOM](/get-started/apache-maven/) only contains the officially supported freemarker template engine. + The [Operaton BOM](../../../get-started/apache-maven.md) only contains the officially supported freemarker template engine. For the community-driven template engines, please check the Maven coordinates below. ::: diff --git a/docs/documentation/user-guide/security.md b/docs/documentation/user-guide/security.md index 7428ec2..25e2fe8 100644 --- a/docs/documentation/user-guide/security.md +++ b/docs/documentation/user-guide/security.md @@ -10,7 +10,7 @@ menu: --- -This page provides an overview of how to secure a Operaton installation. For Operaton's security policy, a list of security notices and a guide how to report vulnerabilities, please visit the [general security documentation](/security). +This page provides an overview of how to secure a Operaton installation. For Operaton's security policy, a list of security notices and a guide how to report vulnerabilities, please visit the [general security documentation](../../security/index.md). In order to secure a Operaton installation, Operaton itself must be configured correctly and it must be integrated correctly into its environment. This section also identifies areas where we consider security issues to be relevant for the specific Operaton product and listed those in the subsequent sections. Compliance for those areas is ensured based on common industry best practices and influenced by security requirements of standards like OWASP Top 10 and others diff --git a/docs/documentation/user-guide/spring-boot-integration/spring-security.md b/docs/documentation/user-guide/spring-boot-integration/spring-security.md index c330441..90cc7c2 100644 --- a/docs/documentation/user-guide/spring-boot-integration/spring-security.md +++ b/docs/documentation/user-guide/spring-boot-integration/spring-security.md @@ -47,14 +47,14 @@ registration in the application properties (`spring.security.oauth2.client.regis Configuration activates if there is OAuth2 client registration configured. This class configures the Spring Security filter chain to secure the Operaton Webapps. -Spring auto configuration class: OperatonSpringSecurityOAuth2AutoConfiguration +Spring auto configuration class: OperatonSpringSecurityOAuth2AutoConfiguration ## Spring Security Disabled Auto Configuration Configuration activates if there is **no** OAuth2 client registration configured. This class configures the Spring Security filter chain to a permit all mode. -Spring auto configuration class: OperatonBpmSpringSecurityDisableAutoConfiguration +Spring auto configuration class: OperatonBpmSpringSecurityDisableAutoConfiguration # OAuth2 Client Registration @@ -103,7 +103,7 @@ to grant administrator authorizations for a particular OAuth2 user or group. # OAuth2 Identity Provider Additionally to the OAuth2 login, Operaton also provides support to use groups from OAuth2. -This is achieved with a custom [identity service](../process-engine/identity-service.md), called OAuth2IdentityProvider. +This is achieved with a custom [identity service](../process-engine/identity-service.md), called [OAuth2IdentityProvider](https://github.com/operaton/operaton/blob/main/spring-boot-starter/starter-security/src/main/java/org/operaton/bpm/spring/boot/starter/security/oauth2/impl/OAuth2IdentityProvider.java). This is a read-only identity provider that configures user's groups from the [Spring Security's granted authorities][Authorities]. This identity provider also supports the default Operaton Database Identity Service as a fallback for authentications for the REST API. diff --git a/docs/documentation/webapps/admin/auditing.md b/docs/documentation/webapps/admin/auditing.md index 7fea996..7fef454 100644 --- a/docs/documentation/webapps/admin/auditing.md +++ b/docs/documentation/webapps/admin/auditing.md @@ -32,5 +32,5 @@ To only display Operations performed by a specific User, click in the Search fie You can filter the results by a timespan in which the operation occurred. Click in the Search field and select `Timestamp` from the dropdown. By clicking on the operator, you can select if you want to see results `before` or `after` the specified time. ## Operations of a specific Entity -If you are only interested in operations concerning Authorizations, you can use the `Entity Type` filter. For a complete list of logged operations, check out [History and Audit Event Log](/user-guide/process-engine/history/#glossary-of-operations-logged-in-the-user-operation-log). +If you are only interested in operations concerning Authorizations, you can use the `Entity Type` filter. For a complete list of logged operations, check out [History and Audit Event Log](../../user-guide/process-engine/history/index.md#glossary-of-operations-logged-in-the-user-operation-log). ![Example img](./img/admin-audit-entity.png)Filter by Type diff --git a/docs/documentation/webapps/cockpit/auditing.md b/docs/documentation/webapps/cockpit/auditing.md index e080d2e..00077b6 100644 --- a/docs/documentation/webapps/cockpit/auditing.md +++ b/docs/documentation/webapps/cockpit/auditing.md @@ -30,7 +30,7 @@ You can limit Results the time the operation occurred. Click in the Search field ![Example img](./img/cockpit-audit-timestamp.png)Filter by Timestamp ## Operations of a specific Type -If you are only interested in a specific operation, for example, every time a process instance was manually modified, you can use the `operation` filter. Select the desired operation from the dropdown or start to type the name to filter through the list. For a complete list of logged operations, check out [History and Audit Event Log](/user-guide/process-engine/history/#glossary-of-operations-logged-in-the-user-operation-log). +If you are only interested in a specific operation, for example, every time a process instance was manually modified, you can use the `operation` filter. Select the desired operation from the dropdown or start to type the name to filter through the list. For a complete list of logged operations, check out [History and Audit Event Log](../../user-guide/process-engine/history/index.md#glossary-of-operations-logged-in-the-user-operation-log). ![Example img](./img/cockpit-audit-type.png)Filter by Type ## Annotating Operation Logs diff --git a/docs/documentation/webapps/cockpit/bpmn/process-instance-migration.md b/docs/documentation/webapps/cockpit/bpmn/process-instance-migration.md index bd382f7..6e5e66e 100644 --- a/docs/documentation/webapps/cockpit/bpmn/process-instance-migration.md +++ b/docs/documentation/webapps/cockpit/bpmn/process-instance-migration.md @@ -17,128 +17,3 @@ menu: You can migrate running process instances from their current process definition version to another version of that definition or another process definition altogether. You can access the migration page by navigating to the process definition or instance view of a process with multiple versions. -![Example img](./../img/migration/accessing_2.png)Link to Process Instance Migration Page from Process Definition Page - -Performing a migration consists of four steps: - -1. Create a mapping from the activities of the source definition to activities of the target definition -2. Select running instances to migrate -3. Confirm the migration -4. Observe the results of the migration and check for errors - - -# Create a Migration Plan - -When accessing the migration page from the process definition or instance page, an appropriate source and target definition key and version is already set. Otherwise you can set the process definition key and version for both the source and target at the top of the page. After selecting a source and a target, the diagrams for these process definition versions are displayed. Also, a first draft of a migration plan is [generated](../../../user-guide/process-engine/process-instance-migration.md#generating-a-migration-plan) and successfully mapped activities are highlighted with a green checkmark symbol . Hovering over an activity highlights the corresponding source and target activities for the mapping. - -Activities that have running instances, but are not mapped to a target activity, have a yellow warning marker . If you plan to migrate these instances, you have to create a mapping for these activities, otherwise the migration will fail. - -## Create a new mapping - -![Example img](./../img/migration/step1_createMapping.png)Creating a new mapping - -To create a mapping for an activity, hover over the activity and click on the arrow button in the lower right corner of the activity. This enters the mapping mode. An arrow following your mouse movements is created and possible target activities are highlighted. Clicking on one of the highlighted activities in the target diagram creates a mapping from the source activity to the selected target activity. Clicking anywhere else or pressing ESC exits the edit mode. - -You can only create a mapping for activities that are not mapped yet. - - -## Remove an existing mapping - -You can remove an existing mapping by hovering over the mapped activity and clicking the button in the lower right corner. - - -## Link diagrams navigation - -Checking the link diagrams navigation checkbox causes view changes of one diagram to be displayed on the other diagram, too. If you move, zoom or reset one diagram, the same change is applied to the other diagram, too. To move both diagrams independently from each other, uncheck this box. - - -## Check incorrect mappings - -![Example img](./../img/migration/step1_errorPopover.png)Report for an incorrect mapping - -If you create a mapping that is incorrect, a red error indicator is displayed in the top right corner of the source and target activity of the faulty mapping. Clicking on the error indicator opens a tooltip showing details of the error. - - -## Set Update Event Trigger flag - -To set the [update event trigger flag](../../../user-guide/process-engine/process-instance-migration.md#events) for events, first create a mapping for the event. Then click on the green checkmark indicator to open the details tooltip. The opened popup contains a checkbox to update the event trigger. - -:::warning[Heads Up!] -By default, the update event trigger flag in cockpit migration is set for activities with message references. -I.e., for interrupting/non-interrupting message boundary events, message intermediate catch events, and receive tasks. -::: - -## Show migration plan - -You can visualize the migration plan in two ways: You can hover over an activity to highlight the activity that is mapped to the hovered activity. E.g., if you hover over a mapped source activity, the corresponding target activity is highlighted. If you hover over a target activity, the corresponding source activities are highlighted as well. - -You can also click on an activity to show a green arrow pointing from the source activity to the mapped target activity. Clicking on the activity again hides the arrow. If the mapping contains errors, the arrow is displayed in red. You can also use the checkbox at the bottom of the screen reading "show migration plan" to toggle the display of all arrows on the diagram. - -# Set Variables - -After finishing defining the flow-node mapping, click on the **Set Variables** button to proceed. - -![Example img](./../img/migration/step2.png)Set variables for migration - -The next step allows you to set variables into the process instances’ scope. - -![Example img](./../img/migration/step2_modal.png)Set variables for migration – add variable - -When you click on the **Add Variable** button, a modal dialog opens where you can define the variable name, type, and value. - -![Example img](./../img/migration/step2_validation.png)Set variables for migration – variable validation - -The Engine validates the variable against the migration plan validation rules and Cockpit displays the result for each variable in the **Valid** column of the table. -If a variable invalidates the migration plan, Cockpit opens a popover with the respective validation errors. - -![Example img](./../img/migration/step2_edit.png)Set variables for migration – edit variable - -You can still edit the variables you have just added. For instance, if a variable invalidates the migration plan, you can easily correct it to proceed with the process instance migration. - -# Select instances - -![Example img](./../img/migration/step3.png)Select instances for migration - -After finishing the **Set Variables** step, click **Select Instances** to proceed to instance selection. - -Initially, all instances of the source process definition version are displayed. You can use the filter bar above the list of instances to filter the displayed instances. You can select specific instances or click on the **Query** radio button to select all instances matching the filter. - -:::warning[Warning] -Selecting all instances might create a high load on the database and application runtime/server if the query has a high number of results. -::: - -Furthermore, you can copy a link to the current filter query to your clipboard by clicking on the button and you can save filter queries to your local browser storage by clicking on the button and inserting a name in the drop down menu that appears. You can then retrieve the filter query by clicking on the button and selecting the chosen name in the drop down menu. - -Using the checkboxes to the left of the instances, you can mark them for migration. All instances you select on this page are migrated. - -If you do not explicitly select any instances, all instances of the source process definition version are migrated to the target version. - - -# Confirm Migration - -![Example img](./../img/migration/step4.png)Confirm Migration - -In the next step, you see an overview of the migration that you are about to execute. This page displays the exact id of the source and target process definition as well as the number of process instances you are about to migrate. It also contains a tabular display of the migration plan. You can configure options for the migration such as whether the migration should be performed asynchronously as a batch and whether custom listeners and IO mappings should be skipped. - -By clicking on the button on the bottom of the page, you can assess the request payload that is sent to the server to perform the migration. - - -# Check Migration Result - -![Example img](./../img/migration/step5_batch.png)Executing migration asynchronously - -After clicking `Execute Migration`, the result screen is displayed. If the migration was performed successfully, that is indicated on this page. For asynchronous migrations, a link to the [batch page](../batch/monitoring.md) is displayed where the progress of the batch can be observed. - -## Error: Migration Plan invalid - -![Example img](./../img/migration/step5_error.png)Invalid migration plan - -If the migration plan contains errors, they are displayed on this page. No instances are migrated in this case. You can go back to the first step to fix the errors. - -## Error: Failed to apply the Migration Plan - -If the migration plan itself is correct, but could not be applied to a specific instance, an error is shown. This error contains the instance id that produced the error as well as the cause of the failure. - -## Error: Migration Failed - -If the migration failed for other reasons, the error is displayed. diff --git a/docs/documentation/webapps/cockpit/extend/plugins.md b/docs/documentation/webapps/cockpit/extend/plugins.md index e55b30c..3011d8e 100644 --- a/docs/documentation/webapps/cockpit/extend/plugins.md +++ b/docs/documentation/webapps/cockpit/extend/plugins.md @@ -12,7 +12,7 @@ menu: --- :::note[Plugin Compatibility] -Please note that we updated the frontend plugin interface with Operaton Runtime 7.14. Plugins written for Operaton Runtime 7.13 and earlier might no longer work with Operaton Runtime 7.14. Checkout the [update guide](../update/minor/713-to-714) for more details. +Please note that we updated the frontend plugin interface with Operaton Runtime 7.14. Plugins written for Operaton Runtime 7.13 and earlier might no longer work with Operaton Runtime 7.14. Checkout the [update guide](https://docs.camunda.org/manual/latest/update/minor/713-to-714/) for more details. ::: Cockpit defines a plugin concept to add own functionality without being forced to extend or hack the Cockpit web application. You can add plugins at various plugin points, e.g., the processes dashboard as shown in the following example: @@ -116,7 +116,7 @@ This file can also be included standalone as a [custom script](../../cockpit/ext The second argument contains API endpoints and CSRF cookie information, as well as constants like a `processDefinitionId`. The `api` key is always present and contains * `engine`: the engine name * `CSRFToken`: the current CSRF token for your requests - * `baseApi`, `adminApi`, `cockpitApi`, `engineApi`: The paths to different API endpoints. The engineApi corresponds to the [Rest Api](../reference/rest) + * `baseApi`, `adminApi`, `cockpitApi`, `engineApi`: The paths to different API endpoints. The engineApi corresponds to the [Rest Api](../../../reference/rest/index.md) The details of which data is passed into the plugin can be found at the [plugin point reference](#plugin-points). * `result`: Function, only available in data plugins. Argument is a (`Promise`). diff --git a/docs/documentation/webapps/tasklist/task-lifecycle.md b/docs/documentation/webapps/tasklist/task-lifecycle.md index 717e9c6..498c47a 100644 --- a/docs/documentation/webapps/tasklist/task-lifecycle.md +++ b/docs/documentation/webapps/tasklist/task-lifecycle.md @@ -11,6 +11,6 @@ menu: --- -The diagram below shows the task lifecycle and supported transitions supported by Operaton. To get to know how to programmatically work with the lifecycle in your application, refer to the [Java-API Reference](org/operaton/bpm/engine/impl/TaskServiceImpl.html). +The diagram below shows the task lifecycle and supported transitions supported by Operaton. To get to know how to programmatically work with the lifecycle in your application, refer to the [Java-API Reference](https://github.com/operaton/operaton/blob/main/engine/src/main/java/org/operaton/bpm/engine/impl/TaskServiceImpl.java). ![Example img](./img/tasklist-user-task-state-complete.png)User Task States diff --git a/docs/get-started/apache-maven.md b/docs/get-started/apache-maven.md index ac3a6c7..47c6be5 100644 --- a/docs/get-started/apache-maven.md +++ b/docs/get-started/apache-maven.md @@ -111,8 +111,8 @@ It is not needed when using `operaton-engine` because that already contains the # Other Operaton Modules: -* [DMN Engine](/manual/latest/user-guide/dmn-engine/embed/#maven-coordinates) -* [Operaton Spin](/manual/latest/reference/spin) -* [Operaton Connect](/manual/latest/reference/connect/#maven-coordinates) -* [Templating Engines](/manual/latest/user-guide/process-engine/templating/#install-a-template-engine-for-an-embedded-process-engine) -* [Spring Boot Integration](/manual/latest/user-guide/spring-boot-integration/) +* [DMN Engine](../documentation/user-guide/dmn-engine/embed.md#maven-coordinates) +* [Operaton Spin](../documentation/reference/spin/index.md) +* [Operaton Connect](../documentation/reference/connect/index.md#maven-coordinates) +* [Templating Engines](../documentation/user-guide/process-engine/templating.md#install-a-template-engine-for-an-embedded-process-engine) +* [Spring Boot Integration](../documentation/user-guide/spring-boot-integration/index.md) diff --git a/docs/get-started/archive/java-process-app/deploy.md b/docs/get-started/archive/java-process-app/deploy.md index e3e4af1..dd0e33a 100644 --- a/docs/get-started/archive/java-process-app/deploy.md +++ b/docs/get-started/archive/java-process-app/deploy.md @@ -74,7 +74,7 @@ Now create a second authorization for the *process instance* resource. Set the p ![Example image](./img/create-process-instance-authorization.png) -For further details about authorizations and how to manage them, please read the following sections in the user guide: [Authorization Service](/manual/latest/user-guide/process-engine/authorization-service) and [Authorization Management](/manual/latest/webapps/admin/authorization-management). +For further details about authorizations and how to manage them, please read the following sections in the user guide: [Authorization Service](../../../documentation/user-guide/process-engine/authorization-service.md) and [Authorization Management](../../../documentation/webapps/admin/authorization-management.md). # Work on the Task diff --git a/docs/get-started/archive/java-process-app/forms.md b/docs/get-started/archive/java-process-app/forms.md index ca476ed..7ca7b9e 100644 --- a/docs/get-started/archive/java-process-app/forms.md +++ b/docs/get-started/archive/java-process-app/forms.md @@ -71,7 +71,7 @@ Adjust the `META-INF/processes.xml` deployment descriptor file by adding the for # Re-Build and Deploy -When you are done, save all resources, [perform a Maven build](../deploy/#build-the-web-application-with-maven) and [redeploy](../deploy/#deploy-to-apache-tomcat) the process application. +When you are done, save all resources, [perform a Maven build](deploy.md#build-the-web-application-with-maven) and [redeploy](deploy.md#deploy-to-apache-tomcat) the process application. :::note[Maven] Before selecting the pom.xml in the Package Explorer of Eclipse and performing a right-click and select Run As / Maven Install, it is best practice to perform a right-click and select Run As / Maven Clean to make sure all resources are replaced with their newest version. diff --git a/docs/get-started/archive/java-process-app/install.md b/docs/get-started/archive/java-process-app/install.md index 18a67a0..afb3553 100644 --- a/docs/get-started/archive/java-process-app/install.md +++ b/docs/get-started/archive/java-process-app/install.md @@ -42,4 +42,4 @@ If you have trouble setting up the Operaton Platform, you can ask for assistance # Camunda Modeler -Follow the instructions in the [Camunda Modeler](/manual/latest/installation/camunda-modeler) section. +Follow the instructions in the [Camunda Modeler](../../../documentation/installation/camunda-modeler.md) section. diff --git a/docs/get-started/archive/java-process-app/project-setup.md b/docs/get-started/archive/java-process-app/project-setup.md index f17e2e9..daed13d 100644 --- a/docs/get-started/archive/java-process-app/project-setup.md +++ b/docs/get-started/archive/java-process-app/project-setup.md @@ -17,7 +17,7 @@ Now you are ready to set up your first process application project in the IDE of # Create a new Maven Project :::note[Fancy to save work and use a project template instead?] -You don't have to setup the project manually but can also use a Maven Archetype (which is like a project template), see [Maven Archetypes](/manual/latest/user-guide/process-applications/maven-archetypes/) for details. The archetype will create a project according to our best practices. +You don't have to setup the project manually but can also use a Maven Archetype (which is like a project template), see [Maven Archetypes](../../../documentation/user-guide/process-applications/maven-archetypes.md) for details. The archetype will create a project according to our best practices. ::: In Eclipse, go to `File / New / Other ...`. This opens the *New Project Wizard*. In the *New Project Wizard* select `Maven / Maven Project`. Click Next. @@ -137,7 +137,7 @@ This file needs to be added to the `src/main/resources/META-INF` folder of the M ``` :::note[Empty META-INF/processes.xml] -You can leave the `META-INF/processes.xml` file empty. In that case, default values are used. See the [Empty Processes.xml](/manual/latest/user-guide/process-applications/the-processes-xml-deployment-descriptor/#empty-processes-xml) section of the [User Guide](/manual/latest/user-guide) for more information +You can leave the `META-INF/processes.xml` file empty. In that case, default values are used. See the [Empty Processes.xml](../../../documentation/user-guide/process-applications/the-processes-xml-deployment-descriptor.md#empty-processes-xml) section of the [User Guide](../../../documentation/user-guide/index.md) for more information ::: At this point you have successfully set up the process application and you can start modeling the first process. diff --git a/docs/get-started/archive/java-process-app/service-task.md b/docs/get-started/archive/java-process-app/service-task.md index dfbc1fd..cd6a5a1 100644 --- a/docs/get-started/archive/java-process-app/service-task.md +++ b/docs/get-started/archive/java-process-app/service-task.md @@ -54,7 +54,7 @@ Use the properties view to reference the service task in the process (see screen ![Example image](./img/modeler-service-task3.png) -Save the process model and update it in Eclipse. [Build](../deploy/#build-the-web-application-with-maven), [deploy](../deploy/#deploy-to-apache-tomcat) and [execute](../forms/#re-build-and-deploy) the process application. After completing the *Approve Loan* step, check the logfile of the Apache Tomcat server: +Save the process model and update it in Eclipse. [Build](deploy.md#build-the-web-application-with-maven), [deploy](deploy.md#deploy-to-apache-tomcat) and [execute](forms.md#re-build-and-deploy) the process application. After completing the *Approve Loan* step, check the logfile of the Apache Tomcat server:
     INFO org.operaton.bpm.getstarted.loanapproval.ProcessRequestDelegate.execute
    diff --git a/docs/get-started/archive/javaee7/complete-process.md b/docs/get-started/archive/javaee7/complete-process.md
    index bfc41f4..20d0617 100644
    --- a/docs/get-started/archive/javaee7/complete-process.md
    +++ b/docs/get-started/archive/javaee7/complete-process.md
    @@ -59,7 +59,7 @@ A new conversation is started again before the view is rendered and the task is
     
     Open the process with Camunda Modeler. Click on the prepare pizza user task. In the properties view, set the `Form Key` property to `app:preparepizza.jsf`.
     
    -When you are done, save all resources, [perform a Maven build](../deploy/#build-the-process-application), and [redeploy](../deploy/#deploy-to-wildfly) the process application.
    +When you are done, save all resources, [perform a Maven build](deploy.md#build-the-process-application), and [redeploy](deploy.md#deploy-to-wildfly) the process application.
     
     ## Add Send Rejection Email Service Task
     
    @@ -100,7 +100,7 @@ public class OrderBusinessLogic {
     
     Open the process with Camunda Modeler. Click on the reject email service task. In the properties view, set the `Expression` property to `${orderBusinessLogic.rejectOrder(execution)}`.
     
    -When you are done, save all resources, [perform a Maven build](../deploy/#build-the-process-application) and [redeploy](../deploy/#deploy-to-wildfly) the process application. You can now approve and reject an order in [Tasklist](http://localhost:8080/operaton/app/tasklist). The output of the `Send Rejection Email` task can be checked by looking into the logfile of the WildFly server. It should state that a rejection email has been sent:
    +When you are done, save all resources, [perform a Maven build](deploy.md#build-the-process-application) and [redeploy](deploy.md#deploy-to-wildfly) the process application. You can now approve and reject an order in [Tasklist](http://localhost:8080/operaton/app/tasklist). The output of the `Send Rejection Email` task can be checked by looking into the logfile of the WildFly server. It should state that a rejection email has been sent:
     
     
       Sending Email:
    diff --git a/docs/get-started/archive/javaee7/install.md b/docs/get-started/archive/javaee7/install.md
    index f762d8d..bdae9a9 100644
    --- a/docs/get-started/archive/javaee7/install.md
    +++ b/docs/get-started/archive/javaee7/install.md
    @@ -42,4 +42,4 @@ If you have trouble setting up the Operaton Platform, you can ask for assistance
     
     # Install Camunda Modeler
     
    -Follow the instructions in the [Camunda Modeler](/manual/latest/installation/camunda-modeler) section.
    \ No newline at end of file
    +Follow the instructions in the [Camunda Modeler](../../../documentation/installation/camunda-modeler.md) section.
    \ No newline at end of file
    diff --git a/docs/get-started/archive/javaee7/project-setup.md b/docs/get-started/archive/javaee7/project-setup.md
    index 6786d43..5c5a6f5 100644
    --- a/docs/get-started/archive/javaee7/project-setup.md
    +++ b/docs/get-started/archive/javaee7/project-setup.md
    @@ -17,7 +17,7 @@ Now you are ready to set up your first process application project in the IDE of
     # Set up your project
     
     :::note[Fancy to save work and use a project template instead?]
    -You don't have to setup the project manually but can also use a Maven Archetype (which is like a project template), see [Maven Archetypes](/manual/latest/user-guide/process-applications/maven-archetypes/) for details. The archetype will create a project according to our best practices.
    +You don't have to setup the project manually but can also use a Maven Archetype (which is like a project template), see [Maven Archetypes](../../../documentation/user-guide/process-applications/maven-archetypes.md) for details. The archetype will create a project according to our best practices.
     :::
     
     Now you are ready to set up your Java EE process application project in Eclipse. Setting up a process application project consists of 6 steps:
    diff --git a/docs/get-started/archive/javaee7/service-task.md b/docs/get-started/archive/javaee7/service-task.md
    index 78bff1f..f9b789e 100644
    --- a/docs/get-started/archive/javaee7/service-task.md
    +++ b/docs/get-started/archive/javaee7/service-task.md
    @@ -27,7 +27,7 @@ To persist the entity with JPA, we add an entity bean to our process application
     Operaton Automation Platform 7.19 is the last release that supports handling JPA entities as variables
     
     You need to add a process engine plugin to achieve some of the next steps in the guide.
    -Have a look at the [7.20 update guide](/manual/develop/user-guide/update/minor/719-to-720/#breaking-change-discontinue-support-for-handling-jpa-entities-as-variables) for more information.
    +Have a look at the [7.20 update guide](https://docs.camunda.org/manual/latest/update/minor/719-to-720/#breaking-change-discontinue-support-for-handling-jpa-entities-as-variables) for more information.
     :::
     
     ```java
    @@ -168,7 +168,7 @@ public class OrderBusinessLogic {
     
     Use the properties view of the Persist Service Task in the process (see screenshot). You need to enter `${orderBusinessLogic.persistOrder(execution)}` as the `Expression` property. This will call the `persistOrder` method of the named EJB with the current execution as parameter.
     
    -[Build](../deploy/#build-the-process-application), [deploy](../deploy/#deploy-to-wildfly) and start the process `Order Pizza` in [Tasklist](http://localhost:8080/operaton/app/tasklist). Fill out the emerging form. Now the *Persist Order* step should have been completed automatically. Check that by looking into the logfile of the WildFly server. It will show an entry for the new order entity:
    +[Build](deploy.md#build-the-process-application), [deploy](deploy.md#deploy-to-wildfly) and start the process `Order Pizza` in [Tasklist](http://localhost:8080/operaton/app/tasklist). Fill out the emerging form. Now the *Persist Order* step should have been completed automatically. Check that by looking into the logfile of the WildFly server. It will show an entry for the new order entity:
     
     
       INFO  [stdout] Hibernate: insert into OrderEntity (address, approved, customer, pizza, version, id) values (?, ?, ?, ?, ?, ?)
    diff --git a/docs/get-started/archive/javaee7/task-form.md b/docs/get-started/archive/javaee7/task-form.md
    index c66fa54..d957510 100644
    --- a/docs/get-started/archive/javaee7/task-form.md
    +++ b/docs/get-started/archive/javaee7/task-form.md
    @@ -174,4 +174,4 @@ Open the process with the modeler. Click on the *Approve Order* user task. In th
     
     Open the process with the modeler. In the properties view, set the `Condition` property of the conditional sequence flows after the exclusive gateway to `${orderBusinessLogic.getOrder(orderId).approved}` respectively `${not orderBusinessLogic.getOrder(orderId).approved}`.
     
    -When you are done, save all resources, [perform a Maven build](../deploy/#build-the-process-application), and [redeploy](../deploy/#deploy-to-wildfly) the process application. Start the process `Order Pizza` in [Tasklist](http://localhost:8080/operaton/app/tasklist). Fill out the emerging form. Select the `All Tasks` element on the left side of Tasklist. An `Approve Order` task should then be listed in the tasklist. Go to the task and press on Claim. Now you can approve the pizza order.
    \ No newline at end of file
    +When you are done, save all resources, [perform a Maven build](deploy.md#build-the-process-application), and [redeploy](deploy.md#deploy-to-wildfly) the process application. Start the process `Order Pizza` in [Tasklist](http://localhost:8080/operaton/app/tasklist). Fill out the emerging form. Select the `All Tasks` element on the left side of Tasklist. An `Approve Order` task should then be listed in the tasklist. Go to the task and press on Claim. Now you can approve the pizza order.
    \ No newline at end of file
    diff --git a/docs/get-started/dmn/deploy.md b/docs/get-started/dmn/deploy.md
    index fcbf071..fa0d950 100644
    --- a/docs/get-started/dmn/deploy.md
    +++ b/docs/get-started/dmn/deploy.md
    @@ -10,7 +10,7 @@ menu:
         identifier: "get-started-dmn-deploy"
         description: "Use Java Code to evaluate the decision table, then deploy the web application to Apache Tomcat and verify the result in Cockpit."
     
    -aliases: [/dmn11/deploy/]
    +aliases: [/dmn/deploy/]
     ---
     
     In this step, we use Java Code to evaluate the decision table. Then we deploy the web application to Apache Tomcat and verify the result in Cockpit.
    @@ -103,8 +103,8 @@ Congratulations, you have now successfully set up a project with your first DMN
     
     Next,
     
    -* see how you can evaluate the decision using the [REST API](/manual/reference/rest/decision-definition/post-evaluate/),
    -* learn more about DMN by reading the [DMN Reference](/manual/reference/dmn/),
    -* learn more about the [Decision API exposed by Operaton Process Engine](/manual/user-guide/process-engine/decisions/),
    -* check how you can invoke the decision from a [BPMN Business Rule Task](/manual/reference/bpmn20/tasks/business-rule-task/),
    -* Bonus Step: [Decision Requirements Graph](../drg)
    +* see how you can evaluate the decision using the [REST API](../../documentation/reference/rest/index.md),
    +* learn more about DMN by reading the [DMN Reference](../../documentation/reference/dmn/index.md),
    +* learn more about the [Decision API exposed by Operaton Process Engine](../../documentation/user-guide/process-engine/decisions/index.md),
    +* check how you can invoke the decision from a [BPMN Business Rule Task](../../documentation/reference/bpmn20/tasks/business-rule-task.md),
    +* Bonus Step: [Decision Requirements Graph](drg.md)
    diff --git a/docs/get-started/dmn/drg.md b/docs/get-started/dmn/drg.md
    index 956ff40..40b362e 100644
    --- a/docs/get-started/dmn/drg.md
    +++ b/docs/get-started/dmn/drg.md
    @@ -10,7 +10,7 @@ menu:
         identifier: "get-started-dmn-drg"
         description: "Model a Decision Requirements Graph based on the decision table, adjust the Java Code to evaluate it and deploy the web application."
     
    -aliases: [/dmn11/drg/]
    +aliases: [/dmn/drg/]
     ---
     
     In this step, we extend the previous example by a second decision *Beverages* which uses the *Dish* decision table as input. We model this dependency between the decisions within a Decision Requirements Graph (DRG) using the Camunda Modeler. Then, we adjust the Application class to evaluate the *Beverages* decision, deploy the web application to Apache Tomcat and verify the result in Cockpit.
    @@ -27,7 +27,7 @@ Open the *Dish* decision table from the previous step. Click on the button "View
     
     # Set the Name and the Id of the DRD
     
    -Click somewhere on the canvas and open the Property Panel on the right. Change the [id](/manual/latest/reference/dmn11/drg/#decision-requirements-graph-id) of the DRD to "dinnerDecisions". Next, change the [name](/manual/latest/reference/dmn11/drg/#decision-requirements-graph-name) of the DRD to "Dinner Decisions".
    +Click somewhere on the canvas and open the Property Panel on the right. Change the [id](../../documentation/reference/dmn/drg/index.md#decision-requirements-graph-id) of the DRD to "dinnerDecisions". Next, change the [name](../../documentation/reference/dmn/drg/index.md#decision-requirements-graph-name) of the DRD to "Dinner Decisions".
     
     
     ![Example image](./img/modeler-drd-step2.png)
    @@ -38,7 +38,7 @@ Click on the decision icon of the palette to create a new decision. Then, double
     
     ![Example image](./img/modeler-drd-step3.png)
     
    -Next, connect the *Dish* decision to the *Beverages* decision to indicate that the *Dish* decision is a [required decision](/manual/latest/reference/dmn11/drg/#required-decisions) of the *Beverages* decision. That means that it is used as an input for the decision and the output value "desiredDish" can be accessed there.
    +Next, connect the *Dish* decision to the *Beverages* decision to indicate that the *Dish* decision is a [required decision](../../documentation/reference/dmn/drg/index.md#required-decisions) of the *Beverages* decision. That means that it is used as an input for the decision and the output value "desiredDish" can be accessed there.
     
     ![Example image](./img/modeler-drd-step4.png)
     
    @@ -142,5 +142,5 @@ Note that the *Dish* decision is evaluated as part of the evaluation of the *Bev
     
     Next,
     
    -* learn more about DRG by reading the [DMN Reference](/manual/reference/dmn11/drg),
    +* learn more about DRG by reading the [DMN Reference](../../documentation/reference/dmn/drg/index.md),
     * learn more about [DMN in Cockpit](https://docs.operaton.org/manual/webapps/cockpit/dmn/)
    diff --git a/docs/get-started/dmn/install.md b/docs/get-started/dmn/install.md
    index 94b6909..557cebe 100644
    --- a/docs/get-started/dmn/install.md
    +++ b/docs/get-started/dmn/install.md
    @@ -42,4 +42,4 @@ If you have trouble setting up the Operaton Platform, you can ask for assistance
     
     # Camunda Modeler
     
    -Follow the instructions in the [Camunda Modeler](/manual/latest/installation/camunda-modeler) section.
    +Follow the instructions in the [Camunda Modeler](../../documentation/installation/camunda-modeler.md) section.
    diff --git a/docs/get-started/dmn/model.md b/docs/get-started/dmn/model.md
    index 8c3f3e2..735806c 100644
    --- a/docs/get-started/dmn/model.md
    +++ b/docs/get-started/dmn/model.md
    @@ -13,7 +13,7 @@ menu:
     aliases: [/dmn11/model/]
     ---
     
    -In this section you learn how to create your first [DMN Decision Table](/manual/latest/reference/dmn11/decision-table/) with the Camunda Modeler. The table will contain the decision logic about the desired dish for a given season and guest count.
    +In this section you learn how to create your first [DMN Decision Table](../../documentation/reference/dmn/decision-table/index.md) with the Camunda Modeler. The table will contain the decision logic about the desired dish for a given season and guest count.
     
     Now start up the Camunda Modeler.
     
    @@ -26,51 +26,51 @@ Create a new DMN diagram by clicking *File > New File > DMN Diagram*.
     
     # Start with the Table Header
     
    -Start by setting the name and the id of the decision. Select the decision, open the Properties Panel on the right side and change the text to "dish" as the technical [id of the decision](/manual/latest/reference/dmn11/decision-table/#decision-id) which is used to reference the decision inside the process application.
    +Start by setting the name and the id of the decision. Select the decision, open the Properties Panel on the right side and change the text to "dish" as the technical [id of the decision](../../documentation/reference/dmn/decision-table/index.md#decision-id) which is used to reference the decision inside the process application.
     
     ![Example image](./img/modeler-step1.png)
     
    -Next, click on the field below and set the [name of the decision](/manual/latest/reference/dmn11/decision-table/#decision-name) to "Dish".
    +Next, click on the field below and set the [name of the decision](../../documentation/reference/dmn/decision-table/index.md#decision-name) to "Dish".
     
     Now drill down into the decision table of the newly created decision by clicking the table icon on top of the decision.
     
     ![Example image](./img/modeler-step2a.png)
     
    -To set the [label of the input](/manual/latest/reference/dmn11/decision-table/input/#input-label) double-click on the field under "When" and type "Season" in the uppermost field. Same for the [output label](/manual/latest/reference/dmn11/decision-table/output/#output-label), double-click on the field under "Then" and type "Dish" in the uppermost field.
    +To set the [label of the input](../../documentation/reference/dmn/decision-table/input.md#input-label) double-click on the field under "When" and type "Season" in the uppermost field. Same for the [output label](../../documentation/reference/dmn/decision-table/output.md#output-label), double-click on the field under "Then" and type "Dish" in the uppermost field.
     
     ![Example image](./img/modeler-step2b.png)
     
     # Configure the Input Expression and the Output Name
     
    -Assuming that the input value for "Season" is provided by a variable with name "season", the [input expression](/manual/latest/reference/dmn11/decision-table/input/#input-expression) should be "season".
    +Assuming that the input value for "Season" is provided by a variable with name "season", the [input expression](../../documentation/reference/dmn/decision-table/input.md#input-expression) should be "season".
     
     Double-click on the "Season" field. In the modal menu that pops up, set "season" as expression and close it.
     
     ![Example image](./img/modeler-step3.png)
     
    -Next, double-click on the "Dish" field and set "desiredDish" as [output name](/manual/latest/reference/dmn11/decision-table/output/#output-name).
    +Next, double-click on the "Dish" field and set "desiredDish" as [output name](../../documentation/reference/dmn/decision-table/output.md#output-name).
     
     # Configure the Type of the Input and Output
     
    -Assuming that the input value for "Season" is provided as String, the [type of the input value](/manual/latest/reference/dmn11/decision-table/input/#input-type-definition) should be "string".
    +Assuming that the input value for "Season" is provided as String, the [type of the input value](../../documentation/reference/dmn/decision-table/input.md#input-type-definition) should be "string".
     
     Double-click on the "Season" column header. Open the "Type" dropdown-menu in the modal menu and select "string".
     
     ![Example image](./img/modeler-step4.png)
     
    -Same for the [output type](/manual/latest/reference/dmn11/decision-table/output/#output-type-definition), double-click on the "Dish" column header and choose "string" as type.
    +Same for the [output type](../../documentation/reference/dmn/decision-table/output.md#output-type-definition), double-click on the "Dish" column header and choose "string" as type.
     
     # Add Rules
     
    -Now, add the first [rule](/manual/latest/reference/dmn11/decision-table/rule/) that specifies that the desired dish for season "Fall" is "Spareribs".
    +Now, add the first [rule](../../documentation/reference/dmn/decision-table/rule.md) that specifies that the desired dish for season "Fall" is "Spareribs".
     
     Click on the "+" button at the bottom of the table or just click anywhere on the last row. In the row that was added, type "Fall" in the input column and "Spareribs" in the output column.
     
     ![Example image](./img/modeler-step5.png)
     
    -"Fall" is the condition (i.e., [input entry](/manual/latest/reference/dmn11/decision-table/rule/#input-entry-condition)) of the rule. It is an expression in [FEEL](/manual/latest/reference/dmn11/feel/) which is applied and then checks if the input value (i.e., the variable "season") is equal to "Fall".
    +"Fall" is the condition (i.e., [input entry](../../documentation/reference/dmn/decision-table/rule.md#input-entry-condition)) of the rule. It is an expression in [FEEL](../../documentation/reference/dmn/feel/index.md) which is applied and then checks if the input value (i.e., the variable "season") is equal to "Fall".
     
    -"Spareribs" is the conclusion (i.e., [output entry](/manual/latest/reference/dmn11/decision-table/rule/#output-entry-conclusion)) of the rule. It is a simple expression in JUEL and returns the String "Spareribs".
    +"Spareribs" is the conclusion (i.e., [output entry](../../documentation/reference/dmn/decision-table/rule.md#output-entry-conclusion)) of the rule. It is a simple expression in JUEL and returns the String "Spareribs".
     
     Next, add a second input "How many guests" with the input expression "guestCount" and type "integer". Fill the table with additional rules for the remaining seasons.
     
    @@ -78,7 +78,7 @@ Next, add a second input "How many guests" with the input expression "guestCount
     
     # Configure the Hit Policy
     
    -Set the [hit policy](/manual/latest/reference/dmn11/decision-table/hit-policy/) to "UNIQUE", which specifies that only one rule can match. Verify that the decision table contains only one rule that can match the inputs.
    +Set the [hit policy](../../documentation/reference/dmn/decision-table/hit-policy.md) to "UNIQUE", which specifies that only one rule can match. Verify that the decision table contains only one rule that can match the inputs.
     
     Click on the "Hit Policy" dropdown and choose the hit policy "UNIQUE".
     
    @@ -98,4 +98,4 @@ Return to Eclipse. Right-click the project folder and click *Refresh*. This sync
     
     For Eclipse to automatically synchronize the workspace with the filesystem, consider [configuring auto-sync in eclipse][auto-sync].
     
    -[auto-sync]: /manual/latest/modeler/tips/#eclipse-project-synchronization
    +[auto-sync]: https://docs.camunda.org/manual/latest/modeler/
    diff --git a/docs/get-started/dmn/project-setup.md b/docs/get-started/dmn/project-setup.md
    index fa881a1..5e093e4 100644
    --- a/docs/get-started/dmn/project-setup.md
    +++ b/docs/get-started/dmn/project-setup.md
    @@ -23,7 +23,7 @@ DMN is a modeling language for *decisions*, whereas BPMN is a language for *proc
     
     :::note[Fancy to save work and use a project template instead?]
     
    -You don't have to setup the project manually but can also use a Maven Archetype (which is like a project template), see [Maven Archetypes](/manual/latest/user-guide/process-applications/maven-archetypes/) for details. The archetype will create a project according to our best practices.
    +You don't have to setup the project manually but can also use a Maven Archetype (which is like a project template), see [Maven Archetypes](../../documentation/user-guide/process-applications/maven-archetypes.md) for details. The archetype will create a project according to our best practices.
     
     :::
     
    diff --git a/docs/get-started/quick-start/decision-automation.md b/docs/get-started/quick-start/decision-automation.md
    index 95c4b73..a5b79fa 100644
    --- a/docs/get-started/quick-start/decision-automation.md
    +++ b/docs/get-started/quick-start/decision-automation.md
    @@ -7,7 +7,7 @@ description: "Learn how to integrate DMN decision tables in the Process."
     ---
     # Leverage business rules (6/6)
     
    -In this section, you'll learn how to add decision automation to your process by using [BPMN 2.0 *Business Rule Tasks*](/docs/documentation/reference/bpmn20/tasks/business-rule-task/) and [DMN 1.3 Decision Tables](/docs/documentation/reference/dmn11/).
    +In this section, you'll learn how to add decision automation to your process by using [BPMN 2.0 *Business Rule Tasks*](../../documentation/reference/bpmn20/tasks/business-rule-task.md) and [DMN 1.3 Decision Tables](../../documentation/reference/dmn/index.md).
     
     # Add a Business Rule Task to the Process
     Use the Camunda Modeler to open the Payment Retrieval process then click on the Approve Payment Task. Change the activity type to *Business Rule Task* in the wrench button menu.
    diff --git a/docs/get-started/spring-boot/configuration.md b/docs/get-started/spring-boot/configuration.md
    index f362724..7864277 100644
    --- a/docs/get-started/spring-boot/configuration.md
    +++ b/docs/get-started/spring-boot/configuration.md
    @@ -14,7 +14,7 @@ menu:
     
     The Operaton Spring Boot Application created in previous step uses the default and best practice configuration, embedded in a starter.
     There are several ways to customize or override the configuration. The easiest is to provide a set of parameters in the `application.yaml` (or `application.properties`) file.
    -The full list of supported configuration parameters can be found [here](/manual/latest/user-guide/spring-boot-integration/configuration/#operaton-engine-properties).
    +The full list of supported configuration parameters can be found [here](../../documentation/user-guide/spring-boot-integration/configuration.md#operaton-engine-properties).
     
     ## Customize Configuration
     
    diff --git a/docs/security/operations.md b/docs/security/index.md
    similarity index 51%
    rename from docs/security/operations.md
    rename to docs/security/index.md
    index 5aa11e5..68e5d37 100644
    --- a/docs/security/operations.md
    +++ b/docs/security/index.md
    @@ -6,4 +6,4 @@ sidebar_position: 5
     ---
     # Operating Operaton Securely
     
    -The instructions how to operate Operaton securely are located in our [User Guide](../documentation/user-guide/security). Make sure to read the version of the user guide that matches the Operaton version you use.
    \ No newline at end of file
    +The instructions how to operate Operaton securely are located in our [User Guide](../documentation/user-guide/security.md). Make sure to read the version of the user guide that matches the Operaton version you use.
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image01.svg b/static/img/reference/bpmn20/image01.svg
    new file mode 100644
    index 0000000..f6ec277
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image01.svg
    @@ -0,0 +1,6 @@
    +
    +
    +
    +              Pool
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image02.svg b/static/img/reference/bpmn20/image02.svg
    new file mode 100644
    index 0000000..f78ba58
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image02.svg
    @@ -0,0 +1,6 @@
    +
    +            
    +            
    +              Lane
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image03.svg b/static/img/reference/bpmn20/image03.svg
    new file mode 100644
    index 0000000..84a7b91
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image03.svg
    @@ -0,0 +1,8 @@
    +
    +          
    +          
    +          
    +          
    +            Subprocess
    +          
    +        
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image04.svg b/static/img/reference/bpmn20/image04.svg
    new file mode 100644
    index 0000000..8425e0d
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image04.svg
    @@ -0,0 +1,8 @@
    +
    +          
    +          
    +          
    +          
    +            Call Activity
    +          
    +        
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image05.svg b/static/img/reference/bpmn20/image05.svg
    new file mode 100644
    index 0000000..c4d06b4
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image05.svg
    @@ -0,0 +1,9 @@
    +
    +          
    +          
    +          
    +          
    +            Event
    +            Subprocess
    +          
    +        
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image06.svg b/static/img/reference/bpmn20/image06.svg
    new file mode 100644
    index 0000000..46c4c52
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image06.svg
    @@ -0,0 +1,9 @@
    +        
    +          
    +          
    +          
    +          
    +          
    +            Transaction
    +          
    +        
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image07.svg b/static/img/reference/bpmn20/image07.svg
    new file mode 100644
    index 0000000..97cdd2e
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image07.svg
    @@ -0,0 +1,10 @@
    +
    +          
    +          
    +            Service Task
    +          
    +          
    +          
    +          
    +          
    +        
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image08.svg b/static/img/reference/bpmn20/image08.svg
    new file mode 100644
    index 0000000..8679108
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image08.svg
    @@ -0,0 +1,11 @@
    +        
    +          
    +          
    +            User Task
    +          
    +          
    +          
    +          
    +          
    +          
    +        
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image09.svg b/static/img/reference/bpmn20/image09.svg
    new file mode 100644
    index 0000000..fc68ea2
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image09.svg
    @@ -0,0 +1,7 @@
    +
    +          
    +          
    +            Script Task
    +          
    +          
    +        
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image10.svg b/static/img/reference/bpmn20/image10.svg
    new file mode 100644
    index 0000000..51b37c1
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image10.svg
    @@ -0,0 +1,10 @@
    +        
    +          
    +          
    +            Business Rule
    +            Task
    +          
    +          
    +          
    +          
    +        
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image11.svg b/static/img/reference/bpmn20/image11.svg
    new file mode 100644
    index 0000000..6abca6a
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image11.svg
    @@ -0,0 +1,7 @@
    +
    +          
    +          
    +            Manual Task
    +          
    +          
    +        
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image12.svg b/static/img/reference/bpmn20/image12.svg
    new file mode 100644
    index 0000000..6c8cd6a
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image12.svg
    @@ -0,0 +1,7 @@
    +
    +          
    +          
    +            Receive Task
    +          
    +          
    +        
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image13.svg b/static/img/reference/bpmn20/image13.svg
    new file mode 100644
    index 0000000..5a708f1
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image13.svg
    @@ -0,0 +1,6 @@
    +
    +          
    +          
    +            Undefined Task
    +          
    +        
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image14.svg b/static/img/reference/bpmn20/image14.svg
    new file mode 100644
    index 0000000..8bcf1c1
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image14.svg
    @@ -0,0 +1,7 @@
    +        
    +          
    +          
    +            Send Task
    +          
    +          
    +        
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image15.svg b/static/img/reference/bpmn20/image15.svg
    new file mode 100644
    index 0000000..cde3bac
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image15.svg
    @@ -0,0 +1,9 @@
    +
    +          
    +          
    +            Receive Task
    +            (instantiated)
    +          
    +          
    +          
    +        
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image16.svg b/static/img/reference/bpmn20/image16.svg
    new file mode 100644
    index 0000000..bf89051
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image16.svg
    @@ -0,0 +1,7 @@
    +
    +          
    +          
    +            XOR
    +          
    +          
    +        
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image17.svg b/static/img/reference/bpmn20/image17.svg
    new file mode 100644
    index 0000000..2fe9826
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image17.svg
    @@ -0,0 +1,7 @@
    +        
    +          
    +          
    +            OR
    +          
    +          
    +        
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image18.svg b/static/img/reference/bpmn20/image18.svg
    new file mode 100644
    index 0000000..8f19645
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image18.svg
    @@ -0,0 +1,7 @@
    +
    +          
    +          
    +            AND
    +          
    +          
    +        
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image19.svg b/static/img/reference/bpmn20/image19.svg
    new file mode 100644
    index 0000000..ab791ea
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image19.svg
    @@ -0,0 +1,9 @@
    +        
    +          
    +          
    +            Event
    +          
    +          
    +          
    +          
    +        
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image20.svg b/static/img/reference/bpmn20/image20.svg
    new file mode 100644
    index 0000000..c4a786d
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image20.svg
    @@ -0,0 +1,9 @@
    +
    +          
    +          
    +            Complex
    +          
    +          
    +            
    +          
    +        
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image21.svg b/static/img/reference/bpmn20/image21.svg
    new file mode 100644
    index 0000000..16bd93f
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image21.svg
    @@ -0,0 +1,7 @@
    +
    +          
    +          
    +            Data 
    +            Object
    +          
    +        
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image22.svg b/static/img/reference/bpmn20/image22.svg
    new file mode 100644
    index 0000000..deb49e6
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image22.svg
    @@ -0,0 +1,7 @@
    +
    +          
    +          
    +            Data 
    +            Store
    +          
    +        
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image23.svg b/static/img/reference/bpmn20/image23.svg
    new file mode 100644
    index 0000000..04b4a00
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image23.svg
    @@ -0,0 +1,8 @@
    +
    +          
    +          
    +            Text
    +            
    +            Annotation
    +          
    +        
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image24.svg b/static/img/reference/bpmn20/image24.svg
    new file mode 100644
    index 0000000..1fb734e
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image24.svg
    @@ -0,0 +1,6 @@
    +
    +          
    +          
    +            Group
    +          
    +        
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image25.svg b/static/img/reference/bpmn20/image25.svg
    new file mode 100644
    index 0000000..1ec685f
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image25.svg
    @@ -0,0 +1,5 @@
    +
    +            
    +              
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image26.svg b/static/img/reference/bpmn20/image26.svg
    new file mode 100644
    index 0000000..db7fd88
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image26.svg
    @@ -0,0 +1,5 @@
    +
    +
    +          
    +          
    +        
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image27.svg b/static/img/reference/bpmn20/image27.svg
    new file mode 100644
    index 0000000..6457413
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image27.svg
    @@ -0,0 +1,3 @@
    +
    +          
    +        
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image28.svg b/static/img/reference/bpmn20/image28.svg
    new file mode 100644
    index 0000000..a9b0eb6
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image28.svg
    @@ -0,0 +1,6 @@
    +
    +            
    +              
    +              
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image29.svg b/static/img/reference/bpmn20/image29.svg
    new file mode 100644
    index 0000000..a9b0eb6
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image29.svg
    @@ -0,0 +1,6 @@
    +
    +            
    +              
    +              
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image30.svg b/static/img/reference/bpmn20/image30.svg
    new file mode 100644
    index 0000000..0eac30d
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image30.svg
    @@ -0,0 +1,6 @@
    +
    +            
    +              
    +              
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image31.svg b/static/img/reference/bpmn20/image31.svg
    new file mode 100644
    index 0000000..eae647b
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image31.svg
    @@ -0,0 +1,5 @@
    +
    +            
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image32.svg b/static/img/reference/bpmn20/image32.svg
    new file mode 100644
    index 0000000..eae647b
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image32.svg
    @@ -0,0 +1,5 @@
    +
    +            
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image33.svg b/static/img/reference/bpmn20/image33.svg
    new file mode 100644
    index 0000000..97affbd
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image33.svg
    @@ -0,0 +1,5 @@
    +
    +            
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image34.svg b/static/img/reference/bpmn20/image34.svg
    new file mode 100644
    index 0000000..8e52c32
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image34.svg
    @@ -0,0 +1,5 @@
    +
    +            
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image35.svg b/static/img/reference/bpmn20/image35.svg
    new file mode 100644
    index 0000000..d9eee07
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image35.svg
    @@ -0,0 +1,4 @@
    +
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image36.svg b/static/img/reference/bpmn20/image36.svg
    new file mode 100644
    index 0000000..0be4ae2
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image36.svg
    @@ -0,0 +1,7 @@
    +
    +            
    +              
    +              
    +              
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image37.svg b/static/img/reference/bpmn20/image37.svg
    new file mode 100644
    index 0000000..0be4ae2
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image37.svg
    @@ -0,0 +1,7 @@
    +
    +            
    +              
    +              
    +              
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image38.svg b/static/img/reference/bpmn20/image38.svg
    new file mode 100644
    index 0000000..5872989
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image38.svg
    @@ -0,0 +1,7 @@
    +
    +            
    +              
    +              
    +              
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image39.svg b/static/img/reference/bpmn20/image39.svg
    new file mode 100644
    index 0000000..51c31ca
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image39.svg
    @@ -0,0 +1,6 @@
    +
    +            
    +            
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image40.svg b/static/img/reference/bpmn20/image40.svg
    new file mode 100644
    index 0000000..51c31ca
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image40.svg
    @@ -0,0 +1,6 @@
    +
    +            
    +            
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image41.svg b/static/img/reference/bpmn20/image41.svg
    new file mode 100644
    index 0000000..598f324
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image41.svg
    @@ -0,0 +1,6 @@
    +
    +            
    +            
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image42.svg b/static/img/reference/bpmn20/image42.svg
    new file mode 100644
    index 0000000..712b60c
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image42.svg
    @@ -0,0 +1,6 @@
    +
    +            
    +              
    +              
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image43.svg b/static/img/reference/bpmn20/image43.svg
    new file mode 100644
    index 0000000..712b60c
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image43.svg
    @@ -0,0 +1,6 @@
    +
    +            
    +              
    +              
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image44.svg b/static/img/reference/bpmn20/image44.svg
    new file mode 100644
    index 0000000..e035a75
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image44.svg
    @@ -0,0 +1,6 @@
    +
    +            
    +              
    +              
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image45.svg b/static/img/reference/bpmn20/image45.svg
    new file mode 100644
    index 0000000..4d4d9f8
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image45.svg
    @@ -0,0 +1,5 @@
    +
    +            
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image46.svg b/static/img/reference/bpmn20/image46.svg
    new file mode 100644
    index 0000000..4d4d9f8
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image46.svg
    @@ -0,0 +1,5 @@
    +
    +            
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image47.svg b/static/img/reference/bpmn20/image47.svg
    new file mode 100644
    index 0000000..0fe7f0a
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image47.svg
    @@ -0,0 +1,5 @@
    +
    +            
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image48.svg b/static/img/reference/bpmn20/image48.svg
    new file mode 100644
    index 0000000..5d37428
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image48.svg
    @@ -0,0 +1,5 @@
    +
    +            
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image49.svg b/static/img/reference/bpmn20/image49.svg
    new file mode 100644
    index 0000000..98b35ea
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image49.svg
    @@ -0,0 +1,5 @@
    +
    +            
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image50.svg b/static/img/reference/bpmn20/image50.svg
    new file mode 100644
    index 0000000..ab07e71
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image50.svg
    @@ -0,0 +1,6 @@
    +
    +            
    +              
    +              
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image51.svg b/static/img/reference/bpmn20/image51.svg
    new file mode 100644
    index 0000000..d6c9a12
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image51.svg
    @@ -0,0 +1,6 @@
    +          
    +            
    +              
    +              
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image52.svg b/static/img/reference/bpmn20/image52.svg
    new file mode 100644
    index 0000000..67ae1a2
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image52.svg
    @@ -0,0 +1,6 @@
    +
    +            
    +              
    +              
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image53.svg b/static/img/reference/bpmn20/image53.svg
    new file mode 100644
    index 0000000..4473e66
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image53.svg
    @@ -0,0 +1,5 @@
    +          
    +            
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image54.svg b/static/img/reference/bpmn20/image54.svg
    new file mode 100644
    index 0000000..441dfb2
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image54.svg
    @@ -0,0 +1,5 @@
    +
    +            
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image55.svg b/static/img/reference/bpmn20/image55.svg
    new file mode 100644
    index 0000000..aafae3d
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image55.svg
    @@ -0,0 +1,5 @@
    +
    +            
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image56.svg b/static/img/reference/bpmn20/image56.svg
    new file mode 100644
    index 0000000..ad1579e
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image56.svg
    @@ -0,0 +1,5 @@
    +
    +            
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image57.svg b/static/img/reference/bpmn20/image57.svg
    new file mode 100644
    index 0000000..a1fa3e5
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image57.svg
    @@ -0,0 +1,4 @@
    +          
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image58.svg b/static/img/reference/bpmn20/image58.svg
    new file mode 100644
    index 0000000..a98ab9f
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image58.svg
    @@ -0,0 +1,6 @@
    +
    +            
    +              
    +              
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image59.svg b/static/img/reference/bpmn20/image59.svg
    new file mode 100644
    index 0000000..4d1928d
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image59.svg
    @@ -0,0 +1,5 @@
    +
    +            
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image60.svg b/static/img/reference/bpmn20/image60.svg
    new file mode 100644
    index 0000000..a0284b6
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image60.svg
    @@ -0,0 +1,4 @@
    + 
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image61.svg b/static/img/reference/bpmn20/image61.svg
    new file mode 100644
    index 0000000..8b842f3
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image61.svg
    @@ -0,0 +1,6 @@
    +
    +            
    +              
    +              
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image62.svg b/static/img/reference/bpmn20/image62.svg
    new file mode 100644
    index 0000000..043d034
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image62.svg
    @@ -0,0 +1,6 @@
    +
    +            
    +              
    +              
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image63.svg b/static/img/reference/bpmn20/image63.svg
    new file mode 100644
    index 0000000..436591d
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image63.svg
    @@ -0,0 +1,5 @@
    +
    +            
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image64.svg b/static/img/reference/bpmn20/image64.svg
    new file mode 100644
    index 0000000..f17c12d
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image64.svg
    @@ -0,0 +1,5 @@
    +
    +            
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image65.svg b/static/img/reference/bpmn20/image65.svg
    new file mode 100644
    index 0000000..74f1994
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image65.svg
    @@ -0,0 +1,5 @@
    +
    +            
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image66.svg b/static/img/reference/bpmn20/image66.svg
    new file mode 100644
    index 0000000..cb6ad5b
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image66.svg
    @@ -0,0 +1,4 @@
    +
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image67.svg b/static/img/reference/bpmn20/image67.svg
    new file mode 100644
    index 0000000..e863a41
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image67.svg
    @@ -0,0 +1,4 @@
    +
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image68.svg b/static/img/reference/bpmn20/image68.svg
    new file mode 100644
    index 0000000..46d7636
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image68.svg
    @@ -0,0 +1,6 @@
    +
    +            
    +              
    +              
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image69.svg b/static/img/reference/bpmn20/image69.svg
    new file mode 100644
    index 0000000..f3c1441
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image69.svg
    @@ -0,0 +1,5 @@
    +
    +            
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image70.svg b/static/img/reference/bpmn20/image70.svg
    new file mode 100644
    index 0000000..da4a258
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image70.svg
    @@ -0,0 +1,5 @@
    +
    +            
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image71.svg b/static/img/reference/bpmn20/image71.svg
    new file mode 100644
    index 0000000..5d5f20f
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image71.svg
    @@ -0,0 +1,4 @@
    +
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image72.svg b/static/img/reference/bpmn20/image72.svg
    new file mode 100644
    index 0000000..1dd6192
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image72.svg
    @@ -0,0 +1,5 @@
    +
    +            
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image73.svg b/static/img/reference/bpmn20/image73.svg
    new file mode 100644
    index 0000000..aea6ec1
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image73.svg
    @@ -0,0 +1,4 @@
    +
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image74.svg b/static/img/reference/bpmn20/image74.svg
    new file mode 100644
    index 0000000..7b0447c
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image74.svg
    @@ -0,0 +1,6 @@
    +
    +            
    +              
    +              
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image75.svg b/static/img/reference/bpmn20/image75.svg
    new file mode 100644
    index 0000000..7b0447c
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image75.svg
    @@ -0,0 +1,6 @@
    +
    +            
    +              
    +              
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image76.svg b/static/img/reference/bpmn20/image76.svg
    new file mode 100644
    index 0000000..02104ef
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image76.svg
    @@ -0,0 +1,6 @@
    +
    +            
    +              
    +              
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image77.svg b/static/img/reference/bpmn20/image77.svg
    new file mode 100644
    index 0000000..124eecb
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image77.svg
    @@ -0,0 +1,5 @@
    +
    +            
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image78.svg b/static/img/reference/bpmn20/image78.svg
    new file mode 100644
    index 0000000..124eecb
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image78.svg
    @@ -0,0 +1,5 @@
    +
    +            
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image79.svg b/static/img/reference/bpmn20/image79.svg
    new file mode 100644
    index 0000000..0c51a46
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image79.svg
    @@ -0,0 +1,5 @@
    +
    +            
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image80.svg b/static/img/reference/bpmn20/image80.svg
    new file mode 100644
    index 0000000..2316cd1
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image80.svg
    @@ -0,0 +1,5 @@
    +
    +            
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image81.svg b/static/img/reference/bpmn20/image81.svg
    new file mode 100644
    index 0000000..b2ae0a6
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image81.svg
    @@ -0,0 +1,4 @@
    +
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image82.svg b/static/img/reference/bpmn20/image82.svg
    new file mode 100644
    index 0000000..633c241
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image82.svg
    @@ -0,0 +1,6 @@
    +
    +            
    +              
    +              
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image83.svg b/static/img/reference/bpmn20/image83.svg
    new file mode 100644
    index 0000000..633c241
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image83.svg
    @@ -0,0 +1,6 @@
    +
    +            
    +              
    +              
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image84.svg b/static/img/reference/bpmn20/image84.svg
    new file mode 100644
    index 0000000..e1d6a0d
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image84.svg
    @@ -0,0 +1,6 @@
    +
    +            
    +              
    +              
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image85.svg b/static/img/reference/bpmn20/image85.svg
    new file mode 100644
    index 0000000..448096e
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image85.svg
    @@ -0,0 +1,5 @@
    + 
    +            
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image86.svg b/static/img/reference/bpmn20/image86.svg
    new file mode 100644
    index 0000000..cd1f66d
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image86.svg
    @@ -0,0 +1,5 @@
    +
    +            
    +            
    +            
    +          
    \ No newline at end of file
    diff --git a/static/img/reference/bpmn20/image87.svg b/static/img/reference/bpmn20/image87.svg
    new file mode 100644
    index 0000000..c7c33d5
    --- /dev/null
    +++ b/static/img/reference/bpmn20/image87.svg
    @@ -0,0 +1,5 @@
    +
    +            
    +            
    +            
    +          
    \ No newline at end of file
    
    Property nameDescriptionDefault valueProperty nameDescriptionDefault value
    executionDelegateExecutionDelegateExecution Available in a BPMN execution context like a service task, execution listener or sequence flow. @@ -272,12 +272,12 @@ evaluating expressions:
    taskDelegateTaskDelegateTask Available in a task context like a task listener.
    externalTaskExternalTaskExternalTask Available during an external task context activity (e.g. in operaton:errorEventDefinition expressions).