From 68f4ffd86359f104bb566b5a0fe0250627077d84 Mon Sep 17 00:00:00 2001
From: Nico Bugl <n.bugl@adito.de>
Date: Fri, 26 Apr 2019 14:39:35 +0200
Subject: [PATCH] [Projekt: Entwicklung - Neon][TicketNr.:
 1036650][Modularisierung der Module aus dem Vertriebsprojekt] - Forecast
 fertig umgebaut - Bewertung/Klassifizierung kann nicht umgebaut werden weil
 geht noch nicht im Basic - Offer fertig umgebaut - Zeiterfassung bzw
 Timetracking ist bereits umgebaut

---
 .../Data_alias/basic/2019.2/changelog.xml     |   6 +-
 .../Data_alias/basic/2019.2/update_Offer.xml  |  20 +
 .../update_Salesproject_Classification.xml    |  21 +
 .../2019.2/update_Salesproject_Forecast.xml   |  23 +
 aliasDefinition/Data_alias/Data_alias.aod     | 483 ++++++++++--------
 .../Classification_entity.aod}                |  10 +-
 .../contentProcess.js                         |   0
 .../entityfields/points/valueProcess.js       |   0
 .../children/classid_param/valueProcess.js    |   0
 .../salesprojectid_param/valueProcess.js      |   0
 .../recordcontainers/jdito/contentProcess.js  |   0
 entity/Context_entity/Context_entity.aod      |   6 +
 .../exclusivecontexts_param/valueProcess.js   |   2 +-
 .../exclusivecontexts_param/valueProcess.js   |   2 +-
 entity/Forecast_entity/Forecast_entity.aod    | 179 +++++++
 .../conditionProcess.js                       |   2 +-
 .../entityfields/date_edit/valueProcess.js    |   0
 .../entityfields/date_new/valueProcess.js     |   0
 .../entityfields/forecastid}/valueProcess.js  |   0
 .../groupcode/displayValueProcess.js          |  12 +-
 .../containername_param/valueProcess.js       |   0
 .../object_rowid/displayValueProcess.js       |  11 +
 .../object_rowid/linkedContextProcess.js      |   5 +
 .../entityfields/object_rowid/valueProcess.js |   5 +
 .../object_type/displayValueProcess.js        |  10 +
 .../entityfields/object_type/valueProcess.js  |   5 +
 .../children/objecttype_param/valueProcess.js |   4 +
 .../salesprojectforecastdatestart/code.js     |   0
 .../entityfields/user_edit/valueProcess.js    |   0
 .../entityfields/user_new/valueProcess.js     |   0
 .../entityfields/volume/titleProcess.js       |   0
 .../recordcontainers/db/conditionProcess.js   |  12 +
 .../groupcode.displayvalue/expression.js      |   2 +-
 .../object_rowid.displayvalue/expression.js   |   4 +
 .../KeywordEntry_entity.aod                   |   2 +-
 entity/Object_entity/Object_entity.aod        |  12 +
 entity/Offer_entity/Offer_entity.aod          | 215 +++++---
 entity/Offer_entity/conditionProcess.js       |   2 +-
 .../presetlinks_param/valueProcess.js         |   4 +-
 .../entityfields/copyoffer/onActionProcess.js |   2 +-
 .../newactivity/onActionProcess.js            |   4 +-
 .../newofferversion/onActionProcess.js        |   2 +-
 .../entityfields/neworder/onActionProcess.js  |   2 +-
 .../entityfields/newtask/onActionProcess.js   |   4 +-
 .../object_rowid/displayValueProcess.js       |  11 +
 .../object_rowid/linkedContextProcess.js      |   5 +
 .../object_rowid/mandatoryProcess.js          |   0
 .../entityfields/object_rowid/stateProcess.js |   0
 .../entityfields/object_rowid/valueProcess.js |   5 +
 .../object_type/displayValueProcess.js        |  10 +
 .../entityfields/object_type/valueProcess.js  |   5 +
 .../salesproject_id/displayValueProcess.js    |   5 -
 .../salesproject_id/mandatoryProcess.js       |   9 -
 .../salesproject_id/stateProcess.js           |  17 -
 .../salesproject_id/valueProcess.js           |   7 -
 .../children/contactid_param/valueProcess.js  |   5 -
 .../presetlinks_param/valueProcess.js         |   4 +-
 .../recordcontainers/db/conditionProcess.js   |   3 +-
 .../recordcontainers/db/fromClauseProcess.js  |   2 +-
 .../object_rowid.displayvalue/expression.js   |   4 +
 ...SalesprojectClassificationEntry_entity.aod |   2 +-
 .../SalesprojectForecast_entity.aod           | 137 -----
 .../salesproject_id/valueProcess.js           |  10 -
 .../recordcontainers/db/conditionProcess.js   |   9 -
 .../Salesproject_entity.aod                   |  38 +-
 .../objectrowid_param/valueProcess.js         |   6 +
 .../children/objecttype_param/valueProcess.js |   3 +
 .../objectrowid_param/valueProcess.js         |   4 +
 .../children/objecttype_param/valueProcess.js |   4 +
 .../valueProcess.js                           |   0
 .../salesprojectid_param/valueProcess.js      |   4 -
 .../recordcontainers/db/onDBDelete.js         |   2 -
 .../recordcontainers/db/onDBUpdate.js         |   4 +-
 .../Classification.aod}                       |  12 +-
 .../Forecast.aod}                             |  16 +-
 .../ClassificationFilter_view.aod}            |   2 +-
 .../ClassificationPreview_view.aod}           |   2 +-
 .../ForecastEdit_view.aod}                    |   2 +-
 .../ForecastFilter_view.aod}                  |  10 +-
 .../ForecastPreview_view.aod}                 |   2 +-
 .../SalesprojectMain_view.aod                 |   6 +-
 .../_____PREFERENCES_PROJECT.aod              |   2 +-
 82 files changed, 878 insertions(+), 564 deletions(-)
 create mode 100644 .liquibase/Data_alias/basic/2019.2/update_Offer.xml
 create mode 100644 .liquibase/Data_alias/basic/2019.2/update_Salesproject_Classification.xml
 create mode 100644 .liquibase/Data_alias/basic/2019.2/update_Salesproject_Forecast.xml
 rename entity/{SalesprojectClassification_entity/SalesprojectClassification_entity.aod => Classification_entity/Classification_entity.aod} (79%)
 rename entity/{SalesprojectClassification_entity => Classification_entity}/contentProcess.js (100%)
 rename entity/{SalesprojectClassification_entity => Classification_entity}/entityfields/points/valueProcess.js (100%)
 rename entity/{SalesprojectClassification_entity => Classification_entity}/entityfields/salesprojectclassificationentries/children/classid_param/valueProcess.js (100%)
 rename entity/{SalesprojectClassification_entity => Classification_entity}/entityfields/salesprojectclassificationentries/children/salesprojectid_param/valueProcess.js (100%)
 rename entity/{SalesprojectClassification_entity => Classification_entity}/recordcontainers/jdito/contentProcess.js (100%)
 create mode 100644 entity/Forecast_entity/Forecast_entity.aod
 rename entity/{SalesprojectForecast_entity => Forecast_entity}/conditionProcess.js (70%)
 rename entity/{SalesprojectForecast_entity => Forecast_entity}/entityfields/date_edit/valueProcess.js (100%)
 rename entity/{SalesprojectForecast_entity => Forecast_entity}/entityfields/date_new/valueProcess.js (100%)
 rename entity/{SalesprojectForecast_entity/entityfields/salesproject_forecastid => Forecast_entity/entityfields/forecastid}/valueProcess.js (100%)
 rename entity/{SalesprojectForecast_entity => Forecast_entity}/entityfields/groupcode/displayValueProcess.js (97%)
 rename entity/{SalesprojectForecast_entity => Forecast_entity}/entityfields/keywordproductgroupcodes/children/containername_param/valueProcess.js (100%)
 create mode 100644 entity/Forecast_entity/entityfields/object_rowid/displayValueProcess.js
 create mode 100644 entity/Forecast_entity/entityfields/object_rowid/linkedContextProcess.js
 create mode 100644 entity/Forecast_entity/entityfields/object_rowid/valueProcess.js
 create mode 100644 entity/Forecast_entity/entityfields/object_type/displayValueProcess.js
 create mode 100644 entity/Forecast_entity/entityfields/object_type/valueProcess.js
 create mode 100644 entity/Forecast_entity/entityfields/objects/children/objecttype_param/valueProcess.js
 rename entity/{SalesprojectForecast_entity => Forecast_entity}/entityfields/salesprojectforecastdatestart/code.js (100%)
 rename entity/{SalesprojectForecast_entity => Forecast_entity}/entityfields/user_edit/valueProcess.js (100%)
 rename entity/{SalesprojectForecast_entity => Forecast_entity}/entityfields/user_new/valueProcess.js (100%)
 rename entity/{SalesprojectForecast_entity => Forecast_entity}/entityfields/volume/titleProcess.js (100%)
 create mode 100644 entity/Forecast_entity/recordcontainers/db/conditionProcess.js
 rename entity/{SalesprojectForecast_entity => Forecast_entity}/recordcontainers/db/recordfieldmappings/groupcode.displayvalue/expression.js (74%)
 create mode 100644 entity/Forecast_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js
 create mode 100644 entity/Offer_entity/entityfields/object_rowid/displayValueProcess.js
 create mode 100644 entity/Offer_entity/entityfields/object_rowid/linkedContextProcess.js
 create mode 100644 entity/Offer_entity/entityfields/object_rowid/mandatoryProcess.js
 create mode 100644 entity/Offer_entity/entityfields/object_rowid/stateProcess.js
 create mode 100644 entity/Offer_entity/entityfields/object_rowid/valueProcess.js
 create mode 100644 entity/Offer_entity/entityfields/object_type/displayValueProcess.js
 create mode 100644 entity/Offer_entity/entityfields/object_type/valueProcess.js
 delete mode 100644 entity/Offer_entity/entityfields/salesproject_id/displayValueProcess.js
 delete mode 100644 entity/Offer_entity/entityfields/salesproject_id/mandatoryProcess.js
 delete mode 100644 entity/Offer_entity/entityfields/salesproject_id/stateProcess.js
 delete mode 100644 entity/Offer_entity/entityfields/salesproject_id/valueProcess.js
 delete mode 100644 entity/Offer_entity/entityfields/salesprojects/children/contactid_param/valueProcess.js
 create mode 100644 entity/Offer_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js
 delete mode 100644 entity/SalesprojectForecast_entity/SalesprojectForecast_entity.aod
 delete mode 100644 entity/SalesprojectForecast_entity/entityfields/salesproject_id/valueProcess.js
 delete mode 100644 entity/SalesprojectForecast_entity/recordcontainers/db/conditionProcess.js
 create mode 100644 entity/Salesproject_entity/entityfields/forecasts/children/objectrowid_param/valueProcess.js
 create mode 100644 entity/Salesproject_entity/entityfields/forecasts/children/objecttype_param/valueProcess.js
 create mode 100644 entity/Salesproject_entity/entityfields/offers/children/objectrowid_param/valueProcess.js
 create mode 100644 entity/Salesproject_entity/entityfields/offers/children/objecttype_param/valueProcess.js
 rename entity/Salesproject_entity/entityfields/salesprojectforecasts/children/{salesprojectid_param => forecastid_param}/valueProcess.js (100%)
 delete mode 100644 entity/Salesproject_entity/entityfields/salesprojectoffers/children/salesprojectid_param/valueProcess.js
 rename neonContext/{SalesprojectClassification/SalesprojectClassification.aod => Classification/Classification.aod} (62%)
 rename neonContext/{SalesprojectForecast/SalesprojectForecast.aod => Forecast/Forecast.aod} (62%)
 rename neonView/{SalesprojectClassificationFilter_view/SalesprojectClassificationFilter_view.aod => ClassificationFilter_view/ClassificationFilter_view.aod} (94%)
 rename neonView/{SalesprojectClassificationPreview_view/SalesprojectClassificationPreview_view.aod => ClassificationPreview_view/ClassificationPreview_view.aod} (95%)
 rename neonView/{SalesprojectForecastEdit_view/SalesprojectForecastEdit_view.aod => ForecastEdit_view/ForecastEdit_view.aod} (96%)
 rename neonView/{SalesprojectForecastFilter_view/SalesprojectForecastFilter_view.aod => ForecastFilter_view/ForecastFilter_view.aod} (77%)
 rename neonView/{SalesprojectForecastPreview_view/SalesprojectForecastPreview_view.aod => ForecastPreview_view/ForecastPreview_view.aod} (96%)

diff --git a/.liquibase/Data_alias/basic/2019.2/changelog.xml b/.liquibase/Data_alias/basic/2019.2/changelog.xml
index 24b2bf0d92..1d6af6ea89 100644
--- a/.liquibase/Data_alias/basic/2019.2/changelog.xml
+++ b/.liquibase/Data_alias/basic/2019.2/changelog.xml
@@ -124,7 +124,11 @@
     <include relativeToChangelogFile="true" file="offer_add_date_editnew_user_editnew.xml"/>
     <include relativeToChangelogFile="true" file="attributerelation_add_date_editnew_user_editnew.xml"/>
     <include relativeToChangelogFile="true" file="communication_add_date_editnew_user_editnew.xml"/>
-
+    
+    <include relativeToChangelogFile="true" file="update_Salesproject_Forecast.xml"/>
+    <include relativeToChangelogFile="true" file="update_Salesproject_Classification.xml"/>
+    <include relativeToChangelogFile="true" file="update_Offer.xml"/>
+    
     <include relativeToChangelogFile="true" file="indicesRefactor/ContactManagement.xml"/>
     <include relativeToChangelogFile="true" file="indicesRefactor/Keyword.xml"/>
     <include relativeToChangelogFile="true" file="indicesRefactor/Activity.xml"/>
diff --git a/.liquibase/Data_alias/basic/2019.2/update_Offer.xml b/.liquibase/Data_alias/basic/2019.2/update_Offer.xml
new file mode 100644
index 0000000000..c513f47119
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2019.2/update_Offer.xml
@@ -0,0 +1,20 @@
+<?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="n.bugl" id="edd0e09f-830e-4cd3-acf6-ee0c2cd82d7a">  
+        
+        <addColumn tableName="OFFER">
+            <column name="OBJECT_TYPE" type="NVARCHAR(63)">
+            </column>
+        </addColumn>
+        <renameColumn newColumnName="OBJECT_ROWID" oldColumnName="SALESPROJECT_ID" tableName="OFFER"/>
+        <update tableName="OFFER">
+            <column name="OBJECT_TYPE" value="Salesproject" />
+            <where>OBJECT_ROWID = '0833465c-8851-4fbb-b7e3-8c1d73c903da' </where>
+        </update>
+        
+        <addNotNullConstraint
+            tableName="OFFER"
+            columnName="OBJECT_TYPE"/>
+        
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2019.2/update_Salesproject_Classification.xml b/.liquibase/Data_alias/basic/2019.2/update_Salesproject_Classification.xml
new file mode 100644
index 0000000000..0abcabb224
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2019.2/update_Salesproject_Classification.xml
@@ -0,0 +1,21 @@
+<?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="n.bugl" id="edd0e09f-830e-4cd3-acf6-ee0c2cd82d7a">  
+        
+        <addColumn tableName="SALESPROJECT_CLASSIFICATION">
+            <column name="OBJECT_TYPE" type="NVARCHAR(63)">
+            </column>
+        </addColumn>
+        <renameColumn newColumnName="OBJECT_ROWID" oldColumnName="SALESPROJECT_ID" tableName="SALESPROJECT_CLASSIFICATION"/>
+        <update tableName="SALESPROJECT_CLASSIFICATION">
+            <column name="OBJECT_TYPE" value="Salesproject" />
+            <where>OBJECT_ROWID = '0833465c-8851-4fbb-b7e3-8c1d73c903da' </where>
+        </update>
+        
+        <addNotNullConstraint
+            tableName="SALESPROJECT_CLASSIFICATION"
+            columnName="OBJECT_TYPE"/>
+        
+        <renameTable oldTableName="SALESPROJECT_CLASSIFICATION" newTableName="CLASSIFICATION"/>
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2019.2/update_Salesproject_Forecast.xml b/.liquibase/Data_alias/basic/2019.2/update_Salesproject_Forecast.xml
new file mode 100644
index 0000000000..7e7ee03202
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2019.2/update_Salesproject_Forecast.xml
@@ -0,0 +1,23 @@
+<?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="n.bugl" id="edd0e09f-830e-4cd3-acf6-ee0c2cd82d7a">  
+        
+        <addColumn tableName="SALESPROJECT_FORECAST">
+            <column name="OBJECT_TYPE" type="NVARCHAR(63)">
+            </column>
+        </addColumn>
+        <renameColumn newColumnName="OBJECT_ROWID" oldColumnName="SALESPROJECT_ID" tableName="SALESPROJECT_FORECAST"/>
+        <renameColumn newColumnName="FORECASTID" oldColumnName="SALESPROJECT_FORECASTID" tableName="SALESPROJECT_FORECAST"/>
+        <update tableName="SALESPROJECT_FORECAST">
+            <column name="OBJECT_TYPE" value="Salesproject" />
+            <where>OBJECT_ROWID = '0833465c-8851-4fbb-b7e3-8c1d73c903da' </where>
+        </update>
+        
+        <addNotNullConstraint
+            tableName="SALESPROJECT_FORECAST"
+            columnName="OBJECT_TYPE"/>
+        
+        <renameTable oldTableName="SALESPROJECT_FORECAST" newTableName="FORECAST"/>
+        
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod
index 0e2aa0a907..9b12d2f25b 100644
--- a/aliasDefinition/Data_alias/Data_alias.aod
+++ b/aliasDefinition/Data_alias/Data_alias.aod
@@ -2001,19 +2001,6 @@
                 <title></title>
                 <description></description>
               </entityFieldDb>
-              <entityFieldDb>
-                <name>SALESPROJECT_ID</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="1" />
-                <size v="36" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <title></title>
-                <description></description>
-              </entityFieldDb>
               <entityFieldDb>
                 <name>OFFERCODE</name>
                 <dbName></dbName>
@@ -2232,6 +2219,34 @@
                 <title></title>
                 <description></description>
               </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_ROWID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="63" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
             </entityFields>
           </entityDb>
           <entityDb>
@@ -2716,123 +2731,6 @@
               </entityFieldDb>
             </entityFields>
           </entityDb>
-          <entityDb>
-            <name>SALESPROJECT_FORECAST</name>
-            <dbName></dbName>
-            <idColumn>SALESPROJECT_FORECASTID</idColumn>
-            <idGeneratorType v="0" />
-            <idGeneratorInterval v="1" />
-            <title></title>
-            <description></description>
-            <auditSyncConfig>
-              <name>auditSyncConfig</name>
-              <auditMode v="0" />
-              <syncActive v="false" />
-              <syncComplete v="true" />
-              <syncDirection v="1" />
-              <syncIds></syncIds>
-            </auditSyncConfig>
-            <entityFields>
-              <entityFieldDb>
-                <name>SALESPROJECT_FORECASTID</name>
-                <dbName></dbName>
-                <primaryKey v="true" />
-                <columnType v="1" />
-                <size v="36" />
-                <scale v="0" />
-                <notNull v="true" />
-                <isUnique v="true" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>GROUPCODE</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="1" />
-                <size v="36" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>VOLUME</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="4" />
-                <size v="10" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>DATE_START</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="93" />
-                <size v="29" />
-                <scale v="9" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>INFO</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="2005" />
-                <size v="2147483647" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>SALESPROJECT_ID</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="1" />
-                <size v="36" />
-                <scale v="0" />
-                <notNull v="true" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>TYPE</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="12" />
-                <size v="10" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-            </entityFields>
-          </entityDb>
           <entityDb>
             <name>SALESPROJECT_COMPETITION</name>
             <dbName></dbName>
@@ -3053,95 +2951,6 @@
               </entityFieldDb>
             </entityFields>
           </entityDb>
-          <entityDb>
-            <name>SALESPROJECT_CLASSIFICATION</name>
-            <dbName></dbName>
-            <idColumn>SALESPROJECT_CLASSIFICATIONID</idColumn>
-            <idGeneratorType v="0" />
-            <idGeneratorInterval v="1" />
-            <title></title>
-            <description></description>
-            <auditSyncConfig>
-              <name>auditSyncConfig</name>
-              <auditMode v="0" />
-              <syncActive v="false" />
-              <syncComplete v="true" />
-              <syncDirection v="1" />
-              <syncIds></syncIds>
-            </auditSyncConfig>
-            <entityFields>
-              <entityFieldDb>
-                <name>SALESPROJECT_CLASSIFICATIONID</name>
-                <dbName></dbName>
-                <primaryKey v="true" />
-                <columnType v="1" />
-                <size v="36" />
-                <scale v="0" />
-                <notNull v="true" />
-                <isUnique v="true" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>CLASS</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="4" />
-                <size v="10" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>VALUE</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="4" />
-                <size v="10" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>SALESPROJECT_ID</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="1" />
-                <size v="36" />
-                <scale v="0" />
-                <notNull v="true" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>TYPE</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="12" />
-                <size v="50" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-            </entityFields>
-          </entityDb>
           <entityDb>
             <name>TIMETRACKING</name>
             <dbName></dbName>
@@ -6755,6 +6564,242 @@
               </entityFieldDb>
             </entityFields>
           </entityDb>
+          <entityDb>
+            <name>FORECAST</name>
+            <dbName></dbName>
+            <idColumn>SALESPROJECT_FORECASTID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>OBJECT_ROWID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>GROUPCODE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>VOLUME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_START</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>INFO</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="63" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>FORECASTID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>CLASSIFICATION</name>
+            <dbName></dbName>
+            <idColumn>SALESPROJECT_CLASSIFICATIONID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>OBJECT_ROWID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SALESPROJECT_CLASSIFICATIONID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CLASS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>VALUE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="63" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
         </entities>
       </entityGroup>
     </aliasDefDb>
diff --git a/entity/SalesprojectClassification_entity/SalesprojectClassification_entity.aod b/entity/Classification_entity/Classification_entity.aod
similarity index 79%
rename from entity/SalesprojectClassification_entity/SalesprojectClassification_entity.aod
rename to entity/Classification_entity/Classification_entity.aod
index 5d64138523..ac08eb42e6 100644
--- a/entity/SalesprojectClassification_entity/SalesprojectClassification_entity.aod
+++ b/entity/Classification_entity/Classification_entity.aod
@@ -1,6 +1,6 @@
 <?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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.2">
-  <name>SalesprojectClassification_entity</name>
+  <name>Classification_entity</name>
   <title>Classification</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <recordContainer>jdito</recordContainer>
@@ -22,12 +22,12 @@
       <children>
         <entityParameter>
           <name>ClassId_param</name>
-          <valueProcess>%aditoprj%/entity/SalesprojectClassification_entity/entityfields/salesprojectclassificationentries/children/classid_param/valueProcess.js</valueProcess>
+          <valueProcess>%aditoprj%/entity/Classification_entity/entityfields/salesprojectclassificationentries/children/classid_param/valueProcess.js</valueProcess>
           <triggerRecalculation v="true" />
         </entityParameter>
         <entityParameter>
           <name>SalesprojectId_param</name>
-          <valueProcess>%aditoprj%/entity/SalesprojectClassification_entity/entityfields/salesprojectclassificationentries/children/salesprojectid_param/valueProcess.js</valueProcess>
+          <valueProcess>%aditoprj%/entity/Classification_entity/entityfields/salesprojectclassificationentries/children/salesprojectid_param/valueProcess.js</valueProcess>
           <triggerRecalculation v="true" />
         </entityParameter>
       </children>
@@ -64,14 +64,14 @@
     </entityParameter>
     <entityField>
       <name>POINTS</name>
-      <valueProcess>%aditoprj%/entity/SalesprojectClassification_entity/entityfields/points/valueProcess.js</valueProcess>
+      <valueProcess>%aditoprj%/entity/Classification_entity/entityfields/points/valueProcess.js</valueProcess>
     </entityField>
   </entityFields>
   <recordContainers>
     <jDitoRecordContainer>
       <name>jdito</name>
       <jDitoRecordAlias>Data_alias</jDitoRecordAlias>
-      <contentProcess>%aditoprj%/entity/SalesprojectClassification_entity/recordcontainers/jdito/contentProcess.js</contentProcess>
+      <contentProcess>%aditoprj%/entity/Classification_entity/recordcontainers/jdito/contentProcess.js</contentProcess>
       <recordFields>
         <element>UID.value</element>
         <element>CLASSNAME.value</element>
diff --git a/entity/SalesprojectClassification_entity/contentProcess.js b/entity/Classification_entity/contentProcess.js
similarity index 100%
rename from entity/SalesprojectClassification_entity/contentProcess.js
rename to entity/Classification_entity/contentProcess.js
diff --git a/entity/SalesprojectClassification_entity/entityfields/points/valueProcess.js b/entity/Classification_entity/entityfields/points/valueProcess.js
similarity index 100%
rename from entity/SalesprojectClassification_entity/entityfields/points/valueProcess.js
rename to entity/Classification_entity/entityfields/points/valueProcess.js
diff --git a/entity/SalesprojectClassification_entity/entityfields/salesprojectclassificationentries/children/classid_param/valueProcess.js b/entity/Classification_entity/entityfields/salesprojectclassificationentries/children/classid_param/valueProcess.js
similarity index 100%
rename from entity/SalesprojectClassification_entity/entityfields/salesprojectclassificationentries/children/classid_param/valueProcess.js
rename to entity/Classification_entity/entityfields/salesprojectclassificationentries/children/classid_param/valueProcess.js
diff --git a/entity/SalesprojectClassification_entity/entityfields/salesprojectclassificationentries/children/salesprojectid_param/valueProcess.js b/entity/Classification_entity/entityfields/salesprojectclassificationentries/children/salesprojectid_param/valueProcess.js
similarity index 100%
rename from entity/SalesprojectClassification_entity/entityfields/salesprojectclassificationentries/children/salesprojectid_param/valueProcess.js
rename to entity/Classification_entity/entityfields/salesprojectclassificationentries/children/salesprojectid_param/valueProcess.js
diff --git a/entity/SalesprojectClassification_entity/recordcontainers/jdito/contentProcess.js b/entity/Classification_entity/recordcontainers/jdito/contentProcess.js
similarity index 100%
rename from entity/SalesprojectClassification_entity/recordcontainers/jdito/contentProcess.js
rename to entity/Classification_entity/recordcontainers/jdito/contentProcess.js
diff --git a/entity/Context_entity/Context_entity.aod b/entity/Context_entity/Context_entity.aod
index 9642361e6b..25f9abc525 100644
--- a/entity/Context_entity/Context_entity.aod
+++ b/entity/Context_entity/Context_entity.aod
@@ -42,6 +42,12 @@
           <fieldName>Contexts</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>209539e0-15ad-47eb-9175-a3aaa5af13fc</name>
+          <entityName>Forecast_entity</entityName>
+          <fieldName>Contexts</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
       </dependencies>
       <children>
         <entityParameter>
diff --git a/entity/Context_entity/entityfields/activitylinkable/children/exclusivecontexts_param/valueProcess.js b/entity/Context_entity/entityfields/activitylinkable/children/exclusivecontexts_param/valueProcess.js
index e48be1dbc1..fce318daba 100644
--- a/entity/Context_entity/entityfields/activitylinkable/children/exclusivecontexts_param/valueProcess.js
+++ b/entity/Context_entity/entityfields/activitylinkable/children/exclusivecontexts_param/valueProcess.js
@@ -1,2 +1,2 @@
 import("system.result");
-result.object(["Task", "Activity"]);
\ No newline at end of file
+result.object(["Task", "Activity", "Forecast", "Offer"]);
\ No newline at end of file
diff --git a/entity/Context_entity/entityfields/tasklinkable/children/exclusivecontexts_param/valueProcess.js b/entity/Context_entity/entityfields/tasklinkable/children/exclusivecontexts_param/valueProcess.js
index e48be1dbc1..32756d0f3a 100644
--- a/entity/Context_entity/entityfields/tasklinkable/children/exclusivecontexts_param/valueProcess.js
+++ b/entity/Context_entity/entityfields/tasklinkable/children/exclusivecontexts_param/valueProcess.js
@@ -1,2 +1,2 @@
 import("system.result");
-result.object(["Task", "Activity"]);
\ No newline at end of file
+result.object(["Task", "Activity", "Forecast"]);
\ No newline at end of file
diff --git a/entity/Forecast_entity/Forecast_entity.aod b/entity/Forecast_entity/Forecast_entity.aod
new file mode 100644
index 0000000000..53367f1c02
--- /dev/null
+++ b/entity/Forecast_entity/Forecast_entity.aod
@@ -0,0 +1,179 @@
+<?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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.2">
+  <name>Forecast_entity</name>
+  <title>${FORECAST_ENGLISH}</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <recordContainer>db</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityField>
+      <name>DATE_START</name>
+      <title>Planned</title>
+      <contentType>DATE</contentType>
+      <resolution>DAY</resolution>
+      <outputFormat>dd.MM.yyyy</outputFormat>
+    </entityField>
+    <entityField>
+      <name>GROUPCODE</name>
+      <title>Product</title>
+      <consumer>KeywordProductGroupcodes</consumer>
+      <displayValueProcess>%aditoprj%/entity/Forecast_entity/entityfields/groupcode/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>INFO</name>
+      <title>Info</title>
+      <contentType>LONG_TEXT</contentType>
+    </entityField>
+    <entityField>
+      <name>FORECASTID</name>
+      <valueProcess>%aditoprj%/entity/Forecast_entity/entityfields/forecastid/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>OBJECT_ROWID</name>
+      <consumer>Objects</consumer>
+      <linkedContextProcess>%aditoprj%/entity/Forecast_entity/entityfields/object_rowid/linkedContextProcess.js</linkedContextProcess>
+      <valueProcess>%aditoprj%/entity/Forecast_entity/entityfields/object_rowid/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/Forecast_entity/entityfields/object_rowid/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>TYPE</name>
+    </entityField>
+    <entityField>
+      <name>VOLUME</name>
+      <titleProcess>%aditoprj%/entity/Forecast_entity/entityfields/volume/titleProcess.js</titleProcess>
+    </entityField>
+    <entityConsumer>
+      <name>KeywordProductGroupcodes</name>
+      <fieldType>DEPENDENCY_OUT</fieldType>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ContainerName_param</name>
+          <valueProcess>%aditoprj%/entity/Forecast_entity/entityfields/keywordproductgroupcodes/children/containername_param/valueProcess.js</valueProcess>
+          <expose v="false" />
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityField>
+      <name>OBJECT_TYPE</name>
+      <consumer>Contexts</consumer>
+      <valueProcess>%aditoprj%/entity/Forecast_entity/entityfields/object_type/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/Forecast_entity/entityfields/object_type/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityConsumer>
+      <name>Objects</name>
+      <fieldType>DEPENDENCY_OUT</fieldType>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Object_entity</entityName>
+        <fieldName>AllObjects</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ObjectType_param</name>
+          <valueProcess>%aditoprj%/entity/Forecast_entity/entityfields/objects/children/objecttype_param/valueProcess.js</valueProcess>
+          <expose v="true" />
+          <triggerRecalculation v="true" />
+          <mandatory v="true" />
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Contexts</name>
+      <fieldType>DEPENDENCY_OUT</fieldType>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Context_entity</entityName>
+        <fieldName>Context</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityProvider>
+      <name>Links</name>
+      <fieldType>DEPENDENCY_IN</fieldType>
+      <recordContainer>db</recordContainer>
+      <dependencies>
+        <entityDependency>
+          <name>42f3a486-1fcd-46b7-8282-e55b1c7ac965</name>
+          <entityName>Salesproject_entity</entityName>
+          <fieldName>Forecasts</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+    </entityProvider>
+    <entityParameter>
+      <name>ObjectRowId_param</name>
+      <expose v="true" />
+      <triggerRecalculation v="true" />
+      <description>PARAMETER</description>
+    </entityParameter>
+    <entityParameter>
+      <name>ObjectType_param</name>
+      <expose v="true" />
+      <description>PARAMETER</description>
+    </entityParameter>
+  </entityFields>
+  <recordContainers>
+    <dbRecordContainer>
+      <name>db</name>
+      <alias>Data_alias</alias>
+      <conditionProcess>%aditoprj%/entity/Forecast_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
+      <linkInformation>
+        <linkInformation>
+          <name>920ae11e-ae44-400f-9df0-fa879131a05c</name>
+          <tableName>FORECAST</tableName>
+          <primaryKey>FORECASTID</primaryKey>
+          <isUIDTable v="false" />
+          <readonly v="false" />
+        </linkInformation>
+      </linkInformation>
+      <recordFieldMappings>
+        <dbRecordFieldMapping>
+          <name>DATE_START.value</name>
+          <recordfield>FORECAST.DATE_START</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>GROUPCODE.value</name>
+          <recordfield>FORECAST.GROUPCODE</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>INFO.value</name>
+          <recordfield>FORECAST.INFO</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TYPE.value</name>
+          <recordfield>FORECAST.TYPE</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>VOLUME.value</name>
+          <recordfield>FORECAST.VOLUME</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>GROUPCODE.displayValue</name>
+          <expression>%aditoprj%/entity/Forecast_entity/recordcontainers/db/recordfieldmappings/groupcode.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>OBJECT_ROWID.value</name>
+          <recordfield>FORECAST.OBJECT_ROWID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>OBJECT_ROWID.displayValue</name>
+          <expression>%aditoprj%/entity/Forecast_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>OBJECT_TYPE.value</name>
+          <recordfield>FORECAST.OBJECT_TYPE</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>FORECASTID.value</name>
+          <recordfield>FORECAST.FORECASTID</recordfield>
+        </dbRecordFieldMapping>
+      </recordFieldMappings>
+    </dbRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/SalesprojectForecast_entity/conditionProcess.js b/entity/Forecast_entity/conditionProcess.js
similarity index 70%
rename from entity/SalesprojectForecast_entity/conditionProcess.js
rename to entity/Forecast_entity/conditionProcess.js
index 647c25565d..7b8308bce5 100644
--- a/entity/SalesprojectForecast_entity/conditionProcess.js
+++ b/entity/Forecast_entity/conditionProcess.js
@@ -3,7 +3,7 @@ import("system.result");
 import("Sql_lib");
 
 var cond = new SqlCondition();
-cond.andPrepareVars("SALESPROJECT_FORECAST.SALESPROJECT_ID", "$param.SalesprojectId_param");
+cond.andPrepareVars("FORECAST.OBJECT_ROWID", "$param.ForecastId_param");
 
 //TODO: use a preparedCondition when available #1030812 #1034026
 result.string(db.translateCondition(cond.build("1 = 1")));
\ No newline at end of file
diff --git a/entity/SalesprojectForecast_entity/entityfields/date_edit/valueProcess.js b/entity/Forecast_entity/entityfields/date_edit/valueProcess.js
similarity index 100%
rename from entity/SalesprojectForecast_entity/entityfields/date_edit/valueProcess.js
rename to entity/Forecast_entity/entityfields/date_edit/valueProcess.js
diff --git a/entity/SalesprojectForecast_entity/entityfields/date_new/valueProcess.js b/entity/Forecast_entity/entityfields/date_new/valueProcess.js
similarity index 100%
rename from entity/SalesprojectForecast_entity/entityfields/date_new/valueProcess.js
rename to entity/Forecast_entity/entityfields/date_new/valueProcess.js
diff --git a/entity/SalesprojectForecast_entity/entityfields/salesproject_forecastid/valueProcess.js b/entity/Forecast_entity/entityfields/forecastid/valueProcess.js
similarity index 100%
rename from entity/SalesprojectForecast_entity/entityfields/salesproject_forecastid/valueProcess.js
rename to entity/Forecast_entity/entityfields/forecastid/valueProcess.js
diff --git a/entity/SalesprojectForecast_entity/entityfields/groupcode/displayValueProcess.js b/entity/Forecast_entity/entityfields/groupcode/displayValueProcess.js
similarity index 97%
rename from entity/SalesprojectForecast_entity/entityfields/groupcode/displayValueProcess.js
rename to entity/Forecast_entity/entityfields/groupcode/displayValueProcess.js
index aa76ca3c49..b969a4ff0b 100644
--- a/entity/SalesprojectForecast_entity/entityfields/groupcode/displayValueProcess.js
+++ b/entity/Forecast_entity/entityfields/groupcode/displayValueProcess.js
@@ -1,6 +1,6 @@
-import("system.result");
-import("system.vars");
-import("Keyword_lib");
-import("KeywordRegistry_basic");
-
-result.string(KeywordUtils.getViewValue($KeywordRegistry.productGroupcode(), vars.get("$field.GROUPCODE")));
+import("system.result");
+import("system.vars");
+import("Keyword_lib");
+import("KeywordRegistry_basic");
+
+result.string(KeywordUtils.getViewValue($KeywordRegistry.productGroupcode(), vars.get("$field.GROUPCODE")));
diff --git a/entity/SalesprojectForecast_entity/entityfields/keywordproductgroupcodes/children/containername_param/valueProcess.js b/entity/Forecast_entity/entityfields/keywordproductgroupcodes/children/containername_param/valueProcess.js
similarity index 100%
rename from entity/SalesprojectForecast_entity/entityfields/keywordproductgroupcodes/children/containername_param/valueProcess.js
rename to entity/Forecast_entity/entityfields/keywordproductgroupcodes/children/containername_param/valueProcess.js
diff --git a/entity/Forecast_entity/entityfields/object_rowid/displayValueProcess.js b/entity/Forecast_entity/entityfields/object_rowid/displayValueProcess.js
new file mode 100644
index 0000000000..8b080bceea
--- /dev/null
+++ b/entity/Forecast_entity/entityfields/object_rowid/displayValueProcess.js
@@ -0,0 +1,11 @@
+import("system.neon");
+import("system.vars");
+import("system.db");
+import("system.result");
+import("Context_lib");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$field.OBJECT_ROWID")) {
+    result.string("");
+} else if (vars.exists("$field.OBJECT_TYPE") && vars.get("$field.OBJECT_TYPE")) {
+    result.string(db.cell(ContextUtils.getNameSql(vars.get("$field.OBJECT_TYPE"), vars.get("$field.OBJECT_ROWID"))));
+}
\ No newline at end of file
diff --git a/entity/Forecast_entity/entityfields/object_rowid/linkedContextProcess.js b/entity/Forecast_entity/entityfields/object_rowid/linkedContextProcess.js
new file mode 100644
index 0000000000..d868fe097f
--- /dev/null
+++ b/entity/Forecast_entity/entityfields/object_rowid/linkedContextProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("system.result");
+import("Context_lib");
+
+result.string(ContextUtils.getContextName(vars.get("$field.OBJECT_TYPE")))
\ No newline at end of file
diff --git a/entity/Forecast_entity/entityfields/object_rowid/valueProcess.js b/entity/Forecast_entity/entityfields/object_rowid/valueProcess.js
new file mode 100644
index 0000000000..09d845d6f5
--- /dev/null
+++ b/entity/Forecast_entity/entityfields/object_rowid/valueProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("system.result");
+
+if(vars.exists("$param.ObjectRowId_param") && vars.get("$param.ObjectRowId_param"))
+    result.string(vars.get("$param.ObjectRowId_param"));
\ No newline at end of file
diff --git a/entity/Forecast_entity/entityfields/object_type/displayValueProcess.js b/entity/Forecast_entity/entityfields/object_type/displayValueProcess.js
new file mode 100644
index 0000000000..2965221e0b
--- /dev/null
+++ b/entity/Forecast_entity/entityfields/object_type/displayValueProcess.js
@@ -0,0 +1,10 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+import("system.project");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$field.OBJECT_TYPE")) {
+    result.string("");
+} else if (vars.exists("$field.OBJECT_TYPE") && vars.get("$field.OBJECT_TYPE")) {
+    result.string(project.getDataModel(project.DATAMODEL_KIND_CONTEXT, vars.get("$field.OBJECT_TYPE"))[1]);
+}
\ No newline at end of file
diff --git a/entity/Forecast_entity/entityfields/object_type/valueProcess.js b/entity/Forecast_entity/entityfields/object_type/valueProcess.js
new file mode 100644
index 0000000000..61217a860a
--- /dev/null
+++ b/entity/Forecast_entity/entityfields/object_type/valueProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("system.result");
+    
+if(vars.exists("$param.ObjectType_param") && vars.get("$param.ObjectType_param"))
+    result.string(vars.get("$param.ObjectType_param"));
\ No newline at end of file
diff --git a/entity/Forecast_entity/entityfields/objects/children/objecttype_param/valueProcess.js b/entity/Forecast_entity/entityfields/objects/children/objecttype_param/valueProcess.js
new file mode 100644
index 0000000000..b1bb16711d
--- /dev/null
+++ b/entity/Forecast_entity/entityfields/objects/children/objecttype_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("system.vars");
+
+result.string(vars.get("$field.OBJECT_TYPE"));
\ No newline at end of file
diff --git a/entity/SalesprojectForecast_entity/entityfields/salesprojectforecastdatestart/code.js b/entity/Forecast_entity/entityfields/salesprojectforecastdatestart/code.js
similarity index 100%
rename from entity/SalesprojectForecast_entity/entityfields/salesprojectforecastdatestart/code.js
rename to entity/Forecast_entity/entityfields/salesprojectforecastdatestart/code.js
diff --git a/entity/SalesprojectForecast_entity/entityfields/user_edit/valueProcess.js b/entity/Forecast_entity/entityfields/user_edit/valueProcess.js
similarity index 100%
rename from entity/SalesprojectForecast_entity/entityfields/user_edit/valueProcess.js
rename to entity/Forecast_entity/entityfields/user_edit/valueProcess.js
diff --git a/entity/SalesprojectForecast_entity/entityfields/user_new/valueProcess.js b/entity/Forecast_entity/entityfields/user_new/valueProcess.js
similarity index 100%
rename from entity/SalesprojectForecast_entity/entityfields/user_new/valueProcess.js
rename to entity/Forecast_entity/entityfields/user_new/valueProcess.js
diff --git a/entity/SalesprojectForecast_entity/entityfields/volume/titleProcess.js b/entity/Forecast_entity/entityfields/volume/titleProcess.js
similarity index 100%
rename from entity/SalesprojectForecast_entity/entityfields/volume/titleProcess.js
rename to entity/Forecast_entity/entityfields/volume/titleProcess.js
diff --git a/entity/Forecast_entity/recordcontainers/db/conditionProcess.js b/entity/Forecast_entity/recordcontainers/db/conditionProcess.js
new file mode 100644
index 0000000000..567ceccc2b
--- /dev/null
+++ b/entity/Forecast_entity/recordcontainers/db/conditionProcess.js
@@ -0,0 +1,12 @@
+import("system.logging");
+import("system.vars");
+import("system.db");
+import("system.result");
+import("Sql_lib");
+
+var cond = SqlCondition.begin()
+                       .andPrepareVars("FORECAST.OBJECT_ROWID", "$param.ObjectRowId_param")
+                       .andPrepareVars("FORECAST.OBJECT_TYPE", "$param.ObjectType_param");
+
+//TODO: use a preparedCondition when available #1030812 #1034026
+result.string(db.translateCondition(cond.build("1 = 1")));
\ No newline at end of file
diff --git a/entity/SalesprojectForecast_entity/recordcontainers/db/recordfieldmappings/groupcode.displayvalue/expression.js b/entity/Forecast_entity/recordcontainers/db/recordfieldmappings/groupcode.displayvalue/expression.js
similarity index 74%
rename from entity/SalesprojectForecast_entity/recordcontainers/db/recordfieldmappings/groupcode.displayvalue/expression.js
rename to entity/Forecast_entity/recordcontainers/db/recordfieldmappings/groupcode.displayvalue/expression.js
index a2590bfa96..e70d6b14e1 100644
--- a/entity/SalesprojectForecast_entity/recordcontainers/db/recordfieldmappings/groupcode.displayvalue/expression.js
+++ b/entity/Forecast_entity/recordcontainers/db/recordfieldmappings/groupcode.displayvalue/expression.js
@@ -2,5 +2,5 @@ import("system.result");
 import("Keyword_lib");
 import("KeywordRegistry_basic");
 
-var sql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.productGroupcode(), "SALESPROJECT_FORECAST.GROUPCODE");
+var sql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.productGroupcode(), "FORECAST.GROUPCODE");
 result.string(sql);
diff --git a/entity/Forecast_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js b/entity/Forecast_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js
new file mode 100644
index 0000000000..33554680cc
--- /dev/null
+++ b/entity/Forecast_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("Context_lib");
+
+result.string(ContextUtils.getNameSubselectSql("OBJECT_TYPE", "OBJECT_ROWID"))
\ No newline at end of file
diff --git a/entity/KeywordEntry_entity/KeywordEntry_entity.aod b/entity/KeywordEntry_entity/KeywordEntry_entity.aod
index 86428dc192..77be00cf06 100644
--- a/entity/KeywordEntry_entity/KeywordEntry_entity.aod
+++ b/entity/KeywordEntry_entity/KeywordEntry_entity.aod
@@ -147,7 +147,7 @@
         </entityDependency>
         <entityDependency>
           <name>3575fdd7-3dd6-4318-b0d2-32d1df821076</name>
-          <entityName>SalesprojectForecast_entity</entityName>
+          <entityName>Forecast_entity</entityName>
           <fieldName>KeywordProductGroupcodes</fieldName>
           <isConsumer v="false" />
         </entityDependency>
diff --git a/entity/Object_entity/Object_entity.aod b/entity/Object_entity/Object_entity.aod
index 99ed958580..8989028ab5 100644
--- a/entity/Object_entity/Object_entity.aod
+++ b/entity/Object_entity/Object_entity.aod
@@ -48,6 +48,18 @@
           <fieldName>Objects</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>40bf3a74-2335-4925-9490-1404fa7c81f6</name>
+          <entityName>Forecast_entity</entityName>
+          <fieldName>Objects</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>f6bb8beb-dbcb-4871-9c50-d2399d569fdb</name>
+          <entityName>Offer_entity</entityName>
+          <fieldName>Objects</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
       </dependencies>
       <children>
         <entityParameter>
diff --git a/entity/Offer_entity/Offer_entity.aod b/entity/Offer_entity/Offer_entity.aod
index 32bcd06f2d..cc83b3fbc4 100644
--- a/entity/Offer_entity/Offer_entity.aod
+++ b/entity/Offer_entity/Offer_entity.aod
@@ -72,17 +72,6 @@
         <element>PROCESS_SETVALUE</element>
       </onValueChangeTypes>
     </entityField>
-    <entityField>
-      <name>SALESPROJECT_ID</name>
-      <title>Salesproject</title>
-      <consumer>Salesprojects</consumer>
-      <linkedContext>Salesproject</linkedContext>
-      <mandatoryProcess>%aditoprj%/entity/Offer_entity/entityfields/salesproject_id/mandatoryProcess.js</mandatoryProcess>
-      <state>INVISIBLE</state>
-      <stateProcess>%aditoprj%/entity/Offer_entity/entityfields/salesproject_id/stateProcess.js</stateProcess>
-      <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/salesproject_id/valueProcess.js</valueProcess>
-      <displayValueProcess>%aditoprj%/entity/Offer_entity/entityfields/salesproject_id/displayValueProcess.js</displayValueProcess>
-    </entityField>
     <entityField>
       <name>STATUS</name>
       <title>Status</title>
@@ -173,36 +162,6 @@
       <state>READONLY</state>
       <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/totalgross/valueProcess.js</valueProcess>
     </entityField>
-    <entityParameter>
-      <name>SalesprojectId_param</name>
-      <expose v="true" />
-      <triggerRecalculation v="true" />
-      <mandatory v="true" />
-      <description>PARAMETER</description>
-    </entityParameter>
-    <entityProvider>
-      <name>SalesprojectOffers</name>
-      <fieldType>DEPENDENCY_IN</fieldType>
-      <recordContainer>db</recordContainer>
-      <dependencies>
-        <entityDependency>
-          <name>208c1273-d438-4263-a466-a4490b5e319a</name>
-          <entityName>Salesproject_entity</entityName>
-          <fieldName>SalesprojectOffers</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
-      <children>
-        <entityParameter>
-          <name>ContactId_param</name>
-          <expose v="true" />
-        </entityParameter>
-        <entityParameter>
-          <name>SalesprojectId_param</name>
-          <expose v="true" />
-        </entityParameter>
-      </children>
-    </entityProvider>
     <entityField>
       <name>LANGUAGE</name>
       <title>Language</title>
@@ -320,21 +279,6 @@
         </entityParameter>
       </children>
     </entityConsumer>
-    <entityConsumer>
-      <name>Salesprojects</name>
-      <fieldType>DEPENDENCY_OUT</fieldType>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Salesproject_entity</entityName>
-        <fieldName>openSalesprojects</fieldName>
-      </dependency>
-      <children>
-        <entityParameter>
-          <name>ContactId_param</name>
-          <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/salesprojects/children/contactid_param/valueProcess.js</valueProcess>
-        </entityParameter>
-      </children>
-    </entityConsumer>
     <entityField>
       <name>ADDRESS</name>
       <documentation>%aditoprj%/entity/Offer_entity/entityfields/address/documentation.adoc</documentation>
@@ -478,12 +422,48 @@
         </entityParameter>
         <entityParameter>
           <name>SalesprojectId_param</name>
-          <expose v="true" />
+          <expose v="false" />
         </entityParameter>
         <entityParameter>
           <name>OfferLanguage_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>ObjectRowId_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>OfferCode_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>OfferAddress_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>OfferCurrency_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>OfferDeliveryTerm_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>OfferHeader_param</name>
+          <expose v="true" />
+        </entityParameter>
+        <entityParameter>
+          <name>OfferOriginal_Id_param</name>
           <expose v="true" />
         </entityParameter>
+        <entityParameter>
+          <name>OfferPaymentTerm_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>OfferVersnr_param</name>
+          <expose v="false" />
+        </entityParameter>
       </children>
     </entityProvider>
     <entityParameter>
@@ -709,6 +689,111 @@
         </entityParameter>
       </children>
     </entityConsumer>
+    <entityField>
+      <name>OBJECT_ROWID</name>
+      <consumer>Objects</consumer>
+      <linkedContextProcess>%aditoprj%/entity/Offer_entity/entityfields/object_rowid/linkedContextProcess.js</linkedContextProcess>
+      <mandatoryProcess>%aditoprj%/entity/Offer_entity/entityfields/object_rowid/mandatoryProcess.js</mandatoryProcess>
+      <state>AUTO</state>
+      <stateProcess>%aditoprj%/entity/Offer_entity/entityfields/object_rowid/stateProcess.js</stateProcess>
+      <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/object_rowid/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/Offer_entity/entityfields/object_rowid/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>OBJECT_TYPE</name>
+      <consumer>Contexts</consumer>
+      <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/object_type/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/Offer_entity/entityfields/object_type/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityConsumer>
+      <name>Objects</name>
+      <fieldType>DEPENDENCY_OUT</fieldType>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Object_entity</entityName>
+        <fieldName>AllObjects</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Contexts</name>
+      <fieldType>DEPENDENCY_OUT</fieldType>
+      <dependency>
+        <name>dependency</name>
+      </dependency>
+    </entityConsumer>
+    <entityProvider>
+      <name>Links</name>
+      <fieldType>DEPENDENCY_IN</fieldType>
+      <recordContainer>db</recordContainer>
+      <dependencies>
+        <entityDependency>
+          <name>88a166e6-ccd0-4d51-b554-e3327f66d834</name>
+          <entityName>Salesproject_entity</entityName>
+          <fieldName>Offers</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+      <children>
+        <entityParameter>
+          <name>OfferDeliveryTerm_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>OfferCode_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>OfferOriginal_Id_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>ContactId_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>ObjectRowId_param</name>
+          <expose v="true" />
+        </entityParameter>
+        <entityParameter>
+          <name>ObjectType_param</name>
+          <expose v="true" />
+        </entityParameter>
+        <entityParameter>
+          <name>OfferAddress_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>OfferCurrency_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>OfferHeader_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>OfferLanguage_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>OfferPaymentTerm_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>OfferVersnr_param</name>
+          <expose v="false" />
+        </entityParameter>
+      </children>
+    </entityProvider>
+    <entityParameter>
+      <name>ObjectRowId_param</name>
+      <expose v="true" />
+      <description>PARAMETER</description>
+    </entityParameter>
+    <entityParameter>
+      <name>ObjectType_param</name>
+      <expose v="true" />
+      <description>PARAMETER</description>
+    </entityParameter>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -776,10 +861,6 @@
           <name>PROBABILITY.value</name>
           <recordfield>OFFER.PROBABILITY</recordfield>
         </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>SALESPROJECT_ID.value</name>
-          <recordfield>OFFER.SALESPROJECT_ID</recordfield>
-        </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>STATUS.value</name>
           <recordfield>OFFER.STATUS</recordfield>
@@ -861,8 +942,16 @@
           <recordfield>OFFER.DATE_EDIT</recordfield>
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
-          <name>SALESPROJECT_ID.displayValue</name>
-          <recordfield>SALESPROJECT.PROJECTTITLE</recordfield>
+          <name>OBJECT_ROWID.value</name>
+          <recordfield>OFFER.OBJECT_ROWID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>OBJECT_TYPE.value</name>
+          <recordfield>OFFER.OBJECT_TYPE</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>OBJECT_ROWID.displayValue</name>
+          <expression>%aditoprj%/entity/Offer_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js</expression>
         </dbRecordFieldMapping>
       </recordFieldMappings>
     </dbRecordContainer>
diff --git a/entity/Offer_entity/conditionProcess.js b/entity/Offer_entity/conditionProcess.js
index 46b77172c4..30a86e4e5f 100644
--- a/entity/Offer_entity/conditionProcess.js
+++ b/entity/Offer_entity/conditionProcess.js
@@ -3,7 +3,7 @@ import("system.result");
 import("Sql_lib");
 
 var cond = new SqlCondition();
-cond.andPrepareVars("OFFER.SALESPROJECT_ID", "$param.SalesprojectId_param");
+cond.andPrepareVars("OFFER.OBJECT_ROWID", "$param.SalesprojectId_param");
 
 //TODO: use a preparedCondition when available #1030812 #1034026
 result.string(db.translateCondition(cond.build("1 = 1")));
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/activities/children/presetlinks_param/valueProcess.js b/entity/Offer_entity/entityfields/activities/children/presetlinks_param/valueProcess.js
index e4c6c134df..62ef8073d2 100644
--- a/entity/Offer_entity/entityfields/activities/children/presetlinks_param/valueProcess.js
+++ b/entity/Offer_entity/entityfields/activities/children/presetlinks_param/valueProcess.js
@@ -10,9 +10,9 @@ if (contactId)
     links.push([ContactUtils.getContextByContactId(contactId), contactId]);
 }
 
-if (vars.get("$field.SALESPROJECT_ID"))
+if (vars.get("$field.OBJECT_ROWID"))
 {
-    links.push(["Salesproject", vars.get("$field.SALESPROJECT_ID")]);
+    links.push(["Salesproject", vars.get("$field.OBJECT_ROWID")]);
 }
 
 result.object(links);
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/copyoffer/onActionProcess.js b/entity/Offer_entity/entityfields/copyoffer/onActionProcess.js
index 3165252cb4..3eaa4ce479 100644
--- a/entity/Offer_entity/entityfields/copyoffer/onActionProcess.js
+++ b/entity/Offer_entity/entityfields/copyoffer/onActionProcess.js
@@ -9,7 +9,7 @@ var header = vars.getString("$field.HEADER");
 var offerId = vars.getString("$field.OFFERID");
 var deliveryTerm = vars.getString("$field.DELIVERYTERMS");
 var paymentTerm = vars.getString("$field.PAYMENTTERMS");
-var salesprojectId = vars.getString("$field.SALESPROJECT_ID");
+var salesprojectId = vars.getString("$field.OBJECT_ROWID");
 
 
 OfferUtils.copyOffer(offerId, contactId, language, currency, header, deliveryTerm, paymentTerm, salesprojectId);
diff --git a/entity/Offer_entity/entityfields/newactivity/onActionProcess.js b/entity/Offer_entity/entityfields/newactivity/onActionProcess.js
index 4be677edd5..23d3bc451d 100644
--- a/entity/Offer_entity/entityfields/newactivity/onActionProcess.js
+++ b/entity/Offer_entity/entityfields/newactivity/onActionProcess.js
@@ -10,9 +10,9 @@ if (contactId)
     links.push([ContactUtils.getContextByContactId(contactId), contactId]);
 }
 
-if (vars.get("$field.SALESPROJECT_ID"))
+if (vars.get("$field.OBJECT_ROWID"))
 {
-    links.push(["Salesproject", vars.get("$field.SALESPROJECT_ID")]);
+    links.push(["Salesproject", vars.get("$field.OBJECT_ROWID")]);
 }
 
 ActivityUtils.createNewActivity(vars.getString("$field.OFFERID"), links);
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/newofferversion/onActionProcess.js b/entity/Offer_entity/entityfields/newofferversion/onActionProcess.js
index be8fa6eecb..01d6d3b747 100644
--- a/entity/Offer_entity/entityfields/newofferversion/onActionProcess.js
+++ b/entity/Offer_entity/entityfields/newofferversion/onActionProcess.js
@@ -4,7 +4,7 @@ import("Offer_lib");
 
 var params = {
     "ContactId_param" : vars.get("$field.CONTACT_ID"),
-    "SalesprojectId_param" : vars.get("$field.SALESPROJECT_ID"),
+    "SalesprojectId_param" : vars.get("$field.OBJECT_ROWID"),
     "OfferLanguage_param" : vars.get("$field.LANGUAGE"),
     "OfferOriginal_Id_param" : vars.get("$field.OFFERID"),
     "OfferCode_param" : vars.get("$field.OFFERCODE"),
diff --git a/entity/Offer_entity/entityfields/neworder/onActionProcess.js b/entity/Offer_entity/entityfields/neworder/onActionProcess.js
index 8443723094..dce051360b 100644
--- a/entity/Offer_entity/entityfields/neworder/onActionProcess.js
+++ b/entity/Offer_entity/entityfields/neworder/onActionProcess.js
@@ -3,7 +3,7 @@ import("system.neon");
 import("Offer_lib");
 
 var contactId = vars.getString("$field.CONTACT_ID");
-var salesprojectId = vars.getString("$field.SALESPROJECT_ID");
+var salesprojectId = vars.getString("$field.OBJECT_ROWID");
 var currency = vars.getString("$field.CURRENCY");
 var language = vars.getString("$field.LANGUAGE");
 var header = vars.getString("$field.HEADER");
diff --git a/entity/Offer_entity/entityfields/newtask/onActionProcess.js b/entity/Offer_entity/entityfields/newtask/onActionProcess.js
index f0165851ed..3c4a6d95be 100644
--- a/entity/Offer_entity/entityfields/newtask/onActionProcess.js
+++ b/entity/Offer_entity/entityfields/newtask/onActionProcess.js
@@ -10,9 +10,9 @@ if (contactId)
     links.push([ContactUtils.getContextByContactId(contactId), contactId]);
 }
 
-if (vars.get("$field.SALESPROJECT_ID"))
+if (vars.get("$field.OBJECT_ROWID"))
 {
-    links.push(["Salesproject", vars.get("$field.SALESPROJECT_ID")]);
+    links.push(["Salesproject", vars.get("$field.OBJECT_ROWID")]);
 }
 
 TaskUtils.createNewTask(vars.get("$field.OFFERID"), links);
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/object_rowid/displayValueProcess.js b/entity/Offer_entity/entityfields/object_rowid/displayValueProcess.js
new file mode 100644
index 0000000000..8b080bceea
--- /dev/null
+++ b/entity/Offer_entity/entityfields/object_rowid/displayValueProcess.js
@@ -0,0 +1,11 @@
+import("system.neon");
+import("system.vars");
+import("system.db");
+import("system.result");
+import("Context_lib");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$field.OBJECT_ROWID")) {
+    result.string("");
+} else if (vars.exists("$field.OBJECT_TYPE") && vars.get("$field.OBJECT_TYPE")) {
+    result.string(db.cell(ContextUtils.getNameSql(vars.get("$field.OBJECT_TYPE"), vars.get("$field.OBJECT_ROWID"))));
+}
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/object_rowid/linkedContextProcess.js b/entity/Offer_entity/entityfields/object_rowid/linkedContextProcess.js
new file mode 100644
index 0000000000..16ec65d1ea
--- /dev/null
+++ b/entity/Offer_entity/entityfields/object_rowid/linkedContextProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("system.result");
+import("Context_lib");
+
+result.string(ContextUtils.getContextName(vars.get("$field.OBJECT_TYPE")))
diff --git a/entity/Offer_entity/entityfields/object_rowid/mandatoryProcess.js b/entity/Offer_entity/entityfields/object_rowid/mandatoryProcess.js
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/entity/Offer_entity/entityfields/object_rowid/stateProcess.js b/entity/Offer_entity/entityfields/object_rowid/stateProcess.js
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/entity/Offer_entity/entityfields/object_rowid/valueProcess.js b/entity/Offer_entity/entityfields/object_rowid/valueProcess.js
new file mode 100644
index 0000000000..09d845d6f5
--- /dev/null
+++ b/entity/Offer_entity/entityfields/object_rowid/valueProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("system.result");
+
+if(vars.exists("$param.ObjectRowId_param") && vars.get("$param.ObjectRowId_param"))
+    result.string(vars.get("$param.ObjectRowId_param"));
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/object_type/displayValueProcess.js b/entity/Offer_entity/entityfields/object_type/displayValueProcess.js
new file mode 100644
index 0000000000..84a769a5e1
--- /dev/null
+++ b/entity/Offer_entity/entityfields/object_type/displayValueProcess.js
@@ -0,0 +1,10 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+import("system.project");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$field.OBJECT_TYPE")) {
+    result.string("");
+} else if (vars.exists("$field.OBJECT_TYPE") && vars.get("$field.OBJECT_TYPE")) {
+    result.string(project.getDataModel(project.DATAMODEL_KIND_CONTEXT, vars.get("$field.OBJECT_TYPE"))[1]);
+}
diff --git a/entity/Offer_entity/entityfields/object_type/valueProcess.js b/entity/Offer_entity/entityfields/object_type/valueProcess.js
new file mode 100644
index 0000000000..61217a860a
--- /dev/null
+++ b/entity/Offer_entity/entityfields/object_type/valueProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("system.result");
+    
+if(vars.exists("$param.ObjectType_param") && vars.get("$param.ObjectType_param"))
+    result.string(vars.get("$param.ObjectType_param"));
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/salesproject_id/displayValueProcess.js b/entity/Offer_entity/entityfields/salesproject_id/displayValueProcess.js
deleted file mode 100644
index 65afbf6e95..0000000000
--- a/entity/Offer_entity/entityfields/salesproject_id/displayValueProcess.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import("system.vars");
-import("system.result");
-import("Salesproject_lib");
-
-result.string(Salesproject.getSalesProjectTitleById(vars.getString("$field.SALESPROJECT_ID")));
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/salesproject_id/mandatoryProcess.js b/entity/Offer_entity/entityfields/salesproject_id/mandatoryProcess.js
deleted file mode 100644
index 3bd7da35b2..0000000000
--- a/entity/Offer_entity/entityfields/salesproject_id/mandatoryProcess.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import("system.vars");
-import("system.result");
-import("Contact_lib");
-
-var type = ContactUtils.getContactType(vars.get("$field.CONTACT_ID"), vars.get("$field.CONTACT_PERSON_ID"), vars.get("$field.CONTACT_ORG_ID"));
-
-result.string(type != 2);
-
-
diff --git a/entity/Offer_entity/entityfields/salesproject_id/stateProcess.js b/entity/Offer_entity/entityfields/salesproject_id/stateProcess.js
deleted file mode 100644
index 1b35d9149a..0000000000
--- a/entity/Offer_entity/entityfields/salesproject_id/stateProcess.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import("system.neon");
-import("system.result");
-import("system.vars");
-import("Entity_lib");
-
-switch (vars.get("$sys.recordstate")) 
-{
-    case neon.OPERATINGSTATE_NEW:
-        //only EDITABLE if $field.CONTACT_ID is set
-        if(ProcessHandlingUtils.getOnValidationValue(vars.get("$field.CONTACT_ID")))
-            result.object(neon.COMPONENTSTATE_EDITABLE);
-        else
-            result.object(neon.COMPONENTSTATE_READONLY);
-    break;
-    default:
-        result.object(neon.COMPONENTSTATE_READONLY);
-}
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/salesproject_id/valueProcess.js b/entity/Offer_entity/entityfields/salesproject_id/valueProcess.js
deleted file mode 100644
index 447b696210..0000000000
--- a/entity/Offer_entity/entityfields/salesproject_id/valueProcess.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import("system.result");
-import("system.vars");
-
-if (vars.exists("$param.SalesprojectId_param")) 
-{
-    result.string(vars.get("$param.SalesprojectId_param"));
-}
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/salesprojects/children/contactid_param/valueProcess.js b/entity/Offer_entity/entityfields/salesprojects/children/contactid_param/valueProcess.js
deleted file mode 100644
index f2c342bc94..0000000000
--- a/entity/Offer_entity/entityfields/salesprojects/children/contactid_param/valueProcess.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import("system.vars");
-import("system.result");
-import("Entity_lib");
-
-result.string(ProcessHandlingUtils.getOnValidationValue(vars.get("$field.CONTACT_ORG_ID")));
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/tasks/children/presetlinks_param/valueProcess.js b/entity/Offer_entity/entityfields/tasks/children/presetlinks_param/valueProcess.js
index e4c6c134df..62ef8073d2 100644
--- a/entity/Offer_entity/entityfields/tasks/children/presetlinks_param/valueProcess.js
+++ b/entity/Offer_entity/entityfields/tasks/children/presetlinks_param/valueProcess.js
@@ -10,9 +10,9 @@ if (contactId)
     links.push([ContactUtils.getContextByContactId(contactId), contactId]);
 }
 
-if (vars.get("$field.SALESPROJECT_ID"))
+if (vars.get("$field.OBJECT_ROWID"))
 {
-    links.push(["Salesproject", vars.get("$field.SALESPROJECT_ID")]);
+    links.push(["Salesproject", vars.get("$field.OBJECT_ROWID")]);
 }
 
 result.object(links);
\ No newline at end of file
diff --git a/entity/Offer_entity/recordcontainers/db/conditionProcess.js b/entity/Offer_entity/recordcontainers/db/conditionProcess.js
index 58347450b6..4538e37b37 100644
--- a/entity/Offer_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Offer_entity/recordcontainers/db/conditionProcess.js
@@ -3,7 +3,8 @@ import("system.result");
 import("Sql_lib");
 
 var cond = new SqlCondition();
-cond.andPrepareVars("OFFER.SALESPROJECT_ID", "$param.SalesprojectId_param");
+cond.andPrepareVars("OFFER.OBJECT_ROWID", "$param.ObjectRowId_param");
+cond.andPrepareVars("OFFER.OBJECT_TYPE", "$param.ObjectType_param");
 cond.andPrepareVars("OFFER.CONTACT_ID", "$param.ContactId_param");
 
 //TODO: use a preparedCondition when available #1030812 #1034026
diff --git a/entity/Offer_entity/recordcontainers/db/fromClauseProcess.js b/entity/Offer_entity/recordcontainers/db/fromClauseProcess.js
index 73ea32201a..1fd88578ab 100644
--- a/entity/Offer_entity/recordcontainers/db/fromClauseProcess.js
+++ b/entity/Offer_entity/recordcontainers/db/fromClauseProcess.js
@@ -1,4 +1,4 @@
 import("system.result");
 
 result.string("OFFER left join CONTACT on CONTACTID = CONTACT_ID \n\
-left join SALESPROJECT on SALESPROJECTID = SALESPROJECT_ID");
\ No newline at end of file
+left join SALESPROJECT on SALESPROJECTID = OBJECT_ROWID");
\ No newline at end of file
diff --git a/entity/Offer_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js b/entity/Offer_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js
new file mode 100644
index 0000000000..33554680cc
--- /dev/null
+++ b/entity/Offer_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("Context_lib");
+
+result.string(ContextUtils.getNameSubselectSql("OBJECT_TYPE", "OBJECT_ROWID"))
\ No newline at end of file
diff --git a/entity/SalesprojectClassificationEntry_entity/SalesprojectClassificationEntry_entity.aod b/entity/SalesprojectClassificationEntry_entity/SalesprojectClassificationEntry_entity.aod
index 1fd132d820..a78f05e91b 100644
--- a/entity/SalesprojectClassificationEntry_entity/SalesprojectClassificationEntry_entity.aod
+++ b/entity/SalesprojectClassificationEntry_entity/SalesprojectClassificationEntry_entity.aod
@@ -14,7 +14,7 @@
       <dependencies>
         <entityDependency>
           <name>a7414022-56d3-4ca0-b15f-33601b655d78</name>
-          <entityName>SalesprojectClassification_entity</entityName>
+          <entityName>Classification_entity</entityName>
           <fieldName>SalesprojectClassificationEntries</fieldName>
           <isConsumer v="false" />
         </entityDependency>
diff --git a/entity/SalesprojectForecast_entity/SalesprojectForecast_entity.aod b/entity/SalesprojectForecast_entity/SalesprojectForecast_entity.aod
deleted file mode 100644
index bb39731c04..0000000000
--- a/entity/SalesprojectForecast_entity/SalesprojectForecast_entity.aod
+++ /dev/null
@@ -1,137 +0,0 @@
-<?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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.2">
-  <name>SalesprojectForecast_entity</name>
-  <title>${FORECAST_ENGLISH}</title>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <recordContainer>db</recordContainer>
-  <entityFields>
-    <entityProvider>
-      <name>#PROVIDER</name>
-    </entityProvider>
-    <entityField>
-      <name>DATE_START</name>
-      <title>Planned</title>
-      <contentType>DATE</contentType>
-      <resolution>DAY</resolution>
-      <outputFormat>dd.MM.yyyy</outputFormat>
-    </entityField>
-    <entityField>
-      <name>GROUPCODE</name>
-      <title>Product</title>
-      <consumer>KeywordProductGroupcodes</consumer>
-      <displayValueProcess>%aditoprj%/entity/SalesprojectForecast_entity/entityfields/groupcode/displayValueProcess.js</displayValueProcess>
-    </entityField>
-    <entityField>
-      <name>INFO</name>
-      <title>Info</title>
-      <contentType>LONG_TEXT</contentType>
-    </entityField>
-    <entityField>
-      <name>SALESPROJECT_FORECASTID</name>
-      <valueProcess>%aditoprj%/entity/SalesprojectForecast_entity/entityfields/salesproject_forecastid/valueProcess.js</valueProcess>
-    </entityField>
-    <entityField>
-      <name>SALESPROJECT_ID</name>
-      <valueProcess>%aditoprj%/entity/SalesprojectForecast_entity/entityfields/salesproject_id/valueProcess.js</valueProcess>
-    </entityField>
-    <entityField>
-      <name>TYPE</name>
-    </entityField>
-    <entityField>
-      <name>VOLUME</name>
-      <titleProcess>%aditoprj%/entity/SalesprojectForecast_entity/entityfields/volume/titleProcess.js</titleProcess>
-    </entityField>
-    <entityParameter>
-      <name>SalesprojectId_param</name>
-      <expose v="true" />
-      <triggerRecalculation v="true" />
-      <mandatory v="true" />
-      <description>PARAMETER</description>
-    </entityParameter>
-    <entityProvider>
-      <name>SalesprojectForecasts</name>
-      <fieldType>DEPENDENCY_IN</fieldType>
-      <recordContainer>db</recordContainer>
-      <dependencies>
-        <entityDependency>
-          <name>a3d7f5e9-465c-4ded-9220-3569b63925ab</name>
-          <entityName>Salesproject_entity</entityName>
-          <fieldName>SalesprojectForecasts</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
-      <children>
-        <entityParameter>
-          <name>SalesprojectId_param</name>
-          <expose v="true" />
-        </entityParameter>
-      </children>
-    </entityProvider>
-    <entityConsumer>
-      <name>KeywordProductGroupcodes</name>
-      <fieldType>DEPENDENCY_OUT</fieldType>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
-      <children>
-        <entityParameter>
-          <name>ContainerName_param</name>
-          <valueProcess>%aditoprj%/entity/SalesprojectForecast_entity/entityfields/keywordproductgroupcodes/children/containername_param/valueProcess.js</valueProcess>
-          <expose v="false" />
-        </entityParameter>
-      </children>
-    </entityConsumer>
-  </entityFields>
-  <recordContainers>
-    <dbRecordContainer>
-      <name>db</name>
-      <alias>Data_alias</alias>
-      <conditionProcess>%aditoprj%/entity/SalesprojectForecast_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
-      <linkInformation>
-        <linkInformation>
-          <name>29b759fb-1d0a-4262-b6af-0da5f3985eb3</name>
-          <tableName>SALESPROJECT_FORECAST</tableName>
-          <primaryKey>SALESPROJECT_FORECASTID</primaryKey>
-          <isUIDTable v="true" />
-          <readonly v="false" />
-        </linkInformation>
-      </linkInformation>
-      <recordFieldMappings>
-        <dbRecordFieldMapping>
-          <name>DATE_START.value</name>
-          <recordfield>SALESPROJECT_FORECAST.DATE_START</recordfield>
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>GROUPCODE.value</name>
-          <recordfield>SALESPROJECT_FORECAST.GROUPCODE</recordfield>
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>INFO.value</name>
-          <recordfield>SALESPROJECT_FORECAST.INFO</recordfield>
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>SALESPROJECT_FORECASTID.value</name>
-          <recordfield>SALESPROJECT_FORECAST.SALESPROJECT_FORECASTID</recordfield>
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>SALESPROJECT_ID.value</name>
-          <recordfield>SALESPROJECT_FORECAST.SALESPROJECT_ID</recordfield>
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>TYPE.value</name>
-          <recordfield>SALESPROJECT_FORECAST.TYPE</recordfield>
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>VOLUME.value</name>
-          <recordfield>SALESPROJECT_FORECAST.VOLUME</recordfield>
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>GROUPCODE.displayValue</name>
-          <expression>%aditoprj%/entity/SalesprojectForecast_entity/recordcontainers/db/recordfieldmappings/groupcode.displayvalue/expression.js</expression>
-        </dbRecordFieldMapping>
-      </recordFieldMappings>
-    </dbRecordContainer>
-  </recordContainers>
-</entity>
diff --git a/entity/SalesprojectForecast_entity/entityfields/salesproject_id/valueProcess.js b/entity/SalesprojectForecast_entity/entityfields/salesproject_id/valueProcess.js
deleted file mode 100644
index 5f36de767c..0000000000
--- a/entity/SalesprojectForecast_entity/entityfields/salesproject_id/valueProcess.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import("system.result");
-import("system.neon");
-import("system.vars");
-
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
-{
-    if(vars.exists("$param.SalesprojectId_param") && vars.get("$param.SalesprojectId_param") != null) {
-        result.string(vars.getString("$param.SalesprojectId_param"));    
-    }
-}
\ No newline at end of file
diff --git a/entity/SalesprojectForecast_entity/recordcontainers/db/conditionProcess.js b/entity/SalesprojectForecast_entity/recordcontainers/db/conditionProcess.js
deleted file mode 100644
index 647c25565d..0000000000
--- a/entity/SalesprojectForecast_entity/recordcontainers/db/conditionProcess.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import("system.db");
-import("system.result");
-import("Sql_lib");
-
-var cond = new SqlCondition();
-cond.andPrepareVars("SALESPROJECT_FORECAST.SALESPROJECT_ID", "$param.SalesprojectId_param");
-
-//TODO: use a preparedCondition when available #1030812 #1034026
-result.string(db.translateCondition(cond.build("1 = 1")));
\ No newline at end of file
diff --git a/entity/Salesproject_entity/Salesproject_entity.aod b/entity/Salesproject_entity/Salesproject_entity.aod
index d0183a1589..9f964bb8d2 100644
--- a/entity/Salesproject_entity/Salesproject_entity.aod
+++ b/entity/Salesproject_entity/Salesproject_entity.aod
@@ -152,19 +152,22 @@
       </children>
     </entityConsumer>
     <entityConsumer>
-      <name>SalesprojectForecasts</name>
+      <name>Forecasts</name>
       <title>Forecast</title>
       <fieldType>DEPENDENCY_OUT</fieldType>
       <dependency>
         <name>dependency</name>
-        <entityName>SalesprojectForecast_entity</entityName>
-        <fieldName>SalesprojectForecasts</fieldName>
+        <entityName>Forecast_entity</entityName>
+        <fieldName>Links</fieldName>
       </dependency>
       <children>
         <entityParameter>
-          <name>SalesprojectId_param</name>
-          <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/salesprojectforecasts/children/salesprojectid_param/valueProcess.js</valueProcess>
-          <triggerRecalculation v="true" />
+          <name>ObjectType_param</name>
+          <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/forecasts/children/objecttype_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>ObjectRowId_param</name>
+          <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/forecasts/children/objectrowid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
     </entityConsumer>
@@ -187,19 +190,22 @@
       </children>
     </entityConsumer>
     <entityConsumer>
-      <name>SalesprojectOffers</name>
+      <name>Offers</name>
       <title>Offer</title>
       <fieldType>DEPENDENCY_OUT</fieldType>
       <dependency>
         <name>dependency</name>
         <entityName>Offer_entity</entityName>
-        <fieldName>SalesprojectOffers</fieldName>
+        <fieldName>Links</fieldName>
       </dependency>
       <children>
         <entityParameter>
-          <name>SalesprojectId_param</name>
-          <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/salesprojectoffers/children/salesprojectid_param/valueProcess.js</valueProcess>
-          <triggerRecalculation v="true" />
+          <name>ObjectRowId_param</name>
+          <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/offers/children/objectrowid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>ObjectType_param</name>
+          <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/offers/children/objecttype_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
     </entityConsumer>
@@ -253,7 +259,7 @@
       <fieldType>DEPENDENCY_OUT</fieldType>
       <dependency>
         <name>dependency</name>
-        <entityName>SalesprojectClassification_entity</entityName>
+        <entityName>Classification_entity</entityName>
         <fieldName>SalesprojectClassifications</fieldName>
       </dependency>
       <children>
@@ -526,14 +532,6 @@
     <entityProvider>
       <name>openSalesprojects</name>
       <fieldType>DEPENDENCY_IN</fieldType>
-      <dependencies>
-        <entityDependency>
-          <name>631f55f9-fb0f-4205-bdb8-6e3476268ab4</name>
-          <entityName>Offer_entity</entityName>
-          <fieldName>Salesprojects</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>State_param</name>
diff --git a/entity/Salesproject_entity/entityfields/forecasts/children/objectrowid_param/valueProcess.js b/entity/Salesproject_entity/entityfields/forecasts/children/objectrowid_param/valueProcess.js
new file mode 100644
index 0000000000..9ac41f1324
--- /dev/null
+++ b/entity/Salesproject_entity/entityfields/forecasts/children/objectrowid_param/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.logging");
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.SALESPROJECTID"));
+logging.log("Salesprojectid:    " + vars.get("$field.SALESPROJECTID"))
\ No newline at end of file
diff --git a/entity/Salesproject_entity/entityfields/forecasts/children/objecttype_param/valueProcess.js b/entity/Salesproject_entity/entityfields/forecasts/children/objecttype_param/valueProcess.js
new file mode 100644
index 0000000000..c346bbcfec
--- /dev/null
+++ b/entity/Salesproject_entity/entityfields/forecasts/children/objecttype_param/valueProcess.js
@@ -0,0 +1,3 @@
+import("Context_lib");
+import("system.result");
+result.string(ContextUtils.getCurrentContextId());
\ No newline at end of file
diff --git a/entity/Salesproject_entity/entityfields/offers/children/objectrowid_param/valueProcess.js b/entity/Salesproject_entity/entityfields/offers/children/objectrowid_param/valueProcess.js
new file mode 100644
index 0000000000..0c198ef8c2
--- /dev/null
+++ b/entity/Salesproject_entity/entityfields/offers/children/objectrowid_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.logging");
+import("system.vars");
+import("system.result");
+result.string(vars.get("$field.SALESPROJECTID"));
\ No newline at end of file
diff --git a/entity/Salesproject_entity/entityfields/offers/children/objecttype_param/valueProcess.js b/entity/Salesproject_entity/entityfields/offers/children/objecttype_param/valueProcess.js
new file mode 100644
index 0000000000..d0156b4590
--- /dev/null
+++ b/entity/Salesproject_entity/entityfields/offers/children/objecttype_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.logging");
+import("Context_lib");
+import("system.result");
+result.string(ContextUtils.getCurrentContextId());
\ No newline at end of file
diff --git a/entity/Salesproject_entity/entityfields/salesprojectforecasts/children/salesprojectid_param/valueProcess.js b/entity/Salesproject_entity/entityfields/salesprojectforecasts/children/forecastid_param/valueProcess.js
similarity index 100%
rename from entity/Salesproject_entity/entityfields/salesprojectforecasts/children/salesprojectid_param/valueProcess.js
rename to entity/Salesproject_entity/entityfields/salesprojectforecasts/children/forecastid_param/valueProcess.js
diff --git a/entity/Salesproject_entity/entityfields/salesprojectoffers/children/salesprojectid_param/valueProcess.js b/entity/Salesproject_entity/entityfields/salesprojectoffers/children/salesprojectid_param/valueProcess.js
deleted file mode 100644
index b9a94c51a1..0000000000
--- a/entity/Salesproject_entity/entityfields/salesprojectoffers/children/salesprojectid_param/valueProcess.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.result");
-import("system.vars");
-
-result.string(vars.getString("$field.SALESPROJECTID"));
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/onDBDelete.js b/entity/Salesproject_entity/recordcontainers/db/onDBDelete.js
index 65d94ab76d..ba0dcee1bd 100644
--- a/entity/Salesproject_entity/recordcontainers/db/onDBDelete.js
+++ b/entity/Salesproject_entity/recordcontainers/db/onDBDelete.js
@@ -8,9 +8,7 @@ if (currentId)
 {
     var toDelete = [
         "SALESPROJECT_COMPETITION",
-        "SALESPROJECT_CLASSIFICATION",
         "SALESPROJECT_MILESTONE",
-        "SALESPROJECT_FORECAST",
         "SALESPROJECT_MEMBER",
         "SALESPROJECT_SOURCE"
     ];
diff --git a/entity/Salesproject_entity/recordcontainers/db/onDBUpdate.js b/entity/Salesproject_entity/recordcontainers/db/onDBUpdate.js
index 95c901de86..8312582ece 100644
--- a/entity/Salesproject_entity/recordcontainers/db/onDBUpdate.js
+++ b/entity/Salesproject_entity/recordcontainers/db/onDBUpdate.js
@@ -33,7 +33,7 @@ vars.get("$local.changed").forEach(function(fieldName) {
             if (state == 'd8a60f60-a4e6-46ee-88ec-bac53e1afedd')
             {
                 // set all offers of the salesproject to lost
-                db.updateData("OFFER", ["STATUS"], null, ["a5682630-01ae-4769-8f03-47dc1db44da4"], SqlCondition.equals("OFFER.SALESPROJECT_ID", vars.getString("$field.SALESPROJECTID"), "1=2"));
+                db.updateData("OFFER", ["STATUS"], null, ["a5682630-01ae-4769-8f03-47dc1db44da4"], SqlCondition.equals("OFFER.OBJECT_ROWID", vars.getString("$field.SALESPROJECTID"), "1=2"));
                 _updateReasons();
                 clearReason = false;
             }
@@ -50,7 +50,7 @@ vars.get("$local.changed").forEach(function(fieldName) {
             {
                 // do not notify as the user just got a question, if he really would like to clear the forecast
                 needToUpdateForecast = false;
-                db.deleteData("SALESPROJECT_FORECAST", SqlCondition.equals("SALESPROJECT_FORECAST.SALESPROJECT_ID", vars.getString("$field.SALESPROJECTID"), "1=2"));
+                db.deleteData("FORECAST", SqlCondition.equals("FORECAST.OBJECT_ROWID", vars.getString("$field.SALESPROJECTID"), "1=2"));
             }
             // if state changed, but not to one of the above states
             else
diff --git a/neonContext/SalesprojectClassification/SalesprojectClassification.aod b/neonContext/Classification/Classification.aod
similarity index 62%
rename from neonContext/SalesprojectClassification/SalesprojectClassification.aod
rename to neonContext/Classification/Classification.aod
index 6ee5b6a54f..93742f2732 100644
--- a/neonContext/SalesprojectClassification/SalesprojectClassification.aod
+++ b/neonContext/Classification/Classification.aod
@@ -1,18 +1,18 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.0">
-  <name>SalesprojectClassification</name>
+  <name>Classification</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
-  <filterview>SalesprojectClassificationFilter_view</filterview>
-  <preview>SalesprojectClassificationPreview_view</preview>
-  <entity>SalesprojectClassification_entity</entity>
+  <filterview>ClassificationFilter_view</filterview>
+  <preview>ClassificationPreview_view</preview>
+  <entity>Classification_entity</entity>
   <references>
     <neonViewReference>
       <name>c0720a84-98a8-459d-bdf5-b3daf56ee059</name>
-      <view>SalesprojectClassificationFilter_view</view>
+      <view>ClassificationFilter_view</view>
     </neonViewReference>
     <neonViewReference>
       <name>e5f1c9a7-19a8-433e-b25e-83001d4f7bf8</name>
-      <view>SalesprojectClassificationPreview_view</view>
+      <view>ClassificationPreview_view</view>
     </neonViewReference>
   </references>
 </neonContext>
diff --git a/neonContext/SalesprojectForecast/SalesprojectForecast.aod b/neonContext/Forecast/Forecast.aod
similarity index 62%
rename from neonContext/SalesprojectForecast/SalesprojectForecast.aod
rename to neonContext/Forecast/Forecast.aod
index b345c4c47e..cc439ee0ee 100644
--- a/neonContext/SalesprojectForecast/SalesprojectForecast.aod
+++ b/neonContext/Forecast/Forecast.aod
@@ -1,23 +1,23 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.0">
-  <name>SalesprojectForecast</name>
+  <name>Forecast</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
-  <filterview>SalesprojectForecastFilter_view</filterview>
-  <editview>SalesprojectForecastEdit_view</editview>
-  <preview>SalesprojectForecastPreview_view</preview>
-  <entity>SalesprojectForecast_entity</entity>
+  <filterview>ForecastFilter_view</filterview>
+  <editview>ForecastEdit_view</editview>
+  <preview>ForecastPreview_view</preview>
+  <entity>Forecast_entity</entity>
   <references>
     <neonViewReference>
       <name>20d80c15-97f0-490c-b845-b2b4f63c6a5d</name>
-      <view>SalesprojectForecastFilter_view</view>
+      <view>ForecastFilter_view</view>
     </neonViewReference>
     <neonViewReference>
       <name>7cc72509-722b-4d4f-870c-08878129ceb9</name>
-      <view>SalesprojectForecastEdit_view</view>
+      <view>ForecastEdit_view</view>
     </neonViewReference>
     <neonViewReference>
       <name>1fe6e10b-52b4-44a4-88d8-9784a967572c</name>
-      <view>SalesprojectForecastPreview_view</view>
+      <view>ForecastPreview_view</view>
     </neonViewReference>
   </references>
 </neonContext>
diff --git a/neonView/SalesprojectClassificationFilter_view/SalesprojectClassificationFilter_view.aod b/neonView/ClassificationFilter_view/ClassificationFilter_view.aod
similarity index 94%
rename from neonView/SalesprojectClassificationFilter_view/SalesprojectClassificationFilter_view.aod
rename to neonView/ClassificationFilter_view/ClassificationFilter_view.aod
index c12d4d020e..db8719cd4e 100644
--- a/neonView/SalesprojectClassificationFilter_view/SalesprojectClassificationFilter_view.aod
+++ b/neonView/ClassificationFilter_view/ClassificationFilter_view.aod
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.1">
-  <name>SalesprojectClassificationFilter_view</name>
+  <name>ClassificationFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
     <boxLayout>
diff --git a/neonView/SalesprojectClassificationPreview_view/SalesprojectClassificationPreview_view.aod b/neonView/ClassificationPreview_view/ClassificationPreview_view.aod
similarity index 95%
rename from neonView/SalesprojectClassificationPreview_view/SalesprojectClassificationPreview_view.aod
rename to neonView/ClassificationPreview_view/ClassificationPreview_view.aod
index 7fc86e8475..fecc003882 100644
--- a/neonView/SalesprojectClassificationPreview_view/SalesprojectClassificationPreview_view.aod
+++ b/neonView/ClassificationPreview_view/ClassificationPreview_view.aod
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.1">
-  <name>SalesprojectClassificationPreview_view</name>
+  <name>ClassificationPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
     <headerFooterLayout>
diff --git a/neonView/SalesprojectForecastEdit_view/SalesprojectForecastEdit_view.aod b/neonView/ForecastEdit_view/ForecastEdit_view.aod
similarity index 96%
rename from neonView/SalesprojectForecastEdit_view/SalesprojectForecastEdit_view.aod
rename to neonView/ForecastEdit_view/ForecastEdit_view.aod
index 626e71ea65..5808b80f51 100644
--- a/neonView/SalesprojectForecastEdit_view/SalesprojectForecastEdit_view.aod
+++ b/neonView/ForecastEdit_view/ForecastEdit_view.aod
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.1">
-  <name>SalesprojectForecastEdit_view</name>
+  <name>ForecastEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <isSmall v="true" />
   <layout>
diff --git a/neonView/SalesprojectForecastFilter_view/SalesprojectForecastFilter_view.aod b/neonView/ForecastFilter_view/ForecastFilter_view.aod
similarity index 77%
rename from neonView/SalesprojectForecastFilter_view/SalesprojectForecastFilter_view.aod
rename to neonView/ForecastFilter_view/ForecastFilter_view.aod
index 63f7e54df8..a99ce54d99 100644
--- a/neonView/SalesprojectForecastFilter_view/SalesprojectForecastFilter_view.aod
+++ b/neonView/ForecastFilter_view/ForecastFilter_view.aod
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.1">
-  <name>SalesprojectForecastFilter_view</name>
+  <name>ForecastFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
   <layout>
@@ -29,6 +29,14 @@
           <name>305d0254-a1ea-4733-87a7-a4d85fc78b7e</name>
           <entityField>INFO</entityField>
         </neonTableColumn>
+        <neonTableColumn>
+          <name>945c0ec1-826f-4dc7-9556-7bd3d5e0afbc</name>
+          <entityField>OBJECT_TYPE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>1ac60cf5-fa50-4305-81b4-859a883ddc3e</name>
+          <entityField>OBJECT_ROWID</entityField>
+        </neonTableColumn>
       </columns>
     </tableViewTemplate>
   </children>
diff --git a/neonView/SalesprojectForecastPreview_view/SalesprojectForecastPreview_view.aod b/neonView/ForecastPreview_view/ForecastPreview_view.aod
similarity index 96%
rename from neonView/SalesprojectForecastPreview_view/SalesprojectForecastPreview_view.aod
rename to neonView/ForecastPreview_view/ForecastPreview_view.aod
index 8b7f0b9c84..ecb16cc14b 100644
--- a/neonView/SalesprojectForecastPreview_view/SalesprojectForecastPreview_view.aod
+++ b/neonView/ForecastPreview_view/ForecastPreview_view.aod
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.1">
-  <name>SalesprojectForecastPreview_view</name>
+  <name>ForecastPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
     <headerFooterLayout>
diff --git a/neonView/SalesprojectMain_view/SalesprojectMain_view.aod b/neonView/SalesprojectMain_view/SalesprojectMain_view.aod
index 2ac8547b5b..a7b23cd90d 100644
--- a/neonView/SalesprojectMain_view/SalesprojectMain_view.aod
+++ b/neonView/SalesprojectMain_view/SalesprojectMain_view.aod
@@ -26,8 +26,8 @@
     </neonViewReference>
     <neonViewReference>
       <name>9dbe03b3-e5d3-4db8-b542-506b13322d4f</name>
-      <entityField>SalesprojectForecasts</entityField>
-      <view>SalesprojectForecastFilter_view</view>
+      <entityField>Forecasts</entityField>
+      <view>ForecastFilter_view</view>
     </neonViewReference>
     <neonViewReference>
       <name>8986df12-88fc-49a8-9e48-f4c1f371532f</name>
@@ -46,7 +46,7 @@
     </neonViewReference>
     <neonViewReference>
       <name>b1deae1b-c39a-48bd-9221-ed4153ee8ec9</name>
-      <entityField>SalesprojectOffers</entityField>
+      <entityField>Offers</entityField>
       <view>OfferFilter_view</view>
     </neonViewReference>
     <neonViewReference>
diff --git a/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod b/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod
index 744c534f9d..17e857ea50 100644
--- a/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod
+++ b/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod
@@ -2,7 +2,7 @@
 <preferences xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="3.1.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/preferences/3.1.0">
   <name>_____PREFERENCES_PROJECT</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
-  <projectName>xRM-Basic_current</projectName>
+  <projectName>basic_25042019</projectName>
   <jditoMaxContentSize v="57671680" />
   <calendarCategoriesEvent>
     <entry>
-- 
GitLab