From 1d2d6edf16e6f78e9832511db525ae037afa2090 Mon Sep 17 00:00:00 2001
From: "j.goderbauer" <j.goderbauer@adito.de>
Date: Thu, 25 Jul 2019 08:45:36 +0200
Subject: [PATCH] improve filter for Attributes

---
 .../filterConditionProcess.js                 |  4 ++--
 .../attribute_filter/filterFieldsProcess.js   | 10 +++++----
 .../attribute_filter/filterValuesProcess.js   |  6 +++--
 .../AttributeFilter_lib.aod                   |  9 ++++++++
 process/AttributeFilter_lib/process.js        | 22 +++++++++++++++++++
 5 files changed, 43 insertions(+), 8 deletions(-)
 create mode 100644 process/AttributeFilter_lib/AttributeFilter_lib.aod
 create mode 100644 process/AttributeFilter_lib/process.js

diff --git a/entity/Person_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js
index eb15ffb9a9..e207f370e7 100644
--- a/entity/Person_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js
+++ b/entity/Person_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js
@@ -1,3 +1,4 @@
+import("AttributeFilter_lib");
 import("system.db");
 import("Context_lib");
 import("Sql_lib");
@@ -7,8 +8,7 @@ import("system.vars");
 import("system.result");
 
 var name = vars.get("$local.name");
-name = name.substr(name.lastIndexOf(".")+1);
-name = JSON.parse(name);
+name = AttributeSearchNameCoder.decode(name);
 var attributeId = name.id;
 var dbField = AttributeTypeUtil.getDatabaseField(name.type);
 
diff --git a/entity/Person_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js b/entity/Person_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js
index 9568f5e590..8dfefc2b1b 100644
--- a/entity/Person_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js
+++ b/entity/Person_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js
@@ -1,3 +1,5 @@
+import("AttributeFilter_lib");
+import("system.util");
 import("Context_lib");
 import("Attribute_lib");
 import("system.entities");
@@ -18,10 +20,9 @@ attributeRows.forEach(function(row){
 
     if (contentType)
     {
-        var id = {id: row["UID"], type: attributeType};
-        id = JSON.stringify(id);
+        var name = AttributeSearchNameCoder.encode(row["UID"], attributeType);
         res.push({
-            name: id,
+            name: name,
             title: row["FULL_ATTRIBUTE_NAME"],
             contentType: contentType == "UNKNOWN" ? "TEXT" : contentType, //TODO: temporary test
             hasDropDownValues: contentType == "UNKNOWN" || contentType == "BOOLEAN" ? true : false//TODO: temporary test
@@ -30,4 +31,5 @@ attributeRows.forEach(function(row){
 });
 
 res = JSON.stringify(res);
-result.string(res);
\ No newline at end of file
+result.string(res);
+
diff --git a/entity/Person_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js b/entity/Person_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js
index 91a48d820e..32fa052604 100644
--- a/entity/Person_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js
+++ b/entity/Person_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js
@@ -1,3 +1,4 @@
+import("AttributeFilter_lib");
 import("Context_lib");
 import("system.translate");
 import("system.db");
@@ -7,9 +8,10 @@ import("Attribute_lib");
 import("Sql_lib");
 
 var filter = JSON.parse(vars.getString("$local.filter"));
-var name = JSON.parse(filter.name);
+var name = name = AttributeSearchNameCoder.decode(filter.name);
+
 var attributeId = name.id;
-var attrType = name.type.trim();
+var attrType = name.type;
 
 if (attrType == $AttributeTypes.COMBO.toString())
 {
diff --git a/process/AttributeFilter_lib/AttributeFilter_lib.aod b/process/AttributeFilter_lib/AttributeFilter_lib.aod
new file mode 100644
index 0000000000..57e3edcba2
--- /dev/null
+++ b/process/AttributeFilter_lib/AttributeFilter_lib.aod
@@ -0,0 +1,9 @@
+<?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>AttributeFilter_lib</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <process>%aditoprj%/process/AttributeFilter_lib/process.js</process>
+  <variants>
+    <element>LIBRARY</element>
+  </variants>
+</process>
diff --git a/process/AttributeFilter_lib/process.js b/process/AttributeFilter_lib/process.js
new file mode 100644
index 0000000000..51cfbb2887
--- /dev/null
+++ b/process/AttributeFilter_lib/process.js
@@ -0,0 +1,22 @@
+import("system.util");
+
+function AttributeSearchNameCoder(){}
+
+AttributeSearchNameCoder.encode = function (pUid, pAttributeType)
+{
+    var res = {
+        id: pUid, 
+        type: pAttributeType.trim()
+    };
+    res = JSON.stringify(res);
+    res = util.encodeBase64String(res);
+    return res
+};
+
+AttributeSearchNameCoder.decode = function (pEncodedString)
+{
+    var res = pEncodedString.substr(pEncodedString.lastIndexOf(".") + 1);
+    res = util.decodeBase64String(res);
+    res = JSON.parse(res);
+    return res
+};
-- 
GitLab