From 14d0cbef4837c4f34123a6bd70a8156ff6aef8dc Mon Sep 17 00:00:00 2001
From: "j.goderbauer" <j.goderbauer@adito.de>
Date: Fri, 15 Feb 2019 11:00:18 +0100
Subject: [PATCH] =?UTF-8?q?[Projekt:=20Entwicklung=20-=20Neon][TicketNr.:?=
 =?UTF-8?q?=201034159][Komplexe=20Keywords=20=C3=BCber=20Keywordattribute]?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 aliasDefinition/Data_alias/Data_alias.aod     |  8 +--
 .../KeywordAttributeRelation_entity.aod       |  1 +
 .../ab_keyword_attribute_id/onValueChange.js  | 11 ++-
 .../KeywordAttribute_entity.aod               |  1 +
 .../KeywordEntry_entity.aod                   |  7 ++
 .../Salesproject_entity.aod                   | 21 +++++-
 .../children/containername_param/code.js      |  4 ++
 .../probability/possibleItemsProcess.js       |  4 --
 .../probability.displayvalue/expression.js    |  5 ++
 .../data/AditoBasic/ab_keyword_attribute.xml  |  2 +-
 ...t_SalesprojectProbability_percentValue.xml | 41 +++++++++++
 .../init_SalesprojectProbability_points.xml   | 11 ---
 .../example_salesproject/SALESPROJECT_gfk.xml |  4 +-
 .../example_salesproject/SALESPROJECT_jkl.xml |  2 +-
 .../create_ab_keyword_attribute.xml           |  4 +-
 .../data_alias/struct/create_salesproject.xml |  2 +-
 process/Keyword_lib/process.js                | 68 ++++++++++++++-----
 17 files changed, 150 insertions(+), 46 deletions(-)
 create mode 100644 entity/Salesproject_entity/entityfields/keywordprobabilties/children/containername_param/code.js
 delete mode 100644 entity/Salesproject_entity/entityfields/probability/possibleItemsProcess.js
 create mode 100644 entity/Salesproject_entity/recordcontainers/db/recordfieldmappings/probability.displayvalue/expression.js
 create mode 100644 others/db_changes/data_alias/data/AditoBasic/ab_keyword_attribute/init_SalesprojectProbability_percentValue.xml
 delete mode 100644 others/db_changes/data_alias/data/AditoBasic/ab_keyword_attribute/init_SalesprojectProbability_points.xml

diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod
index 9285b2f33d..eb36678450 100644
--- a/aliasDefinition/Data_alias/Data_alias.aod
+++ b/aliasDefinition/Data_alias/Data_alias.aod
@@ -4416,8 +4416,8 @@
                 <name>TYPE</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="12" />
-                <size v="100" />
+                <columnType v="1" />
+                <size v="36" />
                 <scale v="0" />
                 <notNull v="true" />
                 <isUnique v="false" />
@@ -4430,8 +4430,8 @@
                 <name>NAME</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="1" />
-                <size v="36" />
+                <columnType v="12" />
+                <size v="100" />
                 <scale v="0" />
                 <notNull v="true" />
                 <isUnique v="false" />
diff --git a/entity/KeywordAttributeRelation_entity/KeywordAttributeRelation_entity.aod b/entity/KeywordAttributeRelation_entity/KeywordAttributeRelation_entity.aod
index e9462ab5b4..ea8395fd37 100644
--- a/entity/KeywordAttributeRelation_entity/KeywordAttributeRelation_entity.aod
+++ b/entity/KeywordAttributeRelation_entity/KeywordAttributeRelation_entity.aod
@@ -89,6 +89,7 @@
       <documentation>%aditoprj%/entity/KeywordAttributeRelation_entity/entityfields/valueproxy/documentation.adoc</documentation>
       <title>Value</title>
       <contentTypeProcess>%aditoprj%/entity/KeywordAttributeRelation_entity/entityfields/valueproxy/contentTypeProcess.js</contentTypeProcess>
+      <mandatory v="true" />
       <valueProcess>%aditoprj%/entity/KeywordAttributeRelation_entity/entityfields/valueproxy/valueProcess.js</valueProcess>
       <onValueChange>%aditoprj%/entity/KeywordAttributeRelation_entity/entityfields/valueproxy/onValueChange.js</onValueChange>
     </entityField>
diff --git a/entity/KeywordAttributeRelation_entity/entityfields/ab_keyword_attribute_id/onValueChange.js b/entity/KeywordAttributeRelation_entity/entityfields/ab_keyword_attribute_id/onValueChange.js
index a26f98d314..15f4a12ff8 100644
--- a/entity/KeywordAttributeRelation_entity/entityfields/ab_keyword_attribute_id/onValueChange.js
+++ b/entity/KeywordAttributeRelation_entity/entityfields/ab_keyword_attribute_id/onValueChange.js
@@ -1,5 +1,10 @@
 import("system.vars");
+import("system.neon");
 
-vars.set("$field.CHAR_VALUE", "");
-vars.set("$field.BOOL_VALUE", "");
-vars.set("$field.NUMBER_VALUE", "");
\ No newline at end of file
+var recordState = vars.get("$sys.recordstate");
+if (recordState == neon.OPERATINGSTATE_NEW || recordState == neon.OPERATINGSTATE_EDIT)
+{
+    vars.set("$field.CHAR_VALUE", null);
+    vars.set("$field.BOOL_VALUE", null);
+    vars.set("$field.NUMBER_VALUE", null);
+}
\ No newline at end of file
diff --git a/entity/KeywordAttribute_entity/KeywordAttribute_entity.aod b/entity/KeywordAttribute_entity/KeywordAttribute_entity.aod
index 4061a215b2..e0ef67c552 100644
--- a/entity/KeywordAttribute_entity/KeywordAttribute_entity.aod
+++ b/entity/KeywordAttribute_entity/KeywordAttribute_entity.aod
@@ -13,6 +13,7 @@
     </entityProvider>
     <entityField>
       <name>AB_KEYWORD_ATTRIBUTEID</name>
+      <searchable v="false" />
       <valueProcess>%aditoprj%/entity/KeywordAttribute_entity/entityfields/ab_keyword_attributeid/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
diff --git a/entity/KeywordEntry_entity/KeywordEntry_entity.aod b/entity/KeywordEntry_entity/KeywordEntry_entity.aod
index 0c83ef04ae..0956d55dd0 100644
--- a/entity/KeywordEntry_entity/KeywordEntry_entity.aod
+++ b/entity/KeywordEntry_entity/KeywordEntry_entity.aod
@@ -25,6 +25,7 @@
     </entityField>
     <entityField>
       <name>AB_KEYWORD_ENTRYID</name>
+      <searchable v="false" />
       <valueProcess>%aditoprj%/entity/KeywordEntry_entity/entityfields/ab_keyword_entryid/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
@@ -238,6 +239,12 @@
           <fieldName>KeywordAttributeType</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>718fe5a2-c75f-49ed-b67e-fc4fbf63ff1d</name>
+          <entityName>Salesproject_entity</entityName>
+          <fieldName>KeywordProbabilties</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
       </dependencies>
       <children>
         <entityParameter>
diff --git a/entity/Salesproject_entity/Salesproject_entity.aod b/entity/Salesproject_entity/Salesproject_entity.aod
index d37f3e61bf..3d5f6662a1 100644
--- a/entity/Salesproject_entity/Salesproject_entity.aod
+++ b/entity/Salesproject_entity/Salesproject_entity.aod
@@ -107,7 +107,7 @@
     <entityField>
       <name>PROBABILITY</name>
       <title>Probability</title>
-      <possibleItemsProcess>%aditoprj%/entity/Salesproject_entity/entityfields/probability/possibleItemsProcess.js</possibleItemsProcess>
+      <consumer>KeywordProbabilties</consumer>
     </entityField>
     <entityConsumer>
       <name>SalesprojectSources</name>
@@ -372,6 +372,21 @@
       <description>Opens the time tracking context in new-mode for the selected salesproject</description>
       <onActionProcess>%aditoprj%/entity/Salesproject_entity/entityfields/newtimetracking/onActionProcess.js</onActionProcess>
     </entityActionField>
+    <entityConsumer>
+      <name>KeywordProbabilties</name>
+      <fieldType>DEPENDENCY_OUT</fieldType>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>containerName_param</name>
+          <code>%aditoprj%/entity/Salesproject_entity/entityfields/keywordprobabilties/children/containername_param/code.js</code>
+        </entityParameter>
+      </children>
+    </entityConsumer>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -458,6 +473,10 @@
           <name>VOLUME.displayValue</name>
           <expression>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/recordfieldmappings/volume.displayvalue/expression.js</expression>
         </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>PROBABILITY.displayValue</name>
+          <expression>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/recordfieldmappings/probability.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
       </recordFieldMappings>
     </dbRecordContainer>
   </recordContainers>
diff --git a/entity/Salesproject_entity/entityfields/keywordprobabilties/children/containername_param/code.js b/entity/Salesproject_entity/entityfields/keywordprobabilties/children/containername_param/code.js
new file mode 100644
index 0000000000..4eecf47c8c
--- /dev/null
+++ b/entity/Salesproject_entity/entityfields/keywordprobabilties/children/containername_param/code.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("Keyword_lib");
+
+result.string($KeywordRegistry.get.SalesprojectProbability);
\ No newline at end of file
diff --git a/entity/Salesproject_entity/entityfields/probability/possibleItemsProcess.js b/entity/Salesproject_entity/entityfields/probability/possibleItemsProcess.js
deleted file mode 100644
index bea9f367e4..0000000000
--- a/entity/Salesproject_entity/entityfields/probability/possibleItemsProcess.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.result");
-import("Keyword_lib");
-
-result.object(LegacyKeywordUtils.getStandardArray("SALESPROJECT.PROBABILITY"));
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/recordfieldmappings/probability.displayvalue/expression.js b/entity/Salesproject_entity/recordcontainers/db/recordfieldmappings/probability.displayvalue/expression.js
new file mode 100644
index 0000000000..a5769eccec
--- /dev/null
+++ b/entity/Salesproject_entity/recordcontainers/db/recordfieldmappings/probability.displayvalue/expression.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("Keyword_lib");
+
+var sql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.get.SalesprojectProbability, "SALESPROJECT.PROBABILITY");
+result.string(sql);
diff --git a/others/db_changes/data_alias/data/AditoBasic/ab_keyword_attribute.xml b/others/db_changes/data_alias/data/AditoBasic/ab_keyword_attribute.xml
index c3c086c020..f16b870ba5 100644
--- a/others/db_changes/data_alias/data/AditoBasic/ab_keyword_attribute.xml
+++ b/others/db_changes/data_alias/data/AditoBasic/ab_keyword_attribute.xml
@@ -1,4 +1,4 @@
 <?xml version="1.1" encoding="UTF-8" standalone="no"?>
 <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
-    <include relativeToChangelogFile="true" file="ab_keyword_attribute/init_SalesprojectProbability_points.xml"/>
+    <include relativeToChangelogFile="true" file="ab_keyword_attribute/init_SalesprojectProbability_percentValue.xml"/>
 </databaseChangeLog>
diff --git a/others/db_changes/data_alias/data/AditoBasic/ab_keyword_attribute/init_SalesprojectProbability_percentValue.xml b/others/db_changes/data_alias/data/AditoBasic/ab_keyword_attribute/init_SalesprojectProbability_percentValue.xml
new file mode 100644
index 0000000000..e7425b24dc
--- /dev/null
+++ b/others/db_changes/data_alias/data/AditoBasic/ab_keyword_attribute/init_SalesprojectProbability_percentValue.xml
@@ -0,0 +1,41 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <changeSet author="j.goderbauer" id="a2375d469a-1eda-4b40-802b-312323d9f2e7">
+        <insert tableName="AB_KEYWORD_ATTRIBUTE">
+            <column name="AB_KEYWORD_ATTRIBUTEID" value="2fabbd9a-89d2-49e3-b3aa-1dcbc77252c7"/>
+            <column name="NAME" value="percentValue"/>
+            <column name="TYPE" value="NUMBER_VALUE"/>
+            <column name="CONTAINER" value="SalesprojectProbability"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ATTRIBUTERELATION">
+            <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="8b719177-b9a1-44f8-bfba-34b678d84daa"/>
+            <column name="AB_KEYWORD_ATTRIBUTE_ID" value="2fabbd9a-89d2-49e3-b3aa-1dcbc77252c7"/>
+            <column name="AB_KEYWORD_ENTRY_ID" value="ab44bd2c-dffa-4731-8a24-fad31f069c46"/>
+            <column name="NUMBER_VALUE" valueNumeric="0"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ATTRIBUTERELATION">
+            <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="1a233346-a284-49a8-ac51-c3a214474e88"/>
+            <column name="AB_KEYWORD_ATTRIBUTE_ID" value="2fabbd9a-89d2-49e3-b3aa-1dcbc77252c7"/>
+            <column name="AB_KEYWORD_ENTRY_ID" value="e59169d3-c0d9-4718-b8b6-e315857948a0"/>
+            <column name="NUMBER_VALUE" valueNumeric="25"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ATTRIBUTERELATION">
+            <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="2d8b8da4-1241-4094-abf5-54d8cacadcaf"/>
+            <column name="AB_KEYWORD_ATTRIBUTE_ID" value="2fabbd9a-89d2-49e3-b3aa-1dcbc77252c7"/>
+            <column name="AB_KEYWORD_ENTRY_ID" value="415f1cf0-8c5b-4b6e-9900-0d0d6d72381c"/>
+            <column name="NUMBER_VALUE" valueNumeric="50"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ATTRIBUTERELATION">
+            <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="d02adcf4-fdc0-4614-ad44-88fa9de77a37"/>
+            <column name="AB_KEYWORD_ATTRIBUTE_ID" value="2fabbd9a-89d2-49e3-b3aa-1dcbc77252c7"/>
+            <column name="AB_KEYWORD_ENTRY_ID" value="6182cc48-df2b-4ba9-893a-bcedfd0e1e4b"/>
+            <column name="NUMBER_VALUE" valueNumeric="75"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ATTRIBUTERELATION">
+            <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="f25f0406-998b-4b29-9432-4dafa378f1eb"/>
+            <column name="AB_KEYWORD_ATTRIBUTE_ID" value="2fabbd9a-89d2-49e3-b3aa-1dcbc77252c7"/>
+            <column name="AB_KEYWORD_ENTRY_ID" value="f5b601a5-451b-4ab6-9167-b95077e90c62"/>
+            <column name="NUMBER_VALUE" valueNumeric="100"/>
+        </insert>
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/others/db_changes/data_alias/data/AditoBasic/ab_keyword_attribute/init_SalesprojectProbability_points.xml b/others/db_changes/data_alias/data/AditoBasic/ab_keyword_attribute/init_SalesprojectProbability_points.xml
deleted file mode 100644
index 4f02637575..0000000000
--- a/others/db_changes/data_alias/data/AditoBasic/ab_keyword_attribute/init_SalesprojectProbability_points.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.1" encoding="UTF-8" standalone="no"?>
-<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
-    <changeSet author="j.goderbauer" id="a2375d469a-1eda-4b40-802b-312323d9f2e7">
-        <insert tableName="AB_KEYWORD_ATTRIBUTE">
-            <column name="AB_KEYWORD_ATTRIBUTEID" value="2fabbd9a-89d2-49e3-b3aa-1dcbc77252c7"/>
-            <column name="NAME" value="points"/>
-            <column name="TYPE" value="NUMBER_VALUE"/>
-            <column name="CONTAINER" value="SalesprojectProbability"/>
-        </insert>
-    </changeSet>
-</databaseChangeLog>
\ No newline at end of file
diff --git a/others/db_changes/data_alias/data/example_salesproject/SALESPROJECT_gfk.xml b/others/db_changes/data_alias/data/example_salesproject/SALESPROJECT_gfk.xml
index d179bd5681..f2451e2af2 100644
--- a/others/db_changes/data_alias/data/example_salesproject/SALESPROJECT_gfk.xml
+++ b/others/db_changes/data_alias/data/example_salesproject/SALESPROJECT_gfk.xml
@@ -1,4 +1,4 @@
-<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
 <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
 <changeSet author="j.hoermanns" id="76912d9-ced7-4626-a031-d7138dfc948e">
     <insert tableName="SALESPROJECT">
@@ -15,7 +15,7 @@
         <column name="ENDDATE" valueDate="2017-10-14T09:03:43"/>
         <column name="ESTIMATION" value="; 2; 4; 11; "/>
         <column name="ESTIMATIONVALUE" valueNumeric="2"/>
-        <column name="PROBABILITY" valueNumeric="30"/>
+        <column name="PROBABILITY" value="b981a107-7e20-42a6-baf4-3fc09a939cd7"/>
     </insert>
     <insert tableName="AB_OBJECTRELATION">
         <column name="AB_OBJECTRELATIONID" value="6dd516b2-7887-4a17-930a-d39607c8b626"/>
diff --git a/others/db_changes/data_alias/data/example_salesproject/SALESPROJECT_jkl.xml b/others/db_changes/data_alias/data/example_salesproject/SALESPROJECT_jkl.xml
index 6f5ae0997e..530eacad23 100644
--- a/others/db_changes/data_alias/data/example_salesproject/SALESPROJECT_jkl.xml
+++ b/others/db_changes/data_alias/data/example_salesproject/SALESPROJECT_jkl.xml
@@ -15,7 +15,7 @@
         <column name="ENDDATE" valueDate="2017-10-14T09:03:43"/>
         <column name="ESTIMATION" value="; 2; 4; 11; "/>
         <column name="ESTIMATIONVALUE" valueNumeric="2"/>
-        <column name="PROBABILITY" valueNumeric="30"/>
+        <column name="PROBABILITY" value="b981a107-7e20-42a6-baf4-3fc09a939cd7"/>
     </insert>
 
     <rollback>			
diff --git a/others/db_changes/data_alias/struct/AditoBasic/create_ab_keyword_attribute.xml b/others/db_changes/data_alias/struct/AditoBasic/create_ab_keyword_attribute.xml
index baffb14652..a39bf989d4 100644
--- a/others/db_changes/data_alias/struct/AditoBasic/create_ab_keyword_attribute.xml
+++ b/others/db_changes/data_alias/struct/AditoBasic/create_ab_keyword_attribute.xml
@@ -6,10 +6,10 @@
                 <constraints primaryKey="true" primaryKeyName="PK_AB_KEYWORD_ATTRIBUTEID"/>
             </column>
 
-            <column name="NAME" type="CHAR(36)">
+            <column name="NAME" type="VARCHAR(100)">
                 <constraints nullable="false"/>
             </column>
-            <column name="TYPE" type="NVARCHAR(100)">
+            <column name="TYPE" type="CHAR(36)">
                 <constraints nullable="false"/>
             </column>
             <column name="CONTAINER" type="VARCHAR(80)">
diff --git a/others/db_changes/data_alias/struct/create_salesproject.xml b/others/db_changes/data_alias/struct/create_salesproject.xml
index 6fc8e7ce27..1a18e81400 100644
--- a/others/db_changes/data_alias/struct/create_salesproject.xml
+++ b/others/db_changes/data_alias/struct/create_salesproject.xml
@@ -18,7 +18,7 @@
             <column name="ENDDATE" type="DATETIME"/>
             <column name="ESTIMATION" type="NVARCHAR(50)"/>
             <column name="ESTIMATIONVALUE" type="INTEGER"/>
-            <column name="PROBABILITY" type="INTEGER"/>
+            <column name="PROBABILITY" type="CHAR(36)"/>
 
             <column name="SALESPROJECTID" type="CHAR(36)">
                 <constraints primaryKey="true" primaryKeyName="PK_SALESPROJECT_SALESPROJECTID"/>
diff --git a/process/Keyword_lib/process.js b/process/Keyword_lib/process.js
index b043f2597c..4827e4fa1a 100644
--- a/process/Keyword_lib/process.js
+++ b/process/Keyword_lib/process.js
@@ -77,7 +77,7 @@ KeywordUtils.getResolvedTitleSqlPart = function(pContainerName, pDbFieldName, pL
 /**
  * returns a specific name (translated) - this is normally the view-value - of a given keyword;
  * <br/>if the key could not be found an empty string "" is returned 
- * @param {String} keywordType specifies the type of the keyword and therefore the list elements; e.g. "COUNTRY"
+ * @param {String} keywordContainer specifies the type of the keyword and therefore the list elements; e.g. "COUNTRY"
  * @param {String} key id value of the keyword where the view-value shall be searched
  * @return {String} representation of the translated name of the keyword-key
  * @example
@@ -87,13 +87,10 @@ KeywordUtils.getResolvedTitleSqlPart = function(pContainerName, pDbFieldName, pL
  *     result.string(vars.get("$field.SUBJECT") + " (" + LegacyKeywordUtils.getViewValue("ACTIVITY.MEDIUM", histMedium) + ")");
  * }
  */
-KeywordUtils.getViewValue = function(keywordType, key)
+KeywordUtils.getViewValue = function(keywordContainer, key)
 {
-    if (!$KeywordRegistry.get[keywordType])
-        return "";
-
     var sql = SqlCondition.begin()
-                          .andPrepare("AB_KEYWORD_ENTRY.CONTAINER", keywordType)
+                          .andPrepare("AB_KEYWORD_ENTRY.CONTAINER", keywordContainer)
                           .andPrepare("AB_KEYWORD_ENTRY.KEYID", key)
                           .buildSql("select AB_KEYWORD_ENTRY.TITLE from AB_KEYWORD_ENTRY");
     var originalTitle = db.cell(sql);
@@ -101,7 +98,55 @@ KeywordUtils.getViewValue = function(keywordType, key)
         return "";
     var translatedTitle = translate.text(originalTitle);
     return translatedTitle;
-}
+};
+
+/**
+ * collects possible and defined keyword-attributes per keyword entry and returns them
+ * 
+ * @param {String} pEntryId id that identifies the keyword-entry whoes attributes are collected
+ * @return {Object} key-value-pair of the keyword-attributes; contains all attribute-keys for the keywords-entries container; 
+ *                                  if there is no value set for a key the null-value is given
+ */
+KeywordUtils.getKeywordAttributeRelations = function (pEntryId)
+{
+    var sql = SqlCondition.begin()
+        .andPrepare("AB_KEYWORD_ENTRY.AB_KEYWORD_ENTRYID", pEntryId)
+        .buildSql("select AB_KEYWORD_ATTRIBUTE.NAME, AB_KEYWORD_ATTRIBUTE.TYPE, \n\
+                AB_KEYWORD_ATTRIBUTERELATION.CHAR_VALUE, AB_KEYWORD_ATTRIBUTERELATION.NUMBER_VALUE, AB_KEYWORD_ATTRIBUTERELATION.BOOL_VALUE \n\
+                from AB_KEYWORD_ENTRY \n\
+                left join AB_KEYWORD_ATTRIBUTE on (AB_KEYWORD_ATTRIBUTE.CONTAINER = AB_KEYWORD_ENTRY.CONTAINER) \n\
+                left join AB_KEYWORD_ATTRIBUTERELATION \n\
+                    on (AB_KEYWORD_ATTRIBUTERELATION.AB_KEYWORD_ATTRIBUTE_ID = AB_KEYWORD_ATTRIBUTE.AB_KEYWORD_ATTRIBUTEID\n\
+                        and AB_KEYWORD_ATTRIBUTERELATION.AB_KEYWORD_ENTRY_ID = AB_KEYWORD_ENTRY.AB_KEYWORD_ENTRYID)");
+
+    var data = db.table(sql);
+    var res = {};
+    var name, type, charVal, numVal, boolVal;
+    
+    for (var i = 0, l = data.length; i < l; i++)
+    {
+        [name, type, charVal, numVal, boolVal] = data[i];
+        name = name.trim();
+        type = type.trim();
+        var parsedValue = null;
+        switch(type)
+        {
+            case "NUMBER_VALUE":
+                parsedValue = numVal == "" ? null : Number(numVal);
+                break;
+            case "BOOL_VALUE":
+                parsedValue = boolVal == "" ? null : (boolVal == "1");
+                break;
+            case "CHAR_VALUE":
+                parsedValue = charVal == "" ? null : charVal;
+                break;
+        }
+
+        res[name] = parsedValue;
+    }
+    return res;
+};
+
 
 /**
 * provides a distinctive list of all keyword-container-names in the system
@@ -347,15 +392,6 @@ function LegacyKeywordUtils(){}
                      })
                 ]);
                 break;
-            case "SALESPROJECT.PROBABILITY":
-                valueContainer = _createKeywordEntriesContainer([
-                     _createKeywordEntry("1", translate.text("0 %", locale), null, {percentValue: 0})
-                    ,_createKeywordEntry("2", translate.text("25 %", locale), null, {percentValue: 25})
-                    ,_createKeywordEntry("3", translate.text("50 %", locale), null, {percentValue: 50})
-                    ,_createKeywordEntry("4", translate.text("75 %", locale), null, {percentValue: 75})
-                    ,_createKeywordEntry("5", translate.text("100 %", locale), null, {percentValue: 100})
-                ]);
-                break;
             case "CLASS.BRANCHE":
                 valueContainer = _createKeywordEntriesContainer([
                      _createKeywordEntry("1", translate.text("Industry 1", locale), null, {points: 50})
-- 
GitLab