From 418de9bdb1ce6b70958ef92cbafd8520840bfcfb Mon Sep 17 00:00:00 2001
From: Sebastian Listl <s.listl@adito.de>
Date: Wed, 19 May 2021 11:07:10 +0200
Subject: [PATCH] 1080981 Standard workflows

---
 .../workflows/blob/unsubscribeInterest.png    | Bin 0 -> 3806 bytes
 .../workflows/blob/unsubscribeInterest.xml    |  37 ++++++++++++
 .../Data_alias/basic/workflows/changelog.xml  |   1 +
 .../insert_rejectEmailCommunication.xml       |   2 +-
 .../workflows/insert_unsubscribeInterest.xml  |  15 +++++
 .liquibase/Data_alias/changelog.xml           |   4 --
 .../CampaignParticipant_entity.aod            |   2 -
 .../StandardWorkflow_entity.aod               |  11 +---
 .../documentation.adoc                        |   3 +
 .../WorkflowDefinitionStore_entity.aod        |  12 +++-
 .../documentation.adoc                        |   9 +++
 .../onActionProcess.js                        |  13 ++++
 .../downloadselectedworkflow/stateProcess.js  |  10 +++
 .../_____LANGUAGE_EXTRA.aod                   |  57 ++++++++++++++++++
 .../_____LANGUAGE_de/_____LANGUAGE_de.aod     |  57 ++++++++++++++++++
 .../_____LANGUAGE_en/_____LANGUAGE_en.aod     |  57 ++++++++++++++++++
 .../WorkflowDefinitionStore_view.aod          |   1 +
 .../process.js                                |   8 +++
 18 files changed, 281 insertions(+), 18 deletions(-)
 create mode 100644 .liquibase/Data_alias/basic/workflows/blob/unsubscribeInterest.png
 create mode 100644 .liquibase/Data_alias/basic/workflows/blob/unsubscribeInterest.xml
 create mode 100644 .liquibase/Data_alias/basic/workflows/insert_unsubscribeInterest.xml
 create mode 100644 entity/StandardWorkflow_entity/documentation.adoc
 create mode 100644 entity/WorkflowDefinitionStore_entity/documentation.adoc
 create mode 100644 entity/WorkflowDefinitionStore_entity/entityfields/downloadselectedworkflow/onActionProcess.js
 create mode 100644 entity/WorkflowDefinitionStore_entity/entityfields/downloadselectedworkflow/stateProcess.js

diff --git a/.liquibase/Data_alias/basic/workflows/blob/unsubscribeInterest.png b/.liquibase/Data_alias/basic/workflows/blob/unsubscribeInterest.png
new file mode 100644
index 0000000000000000000000000000000000000000..98a5d517c16d44b15fd89c9ab29cc85954e47264
GIT binary patch
literal 3806
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
A{r~^~

literal 0
HcmV?d00001

diff --git a/.liquibase/Data_alias/basic/workflows/blob/unsubscribeInterest.xml b/.liquibase/Data_alias/basic/workflows/blob/unsubscribeInterest.xml
new file mode 100644
index 0000000000..8dc3661838
--- /dev/null
+++ b/.liquibase/Data_alias/basic/workflows/blob/unsubscribeInterest.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.flowable.org/processdef">
+  <process id="unsubscribeInterest" name="Unsubscribe Interest" isExecutable="true">
+    <startEvent id="startEvent1" flowable:formFieldValidation="true"></startEvent>
+    <serviceTask id="sid-82168C15-ACC8-4369-A92F-A4F8A82EDDD7" name="Change interest link" flowable:class="de.adito.aditoweb.server.neon.workflow.WorkflowServiceTask">
+      <extensionElements>
+        <flowable:field name="jditoProcess">
+          <flowable:string><![CDATA[SetInterestLink_workflowService]]></flowable:string>
+        </flowable:field>
+      </extensionElements>
+    </serviceTask>
+    <sequenceFlow id="sid-7C8AD2EA-BD4C-4251-B369-DC80DA765953" sourceRef="startEvent1" targetRef="sid-82168C15-ACC8-4369-A92F-A4F8A82EDDD7"></sequenceFlow>
+    <endEvent id="sid-7C072C86-5A44-4054-833B-F7B39838C118"></endEvent>
+    <sequenceFlow id="sid-692F5534-B5CD-45AA-84DE-4BD5B0AC18BD" sourceRef="sid-82168C15-ACC8-4369-A92F-A4F8A82EDDD7" targetRef="sid-7C072C86-5A44-4054-833B-F7B39838C118"></sequenceFlow>
+  </process>
+  <bpmndi:BPMNDiagram id="BPMNDiagram_unsubscribeInterest">
+    <bpmndi:BPMNPlane bpmnElement="unsubscribeInterest" id="BPMNPlane_unsubscribeInterest">
+      <bpmndi:BPMNShape bpmnElement="startEvent1" id="BPMNShape_startEvent1">
+        <omgdc:Bounds height="30.0" width="30.0" x="100.0" y="163.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-82168C15-ACC8-4369-A92F-A4F8A82EDDD7" id="BPMNShape_sid-82168C15-ACC8-4369-A92F-A4F8A82EDDD7">
+        <omgdc:Bounds height="80.0" width="100.0" x="175.0" y="138.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="sid-7C072C86-5A44-4054-833B-F7B39838C118" id="BPMNShape_sid-7C072C86-5A44-4054-833B-F7B39838C118">
+        <omgdc:Bounds height="28.0" width="28.0" x="332.5" y="164.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge bpmnElement="sid-7C8AD2EA-BD4C-4251-B369-DC80DA765953" id="BPMNEdge_sid-7C8AD2EA-BD4C-4251-B369-DC80DA765953">
+        <omgdi:waypoint x="129.9499984899576" y="178.0"></omgdi:waypoint>
+        <omgdi:waypoint x="174.9999999999917" y="178.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="sid-692F5534-B5CD-45AA-84DE-4BD5B0AC18BD" id="BPMNEdge_sid-692F5534-B5CD-45AA-84DE-4BD5B0AC18BD">
+        <omgdi:waypoint x="274.94999999998043" y="178.0"></omgdi:waypoint>
+        <omgdi:waypoint x="332.5" y="178.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+    </bpmndi:BPMNPlane>
+  </bpmndi:BPMNDiagram>
+</definitions>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/workflows/changelog.xml b/.liquibase/Data_alias/basic/workflows/changelog.xml
index d8435c8e0a..e1aef03f97 100644
--- a/.liquibase/Data_alias/basic/workflows/changelog.xml
+++ b/.liquibase/Data_alias/basic/workflows/changelog.xml
@@ -3,4 +3,5 @@
     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_rejectEmailCommunication.xml"/>
+    <include relativeToChangelogFile="true" file="insert_unsubscribeInterest.xml"/>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/workflows/insert_rejectEmailCommunication.xml b/.liquibase/Data_alias/basic/workflows/insert_rejectEmailCommunication.xml
index f36307a0da..792553fc3d 100644
--- a/.liquibase/Data_alias/basic/workflows/insert_rejectEmailCommunication.xml
+++ b/.liquibase/Data_alias/basic/workflows/insert_rejectEmailCommunication.xml
@@ -5,7 +5,7 @@
   <changeSet author="s.listl" id="e9e5f42b-5df9-430b-aaad-52ded69db85d">
       <insert tableName="STANDARD_WORKFLOW">
           <column name="STANDARD_WORKFLOWID" value="59d620ab-6dfc-4da7-b0ad-226fa78949e4"/>
-          <column name="KEY" value="rejectEmailCommunication"/>
+          <column name="PROCESSKEY" value="rejectEmailCommunication"/>
           <column name="NAME" value="Reject email communication"/>
           <column name="DESCRIPTION" value="Sets a communication setting to reject emails"/>
           <column name="PROCESSXML" valueBlobFile="blob/rejectEmailCommunication.xml"/>
diff --git a/.liquibase/Data_alias/basic/workflows/insert_unsubscribeInterest.xml b/.liquibase/Data_alias/basic/workflows/insert_unsubscribeInterest.xml
new file mode 100644
index 0000000000..4d90b46952
--- /dev/null
+++ b/.liquibase/Data_alias/basic/workflows/insert_unsubscribeInterest.xml
@@ -0,0 +1,15 @@
+<?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="608978ed-2471-4c46-85cf-eeab044025b1">
+      <insert tableName="STANDARD_WORKFLOW">
+          <column name="STANDARD_WORKFLOWID" value="b14f9d59-b896-433c-a515-c6f209924efd"/>
+          <column name="PROCESSKEY" value="unsubscribeInterest"/>
+          <column name="NAME" value="Unsubscribe Interest"/>
+          <column name="DESCRIPTION" value="Sets an interest link with the status 'unsubscribed'"/>
+          <column name="PROCESSXML" valueBlobFile="blob/unsubscribeInterest.xml"/>
+          <column name="DIAGRAM" valueBlobFile="blob/unsubscribeInterest.png"/>
+      </insert>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/changelog.xml b/.liquibase/Data_alias/changelog.xml
index c857106827..a42f84d68b 100644
--- a/.liquibase/Data_alias/changelog.xml
+++ b/.liquibase/Data_alias/changelog.xml
@@ -20,10 +20,6 @@
     <include relativeToChangelogFile="true" file="basic/2020.2.2/changelog.xml"/>
     <include relativeToChangelogFile="true" file="basic/2020.2.3/changelog.xml"/>
     <include relativeToChangelogFile="true" file="basic/2021.0.0/changelog.xml"/>
-    <include relativeToChangelogFile="true" file="basic/2021.0.1/changelog.xml"/>
-    <include relativeToChangelogFile="true" file="basic/2021.0.2/changelog.xml"/>
-    <include relativeToChangelogFile="true" file="basic/2021.0.3/changelog.xml"/>
-    <include relativeToChangelogFile="true" file="basic/2021.1.0/changelog.xml"/>
     
     <include relativeToChangelogFile="true" file="basic/workflows/changelog.xml" context="workflow"/>
     <!--enable this only when you definetly want to overwrite the existing data with demo records:-->
diff --git a/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod b/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod
index b32ed04cf4..4c291546c5 100644
--- a/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod
+++ b/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod
@@ -122,8 +122,6 @@
       <name>AnyContacts</name>
       <dependency>
         <name>dependency</name>
-        <entityName>AnyContact_entity</entityName>
-        <fieldName>ContactsByIds</fieldName>
       </dependency>
       <children>
         <entityParameter>
diff --git a/entity/StandardWorkflow_entity/StandardWorkflow_entity.aod b/entity/StandardWorkflow_entity/StandardWorkflow_entity.aod
index be65ad093d..d83e0534b8 100644
--- a/entity/StandardWorkflow_entity/StandardWorkflow_entity.aod
+++ b/entity/StandardWorkflow_entity/StandardWorkflow_entity.aod
@@ -1,8 +1,9 @@
 <?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.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18">
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21">
   <name>StandardWorkflow_entity</name>
   <title>Standard workflow</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/StandardWorkflow_entity/documentation.adoc</documentation>
   <grantCreate v="false" />
   <grantUpdate v="false" />
   <grantDelete v="false" />
@@ -11,14 +12,6 @@
   <entityFields>
     <entityProvider>
       <name>#PROVIDER</name>
-      <dependencies>
-        <entityDependency>
-          <name>38e423c3-f0b2-48d6-a035-5b19c79591ac</name>
-          <entityName>WorkflowDefinitionStore_entity</entityName>
-          <fieldName>StandardWorkflows</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
     </entityProvider>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
diff --git a/entity/StandardWorkflow_entity/documentation.adoc b/entity/StandardWorkflow_entity/documentation.adoc
new file mode 100644
index 0000000000..82672b0e0b
--- /dev/null
+++ b/entity/StandardWorkflow_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= StandardWorkflow_entity
+
+Standard workflows are stored in the table STANDARD_WORKFLOW. The table is filled exclusively by liquibase scripts, this entity is read-only.
diff --git a/entity/WorkflowDefinitionStore_entity/WorkflowDefinitionStore_entity.aod b/entity/WorkflowDefinitionStore_entity/WorkflowDefinitionStore_entity.aod
index 21a60f403d..c5b314b159 100644
--- a/entity/WorkflowDefinitionStore_entity/WorkflowDefinitionStore_entity.aod
+++ b/entity/WorkflowDefinitionStore_entity/WorkflowDefinitionStore_entity.aod
@@ -1,8 +1,9 @@
 <?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.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18">
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21">
   <name>WorkflowDefinitionStore_entity</name>
   <title>Workflow definitions</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/WorkflowDefinitionStore_entity/documentation.adoc</documentation>
   <recordContainer>dataless</recordContainer>
   <entityFields>
     <entityProvider>
@@ -32,7 +33,7 @@
     </entityConsumer>
     <entityActionField>
       <name>deploySelectedWorkflow</name>
-      <title>Add selected</title>
+      <title>Add selected workflow</title>
       <onActionProcess>%aditoprj%/entity/WorkflowDefinitionStore_entity/entityfields/deployselectedworkflow/onActionProcess.js</onActionProcess>
       <iconId>VAADIN:PLUS</iconId>
       <stateProcess>%aditoprj%/entity/WorkflowDefinitionStore_entity/entityfields/deployselectedworkflow/stateProcess.js</stateProcess>
@@ -49,6 +50,13 @@
       <contentType>BOOLEAN</contentType>
       <state>EDITABLE</state>
     </entityField>
+    <entityActionField>
+      <name>downloadSelectedWorkflow</name>
+      <title>Download selected workflow</title>
+      <onActionProcess>%aditoprj%/entity/WorkflowDefinitionStore_entity/entityfields/downloadselectedworkflow/onActionProcess.js</onActionProcess>
+      <iconId>VAADIN:DOWNLOAD</iconId>
+      <stateProcess>%aditoprj%/entity/WorkflowDefinitionStore_entity/entityfields/downloadselectedworkflow/stateProcess.js</stateProcess>
+    </entityActionField>
   </entityFields>
   <recordContainers>
     <datalessRecordContainer>
diff --git a/entity/WorkflowDefinitionStore_entity/documentation.adoc b/entity/WorkflowDefinitionStore_entity/documentation.adoc
new file mode 100644
index 0000000000..608df1a5be
--- /dev/null
+++ b/entity/WorkflowDefinitionStore_entity/documentation.adoc
@@ -0,0 +1,9 @@
+= WorkflowDefinitionStore_entity
+
+The purpose of this entity is to display all the standard workflow definitions that can be imported into the system. It provides an overlay
+where the workflows can be selected and deployed with the actions of this entity.
+
+Standard workflows are handled this way because the workflow engine is running inside its own service with an own database. That's why these workflows
+cannot be inserted directly with liquibase. Instead, the standard workflows are stored in a database table on the ADITO side, and can be transferred
+to the workflow service using this entity. An additional advantage of this solution is better flexibility, as it makes using the standard workflows
+optional, the admin can choose in the client what workflow definitions to deploy.
\ No newline at end of file
diff --git a/entity/WorkflowDefinitionStore_entity/entityfields/downloadselectedworkflow/onActionProcess.js b/entity/WorkflowDefinitionStore_entity/entityfields/downloadselectedworkflow/onActionProcess.js
new file mode 100644
index 0000000000..94d54bfc7c
--- /dev/null
+++ b/entity/WorkflowDefinitionStore_entity/entityfields/downloadselectedworkflow/onActionProcess.js
@@ -0,0 +1,13 @@
+import("system.neon");
+import("system.util");
+import("system.workflow");
+import("Sql_lib");
+import("system.vars");
+
+var workflowId = vars.get("$field.selectedWorkflows");
+var [name, processXml] = newSelect(["NAME", "PROCESSXML"])
+    .from("STANDARD_WORKFLOW")
+    .where("STANDARD_WORKFLOW.STANDARD_WORKFLOWID", workflowId)
+    .arrayRow();
+
+neon.download(processXml, name + ".xml");
\ No newline at end of file
diff --git a/entity/WorkflowDefinitionStore_entity/entityfields/downloadselectedworkflow/stateProcess.js b/entity/WorkflowDefinitionStore_entity/entityfields/downloadselectedworkflow/stateProcess.js
new file mode 100644
index 0000000000..a0cbee140b
--- /dev/null
+++ b/entity/WorkflowDefinitionStore_entity/entityfields/downloadselectedworkflow/stateProcess.js
@@ -0,0 +1,10 @@
+import("system.result");
+import("system.vars");
+import("system.neon");
+
+var state = neon.COMPONENTSTATE_DISABLED;
+if (vars.get("$field.selectedWorkflows"))
+{
+    state = neon.COMPONENTSTATE_EDITABLE;
+}
+result.string(state);
\ No newline at end of file
diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
index b94ce935a3..83e6860df3 100644
--- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
+++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
@@ -8632,6 +8632,63 @@
     <entry>
       <key>Global Cases </key>
     </entry>
+    <entry>
+      <key>Attributes of attribute group \"%0\" have to be used at least %1.</key>
+    </entry>
+    <entry>
+      <key>Attributes of attribute group \"%0\" can't be used more than %1.</key>
+    </entry>
+    <entry>
+      <key>Add selected workflow</key>
+    </entry>
+    <entry>
+      <key>Profiling</key>
+    </entry>
+    <entry>
+      <key>Add all</key>
+    </entry>
+    <entry>
+      <key>Standard workflow</key>
+    </entry>
+    <entry>
+      <key>Standard workflows</key>
+    </entry>
+    <entry>
+      <key>Global</key>
+    </entry>
+    <entry>
+      <key>Bounce (Soft)</key>
+    </entry>
+    <entry>
+      <key>Test1</key>
+    </entry>
+    <entry>
+      <key>Bounce (Hard)</key>
+    </entry>
+    <entry>
+      <key>Smart TV</key>
+    </entry>
+    <entry>
+      <key>Desktop</key>
+    </entry>
+    <entry>
+      <key>Download selected workflow</key>
+    </entry>
+    <entry>
+      <key>Send workflow signal</key>
+    </entry>
+    <entry>
+      <key>Tablet</key>
+    </entry>
+    <entry>
+      <key>Blacklist</key>
+    </entry>
+    <entry>
+      <key>SubTest1</key>
+    </entry>
+    <entry>
+      <key>Exclude existing workflows</key>
+    </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
   <sqlModels>
diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
index 3226194b7c..b53cdc8b99 100644
--- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
+++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
@@ -11347,6 +11347,63 @@ Bitte Datumseingabe prüfen</value>
     <entry>
       <key>Global Cases </key>
     </entry>
+    <entry>
+      <key>Add selected workflow</key>
+      <value>Ausgewählten Workflow hinzufügen</value>
+    </entry>
+    <entry>
+      <key>Profiling</key>
+    </entry>
+    <entry>
+      <key>Add all</key>
+      <value>Alle hinzufügen</value>
+    </entry>
+    <entry>
+      <key>Standard workflow</key>
+      <value>Standard Workflow</value>
+    </entry>
+    <entry>
+      <key>Standard workflows</key>
+      <value>Standard Workflows</value>
+    </entry>
+    <entry>
+      <key>Global</key>
+    </entry>
+    <entry>
+      <key>Bounce (Soft)</key>
+    </entry>
+    <entry>
+      <key>Test1</key>
+    </entry>
+    <entry>
+      <key>Bounce (Hard)</key>
+    </entry>
+    <entry>
+      <key>Smart TV</key>
+    </entry>
+    <entry>
+      <key>Desktop</key>
+    </entry>
+    <entry>
+      <key>Download selected workflow</key>
+      <value>Ausgewählten Workflow herunterladen</value>
+    </entry>
+    <entry>
+      <key>Send workflow signal</key>
+    </entry>
+    <entry>
+      <key>Tablet</key>
+    </entry>
+    <entry>
+      <key>Blacklist</key>
+    </entry>
+    <entry>
+      <key>SubTest1</key>
+    </entry>
+    <entry>
+      <key>Exclude existing workflows</key>
+      <value>Nur nicht vorhandene Workflows</value>
+    </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
 </language>
diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
index 1464a7d2e2..3cb99dc83e 100644
--- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
+++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
@@ -8717,6 +8717,63 @@
     <entry>
       <key>Global Cases </key>
     </entry>
+    <entry>
+      <key>Attributes of attribute group \"%0\" have to be used at least %1.</key>
+    </entry>
+    <entry>
+      <key>Attributes of attribute group \"%0\" can't be used more than %1.</key>
+    </entry>
+    <entry>
+      <key>Add selected workflow</key>
+    </entry>
+    <entry>
+      <key>Profiling</key>
+    </entry>
+    <entry>
+      <key>Add all</key>
+    </entry>
+    <entry>
+      <key>Standard workflow</key>
+    </entry>
+    <entry>
+      <key>Standard workflows</key>
+    </entry>
+    <entry>
+      <key>Global</key>
+    </entry>
+    <entry>
+      <key>Bounce (Soft)</key>
+    </entry>
+    <entry>
+      <key>Test1</key>
+    </entry>
+    <entry>
+      <key>Bounce (Hard)</key>
+    </entry>
+    <entry>
+      <key>Smart TV</key>
+    </entry>
+    <entry>
+      <key>Desktop</key>
+    </entry>
+    <entry>
+      <key>Download selected workflow</key>
+    </entry>
+    <entry>
+      <key>Send workflow signal</key>
+    </entry>
+    <entry>
+      <key>Tablet</key>
+    </entry>
+    <entry>
+      <key>Blacklist</key>
+    </entry>
+    <entry>
+      <key>SubTest1</key>
+    </entry>
+    <entry>
+      <key>Exclude existing workflows</key>
+    </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
 </language>
diff --git a/neonView/WorkflowDefinitionStore_view/WorkflowDefinitionStore_view.aod b/neonView/WorkflowDefinitionStore_view/WorkflowDefinitionStore_view.aod
index 1b580e9074..6e10496aa1 100644
--- a/neonView/WorkflowDefinitionStore_view/WorkflowDefinitionStore_view.aod
+++ b/neonView/WorkflowDefinitionStore_view/WorkflowDefinitionStore_view.aod
@@ -21,6 +21,7 @@
       <name>Actions</name>
       <actions>
         <element>deploySelectedWorkflow</element>
+        <element>downloadSelectedWorkflow</element>
         <element>deployAllWorkflows</element>
       </actions>
     </actionsViewTemplate>
diff --git a/process/SetInterestLink_workflowService/process.js b/process/SetInterestLink_workflowService/process.js
index 5a6447a1a3..b66a48e570 100644
--- a/process/SetInterestLink_workflowService/process.js
+++ b/process/SetInterestLink_workflowService/process.js
@@ -6,6 +6,14 @@ import("Sql_lib");
 var variables = JSON.parse(vars.get("$local.value"));
 var contactId = variables.contactId || variables.targetId;
 var interestId = variables.interestId;
+if (!interestId && variables.mailLogId)
+{
+    interestId = newSelect("MAIL_RUN.INTERESTID")
+        .from("MAIL_LOG")
+        .join("MAIL_RUN", "MAIL_LOG.MAIL_RUN_ID = MAIL_RUN.MAIL_RUNID")
+        .where("MAIL_LOG.MAIL_LOGID", variables.mailLogId)
+        .cell();
+}
 var status = variables.status || $KeywordRegistry.interestLinkStatus$notSubscribed();
 
 var interestLinkId = new SqlBuilder()
-- 
GitLab