From 9ded24abdf9fd999c134909e6f2e041653c0b3dd Mon Sep 17 00:00:00 2001
From: Johannes Hoermann <j.hoermann@adito.de>
Date: Fri, 1 Feb 2019 14:22:19 +0100
Subject: [PATCH] Object Relations in Pers und Org

---
 .../ObjectRelation_entity.aod                 | 28 +++++++++++++------
 .../object1_rowid.displayvalue/expression.js  |  4 +++
 .../object2_rowid.displayvalue/expression.js  |  4 +++
 entity/Org_entity/Org_entity.aod              | 20 +++++++++++++
 .../children/anyobjectrowid_param/code.js     |  4 +++
 .../children/anyobjecttype_param/code.js      |  4 +++
 entity/Pers_entity/Pers_entity.aod            |  7 +++--
 .../children/anyobjectrowid_param/code.js     |  4 ++-
 .../children/anyobjecttype_param/code.js      |  4 +++
 .../children/object1rowid_param/code.js       |  2 --
 .../ObjectRelationFilter_view.aod             | 10 ++++---
 .../ObjectRelationPreview_view.aod            |  4 +++
 neonView/OrgMain_view/OrgMain_view.aod        |  5 ++++
 .../data_alias/data/example_org/ORG_gfk.xml   | 11 +++++++-
 process/Context_lib/process.js                | 23 +++++++++++++++
 process/Sql_lib/process.js                    |  2 +-
 16 files changed, 115 insertions(+), 21 deletions(-)
 create mode 100644 entity/ObjectRelation_entity/recordcontainers/db/recordfieldmappings/object1_rowid.displayvalue/expression.js
 create mode 100644 entity/ObjectRelation_entity/recordcontainers/db/recordfieldmappings/object2_rowid.displayvalue/expression.js
 create mode 100644 entity/Org_entity/entityfields/objectrelation_dfo/children/anyobjectrowid_param/code.js
 create mode 100644 entity/Org_entity/entityfields/objectrelation_dfo/children/anyobjecttype_param/code.js
 create mode 100644 entity/Pers_entity/entityfields/objectrelation_dfo/children/anyobjecttype_param/code.js
 delete mode 100644 entity/Pers_entity/entityfields/objectrelation_dfo/children/object1rowid_param/code.js

diff --git a/entity/ObjectRelation_entity/ObjectRelation_entity.aod b/entity/ObjectRelation_entity/ObjectRelation_entity.aod
index e242ddcd607..33b356f0587 100644
--- a/entity/ObjectRelation_entity/ObjectRelation_entity.aod
+++ b/entity/ObjectRelation_entity/ObjectRelation_entity.aod
@@ -202,6 +202,20 @@
       <name>ByAnyObject_dfi</name>
       <fieldType>DEPENDENCY_IN</fieldType>
       <recordContainer>db</recordContainer>
+      <dependencies>
+        <entityDependency>
+          <name>744259f7-3b08-4147-8376-3311b7a35712</name>
+          <entityName>Pers_entity</entityName>
+          <fieldName>ObjectRelation_dfo</fieldName>
+          <isOutgoing v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>38acc24a-716c-4c58-9e6f-9d3ccca0ab43</name>
+          <entityName>Org_entity</entityName>
+          <fieldName>ObjectRelation_dfo</fieldName>
+          <isOutgoing v="false" />
+        </entityDependency>
+      </dependencies>
       <children>
         <entityParameter>
           <name>Object1Rowid_param</name>
@@ -233,14 +247,6 @@
       <name>test_dfi</name>
       <fieldType>DEPENDENCY_IN</fieldType>
       <recordContainer>db</recordContainer>
-      <dependencies>
-        <entityDependency>
-          <name>b36f00d5-6840-464e-9dba-41ef8f3b25bc</name>
-          <entityName>Pers_entity</entityName>
-          <fieldName>ObjectRelation_dfo</fieldName>
-          <isOutgoing v="false" />
-        </entityDependency>
-      </dependencies>
     </entityIncomingField>
   </entityFields>
   <recordContainers>
@@ -297,7 +303,11 @@
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>OBJECT2_ROWID.displayValue</name>
-          <recordfield>AB_OBJECTRELATION.OBJECT2_TYPE</recordfield>
+          <expression>%aditoprj%/entity/ObjectRelation_entity/recordcontainers/db/recordfieldmappings/object2_rowid.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>OBJECT1_ROWID.displayValue</name>
+          <expression>%aditoprj%/entity/ObjectRelation_entity/recordcontainers/db/recordfieldmappings/object1_rowid.displayvalue/expression.js</expression>
         </dbRecordFieldMapping>
       </recordFieldMappings>
     </dbRecordContainer>
diff --git a/entity/ObjectRelation_entity/recordcontainers/db/recordfieldmappings/object1_rowid.displayvalue/expression.js b/entity/ObjectRelation_entity/recordcontainers/db/recordfieldmappings/object1_rowid.displayvalue/expression.js
new file mode 100644
index 00000000000..3333669e4c6
--- /dev/null
+++ b/entity/ObjectRelation_entity/recordcontainers/db/recordfieldmappings/object1_rowid.displayvalue/expression.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("Context_lib");
+
+result.string(ContextUtils.getNameSubselectSql("OBJECT1_TYPE", "OBJECT1_ROWID"))
\ No newline at end of file
diff --git a/entity/ObjectRelation_entity/recordcontainers/db/recordfieldmappings/object2_rowid.displayvalue/expression.js b/entity/ObjectRelation_entity/recordcontainers/db/recordfieldmappings/object2_rowid.displayvalue/expression.js
new file mode 100644
index 00000000000..bb0a5084254
--- /dev/null
+++ b/entity/ObjectRelation_entity/recordcontainers/db/recordfieldmappings/object2_rowid.displayvalue/expression.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("Context_lib");
+
+result.string(ContextUtils.getNameSubselectSql("OBJECT2_TYPE", "OBJECT2_ROWID"))
\ No newline at end of file
diff --git a/entity/Org_entity/Org_entity.aod b/entity/Org_entity/Org_entity.aod
index 97d9735f432..98c17e0c4be 100644
--- a/entity/Org_entity/Org_entity.aod
+++ b/entity/Org_entity/Org_entity.aod
@@ -490,6 +490,26 @@
         </entityParameter>
       </children>
     </entityOutgoingField>
+    <entityOutgoingField>
+      <name>ObjectRelation_dfo</name>
+      <title>Relations</title>
+      <fieldType>DEPENDENCY_OUT</fieldType>
+      <dependency>
+        <name>dependency</name>
+        <entityName>ObjectRelation_entity</entityName>
+        <fieldName>ByAnyObject_dfi</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>AnyObjectRowid_param</name>
+          <code>%aditoprj%/entity/Org_entity/entityfields/objectrelation_dfo/children/anyobjectrowid_param/code.js</code>
+        </entityParameter>
+        <entityParameter>
+          <name>AnyObjectType_param</name>
+          <code>%aditoprj%/entity/Org_entity/entityfields/objectrelation_dfo/children/anyobjecttype_param/code.js</code>
+        </entityParameter>
+      </children>
+    </entityOutgoingField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
diff --git a/entity/Org_entity/entityfields/objectrelation_dfo/children/anyobjectrowid_param/code.js b/entity/Org_entity/entityfields/objectrelation_dfo/children/anyobjectrowid_param/code.js
new file mode 100644
index 00000000000..c6f4ef17387
--- /dev/null
+++ b/entity/Org_entity/entityfields/objectrelation_dfo/children/anyobjectrowid_param/code.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.ORGID"))
\ No newline at end of file
diff --git a/entity/Org_entity/entityfields/objectrelation_dfo/children/anyobjecttype_param/code.js b/entity/Org_entity/entityfields/objectrelation_dfo/children/anyobjecttype_param/code.js
new file mode 100644
index 00000000000..efc405cb8b7
--- /dev/null
+++ b/entity/Org_entity/entityfields/objectrelation_dfo/children/anyobjecttype_param/code.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("Context_lib");
+
+result.string(ContextUtils.getCurrentContextId())
\ No newline at end of file
diff --git a/entity/Pers_entity/Pers_entity.aod b/entity/Pers_entity/Pers_entity.aod
index 69c34c67ede..834f62928bf 100644
--- a/entity/Pers_entity/Pers_entity.aod
+++ b/entity/Pers_entity/Pers_entity.aod
@@ -508,16 +508,17 @@
       <dependency>
         <name>dependency</name>
         <entityName>ObjectRelation_entity</entityName>
-        <fieldName>test_dfi</fieldName>
+        <fieldName>ByAnyObject_dfi</fieldName>
       </dependency>
       <children>
         <entityParameter>
           <name>AnyObjectRowid_param</name>
+          <title></title>
           <code>%aditoprj%/entity/Pers_entity/entityfields/objectrelation_dfo/children/anyobjectrowid_param/code.js</code>
         </entityParameter>
         <entityParameter>
-          <name>Object1Rowid_param</name>
-          <code>%aditoprj%/entity/Pers_entity/entityfields/objectrelation_dfo/children/object1rowid_param/code.js</code>
+          <name>AnyObjectType_param</name>
+          <code>%aditoprj%/entity/Pers_entity/entityfields/objectrelation_dfo/children/anyobjecttype_param/code.js</code>
         </entityParameter>
       </children>
     </entityOutgoingField>
diff --git a/entity/Pers_entity/entityfields/objectrelation_dfo/children/anyobjectrowid_param/code.js b/entity/Pers_entity/entityfields/objectrelation_dfo/children/anyobjectrowid_param/code.js
index 53156731f81..cf4c12ddfb0 100644
--- a/entity/Pers_entity/entityfields/objectrelation_dfo/children/anyobjectrowid_param/code.js
+++ b/entity/Pers_entity/entityfields/objectrelation_dfo/children/anyobjectrowid_param/code.js
@@ -1,2 +1,4 @@
+import("system.vars");
 import("system.result");
-result.string("anyid")
\ No newline at end of file
+
+result.string(vars.get("$field.PERSID"))
\ No newline at end of file
diff --git a/entity/Pers_entity/entityfields/objectrelation_dfo/children/anyobjecttype_param/code.js b/entity/Pers_entity/entityfields/objectrelation_dfo/children/anyobjecttype_param/code.js
new file mode 100644
index 00000000000..efc405cb8b7
--- /dev/null
+++ b/entity/Pers_entity/entityfields/objectrelation_dfo/children/anyobjecttype_param/code.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("Context_lib");
+
+result.string(ContextUtils.getCurrentContextId())
\ No newline at end of file
diff --git a/entity/Pers_entity/entityfields/objectrelation_dfo/children/object1rowid_param/code.js b/entity/Pers_entity/entityfields/objectrelation_dfo/children/object1rowid_param/code.js
deleted file mode 100644
index 6a409c5df04..00000000000
--- a/entity/Pers_entity/entityfields/objectrelation_dfo/children/object1rowid_param/code.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import("system.result");
-result.string("1 id")
\ No newline at end of file
diff --git a/neonView/ObjectRelationFilter_view/ObjectRelationFilter_view.aod b/neonView/ObjectRelationFilter_view/ObjectRelationFilter_view.aod
index 7f1be075c72..167f255e110 100644
--- a/neonView/ObjectRelationFilter_view/ObjectRelationFilter_view.aod
+++ b/neonView/ObjectRelationFilter_view/ObjectRelationFilter_view.aod
@@ -14,6 +14,10 @@
       <entityField>#ENTITY</entityField>
       <title>Object Relation</title>
       <columns>
+        <neonTableColumn>
+          <name>2567cbb7-0228-4103-b153-e5f623f46382</name>
+          <entityField>OBJECT1_TYPE</entityField>
+        </neonTableColumn>
         <neonTableColumn>
           <name>4fb01378-e6c6-4fb5-8b3b-8a90b3550105</name>
           <entityField>OBJECT1_ROWID</entityField>
@@ -21,10 +25,8 @@
           <expandRatio v="100" />
         </neonTableColumn>
         <neonTableColumn>
-          <name>c5eb8814-31f0-437d-aea8-c72301b00deb</name>
-          <entityField>OBJECT1_TYPE</entityField>
-          <width v="75" />
-          <expandRatio v="100" />
+          <name>158130c9-8aa3-4ad6-a608-0271c70178bc</name>
+          <entityField>OBJECT2_TYPE</entityField>
         </neonTableColumn>
         <neonTableColumn>
           <name>4495cf75-82d1-4ad3-9a48-86ad44eadc37</name>
diff --git a/neonView/ObjectRelationPreview_view/ObjectRelationPreview_view.aod b/neonView/ObjectRelationPreview_view/ObjectRelationPreview_view.aod
index 5da23f94155..2d823012ed6 100644
--- a/neonView/ObjectRelationPreview_view/ObjectRelationPreview_view.aod
+++ b/neonView/ObjectRelationPreview_view/ObjectRelationPreview_view.aod
@@ -13,6 +13,10 @@
       <entityField>#ENTITY</entityField>
       <title>Object</title>
       <fields>
+        <entityFieldLink>
+          <name>8b21eea2-b6ec-492f-9bfe-4937b61ba1ef</name>
+          <entityField>OBJECT1_ROWID</entityField>
+        </entityFieldLink>
         <entityFieldLink>
           <name>eabe1737-7a31-4181-8c32-bda6a9f7d7e9</name>
           <entityField>OBJECT2_ROWID</entityField>
diff --git a/neonView/OrgMain_view/OrgMain_view.aod b/neonView/OrgMain_view/OrgMain_view.aod
index 8c01252daf7..6b93cb0c7b3 100644
--- a/neonView/OrgMain_view/OrgMain_view.aod
+++ b/neonView/OrgMain_view/OrgMain_view.aod
@@ -45,5 +45,10 @@
       <entityField>OrgAttr_dfo</entityField>
       <view>AttributeRelationTree_view</view>
     </neonViewReference>
+    <neonViewReference>
+      <name>ee7395b9-b787-4662-9021-f6e2d486bd16</name>
+      <entityField>ObjectRelation_dfo</entityField>
+      <view>ObjectRelationFilter_view</view>
+    </neonViewReference>
   </children>
 </neonView>
diff --git a/others/db_changes/data_alias/data/example_org/ORG_gfk.xml b/others/db_changes/data_alias/data/example_org/ORG_gfk.xml
index 8e7e3da1fa4..f6aa3443053 100644
--- a/others/db_changes/data_alias/data/example_org/ORG_gfk.xml
+++ b/others/db_changes/data_alias/data/example_org/ORG_gfk.xml
@@ -10,7 +10,16 @@
             <column name="TYPE" valueNumeric="0"/>
             <column name="PRICE_POLITICS" valueNumeric="1"/>    
             <column name="STRENGTH" valueNumeric="1"/>    
-            <column name="WEAKNESS" valueNumeric="1"/>  
+            <column name="WEAKNESS" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_OBJECTRELATION">
+            <column name="AB_OBJECTRELATIONID" value="102b5d75-304b-41f4-9426-ba13d4dce1c3"/>
+            <column name="USER_NEW" value="admin"/>
+            <column name="DATE_NEW" valueDate="2018-06-13T09:03:43"/>
+            <column name="OBJECT1_TYPE" value="Org_context"/>
+            <column name="OBJECT1_ROWID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
+            <column name="OBJECT2_TYPE" value="Pers_context"/>
+            <column name="OBJECT2_ROWID" value="1a67eaa7-21da-4a18-97ab-755ac5cb74f7"/>
         </insert>
         <insert tableName="RELATION">
             <column name="RELATIONID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
diff --git a/process/Context_lib/process.js b/process/Context_lib/process.js
index 0e8909df452..34ae91ccc4b 100644
--- a/process/Context_lib/process.js
+++ b/process/Context_lib/process.js
@@ -1,4 +1,6 @@
+import("system.SQLTYPES");
 import("system.vars");
+import("Sql_lib");
 
 /**
  * Methods to manage contexts.
@@ -39,4 +41,25 @@ ContextUtils.getContextName = function(pContextId)
 {
     // TODO: currently the Id is the context name. This will be changed maybe
     return pContextId;
+}
+
+/**
+ * TODO: !!!temporary function until you can get fields from another Entity!!!
+ */
+ContextUtils.getNameSubselectSql = function(pContextIdDbField, pRowIdDbField)
+{
+    var select = "(case " + pContextIdDbField + " ";
+    var maskingUtils = new SqlMaskingUtils();
+    
+    select += "when 'Org_context' then (select \"NAME\" from ORG where ORG.ORGID = " + pRowIdDbField + ") ";
+    select += "when 'Pers_context' then (select " + maskingUtils.concat(["FIRSTNAME", "LASTNAME"]) + " from PERS where PERS.PERSID = " + pRowIdDbField + ") ";
+    select += "when 'Activity_context' then (select SUBJECT from ACTIVITY where ACTIVITY.ACTIVITYID = " + pRowIdDbField + ") ";
+    select += "when 'Salesproject_context' then (select " + maskingUtils.concat([maskingUtils.cast("PROJECTCODE", SQLTYPES.VARCHAR, 10), "':'", "PROJECTTITLE"]) + " from SALESPROJECT where SALESPROJECT.SALESPROJECTID = " + pRowIdDbField + ") ";
+    // TODO: keywords sind noch nicht in der DB somit gibt es nichts ähnliches zu getKeySQL.
+    //select += "when 'Contract_context' then (select " + maskingUtils.concat([SqlMaskingUtils.cast("CONTRACTCODE", "varchar", 10), getKeySQL("CONTRACTTYPE", "CONTRACTTYPE" )]) + " from CONTRACT where CONTRACT.CONTRACTID = " + pRowIdDbField + ") ";
+    select += "when 'Contract_context' then (select " + maskingUtils.cast("CONTRACTCODE", SQLTYPES.VARCHAR, 10) + " from CONTRACT where CONTRACT.CONTRACTID = " + pRowIdDbField + ") ";
+    select += "else 'Not defined in ContextUtils.getNameSql()!'";
+    select += "end)";
+    
+    return select;
 }
\ No newline at end of file
diff --git a/process/Sql_lib/process.js b/process/Sql_lib/process.js
index a0c6a5adc3e..f0790c7a73e 100644
--- a/process/Sql_lib/process.js
+++ b/process/Sql_lib/process.js
@@ -655,7 +655,7 @@ SqlMaskingUtils.prototype.cast = function (field, targetDatatype, targetLength)
     }
 
     if (sqlDataType == undefined) {
-        throw new Error("sqlDataType");//TODO: add usefull message
+        throw new Error("sqlDataType is undefined");//TODO: add usefull message
     }
 
     if(targetLength == undefined)
-- 
GitLab