From cccae17c267353e80e6ab7f595b5f87c5d862790 Mon Sep 17 00:00:00 2001
From: "S.Listl" <S.Listl@SLISTL.aditosoftware.local>
Date: Thu, 26 Mar 2020 09:33:09 +0100
Subject: [PATCH] Workflow improvements

---
 .../Data_alias/basic/2020.0.3/changelog.xml   |   5 +
 .../basic/2020.0.3/workflow/changelog.xml     |   5 +
 .../insert_workflowActivityType_keyword.xml   | 150 ++++++++++++++++++
 .liquibase/Data_alias/changelog.xml           |   1 +
 .../basic/2020.0.2/changelog.xml              |   7 +
 .../KeywordEntry_entity.aod                   |   6 +
 .../WorkflowInstanceHistory_entity.aod        | 143 +++++++++++++++++
 .../containername_param/valueProcess.js       |   4 +
 .../recordcontainers/jdito/contentProcess.js  |  57 +++++++
 .../WorkflowInstance_entity.aod               |  14 ++
 .../processinstanceid_param/valueProcess.js   |   4 +
 .../recordcontainers/jdito/onInsert.js        |  45 ++++--
 .../WorkflowTask_entity.aod                   |  14 ++
 .../completemultipletasks/onActionProcess.js  |  23 +++
 .../completemultipletasks/stateProcess.js     |  11 ++
 .../recordcontainers/jdito/contentProcess.js  |   2 +-
 .../WorkflowInstance/WorkflowInstance.aod     |   9 ++
 .../WorkflowInstanceHistory.aod               |  12 ++
 neonContext/WorkflowTask/WorkflowTask.aod     |   4 +
 .../WorkflowInstanceHistoryFilter_view.aod    |  47 ++++++
 .../WorkflowInstanceMain_view.aod             |  10 ++
 .../WorkflowInstancePreview_view.aod          |   5 -
 .../WorkflowInstanceTasks_view.aod            |  23 +++
 .../WorkflowTaskFilter_view.aod               |  12 +-
 .../WorkflowTaskFinishedDrawer_view.aod       |  19 +++
 .../WorkflowTaskOwn_view.aod                  |   2 +
 process/KeywordRegistry_basic/process.js      |   4 +-
 process/Placeholder_lib/process.js            |   2 +-
 .../workflowServiceTaskParams_rest/process.js | 121 ++++++++++++++
 .../workflowServiceTaskParams_rest.aod        |  15 ++
 30 files changed, 753 insertions(+), 23 deletions(-)
 create mode 100644 .liquibase/Data_alias/basic/2020.0.3/changelog.xml
 create mode 100644 .liquibase/Data_alias/basic/2020.0.3/workflow/changelog.xml
 create mode 100644 .liquibase/Data_alias/basic/2020.0.3/workflow/insert_workflowActivityType_keyword.xml
 create mode 100644 .liquibase/_____SYSTEMALIAS/basic/2020.0.2/changelog.xml
 create mode 100644 entity/WorkflowInstanceHistory_entity/WorkflowInstanceHistory_entity.aod
 create mode 100644 entity/WorkflowInstanceHistory_entity/entityfields/activitytypekeyword/children/containername_param/valueProcess.js
 create mode 100644 entity/WorkflowInstanceHistory_entity/recordcontainers/jdito/contentProcess.js
 create mode 100644 entity/WorkflowInstance_entity/entityfields/history/children/processinstanceid_param/valueProcess.js
 create mode 100644 entity/WorkflowTask_entity/entityfields/tableactions/children/completemultipletasks/onActionProcess.js
 create mode 100644 entity/WorkflowTask_entity/entityfields/tableactions/children/completemultipletasks/stateProcess.js
 create mode 100644 neonContext/WorkflowInstanceHistory/WorkflowInstanceHistory.aod
 create mode 100644 neonView/WorkflowInstanceHistoryFilter_view/WorkflowInstanceHistoryFilter_view.aod
 create mode 100644 neonView/WorkflowInstanceTasks_view/WorkflowInstanceTasks_view.aod
 create mode 100644 neonView/WorkflowTaskFinishedDrawer_view/WorkflowTaskFinishedDrawer_view.aod
 create mode 100644 process/workflowServiceTaskParams_rest/process.js
 create mode 100644 process/workflowServiceTaskParams_rest/workflowServiceTaskParams_rest.aod

diff --git a/.liquibase/Data_alias/basic/2020.0.3/changelog.xml b/.liquibase/Data_alias/basic/2020.0.3/changelog.xml
new file mode 100644
index 00000000000..495421b66bf
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.0.3/changelog.xml
@@ -0,0 +1,5 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <include relativeToChangelogFile="true" file="workflow/changelog.xml"/>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.0.3/workflow/changelog.xml b/.liquibase/Data_alias/basic/2020.0.3/workflow/changelog.xml
new file mode 100644
index 00000000000..38bc2aca472
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.0.3/workflow/changelog.xml
@@ -0,0 +1,5 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <include relativeToChangelogFile="true" file="insert_workflowActivityType_keyword.xml"/>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.0.3/workflow/insert_workflowActivityType_keyword.xml b/.liquibase/Data_alias/basic/2020.0.3/workflow/insert_workflowActivityType_keyword.xml
new file mode 100644
index 00000000000..9a7d0477cd6
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.0.3/workflow/insert_workflowActivityType_keyword.xml
@@ -0,0 +1,150 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <changeSet author="s.listl" id="c48da681-5996-411f-9ab5-3b9e9f51931f">
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="579e1798-acd0-4fa6-8dbc-02c533e741f3"/>
+            <column name="KEYID" value="sequenceFlow"/>
+            <column name="TITLE" value="Sequence flow"/>
+            <column name="CONTAINER" value="WorkflowActivityType"/>
+            <column name="SORTING" valueNumeric="1"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="f472f6f9-d603-42d3-a413-6b549f4c2aa4"/>
+            <column name="KEYID" value="startEvent"/>
+            <column name="TITLE" value="Start event"/>
+            <column name="CONTAINER" value="WorkflowActivityType"/>
+            <column name="SORTING" valueNumeric="2"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="de02cd0d-b3ab-43e0-ae2f-f1b76e2323d1"/>
+            <column name="KEYID" value="endEvent"/>
+            <column name="TITLE" value="End event"/>
+            <column name="CONTAINER" value="WorkflowActivityType"/>
+            <column name="SORTING" valueNumeric="3"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="012f38fa-c7ee-4898-bed5-4652459dab23"/>
+            <column name="KEYID" value="userTask"/>
+            <column name="TITLE" value="User task"/>
+            <column name="CONTAINER" value="WorkflowActivityType"/>
+            <column name="SORTING" valueNumeric="4"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="4b9e19fb-0385-4033-8a03-6d37c43c6b01"/>
+            <column name="KEYID" value="serviceTask"/>
+            <column name="TITLE" value="Service task"/>
+            <column name="CONTAINER" value="WorkflowActivityType"/>
+            <column name="SORTING" valueNumeric="5"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="7e5ab737-a3e6-463c-974e-eb6021730d4a"/>
+            <column name="KEYID" value="scriptTask"/>
+            <column name="TITLE" value="Script task"/>
+            <column name="CONTAINER" value="WorkflowActivityType"/>
+            <column name="SORTING" valueNumeric="6"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="5e46546a-ee2e-41a2-b87f-a55e4c88df87"/>
+            <column name="KEYID" value="businessRuleTask"/>
+            <column name="TITLE" value="Business rule task"/>
+            <column name="CONTAINER" value="WorkflowActivityType"/>
+            <column name="SORTING" valueNumeric="7"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="ab66f18f-040d-44c1-b08c-949fa3928e37"/>
+            <column name="KEYID" value="receiveTask"/>
+            <column name="TITLE" value="Receive task"/>
+            <column name="CONTAINER" value="WorkflowActivityType"/>
+            <column name="SORTING" valueNumeric="8"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="4eba5820-4c2d-4a77-95d2-c6f12843d02c"/>
+            <column name="KEYID" value="manualTask"/>
+            <column name="TITLE" value="Manual task"/>
+            <column name="CONTAINER" value="WorkflowActivityType"/>
+            <column name="SORTING" valueNumeric="9"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="7fff1c17-66a0-44ec-a6f1-f0364602c0de"/>
+            <column name="KEYID" value="exclusiveGateway"/>
+            <column name="TITLE" value="Exclusive gateway"/>
+            <column name="CONTAINER" value="WorkflowActivityType"/>
+            <column name="SORTING" valueNumeric="10"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="7a32adf8-13ac-4943-a443-4d2f5340a8a5"/>
+            <column name="KEYID" value="parallelGateway"/>
+            <column name="TITLE" value="Parallel gateway"/>
+            <column name="CONTAINER" value="WorkflowActivityType"/>
+            <column name="SORTING" valueNumeric="11"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="22c13c1e-1c26-42b6-8e24-c522ec7f16a9"/>
+            <column name="KEYID" value="inclusiveGateway"/>
+            <column name="TITLE" value="Inclusive gateway"/>
+            <column name="CONTAINER" value="WorkflowActivityType"/>
+            <column name="SORTING" valueNumeric="12"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="50cb1b5f-2215-40e8-aa1e-daf34dc8a06b"/>
+            <column name="KEYID" value="eventBasedGateway"/>
+            <column name="TITLE" value="Event gateway"/>
+            <column name="CONTAINER" value="WorkflowActivityType"/>
+            <column name="SORTING" valueNumeric="13"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="f7f73dec-b461-4bb4-8d72-4cb63909dbba"/>
+            <column name="KEYID" value="boundaryEvent"/>
+            <column name="TITLE" value="Boundary event"/>
+            <column name="CONTAINER" value="WorkflowActivityType"/>
+            <column name="SORTING" valueNumeric="14"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="bd4300ce-8e9b-4efc-b995-8477ab374fc3"/>
+            <column name="KEYID" value="intermediateCatchEvent"/>
+            <column name="TITLE" value="Intermediate catching event"/>
+            <column name="CONTAINER" value="WorkflowActivityType"/>
+            <column name="SORTING" valueNumeric="15"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="5534a8d8-da1d-4448-835a-97cdcfee8907"/>
+            <column name="KEYID" value="intermediateThrowEvent"/>
+            <column name="TITLE" value="Intermediate throwing event"/>
+            <column name="CONTAINER" value="WorkflowActivityType"/>
+            <column name="SORTING" valueNumeric="16"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/changelog.xml b/.liquibase/Data_alias/changelog.xml
index 73081af173b..eee29581d9d 100644
--- a/.liquibase/Data_alias/changelog.xml
+++ b/.liquibase/Data_alias/changelog.xml
@@ -10,6 +10,7 @@
     <include relativeToChangelogFile="true" file="basic/2020.0.0/changelog.xml"/>
     <include relativeToChangelogFile="true" file="basic/2020.0.1/changelog.xml"/>
     <include relativeToChangelogFile="true" file="basic/2020.0.2/changelog.xml"/>
+    <include relativeToChangelogFile="true" file="basic/2020.0.3/changelog.xml"/>
     <include relativeToChangelogFile="true" file="basic/2020.1.0/changelog.xml"/>
     
     <!--enable this only when you definetly want to overwrite the existing data with demo records:--> 
diff --git a/.liquibase/_____SYSTEMALIAS/basic/2020.0.2/changelog.xml b/.liquibase/_____SYSTEMALIAS/basic/2020.0.2/changelog.xml
new file mode 100644
index 00000000000..953f0a414ac
--- /dev/null
+++ b/.liquibase/_____SYSTEMALIAS/basic/2020.0.2/changelog.xml
@@ -0,0 +1,7 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <changeSet author="" id="">
+
+    </changeSet>
+</databaseChangeLog>
diff --git a/entity/KeywordEntry_entity/KeywordEntry_entity.aod b/entity/KeywordEntry_entity/KeywordEntry_entity.aod
index 972a7077db6..3e73f653b31 100644
--- a/entity/KeywordEntry_entity/KeywordEntry_entity.aod
+++ b/entity/KeywordEntry_entity/KeywordEntry_entity.aod
@@ -589,6 +589,12 @@
           <fieldName>KeywordPermissionCalendarTypes</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>7c05378a-c50f-4f94-bd18-e256baf86e31</name>
+          <entityName>WorkflowInstanceHistory_entity</entityName>
+          <fieldName>ActivityTypeKeyword</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
       </dependencies>
       <children>
         <entityParameter>
diff --git a/entity/WorkflowInstanceHistory_entity/WorkflowInstanceHistory_entity.aod b/entity/WorkflowInstanceHistory_entity/WorkflowInstanceHistory_entity.aod
new file mode 100644
index 00000000000..d42c45821c7
--- /dev/null
+++ b/entity/WorkflowInstanceHistory_entity/WorkflowInstanceHistory_entity.aod
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.13" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.13">
+  <name>WorkflowInstanceHistory_entity</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <title>History</title>
+  <grantCreate v="false" />
+  <grantUpdate v="false" />
+  <grantDelete v="false" />
+  <titlePlural>Activites</titlePlural>
+  <recordContainer>jdito</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityField>
+      <name>UID</name>
+    </entityField>
+    <entityField>
+      <name>PROCESSINSTANCE_ID</name>
+    </entityField>
+    <entityField>
+      <name>START_TIME</name>
+      <title>Start time</title>
+      <contentType>DATE</contentType>
+    </entityField>
+    <entityField>
+      <name>END_TIME</name>
+      <title>End time</title>
+      <contentType>DATE</contentType>
+    </entityField>
+    <entityField>
+      <name>PROCESSDEFINITION_ID</name>
+    </entityField>
+    <entityField>
+      <name>DURATION</name>
+      <title>Duration</title>
+      <contentType>NUMBER</contentType>
+    </entityField>
+    <entityField>
+      <name>ACTIVITY_TYPE</name>
+      <title>Type</title>
+      <consumer>ActivityTypeKeyword</consumer>
+    </entityField>
+    <entityParameter>
+      <name>ProcessInstanceId_param</name>
+      <expose v="true" />
+      <mandatory v="true" />
+    </entityParameter>
+    <entityProvider>
+      <name>HistoryForWorkflowInstance</name>
+      <targetContextField>TARGET_CONTEXT</targetContextField>
+      <targetIdField>TASK_ID</targetIdField>
+      <titlePlural>History</titlePlural>
+      <dependencies>
+        <entityDependency>
+          <name>dae4ffad-5627-46b5-bf4c-b3b8490d4a29</name>
+          <entityName>WorkflowInstance_entity</entityName>
+          <fieldName>History</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+    </entityProvider>
+    <entityField>
+      <name>ICON</name>
+      <contentType>IMAGE</contentType>
+    </entityField>
+    <entityField>
+      <name>TASK_ID</name>
+    </entityField>
+    <entityField>
+      <name>ACTIVITY_NAME</name>
+      <title>Name</title>
+    </entityField>
+    <entityField>
+      <name>TARGET_CONTEXT</name>
+    </entityField>
+    <entityConsumer>
+      <name>ActivityTypeKeyword</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ContainerName_param</name>
+          <valueProcess>%aditoprj%/entity/WorkflowInstanceHistory_entity/entityfields/activitytypekeyword/children/containername_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+  </entityFields>
+  <recordContainers>
+    <jDitoRecordContainer>
+      <name>jdito</name>
+      <jDitoRecordAlias>Data_alias</jDitoRecordAlias>
+      <isFilterable v="true" />
+      <contentProcess>%aditoprj%/entity/WorkflowInstanceHistory_entity/recordcontainers/jdito/contentProcess.js</contentProcess>
+      <recordFieldMappings>
+        <jDitoRecordFieldMapping>
+          <name>UID.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>END_TIME.value</name>
+          <isFilterable v="true" />
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>START_TIME.value</name>
+          <isFilterable v="true" />
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>PROCESSDEFINITION_ID.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>PROCESSINSTANCE_ID.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>DURATION.value</name>
+          <isFilterable v="true" />
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>ACTIVITY_TYPE.value</name>
+          <isFilterable v="true" />
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>ACTIVITY_TYPE.displayValue</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>ICON.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>ACTIVITY_NAME.value</name>
+          <isFilterable v="true" />
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>TASK_ID.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>TARGET_CONTEXT.value</name>
+        </jDitoRecordFieldMapping>
+      </recordFieldMappings>
+    </jDitoRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/WorkflowInstanceHistory_entity/entityfields/activitytypekeyword/children/containername_param/valueProcess.js b/entity/WorkflowInstanceHistory_entity/entityfields/activitytypekeyword/children/containername_param/valueProcess.js
new file mode 100644
index 00000000000..63f481d6385
--- /dev/null
+++ b/entity/WorkflowInstanceHistory_entity/entityfields/activitytypekeyword/children/containername_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("KeywordRegistry_basic");
+import("system.result");
+
+result.string($KeywordRegistry.workflowActivityType());
\ No newline at end of file
diff --git a/entity/WorkflowInstanceHistory_entity/recordcontainers/jdito/contentProcess.js b/entity/WorkflowInstanceHistory_entity/recordcontainers/jdito/contentProcess.js
new file mode 100644
index 00000000000..8d6c63918f7
--- /dev/null
+++ b/entity/WorkflowInstanceHistory_entity/recordcontainers/jdito/contentProcess.js
@@ -0,0 +1,57 @@
+import("KeywordData_lib");
+import("KeywordRegistry_basic");
+import("Util_lib");
+import("JditoFilter_lib");
+import("system.result");
+import("system.workflow");
+import("system.vars");
+
+var instanceId = vars.get("$param.ProcessInstanceId_param");
+
+var historicActivities = JSON.parse(workflow.getFinishedActivities(instanceId));
+var history = [];
+
+var typeNameMap = KeywordData.getKeyIdMap($KeywordRegistry.workflowActivityType());
+
+var _isRelevant = function (pActivity)
+{
+    return pActivity.activityType != $KeywordRegistry.workflowActivityType$sequenceFlow();
+}
+
+var _getIcon = function (pType)
+{
+    var typeIconMap = {
+        startEvent : "VAADIN:PLAY_CIRCLE_O",
+        userTask : "VAADIN:USER",
+        serviceTask : "VAADIN:AUTOMATION"
+    };
+    return typeIconMap[pType] || "";
+}
+
+historicActivities.forEach(function (activity)
+{
+    if (_isRelevant(activity))
+    {
+        history.push([
+            activity.id,
+            Date.parse(activity.endTime).toString(),
+            Date.parse(activity.startTime).toString(),
+            activity.processDefinitionId,
+            activity.processInstanceId,
+            activity.durationInMillis,
+            activity.activityType,
+            typeNameMap[activity.activityType] || activity.activityType,
+            _getIcon(activity.activityType),
+            activity.activityName || activity.activityType,
+            activity.taskId || "",
+            activity.taskId ? "WorkflowTask" : ""
+        ]);
+    }
+});
+
+history = JditoFilterUtils.filterRecords(["UID", "END_TIME", "START_TIME", "PROCESSDEFINITION_ID", "PROCESSINSTANCE_ID", "DURATION", "ACTIVITY_TYPE", 
+    "ICON", "ACTIVITY_NAME", "TASK_ID", "TARGET_CONTEXT"], history, vars.get("$local.filter").filter)
+
+ArrayUtils.sort2d(history, 2, false, true);
+
+result.object(history);
\ No newline at end of file
diff --git a/entity/WorkflowInstance_entity/WorkflowInstance_entity.aod b/entity/WorkflowInstance_entity/WorkflowInstance_entity.aod
index 047ae63262a..da870aa1abc 100644
--- a/entity/WorkflowInstance_entity/WorkflowInstance_entity.aod
+++ b/entity/WorkflowInstance_entity/WorkflowInstance_entity.aod
@@ -151,6 +151,20 @@
       <name>ICON</name>
       <contentType>IMAGE</contentType>
     </entityField>
+    <entityConsumer>
+      <name>History</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>WorkflowInstanceHistory_entity</entityName>
+        <fieldName>HistoryForWorkflowInstance</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ProcessInstanceId_param</name>
+          <valueProcess>%aditoprj%/entity/WorkflowInstance_entity/entityfields/history/children/processinstanceid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
   </entityFields>
   <recordContainers>
     <jDitoRecordContainer>
diff --git a/entity/WorkflowInstance_entity/entityfields/history/children/processinstanceid_param/valueProcess.js b/entity/WorkflowInstance_entity/entityfields/history/children/processinstanceid_param/valueProcess.js
new file mode 100644
index 00000000000..16c85500b53
--- /dev/null
+++ b/entity/WorkflowInstance_entity/entityfields/history/children/processinstanceid_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.UID"));
\ No newline at end of file
diff --git a/entity/WorkflowInstance_entity/recordcontainers/jdito/onInsert.js b/entity/WorkflowInstance_entity/recordcontainers/jdito/onInsert.js
index 3975809ce45..290743ac21a 100644
--- a/entity/WorkflowInstance_entity/recordcontainers/jdito/onInsert.js
+++ b/entity/WorkflowInstance_entity/recordcontainers/jdito/onInsert.js
@@ -12,27 +12,46 @@ var rowdata = vars.get("$local.rowdata");
 var processKey = rowdata["KEY.value"];
 var instanceName = rowdata["NAME.value"];
 
-if (Array.isArray(variables.targetId) && variables.targetId.length > 0)
-    _startForIds(variables.targetId.slice(), variables);
+var titlePlaceholder = "{title}";
+var fetchContentTitle = instanceName && instanceName.includes(titlePlaceholder);
+
+var targetIds = [];
+if (Array.isArray(variables.targetId) && variables.targetId.length !== 0)
+{
+    targetIds = variables.targetId.slice();
+    targetIdFilter = null;
+}
 else if (!Array.isArray(variables.targetId) && variables.targetId)
-    _startForIds([variables.targetId], variables);
-else if (targetIdFilter)
+{
+    targetIds = [variables.targetId];
+    targetIdFilter = null;
+}    
+
+if (targetIdFilter || fetchContentTitle)
 {
     var entity = ContextUtils.getEntity(variables.targetContext);
     var loadConfig = entities.createConfigForLoadingRows()
         .entity(entity)
-        .fields(["#UID"]);
+        .fields(["#UID", "#CONTENTTITLE"]);
 
-    if (targetIdFilter.filter)
+    if (targetIdFilter && targetIdFilter.filter)
         loadConfig.filter(JSON.stringify(targetIdFilter.filter));
+    else if (targetIds.length !== 0)
+        loadConfig.uids(targetIds);
     
     var rowCount = entities.getRowCount(loadConfig);
     var pageSize = 1000;
     for (let startRow = 0; startRow < rowCount; startRow += pageSize)
     {
         loadConfig.startrow(startRow).count(pageSize);
-        let targetIds = entities.getRows(loadConfig).map(function (row) {return row["#UID"];});
-        _startForIds(targetIds, variables);
+        let targetIdsAndNames = entities.getRows(loadConfig).map(function (row) 
+        {
+            var name = instanceName;
+            if (fetchContentTitle)
+                name = name.replace(titlePlaceholder, row["#CONTENTTITLE"]);
+            return [row["#UID"], name];
+        });
+        _startForIds(targetIdsAndNames, variables);
     }
     
 //TODO: entities.getRows currently doesn't work on the server
@@ -42,15 +61,17 @@ else if (targetIdFilter)
 //        entityFilter : targetIdFilter.filter ? JSON.stringify(targetIdFilter.filter) : ""
 //    },  false, EmployeeUtils.getCurrentUserName(), process.THREADPRIORITY_NORM, process.TIMERTYPE_SERVER);
 }
+else
+    _startForIds(targetIds.map(function (id) {return [id, instanceName];}), variables);
 
-function _startForIds (pTargetIds, pVariables)
+function _startForIds (pTargets, pVariables)
 {
-    pTargetIds.forEach(function (id) 
+    pTargets.forEach(function ([id, name]) 
     {
         pVariables.targetId = id;
         var instanceId = workflow.startProcessByKey(processKey, pVariables);
-        if (instanceName)
-            workflow.setProcessInstanceName(instanceId, instanceName);
+        if (name)
+            workflow.setProcessInstanceName(instanceId, name);
     });
 }
 
diff --git a/entity/WorkflowTask_entity/WorkflowTask_entity.aod b/entity/WorkflowTask_entity/WorkflowTask_entity.aod
index a75709aeee3..9f69534cfc5 100644
--- a/entity/WorkflowTask_entity/WorkflowTask_entity.aod
+++ b/entity/WorkflowTask_entity/WorkflowTask_entity.aod
@@ -212,6 +212,20 @@
         </entityParameter>
       </children>
     </entityConsumer>
+    <entityActionGroup>
+      <name>tableActions</name>
+      <children>
+        <entityActionField>
+          <name>completeMultipleTasks</name>
+          <title>Complete tasks</title>
+          <onActionProcess>%aditoprj%/entity/WorkflowTask_entity/entityfields/tableactions/children/completemultipletasks/onActionProcess.js</onActionProcess>
+          <isObjectAction v="false" />
+          <isSelectionAction v="true" />
+          <iconId>VAADIN:CHECK</iconId>
+          <stateProcess>%aditoprj%/entity/WorkflowTask_entity/entityfields/tableactions/children/completemultipletasks/stateProcess.js</stateProcess>
+        </entityActionField>
+      </children>
+    </entityActionGroup>
   </entityFields>
   <recordContainers>
     <jDitoRecordContainer>
diff --git a/entity/WorkflowTask_entity/entityfields/tableactions/children/completemultipletasks/onActionProcess.js b/entity/WorkflowTask_entity/entityfields/tableactions/children/completemultipletasks/onActionProcess.js
new file mode 100644
index 00000000000..9fa595c8bf0
--- /dev/null
+++ b/entity/WorkflowTask_entity/entityfields/tableactions/children/completemultipletasks/onActionProcess.js
@@ -0,0 +1,23 @@
+import("Employee_lib");
+import("system.workflow");
+import("system.neon");
+import("system.vars");
+
+var tasks = vars.get("$sys.selectionRows");
+var currentUserId = EmployeeUtils.getCurrentUserId();
+var refreshRequired = false;
+tasks.forEach(function (task)
+{
+    //tasks requiring form data can't be completed here
+    if ((!task["FORMDEFINITION"] || task["FORMDEFINITION"] == "null") && task["ISACTIVE"] == "true")
+    {
+        var taskId = task["#UID"];
+        if (!task["ASSIGNEE"])
+            workflow.setTaskAssignee(taskId, currentUserId);
+        workflow.completeTask(taskId, {});
+        refreshRequired = true;
+    }
+});
+
+if (refreshRequired)
+    neon.refreshAll();
\ No newline at end of file
diff --git a/entity/WorkflowTask_entity/entityfields/tableactions/children/completemultipletasks/stateProcess.js b/entity/WorkflowTask_entity/entityfields/tableactions/children/completemultipletasks/stateProcess.js
new file mode 100644
index 00000000000..5014ae2e217
--- /dev/null
+++ b/entity/WorkflowTask_entity/entityfields/tableactions/children/completemultipletasks/stateProcess.js
@@ -0,0 +1,11 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+var tasks = vars.get("$sys.selectionRows");
+var isActive = tasks.every(function (task)
+{
+    return (!task["FORMDEFINITION"] || task["FORMDEFINITION"] == "null") && task["ISACTIVE"] == "true";
+});
+
+result.string(isActive ? neon.COMPONENTSTATE_EDITABLE : neon.COMPONENTSTATE_DISABLED);
\ No newline at end of file
diff --git a/entity/WorkflowTask_entity/recordcontainers/jdito/contentProcess.js b/entity/WorkflowTask_entity/recordcontainers/jdito/contentProcess.js
index 50cb3e1f446..3f0a86614d6 100644
--- a/entity/WorkflowTask_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/WorkflowTask_entity/recordcontainers/jdito/contentProcess.js
@@ -96,7 +96,7 @@ result.object((function ()
             task.processDefinitionId,
             task.processInstanceId,
             Date.parse(task.createTime).toString(),
-            workflow.getFormProperties(task.id),
+            workflow.getFormProperties(task.id) || "",
             "",
             variables.USER_ID || "",
             task.description || "",
diff --git a/neonContext/WorkflowInstance/WorkflowInstance.aod b/neonContext/WorkflowInstance/WorkflowInstance.aod
index 87ae3990144..6f44fbb1aa9 100644
--- a/neonContext/WorkflowInstance/WorkflowInstance.aod
+++ b/neonContext/WorkflowInstance/WorkflowInstance.aod
@@ -2,6 +2,7 @@
 <neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1">
   <name>WorkflowInstance</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <mainView>WorkflowInstanceMain_view</mainView>
   <filterView>WorkflowInstanceFilter_view</filterView>
   <editView>WorkflowInstanceEdit_view</editView>
   <previewView>WorkflowInstancePreview_view</previewView>
@@ -23,5 +24,13 @@
       <name>1b36d7c5-af14-4cb6-9e68-99d738def562</name>
       <view>WorkflowInstanceMain_view</view>
     </neonViewReference>
+    <neonViewReference>
+      <name>e701f4bc-29f4-4e93-98b5-d7d2cee1787e</name>
+      <view>WorkflowInstanceVariables_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>98e9064c-466c-43eb-a72a-c369e7eb28a4</name>
+      <view>WorkflowInstanceTasks_view</view>
+    </neonViewReference>
   </references>
 </neonContext>
diff --git a/neonContext/WorkflowInstanceHistory/WorkflowInstanceHistory.aod b/neonContext/WorkflowInstanceHistory/WorkflowInstanceHistory.aod
new file mode 100644
index 00000000000..4d3193c81e9
--- /dev/null
+++ b/neonContext/WorkflowInstanceHistory/WorkflowInstanceHistory.aod
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1">
+  <name>WorkflowInstanceHistory</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <entity>WorkflowInstanceHistory_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>30e6ce24-1a8d-42b2-b6d7-c56f28d1a30f</name>
+      <view>WorkflowInstanceHistoryFilter_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonContext/WorkflowTask/WorkflowTask.aod b/neonContext/WorkflowTask/WorkflowTask.aod
index 43d132be624..44582796f63 100644
--- a/neonContext/WorkflowTask/WorkflowTask.aod
+++ b/neonContext/WorkflowTask/WorkflowTask.aod
@@ -30,5 +30,9 @@
       <name>a86af6be-5e80-4e4c-8717-76976ff192b9</name>
       <view>WorkflowTaskFinishedList_view</view>
     </neonViewReference>
+    <neonViewReference>
+      <name>ad4bd316-3da9-4fe4-845b-b37249c26979</name>
+      <view>WorkflowTaskFinishedDrawer_view</view>
+    </neonViewReference>
   </references>
 </neonContext>
diff --git a/neonView/WorkflowInstanceHistoryFilter_view/WorkflowInstanceHistoryFilter_view.aod b/neonView/WorkflowInstanceHistoryFilter_view/WorkflowInstanceHistoryFilter_view.aod
new file mode 100644
index 00000000000..00bb4cd5bce
--- /dev/null
+++ b/neonView/WorkflowInstanceHistoryFilter_view/WorkflowInstanceHistoryFilter_view.aod
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.5" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.5">
+  <name>WorkflowInstanceHistoryFilter_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterable v="true" />
+  <layout>
+    <groupLayout>
+      <name>layout</name>
+    </groupLayout>
+  </layout>
+  <children>
+    <timelineViewTemplate>
+      <name>Timeline</name>
+      <dateField>END_TIME</dateField>
+      <titleField>ACTIVITY_NAME</titleField>
+      <descriptionField>ACTIVITY_TYPE</descriptionField>
+      <iconIdField>ICON</iconIdField>
+      <entityField>#ENTITY</entityField>
+    </timelineViewTemplate>
+    <tableViewTemplate>
+      <name>Table</name>
+      <entityField>#ENTITY</entityField>
+      <columns>
+        <neonTableColumn>
+          <name>2d8bc4b5-d27d-47ce-b5fe-be0354a332ee</name>
+          <entityField>ICON</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>8f743b3f-4c50-4a6a-a530-11b2c43fa0ff</name>
+          <entityField>ACTIVITY_NAME</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>5a66e63f-1db1-45ec-8aaa-85268e131d86</name>
+          <entityField>ACTIVITY_TYPE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>bc6674d4-c808-4adb-ad8d-5853a2af6f1e</name>
+          <entityField>START_TIME</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>5625386c-67d1-4235-a1b7-53d390370cc5</name>
+          <entityField>END_TIME</entityField>
+        </neonTableColumn>
+      </columns>
+    </tableViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/WorkflowInstanceMain_view/WorkflowInstanceMain_view.aod b/neonView/WorkflowInstanceMain_view/WorkflowInstanceMain_view.aod
index f69bf34dea5..35b1c80acbe 100644
--- a/neonView/WorkflowInstanceMain_view/WorkflowInstanceMain_view.aod
+++ b/neonView/WorkflowInstanceMain_view/WorkflowInstanceMain_view.aod
@@ -14,5 +14,15 @@
       <entityField>#ENTITY</entityField>
       <view>WorkflowInstancePreview_view</view>
     </neonViewReference>
+    <neonViewReference>
+      <name>f7d21117-8664-49f1-b1d1-eb46ad989271</name>
+      <entityField>History</entityField>
+      <view>WorkflowInstanceHistoryFilter_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>785ccba6-b9ac-4a03-983c-574ac28c5f1a</name>
+      <entityField>#ENTITY</entityField>
+      <view>WorkflowInstanceTasks_view</view>
+    </neonViewReference>
   </children>
 </neonView>
diff --git a/neonView/WorkflowInstancePreview_view/WorkflowInstancePreview_view.aod b/neonView/WorkflowInstancePreview_view/WorkflowInstancePreview_view.aod
index 2301ba07139..c3615039fed 100644
--- a/neonView/WorkflowInstancePreview_view/WorkflowInstancePreview_view.aod
+++ b/neonView/WorkflowInstancePreview_view/WorkflowInstancePreview_view.aod
@@ -44,10 +44,5 @@
       <entityField>Tasks</entityField>
       <view>WorkflowTaskList_view</view>
     </neonViewReference>
-    <neonViewReference>
-      <name>908012ad-82d7-45c0-9a4b-ba6e00cc1e8c</name>
-      <entityField>FinishedTasks</entityField>
-      <view>WorkflowTaskFinishedList_view</view>
-    </neonViewReference>
   </children>
 </neonView>
diff --git a/neonView/WorkflowInstanceTasks_view/WorkflowInstanceTasks_view.aod b/neonView/WorkflowInstanceTasks_view/WorkflowInstanceTasks_view.aod
new file mode 100644
index 00000000000..3cf4210ae1c
--- /dev/null
+++ b/neonView/WorkflowInstanceTasks_view/WorkflowInstanceTasks_view.aod
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.5" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.5">
+  <name>WorkflowInstanceTasks_view</name>
+  <title>Tasks</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <neonViewReference>
+      <name>608add51-09cc-4c94-a7b1-8bb23f4c1a07</name>
+      <entityField>Tasks</entityField>
+      <view>WorkflowTaskFilter_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>0e5efa21-ee28-4256-9722-e01d3329db48</name>
+      <entityField>FinishedTasks</entityField>
+      <view>WorkflowTaskFinishedDrawer_view</view>
+    </neonViewReference>
+  </children>
+</neonView>
diff --git a/neonView/WorkflowTaskFilter_view/WorkflowTaskFilter_view.aod b/neonView/WorkflowTaskFilter_view/WorkflowTaskFilter_view.aod
index 07cc8d75dd2..e9ea47e3064 100644
--- a/neonView/WorkflowTaskFilter_view/WorkflowTaskFilter_view.aod
+++ b/neonView/WorkflowTaskFilter_view/WorkflowTaskFilter_view.aod
@@ -4,11 +4,19 @@
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
   <layout>
-    <boxLayout>
+    <groupLayout>
       <name>layout</name>
-    </boxLayout>
+    </groupLayout>
   </layout>
   <children>
+    <timelineViewTemplate>
+      <name>Timeline</name>
+      <dateField>CREATE_TIME</dateField>
+      <titleField>NAME</titleField>
+      <descriptionField>DESCRIPTION</descriptionField>
+      <iconIdField>ICON</iconIdField>
+      <entityField>#ENTITY</entityField>
+    </timelineViewTemplate>
     <tableViewTemplate>
       <name>Table</name>
       <iconField>#IMAGE</iconField>
diff --git a/neonView/WorkflowTaskFinishedDrawer_view/WorkflowTaskFinishedDrawer_view.aod b/neonView/WorkflowTaskFinishedDrawer_view/WorkflowTaskFinishedDrawer_view.aod
new file mode 100644
index 00000000000..2baf75b6af2
--- /dev/null
+++ b/neonView/WorkflowTaskFinishedDrawer_view/WorkflowTaskFinishedDrawer_view.aod
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.5" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.5">
+  <name>WorkflowTaskFinishedDrawer_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <drawerLayout>
+      <name>layout</name>
+      <layoutCaption>Finished tasks</layoutCaption>
+      <fixedDrawer v="true" />
+    </drawerLayout>
+  </layout>
+  <children>
+    <neonViewReference>
+      <name>f05af6b0-7e2c-4578-b99b-5c35a6c162be</name>
+      <entityField>#ENTITY</entityField>
+      <view>WorkflowTaskFilter_view</view>
+    </neonViewReference>
+  </children>
+</neonView>
diff --git a/neonView/WorkflowTaskOwn_view/WorkflowTaskOwn_view.aod b/neonView/WorkflowTaskOwn_view/WorkflowTaskOwn_view.aod
index a5dbe2b78a7..9e0e3392f95 100644
--- a/neonView/WorkflowTaskOwn_view/WorkflowTaskOwn_view.aod
+++ b/neonView/WorkflowTaskOwn_view/WorkflowTaskOwn_view.aod
@@ -32,6 +32,7 @@
   <children>
     <timelineViewTemplate>
       <name>Timeline</name>
+      <favoriteActionGroup1>tableActions</favoriteActionGroup1>
       <dateField>CREATE_TIME</dateField>
       <titleField>NAME</titleField>
       <descriptionField>DESCRIPTION</descriptionField>
@@ -40,6 +41,7 @@
     </timelineViewTemplate>
     <tableViewTemplate>
       <name>Table</name>
+      <favoriteActionGroup1>tableActions</favoriteActionGroup1>
       <iconField>#IMAGE</iconField>
       <entityField>#ENTITY</entityField>
       <linkedColumns>
diff --git a/process/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js
index 801b54f6451..5e6b5753b4b 100644
--- a/process/KeywordRegistry_basic/process.js
+++ b/process/KeywordRegistry_basic/process.js
@@ -157,8 +157,6 @@ $KeywordRegistry.documentTemplateTypeCategory$single = function(){return "1";};
 $KeywordRegistry.documentTemplateTypeCategory$serial = function(){return "2";};
 $KeywordRegistry.documentTemplateTypeCategory$htmlTemplate = function(){return "7";};
 
-$KeywordRegistry.documentTemplatePlaceOfUse = function(){return "DocumentTemplatePlaceOfUse";};
-
 $KeywordRegistry.classificationType = function(){return "ClassificationType";};
 $KeywordRegistry.classificationType$salesproject = function(){return "SALESPROJ";};
 
@@ -184,6 +182,8 @@ $KeywordRegistry.dsgvoDeadline$complex = function(){return "DSGVODEADLINECOMPLEX
 $KeywordRegistry.dsgvoDeadline$count = function(){return "DSGVODEADLINECOUNT";};
 $KeywordRegistry.dsgvoGuarantee = function() {return "DSGVOGuarantee";};
 
+$KeywordRegistry.textPlaceholder = function(){return "textPlaceholder";};
+
 $KeywordRegistry.communicationMediumCampaign = function(){return "CommunicationMediumCampaign";};
 $KeywordRegistry.communicationMediumCampaign$mail = function(){return "CAMPAIGNEMAIL";};
 $KeywordRegistry.communicationMediumCampaign$letter = function(){return "CAMPAIGNLETTER";};
diff --git a/process/Placeholder_lib/process.js b/process/Placeholder_lib/process.js
index d3d4fca7aea..afd607a53ec 100644
--- a/process/Placeholder_lib/process.js
+++ b/process/Placeholder_lib/process.js
@@ -127,7 +127,7 @@ PlaceholderUtils.getRegexpMatchAll = function (pSpecialCharFilterRegexpPart)
         pSpecialCharFilterRegexpPart = "";
     }
     
-    return "{" + pSpecialCharFilterRegexpPart + "@(.|(\\r?\\n))+?@" + pSpecialCharFilterRegexpPart + "}";
+    return "{" + pSpecialCharFilterRegexpPart + "@(.(?!{@)|(\\r?\\n))+?@" + pSpecialCharFilterRegexpPart + "}";
 }
 
 /**
diff --git a/process/workflowServiceTaskParams_rest/process.js b/process/workflowServiceTaskParams_rest/process.js
new file mode 100644
index 00000000000..cae8e4445ce
--- /dev/null
+++ b/process/workflowServiceTaskParams_rest/process.js
@@ -0,0 +1,121 @@
+import("system.tools");
+import("system.logging");
+import("Attribute_lib");
+import("system.entities");
+import("Sql_lib");
+import("system.project");
+import("system.process");
+
+function restget (pRequest)
+{
+    var request = JSON.parse(pRequest);
+    var jditoProcess = request.header.Jditoprocess;
+    
+    /* this is an object containing the values currently set in the modeler, it looks like this:
+     * {
+     *     myParam1 : {value : "paramValue"},
+     *     myParam2 : {value : 420}
+     * }
+     */
+    var currentValues = JSON.parse(request.header.Currentvalues);
+    
+    /**
+     * Object representing a parameter
+     * 
+     * @param {String} pId id of the parameter, this is the name of the variable in the serviceTask-jDitoProcess
+     * @param {String} pName name of the parameter that is displayed in the modeler
+     * @param {String} pType type of the parameter, refer to the "Types" object below
+     * @param {Object[]} [pItems] items that can be selected if the type is "enum", each row looks like this: {id : "iWillBeStored", name : "iWillBeDisplayed"}
+     * @param {Boolean} [pRelational] if set to true, a change of the parameter value will cause a re-load of all parameters
+     *                                -> use this if a parameter depends on the value of another parameter (see "currentValues")
+     */
+    function Parameter (pId, pName, pType, pItems, pRelational)
+    {
+        this.id = pId;
+        this.name = pName;
+        this.type = pType;
+        this.items = pItems;
+        this.relational = pRelational;
+    }
+    
+    /**
+     * enum containing all possible parameter types
+     */
+    var Types = {
+        STRING : "string",
+        BOOLEAN : "boolean",
+        NUMBER : "number",
+        DATE : "date",
+        ENUM : "enum"
+    };
+    
+    function _mapToItemArray (pData, pIdIndex, pNameIndex)
+    {
+        if (pIdIndex == undefined)
+            pIdIndex = 0;
+        if (pNameIndex == undefined)
+            pNameIndex = 1;
+        return pData.map(function (item)
+        {
+            return {id : item[pIdIndex], name : item[pNameIndex]};
+        });
+    }
+    
+    var parameterConfiguration = {
+        CreateActivity_workflowService : function (pCurrentValues)
+        {
+            return [
+                new Parameter("activityResponsible", "Responsible", Types.STRING),
+                new Parameter("activityDirection", "Direction", Types.STRING),
+                new Parameter("activityCategory", "Category", Types.STRING),
+                new Parameter("activityEntryDate", "Entry date", Types.DATE),
+                new Parameter("activityContent", "Content", Types.STRING),
+                new Parameter("activityTitle", "Title", Types.STRING)
+            ];
+        },
+        CreateNotification_workflowService : function (pCurrentValues)
+        {
+            return [
+                new Parameter("notificationCaption", "Caption", Types.STRING),
+                new Parameter("notificationDescription", "Description", Types.STRING),
+                new Parameter("notificationUser", "User", Types.STRING)
+            ];
+        },
+        SendEmail_workflowService : function (pCurrentValues)
+        {
+            var templates = newSelect("DOCUMENTTEMPLATEID, NAME")
+                .from("DOCUMENTTEMPLATE")
+                .table();
+            return [
+                new Parameter("documentTemplateId", "Document template", Types.ENUM, _mapToItemArray(templates)),
+                new Parameter("recipientContactId", "Recipient", Types.ENUM)
+            ];
+        },
+        SetAttribute_workflowService : function (pCurrentValues)
+        {
+//            var attrLoadConfig = entities.createConfigForLoadingRows().entity("Attribute_entity").fields(["#UID", "#CONTENTTITLE"]);
+//            var attributes = entities.getRows(attrLoadConfig).map(function (attribute)
+//            {
+//                return {id : attribute["#UID"], name : attribute["#CONTENTTITLE"]};
+//            });
+            return [
+                new Parameter("attributeId", "Attribute", Types.ENUM)
+            ];
+        },
+        UpdateOffer_workflowService : function (pCurrentValues)
+        {
+            return [];
+        }
+    };
+    
+    var parameters;
+    if (jditoProcess in parameterConfiguration && typeof parameterConfiguration[jditoProcess] === "function")
+        parameters = parameterConfiguration[jditoProcess]();
+    
+    if (!parameters)
+        parameters = [];
+    
+    request.response.body = JSON.stringify(parameters);
+
+    return JSON.stringify(request);
+}
diff --git a/process/workflowServiceTaskParams_rest/workflowServiceTaskParams_rest.aod b/process/workflowServiceTaskParams_rest/workflowServiceTaskParams_rest.aod
new file mode 100644
index 00000000000..266ba1f462a
--- /dev/null
+++ b/process/workflowServiceTaskParams_rest/workflowServiceTaskParams_rest.aod
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+  <name>workflowServiceTaskParams_rest</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <process>%aditoprj%/process/workflowServiceTaskParams_rest/process.js</process>
+  <publishAsWebservice v="true" />
+  <style>REST</style>
+  <restAcceptedMimeType>application/json</restAcceptedMimeType>
+  <restDeliveredMimeType>application/json</restDeliveredMimeType>
+  <jditoWebserviceUser>flowableIdmService</jditoWebserviceUser>
+  <alias>Data_alias</alias>
+  <variants>
+    <element>EXECUTABLE</element>
+  </variants>
+</process>
-- 
GitLab