From c953b91e64b6961f7e52687a6eed086e8adcd587 Mon Sep 17 00:00:00 2001
From: "S.Listl" <S.Listl@SLISTL.aditosoftware.local>
Date: Wed, 5 Aug 2020 15:33:54 +0200
Subject: [PATCH] Conditional workflow form fields fix

---
 .../WorkflowTask_entity.aod                   |  1 +
 .../entityfields/formresult/onValueChange.js  | 25 +++++++++++++++++++
 2 files changed, 26 insertions(+)
 create mode 100644 entity/WorkflowTask_entity/entityfields/formresult/onValueChange.js

diff --git a/entity/WorkflowTask_entity/WorkflowTask_entity.aod b/entity/WorkflowTask_entity/WorkflowTask_entity.aod
index 3ffbe846c7..938fbcdc99 100644
--- a/entity/WorkflowTask_entity/WorkflowTask_entity.aod
+++ b/entity/WorkflowTask_entity/WorkflowTask_entity.aod
@@ -31,6 +31,7 @@
     </entityField>
     <entityField>
       <name>FORMRESULT</name>
+      <onValueChange>%aditoprj%/entity/WorkflowTask_entity/entityfields/formresult/onValueChange.js</onValueChange>
     </entityField>
     <entityField>
       <name>NAME</name>
diff --git a/entity/WorkflowTask_entity/entityfields/formresult/onValueChange.js b/entity/WorkflowTask_entity/entityfields/formresult/onValueChange.js
new file mode 100644
index 0000000000..249aba04bb
--- /dev/null
+++ b/entity/WorkflowTask_entity/entityfields/formresult/onValueChange.js
@@ -0,0 +1,25 @@
+import("system.result");
+import("system.vars");
+import("system.workflow");
+import("system.neon");
+
+var taskId = vars.get("$field.UID");
+var newResult = vars.get("$local.value");
+var oldResult = vars.get("$field.FORMRESULT");
+
+if (newResult && newResult !== oldResult)
+{
+    /*
+     * fieldListeners = all fields that are used inside a visibility expression
+     * -> if one of these fields is changed, set the new FORMDEFINITION
+     */
+    var fieldListeners = JSON.parse(workflow.getFormFieldListeners(taskId));
+    newResult = newResult ? JSON.parse(newResult) : {};
+    oldResult = oldResult ? JSON.parse(oldResult) : {};
+    var isRefreshRequired = fieldListeners.some(function (fieldId)
+    {
+        return newResult[fieldId] !== oldResult[fieldId];
+    });
+    if (isRefreshRequired)
+        neon.setFieldValue("$field.FORMDEFINITION", workflow.getFormProperties(taskId, newResult));
+}
-- 
GitLab