From f50425334f14abf831f76759890c37e0c45d0598 Mon Sep 17 00:00:00 2001
From: Diego Ruiz <12065321+d-ruiz@users.noreply.github.com>
Date: Wed, 24 Jun 2020 16:43:11 +0200
Subject: [PATCH] IDEMPIERE-1026 Button on table to create automatically the
window (#128)
* IDEMPIERE-1026 Button on table to create automatically the window
* IDEMPIERE-1026 Button on table to create automatically the window - Fixed script
* IDEMPIERE-1026 Button on table to create automatically the window - Header update
* IDEMPIERE-1026 Button on table to create automatically the window - Follow best practices, no hardcoded IDs, no mixed cache and transaction
* IDEMPIERE-1026 Button on table to create automatically the window - Carlos PR
---
.../oracle/202006191355_IDEMPIERE-1026.sql | 94 +++++++
.../202006191355_IDEMPIERE-1026.sql | 91 ++++++
.../process/CreateWindowFromTable.java | 263 ++++++++++++++++++
.../org/compiere/process/TabCreateFields.java | 1 +
.../src/org/compiere/model/SystemIDs.java | 9 +
5 files changed, 458 insertions(+)
create mode 100644 migration/i7.1z/oracle/202006191355_IDEMPIERE-1026.sql
create mode 100644 migration/i7.1z/postgresql/202006191355_IDEMPIERE-1026.sql
create mode 100644 org.adempiere.base.process/src/org/compiere/process/CreateWindowFromTable.java
diff --git a/migration/i7.1z/oracle/202006191355_IDEMPIERE-1026.sql b/migration/i7.1z/oracle/202006191355_IDEMPIERE-1026.sql
new file mode 100644
index 0000000000..4274a79fa0
--- /dev/null
+++ b/migration/i7.1z/oracle/202006191355_IDEMPIERE-1026.sql
@@ -0,0 +1,94 @@
+SET SQLBLANKLINES ON
+SET DEFINE OFF
+
+-- IDEMPIERE-1026 Button on table to create automatically the window
+-- Jun 19, 2020, 10:31:17 AM CEST
+INSERT INTO AD_Process (AD_Process_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,Description,Help,IsReport,Value,IsDirectPrint,Classname,AccessLevel,EntityType,Statistic_Count,Statistic_Seconds,IsBetaFunctionality,IsServerProcess,ShowHelp,CopyFromProcess,AD_Process_UU,AllowMultipleExecution) VALUES (200118,0,0,'Y',TO_DATE('2020-06-19 10:31:16','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2020-06-19 10:31:16','YYYY-MM-DD HH24:MI:SS'),100,'Create Window, Tab & Field from Table','Create Window, Tab & Field record of the Table','This process will take the table definition and create the Window/Tab and field record with these options:
+
+New Window: if selected the process will create a new Window record. Otherwise, the process will create a new tab and add it to the selected window.
+Create Menu: if selected the process creates the menu record for the new window.','N','AD_Table_CreateWindow','N','org.compiere.process.CreateWindowFromTable','4','D',0,0,'N','N','Y','N','b1753358-c7dd-4387-ab99-355d081a5de2','P')
+;
+
+-- Jun 19, 2020, 10:35:37 AM CEST
+INSERT INTO AD_Element (AD_Element_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,ColumnName,Name,Description,PrintName,EntityType,AD_Element_UU) VALUES (203419,0,0,'Y',TO_DATE('2020-06-19 10:35:36','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2020-06-19 10:35:36','YYYY-MM-DD HH24:MI:SS'),100,'IsNewWindow','New Window','Defines if it creates a new window record or creates a new tab on an existing window','New Window','D','27a201ff-ce4c-4c82-a218-201e84c621cd')
+;
+
+-- Jun 19, 2020, 10:36:10 AM CEST
+INSERT INTO AD_Process_Para (AD_Process_Para_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,Description,AD_Process_ID,SeqNo,AD_Reference_ID,IsRange,FieldLength,IsMandatory,DefaultValue,ColumnName,IsCentrallyMaintained,EntityType,AD_Element_ID,AD_Process_Para_UU,IsEncrypted,IsAutocomplete) VALUES (200294,0,0,'Y',TO_DATE('2020-06-19 10:36:10','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2020-06-19 10:36:10','YYYY-MM-DD HH24:MI:SS'),100,'New Window','Defines if it creates a new window record or creates a new tab on an existing window',200118,10,20,'N',0,'N','Y','IsNewWindow','Y','D',203419,'64bce238-182c-4322-81dc-6f2d1eebabea','N','N')
+;
+
+-- Jun 19, 2020, 10:39:08 AM CEST
+INSERT INTO AD_Process_Para (AD_Process_Para_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,Description,Help,AD_Process_ID,SeqNo,AD_Reference_ID,AD_Reference_Value_ID,IsRange,FieldLength,IsMandatory,DefaultValue,ColumnName,IsCentrallyMaintained,EntityType,AD_Element_ID,ReadOnlyLogic,DisplayLogic,AD_Process_Para_UU,IsEncrypted,MandatoryLogic,IsAutocomplete) VALUES (200295,0,0,'Y',TO_DATE('2020-06-19 10:39:07','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2020-06-19 10:39:07','YYYY-MM-DD HH24:MI:SS'),100,'WindowType','Type or classification of a Window','The Window Type indicates the type of window being defined (Maintain, Transaction or Query)',200118,20,17,108,'N',0,'N','M','WindowType','Y','D',631,NULL,'@IsNewWindow@=''Y''','3ed90248-006a-4679-80a4-d8868f9787f2','N','@IsNewWindow@=''Y''','N')
+;
+
+-- Jun 19, 2020, 10:40:38 AM CEST
+INSERT INTO AD_Process_Para (AD_Process_Para_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,Description,Help,AD_Process_ID,SeqNo,AD_Reference_ID,IsRange,FieldLength,IsMandatory,ColumnName,IsCentrallyMaintained,EntityType,AD_Element_ID,DisplayLogic,AD_Process_Para_UU,IsEncrypted,IsAutocomplete) VALUES (200296,0,0,'Y',TO_DATE('2020-06-19 10:40:37','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2020-06-19 10:40:37','YYYY-MM-DD HH24:MI:SS'),100,'Sales Transaction','This is a Sales Transaction','The Sales Transaction checkbox indicates if this item is a Sales Transaction.',200118,30,20,'N',1,'N','IsSOTrx','Y','D',1106,'@IsNewWindow@=''Y''','6f0465a6-25c0-44ca-a7c9-7f4f775e8528','N','N')
+;
+
+-- Jun 19, 2020, 10:40:44 AM CEST
+UPDATE AD_Process_Para SET FieldLength=1,Updated=TO_DATE('2020-06-19 10:40:44','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Process_Para_ID=200295
+;
+
+-- Jun 19, 2020, 10:40:52 AM CEST
+UPDATE AD_Process_Para SET FieldLength=1,Updated=TO_DATE('2020-06-19 10:40:52','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Process_Para_ID=200294
+;
+
+-- Jun 19, 2020, 10:42:38 AM CEST
+INSERT INTO AD_Element (AD_Element_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,ColumnName,Name,Description,PrintName,EntityType,AD_Element_UU) VALUES (203420,0,0,'Y',TO_DATE('2020-06-19 10:42:37','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2020-06-19 10:42:37','YYYY-MM-DD HH24:MI:SS'),100,'IsCreateMenu','Create Menu','Defines if it creates a new menu record for the new window','Create Menu','D','2f32e14c-2f68-410e-bf59-100686864549')
+;
+
+-- Jun 19, 2020, 10:43:12 AM CEST
+INSERT INTO AD_Process_Para (AD_Process_Para_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,Description,AD_Process_ID,SeqNo,AD_Reference_ID,IsRange,FieldLength,IsMandatory,DefaultValue,ColumnName,IsCentrallyMaintained,EntityType,AD_Element_ID,DisplayLogic,AD_Process_Para_UU,IsEncrypted,IsAutocomplete) VALUES (200297,0,0,'Y',TO_DATE('2020-06-19 10:43:11','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2020-06-19 10:43:11','YYYY-MM-DD HH24:MI:SS'),100,'Create Menu','Defines if it creates a new menu record for the new window',200118,40,20,'N',1,'N','N','IsCreateMenu','Y','D',203420,'@IsNewWindow@=''Y''','b69cca27-9d64-4ead-83ca-3b01cb3e0e65','N','N')
+;
+
+-- Jun 19, 2020, 10:44:27 AM CEST
+INSERT INTO AD_Process_Para (AD_Process_Para_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,Description,Help,AD_Process_ID,SeqNo,AD_Reference_ID,IsRange,FieldLength,IsMandatory,DefaultValue,ColumnName,IsCentrallyMaintained,EntityType,AD_Element_ID,DisplayLogic,AD_Process_Para_UU,IsEncrypted,MandatoryLogic,IsAutocomplete) VALUES (200298,0,0,'Y',TO_DATE('2020-06-19 10:44:26','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2020-06-19 10:44:26','YYYY-MM-DD HH24:MI:SS'),100,'Window','Data entry or display window','The Window field identifies a unique Window in the system.',200118,50,19,'N',22,'N',NULL,'AD_Window_ID','Y','D',143,'@IsNewWindow@=''N''','555f1f56-c2d6-412f-9d81-bdb8ea7f0a70','N','@IsNewWindow@=''N''','N')
+;
+
+-- Jun 19, 2020, 10:45:31 AM CEST
+INSERT INTO AD_Process_Para (AD_Process_Para_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,Description,Help,AD_Process_ID,SeqNo,AD_Reference_ID,IsRange,FieldLength,IsMandatory,ValueMin,ColumnName,IsCentrallyMaintained,EntityType,AD_Element_ID,DisplayLogic,AD_Process_Para_UU,IsEncrypted,MandatoryLogic,IsAutocomplete) VALUES (200299,0,0,'Y',TO_DATE('2020-06-19 10:45:30','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2020-06-19 10:45:30','YYYY-MM-DD HH24:MI:SS'),100,'Tab Level','Hierarchical Tab Level (0 = top)','Hierarchical level of the tab. If the level is 0, it is the top entity. Level 1 entries are dependent on level 0, etc.',200118,60,11,'N',22,'N','0','TabLevel','Y','D',1725,'@IsNewWindow@=''N''','a618adee-33fd-4b4d-9c8d-746e265da407','N','@IsNewWindow@=''N''','N')
+;
+
+-- Jun 19, 2020, 10:48:38 AM CEST
+INSERT INTO AD_Element (AD_Element_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,ColumnName,Name,PrintName,EntityType,AD_Element_UU) VALUES (203422,0,0,'Y',TO_DATE('2020-06-19 10:48:38','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2020-06-19 10:48:38','YYYY-MM-DD HH24:MI:SS'),100,'CreateWindowFromTable','Create Window From Table','Create Window From Table','D','486d22a4-faaa-4d2e-ba7a-0ba49c40c06b')
+;
+
+-- Jun 19, 2020, 10:49:02 AM CEST
+INSERT INTO AD_Column (AD_Column_ID,Version,Name,AD_Table_ID,ColumnName,FieldLength,IsKey,IsParent,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsEncrypted,AD_Reference_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Element_ID,IsUpdateable,AD_Process_ID,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,IsToolbarButton,IsSecure,IsHtml) VALUES (214207,1,'Create Window From Table',100,'CreateWindowFromTable',1,'N','N','N','N','N',0,'N',28,0,0,'Y',TO_DATE('2020-06-19 10:49:01','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2020-06-19 10:49:01','YYYY-MM-DD HH24:MI:SS'),100,203422,'Y',200118,'N','D','N','N','N','Y','a68ccf9f-3997-4dab-a7d2-65a17f64d00c','Y','Y','N','N')
+;
+
+-- Jun 19, 2020, 10:49:07 AM CEST
+ALTER TABLE AD_Table ADD CreateWindowFromTable CHAR(1) DEFAULT NULL
+;
+
+-- Jun 19, 2020, 10:51:02 AM CEST
+INSERT INTO AD_Field (AD_Field_ID,Name,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLength,SeqNo,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,SeqNoGrid,XPosition,ColumnSpan,NumLines,IsQuickEntry,IsDefaultFocus,IsAdvancedField,IsQuickForm) VALUES (206414,'Create Window From Table',100,214207,'Y',1,230,'N','N','N','N',0,0,'Y',TO_DATE('2020-06-19 10:51:00','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2020-06-19 10:51:00','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','083abcc3-842b-498d-a228-514d9d458136','Y',160,2,2,1,'N','N','N','N')
+;
+
+-- Jun 19, 2020, 11:09:59 AM CEST
+INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('E','The table is not valid to create a new window, please verify that it has these columns: AD_Client_ID, AD_Org_ID, Created, CreatedBy, IsActive, Updated, UpdatedBy.',0,0,'Y',TO_DATE('2020-06-19 11:09:57','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2020-06-19 11:09:57','YYYY-MM-DD HH24:MI:SS'),100,200615,'NewWindowNoValid','D','2bc73265-448f-4102-95f8-da94484e286f')
+;
+
+-- Jun 19, 2020, 11:49:59 AM CEST
+INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('E','Transaction windows require to have a Processed column. Please create the column and try again.',0,0,'Y',TO_DATE('2020-06-19 11:49:59','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2020-06-19 11:49:59','YYYY-MM-DD HH24:MI:SS'),100,200616,'TrxWindowMandatoryProcessed','D','eb358a84-5395-4ee8-9ad6-5c532a2dd6a8')
+;
+
+-- Jun 22, 2020, 2:23:37 PM CEST
+UPDATE AD_Process_Para SET DefaultValue=NULL,Updated=TO_DATE('2020-06-22 14:23:37','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Process_Para_ID=200076
+;
+
+-- Jun 24, 2020, 1:25:07 PM CEST
+INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('E','There is already a window with the name {0}',0,0,'Y',TO_DATE('2020-06-24 13:25:07','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2020-06-24 13:25:07','YYYY-MM-DD HH24:MI:SS'),100,200617,'DuplicatedWindowName','D','12dbf77d-06a0-4300-92e0-ce0c2f1cdedb')
+;
+
+-- Jun 24, 2020, 1:30:43 PM CEST
+INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('E','No column is defined as Parent Link, therefore, the table cannot be a detail tab.',0,0,'Y',TO_DATE('2020-06-24 13:30:42','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2020-06-24 13:30:42','YYYY-MM-DD HH24:MI:SS'),100,200618,'NoParentLink','D','5383b8b1-9434-4148-8ce0-7c901f9e5507')
+;
+
+-- Jun 24, 2020, 1:40:00 PM CEST
+INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('E','The maximum tab level for this window can be {0}.',0,0,'Y',TO_DATE('2020-06-24 13:40:00','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2020-06-24 13:40:00','YYYY-MM-DD HH24:MI:SS'),100,200619,'MaxTabLevel','D','5ceed3b5-080a-4eab-b408-7f4eb2744624')
+;
+
+SELECT register_migration_script('202006191355_IDEMPIERE-1026.sql') FROM dual
+;
+
diff --git a/migration/i7.1z/postgresql/202006191355_IDEMPIERE-1026.sql b/migration/i7.1z/postgresql/202006191355_IDEMPIERE-1026.sql
new file mode 100644
index 0000000000..77b7fa8c5c
--- /dev/null
+++ b/migration/i7.1z/postgresql/202006191355_IDEMPIERE-1026.sql
@@ -0,0 +1,91 @@
+-- IDEMPIERE-1026 Button on table to create automatically the window
+-- Jun 19, 2020, 10:31:17 AM CEST
+INSERT INTO AD_Process (AD_Process_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,Description,Help,IsReport,Value,IsDirectPrint,Classname,AccessLevel,EntityType,Statistic_Count,Statistic_Seconds,IsBetaFunctionality,IsServerProcess,ShowHelp,CopyFromProcess,AD_Process_UU,AllowMultipleExecution) VALUES (200118,0,0,'Y',TO_TIMESTAMP('2020-06-19 10:31:16','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-06-19 10:31:16','YYYY-MM-DD HH24:MI:SS'),100,'Create Window, Tab & Field from Table','Create Window, Tab & Field record of the Table','This process will take the table definition and create the Window/Tab and field record with these options:
+
+New Window: if selected the process will create a new Window record. Otherwise, the process will create a new tab and add it to the selected window.
+Create Menu: if selected the process creates the menu record for the new window.','N','AD_Table_CreateWindow','N','org.compiere.process.CreateWindowFromTable','4','D',0,0,'N','N','Y','N','b1753358-c7dd-4387-ab99-355d081a5de2','P')
+;
+
+-- Jun 19, 2020, 10:35:37 AM CEST
+INSERT INTO AD_Element (AD_Element_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,ColumnName,Name,Description,PrintName,EntityType,AD_Element_UU) VALUES (203419,0,0,'Y',TO_TIMESTAMP('2020-06-19 10:35:36','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-06-19 10:35:36','YYYY-MM-DD HH24:MI:SS'),100,'IsNewWindow','New Window','Defines if it creates a new window record or creates a new tab on an existing window','New Window','D','27a201ff-ce4c-4c82-a218-201e84c621cd')
+;
+
+-- Jun 19, 2020, 10:36:10 AM CEST
+INSERT INTO AD_Process_Para (AD_Process_Para_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,Description,AD_Process_ID,SeqNo,AD_Reference_ID,IsRange,FieldLength,IsMandatory,DefaultValue,ColumnName,IsCentrallyMaintained,EntityType,AD_Element_ID,AD_Process_Para_UU,IsEncrypted,IsAutocomplete) VALUES (200294,0,0,'Y',TO_TIMESTAMP('2020-06-19 10:36:10','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-06-19 10:36:10','YYYY-MM-DD HH24:MI:SS'),100,'New Window','Defines if it creates a new window record or creates a new tab on an existing window',200118,10,20,'N',0,'N','Y','IsNewWindow','Y','D',203419,'64bce238-182c-4322-81dc-6f2d1eebabea','N','N')
+;
+
+-- Jun 19, 2020, 10:39:08 AM CEST
+INSERT INTO AD_Process_Para (AD_Process_Para_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,Description,Help,AD_Process_ID,SeqNo,AD_Reference_ID,AD_Reference_Value_ID,IsRange,FieldLength,IsMandatory,DefaultValue,ColumnName,IsCentrallyMaintained,EntityType,AD_Element_ID,ReadOnlyLogic,DisplayLogic,AD_Process_Para_UU,IsEncrypted,MandatoryLogic,IsAutocomplete) VALUES (200295,0,0,'Y',TO_TIMESTAMP('2020-06-19 10:39:07','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-06-19 10:39:07','YYYY-MM-DD HH24:MI:SS'),100,'WindowType','Type or classification of a Window','The Window Type indicates the type of window being defined (Maintain, Transaction or Query)',200118,20,17,108,'N',0,'N','M','WindowType','Y','D',631,NULL,'@IsNewWindow@=''Y''','3ed90248-006a-4679-80a4-d8868f9787f2','N','@IsNewWindow@=''Y''','N')
+;
+
+-- Jun 19, 2020, 10:40:38 AM CEST
+INSERT INTO AD_Process_Para (AD_Process_Para_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,Description,Help,AD_Process_ID,SeqNo,AD_Reference_ID,IsRange,FieldLength,IsMandatory,ColumnName,IsCentrallyMaintained,EntityType,AD_Element_ID,DisplayLogic,AD_Process_Para_UU,IsEncrypted,IsAutocomplete) VALUES (200296,0,0,'Y',TO_TIMESTAMP('2020-06-19 10:40:37','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-06-19 10:40:37','YYYY-MM-DD HH24:MI:SS'),100,'Sales Transaction','This is a Sales Transaction','The Sales Transaction checkbox indicates if this item is a Sales Transaction.',200118,30,20,'N',1,'N','IsSOTrx','Y','D',1106,'@IsNewWindow@=''Y''','6f0465a6-25c0-44ca-a7c9-7f4f775e8528','N','N')
+;
+
+-- Jun 19, 2020, 10:40:44 AM CEST
+UPDATE AD_Process_Para SET FieldLength=1,Updated=TO_TIMESTAMP('2020-06-19 10:40:44','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Process_Para_ID=200295
+;
+
+-- Jun 19, 2020, 10:40:52 AM CEST
+UPDATE AD_Process_Para SET FieldLength=1,Updated=TO_TIMESTAMP('2020-06-19 10:40:52','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Process_Para_ID=200294
+;
+
+-- Jun 19, 2020, 10:42:38 AM CEST
+INSERT INTO AD_Element (AD_Element_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,ColumnName,Name,Description,PrintName,EntityType,AD_Element_UU) VALUES (203420,0,0,'Y',TO_TIMESTAMP('2020-06-19 10:42:37','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-06-19 10:42:37','YYYY-MM-DD HH24:MI:SS'),100,'IsCreateMenu','Create Menu','Defines if it creates a new menu record for the new window','Create Menu','D','2f32e14c-2f68-410e-bf59-100686864549')
+;
+
+-- Jun 19, 2020, 10:43:12 AM CEST
+INSERT INTO AD_Process_Para (AD_Process_Para_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,Description,AD_Process_ID,SeqNo,AD_Reference_ID,IsRange,FieldLength,IsMandatory,DefaultValue,ColumnName,IsCentrallyMaintained,EntityType,AD_Element_ID,DisplayLogic,AD_Process_Para_UU,IsEncrypted,IsAutocomplete) VALUES (200297,0,0,'Y',TO_TIMESTAMP('2020-06-19 10:43:11','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-06-19 10:43:11','YYYY-MM-DD HH24:MI:SS'),100,'Create Menu','Defines if it creates a new menu record for the new window',200118,40,20,'N',1,'N','N','IsCreateMenu','Y','D',203420,'@IsNewWindow@=''Y''','b69cca27-9d64-4ead-83ca-3b01cb3e0e65','N','N')
+;
+
+-- Jun 19, 2020, 10:44:27 AM CEST
+INSERT INTO AD_Process_Para (AD_Process_Para_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,Description,Help,AD_Process_ID,SeqNo,AD_Reference_ID,IsRange,FieldLength,IsMandatory,DefaultValue,ColumnName,IsCentrallyMaintained,EntityType,AD_Element_ID,DisplayLogic,AD_Process_Para_UU,IsEncrypted,MandatoryLogic,IsAutocomplete) VALUES (200298,0,0,'Y',TO_TIMESTAMP('2020-06-19 10:44:26','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-06-19 10:44:26','YYYY-MM-DD HH24:MI:SS'),100,'Window','Data entry or display window','The Window field identifies a unique Window in the system.',200118,50,19,'N',22,'N',NULL,'AD_Window_ID','Y','D',143,'@IsNewWindow@=''N''','555f1f56-c2d6-412f-9d81-bdb8ea7f0a70','N','@IsNewWindow@=''N''','N')
+;
+
+-- Jun 19, 2020, 10:45:31 AM CEST
+INSERT INTO AD_Process_Para (AD_Process_Para_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,Description,Help,AD_Process_ID,SeqNo,AD_Reference_ID,IsRange,FieldLength,IsMandatory,ValueMin,ColumnName,IsCentrallyMaintained,EntityType,AD_Element_ID,DisplayLogic,AD_Process_Para_UU,IsEncrypted,MandatoryLogic,IsAutocomplete) VALUES (200299,0,0,'Y',TO_TIMESTAMP('2020-06-19 10:45:30','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-06-19 10:45:30','YYYY-MM-DD HH24:MI:SS'),100,'Tab Level','Hierarchical Tab Level (0 = top)','Hierarchical level of the tab. If the level is 0, it is the top entity. Level 1 entries are dependent on level 0, etc.',200118,60,11,'N',22,'N','0','TabLevel','Y','D',1725,'@IsNewWindow@=''N''','a618adee-33fd-4b4d-9c8d-746e265da407','N','@IsNewWindow@=''N''','N')
+;
+
+-- Jun 19, 2020, 10:48:38 AM CEST
+INSERT INTO AD_Element (AD_Element_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,ColumnName,Name,PrintName,EntityType,AD_Element_UU) VALUES (203422,0,0,'Y',TO_TIMESTAMP('2020-06-19 10:48:38','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-06-19 10:48:38','YYYY-MM-DD HH24:MI:SS'),100,'CreateWindowFromTable','Create Window From Table','Create Window From Table','D','486d22a4-faaa-4d2e-ba7a-0ba49c40c06b')
+;
+
+-- Jun 19, 2020, 10:49:02 AM CEST
+INSERT INTO AD_Column (AD_Column_ID,Version,Name,AD_Table_ID,ColumnName,FieldLength,IsKey,IsParent,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsEncrypted,AD_Reference_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Element_ID,IsUpdateable,AD_Process_ID,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,IsToolbarButton,IsSecure,IsHtml) VALUES (214207,1,'Create Window From Table',100,'CreateWindowFromTable',1,'N','N','N','N','N',0,'N',28,0,0,'Y',TO_TIMESTAMP('2020-06-19 10:49:01','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-06-19 10:49:01','YYYY-MM-DD HH24:MI:SS'),100,203422,'Y',200118,'N','D','N','N','N','Y','a68ccf9f-3997-4dab-a7d2-65a17f64d00c','Y','Y','N','N')
+;
+
+-- Jun 19, 2020, 10:49:07 AM CEST
+ALTER TABLE AD_Table ADD COLUMN CreateWindowFromTable CHAR(1) DEFAULT NULL
+;
+
+-- Jun 19, 2020, 10:51:02 AM CEST
+INSERT INTO AD_Field (AD_Field_ID,Name,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLength,SeqNo,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,SeqNoGrid,XPosition,ColumnSpan,NumLines,IsQuickEntry,IsDefaultFocus,IsAdvancedField,IsQuickForm) VALUES (206414,'Create Window From Table',100,214207,'Y',1,230,'N','N','N','N',0,0,'Y',TO_TIMESTAMP('2020-06-19 10:51:00','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-06-19 10:51:00','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','083abcc3-842b-498d-a228-514d9d458136','Y',160,2,2,1,'N','N','N','N')
+;
+
+-- Jun 19, 2020, 11:09:59 AM CEST
+INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('E','The table is not valid to create a new window, please verify that it has these columns: AD_Client_ID, AD_Org_ID, Created, CreatedBy, IsActive, Updated, UpdatedBy.',0,0,'Y',TO_TIMESTAMP('2020-06-19 11:09:57','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-06-19 11:09:57','YYYY-MM-DD HH24:MI:SS'),100,200615,'NewWindowNoValid','D','2bc73265-448f-4102-95f8-da94484e286f')
+;
+
+-- Jun 19, 2020, 11:49:59 AM CEST
+INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('E','Transaction windows require to have a Processed column. Please create the column and try again.',0,0,'Y',TO_TIMESTAMP('2020-06-19 11:49:59','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-06-19 11:49:59','YYYY-MM-DD HH24:MI:SS'),100,200616,'TrxWindowMandatoryProcessed','D','eb358a84-5395-4ee8-9ad6-5c532a2dd6a8')
+;
+
+-- Jun 22, 2020, 2:23:37 PM CEST
+UPDATE AD_Process_Para SET DefaultValue=NULL,Updated=TO_TIMESTAMP('2020-06-22 14:23:37','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Process_Para_ID=200076
+;
+
+-- Jun 24, 2020, 1:25:07 PM CEST
+INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('E','There is already a window with the name {0}',0,0,'Y',TO_TIMESTAMP('2020-06-24 13:25:07','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-06-24 13:25:07','YYYY-MM-DD HH24:MI:SS'),100,200617,'DuplicatedWindowName','D','12dbf77d-06a0-4300-92e0-ce0c2f1cdedb')
+;
+
+-- Jun 24, 2020, 1:30:43 PM CEST
+INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('E','No column is defined as Parent Link, therefore, the table cannot be a detail tab.',0,0,'Y',TO_TIMESTAMP('2020-06-24 13:30:42','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-06-24 13:30:42','YYYY-MM-DD HH24:MI:SS'),100,200618,'NoParentLink','D','5383b8b1-9434-4148-8ce0-7c901f9e5507')
+;
+
+-- Jun 24, 2020, 1:40:00 PM CEST
+INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('E','The maximum tab level for this window can be {0}.',0,0,'Y',TO_TIMESTAMP('2020-06-24 13:40:00','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-06-24 13:40:00','YYYY-MM-DD HH24:MI:SS'),100,200619,'MaxTabLevel','D','5ceed3b5-080a-4eab-b408-7f4eb2744624')
+;
+
+SELECT register_migration_script('202006191355_IDEMPIERE-1026.sql') FROM dual
+;
+
diff --git a/org.adempiere.base.process/src/org/compiere/process/CreateWindowFromTable.java b/org.adempiere.base.process/src/org/compiere/process/CreateWindowFromTable.java
new file mode 100644
index 0000000000..47a4ca7e70
--- /dev/null
+++ b/org.adempiere.base.process/src/org/compiere/process/CreateWindowFromTable.java
@@ -0,0 +1,263 @@
+/**********************************************************************
+* This file is part of iDempiere ERP Open Source *
+* http://www.idempiere.org *
+* *
+* Copyright (C) Contributors *
+* *
+* This program is free software; you can redistribute it and/or *
+* modify it under the terms of the GNU General Public License *
+* as published by the Free Software Foundation; either version 2 *
+* of the License, or (at your option) any later version. *
+* *
+* This program is distributed in the hope that it will be useful, *
+* but WITHOUT ANY WARRANTY; without even the implied warranty of *
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+* GNU General Public License for more details. *
+* *
+* You should have received a copy of the GNU General Public License *
+* along with this program; if not, write to the Free Software *
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
+* MA 02110-1301, USA. *
+* *
+* Contributors: *
+* - BX Service GmbH *
+* - Diego Ruiz *
+**********************************************************************/
+package org.compiere.process;
+
+import java.util.logging.Level;
+
+import org.adempiere.exceptions.AdempiereException;
+import org.compiere.model.MColumn;
+import org.compiere.model.MMenu;
+import org.compiere.model.MPInstance;
+import org.compiere.model.MTab;
+import org.compiere.model.MTable;
+import org.compiere.model.MWindow;
+import org.compiere.model.SystemIDs;
+import org.compiere.util.DB;
+import org.compiere.util.Msg;
+import org.compiere.util.Trx;
+
+/**
+ * Create Menu - Window/tab & field from a table
+ *
+ * @author Diego Ruiz - BX Service GmbH
+ */
+public class CreateWindowFromTable extends SvrProcess
+{
+ /** Table */
+ private int p_AD_Table_ID = 0;
+
+ /** Window Type */
+ private String p_WindowType = null;
+
+ /** Sales transaction */
+ private boolean p_IsSOTrx = false;
+
+ /** Is a New Window? */
+ private boolean p_isNewWindow = false;
+
+ /** AD_Window_ID */
+ private int p_AD_Window_ID = 0;
+
+ /** Tab Level */
+ private int p_TabLevel = 0;
+
+ /** Create Menu Record */
+ private boolean p_isCreateMenu = false;
+
+ /**
+ * Prepare - e.g., get Parameters.
+ */
+ protected void prepare ()
+ {
+ ProcessInfoParameter[] para = getParameter();
+ for (int i = 0; i < para.length; i++)
+ {
+ String name = para[i].getParameterName();
+ if (para[i].getParameter() == null)
+ ;
+ else if (name.equals("WindowType"))
+ p_WindowType = para[i].getParameterAsString();
+ else if (name.equals("IsSOTrx"))
+ p_IsSOTrx = para[i].getParameterAsBoolean();
+ else if (name.equals("IsNewWindow"))
+ p_isNewWindow = para[i].getParameterAsBoolean();
+ else if (name.equals("AD_Window_ID"))
+ p_AD_Window_ID = para[i].getParameterAsInt();
+ else if (name.equals("TabLevel"))
+ p_TabLevel = para[i].getParameterAsInt();
+ else if (name.equals("IsCreateMenu"))
+ p_isCreateMenu = para[i].getParameterAsBoolean();
+ else
+ log.log(Level.SEVERE, "Unknown Parameter: " + name);
+ }
+ p_AD_Table_ID = getRecord_ID();
+ } // prepare
+
+ /**
+ * Process
+ * @return info
+ * @throws Exception
+ */
+ protected String doIt () throws Exception
+ {
+ if (p_AD_Table_ID == 0)
+ throw new AdempiereException("@NotFound@ @AD_Table_ID@ " + p_AD_Table_ID);
+ if (!p_isNewWindow && p_AD_Window_ID == 0)
+ throw new AdempiereException("@Mandatory@ @AD_Window_ID@");
+ if (log.isLoggable(Level.INFO))
+ log.info("Source AD_Table_ID=" + p_AD_Table_ID);
+
+ MTable table = new MTable(getCtx(), p_AD_Table_ID, get_TrxName());
+ if (table != null) {
+
+ String entityType = table.getEntityType();
+
+ if (!isTableValid(table))
+ throw new AdempiereException(Msg.getMsg(getCtx(), "NewWindowNoValid"));
+
+ MWindow window;
+ if (p_isNewWindow) {
+ if (MWindow.WINDOWTYPE_Transaction.equals(p_WindowType) &&
+ table.getColumnIndex("Processed") <= 0)
+ throw new AdempiereException(Msg.getMsg(getCtx(), "TrxWindowMandatoryProcessed"));
+
+ int i = DB.getSQLValue(get_TrxName(), "SELECT 1 FROM AD_Window WHERE AD_Window.name = ?", table.getName());
+
+ if (i == 1)
+ throw new AdempiereException(Msg.getMsg(getCtx(), "DuplicatedWindowName", new Object[] {table.getName()}));
+
+ window = new MWindow(getCtx(), 0, get_TrxName());
+ window.setName(table.getName());
+ window.setIsSOTrx(p_IsSOTrx);
+ window.setWindowType(p_WindowType);
+ window.setEntityType(entityType);
+ window.saveEx();
+ addLog(window.getAD_Window_ID(), null, null, "@AD_Window_ID@: " + window.getName(),
+ window.get_Table_ID(), window.getAD_Window_ID());
+ } else {
+ //If no new window but a detail tab
+ if (p_TabLevel > 0) {
+ boolean hasParentLinkColumn = false;
+ for (MColumn column : table.getColumns(false)) {
+ if (column.isParent()) {
+ hasParentLinkColumn = true;
+ break;
+ }
+ }
+
+ if (!hasParentLinkColumn)
+ throw new AdempiereException(Msg.getMsg(getCtx(), "NoParentLink"));
+ }
+ window = new MWindow(getCtx(), p_AD_Window_ID, get_TrxName());
+
+ if (p_TabLevel > 1) {
+ int maxTabLevel = 0;
+ for (MTab tab : window.getTabs(false, get_TrxName())) {
+ if (tab.getTabLevel() > maxTabLevel) {
+ maxTabLevel = tab.getTabLevel();
+ }
+ }
+
+ if (maxTabLevel+1 < p_TabLevel)
+ throw new AdempiereException(Msg.getMsg(getCtx(), "MaxTabLevel", new Object[] {maxTabLevel+1}));
+ }
+ }
+
+ MTab tab = new MTab(window);
+ tab.setName(table.getName());
+ tab.setAD_Table_ID(p_AD_Table_ID);
+ tab.setTabLevel(p_TabLevel);
+ tab.setIsSingleRow(true); //Default
+
+ //Set order by
+ if (table.getColumnIndex("Value") > 0)
+ tab.setOrderByClause(table.getTableName() + ".Value");
+ else if (table.getColumnIndex("Name") > 0)
+ tab.setOrderByClause(table.getTableName() + ".Name");
+ else
+ tab.setOrderByClause(table.getTableName() + ".Created DESC");
+
+ tab.saveEx();
+ addLog(tab.getAD_Tab_ID(), null, null, "@AD_Tab_ID@: " + tab.getName(),
+ tab.get_Table_ID(), tab.getAD_Tab_ID());
+
+ //Create Fields
+ ProcessInfo processInfo = new ProcessInfo("", SystemIDs.PROCESS_AD_TAB_CREATEFIELDS, 0, tab.getAD_Tab_ID());
+
+ MPInstance instance = new MPInstance(getCtx(), SystemIDs.PROCESS_AD_TAB_CREATEFIELDS, 0);
+ instance.saveEx();
+ processInfo.setAD_PInstance_ID(instance.getAD_PInstance_ID());
+
+ TabCreateFields createFields = new TabCreateFields();
+ boolean success = createFields.startProcess(getCtx(), processInfo, Trx.get(get_TrxName(), false));
+ if (!success) {
+ StringBuilder msgout = new StringBuilder("Process=").append(processInfo.getTitle())
+ .append(" Called from=").append("CreateWindowFromTable")
+ .append(" Error=").append(processInfo.isError())
+ .append(" Summary=").append(processInfo.getSummary());
+ log.severe(msgout.toString());
+ throw new AdempiereException(processInfo.getSummary());
+ }
+
+ if (p_isCreateMenu) {
+ MMenu menu = new MMenu(getCtx(), 0, get_TrxName());
+ menu.setName(window.getName());
+ menu.setEntityType(entityType);
+ menu.setIsSOTrx(p_IsSOTrx);
+ menu.setAction(MMenu.ACTION_Window);
+ menu.setAD_Window_ID(window.getAD_Window_ID());
+ menu.saveEx();
+ addLog(menu.getAD_Menu_ID(), null, null, "@AD_Menu_ID@: " + menu.getName(),
+ menu.get_Table_ID(), menu.getAD_Menu_ID());
+ }
+
+ //If AD_Window_ID is empty in the Table record
+ if (table.getAD_Window_ID() <= 0)
+ table.setAD_Window_ID(window.getAD_Window_ID());
+
+ table.saveEx();
+ }
+
+ return "@OK@";
+ } // doIt
+
+ /**
+ *
+ * @param table Table to be verifies
+ * @return true if the table has all recommended columns
+ */
+ public boolean isTableValid(MTable table) {
+
+ boolean hasIsActive = false;
+ boolean hasAD_Client_ID = false;
+ boolean hasAD_Org_ID = false;
+ boolean hasCreated = false;
+ boolean hasUpdated = false;
+ boolean hasCreatedBy = false;
+ boolean hasUpdatedBy = false;
+
+ for (MColumn column : table.getColumns(true)) {
+ if (column.getAD_Element_ID() == SystemIDs.ELEMENT_AD_CLIENT_ID)
+ hasAD_Client_ID = true;
+ else if (column.getAD_Element_ID() == SystemIDs.ELEMENT_AD_ORG_ID)
+ hasAD_Org_ID = true;
+ else if (column.getAD_Element_ID() == SystemIDs.ELEMENT_CREATED)
+ hasCreated = true;
+ else if (column.getAD_Element_ID() == SystemIDs.ELEMENT_CREATEDBY)
+ hasCreatedBy = true;
+ else if (column.getAD_Element_ID() == SystemIDs.ELEMENT_ISACTIVE)
+ hasIsActive = true;
+ else if (column.getAD_Element_ID() == SystemIDs.ELEMENT_UPDATED)
+ hasUpdated = true;
+ else if (column.getAD_Element_ID() == SystemIDs.ELEMENT_UPDATEDBY)
+ hasUpdatedBy = true;
+ }
+
+ return hasIsActive && hasAD_Client_ID && hasAD_Org_ID && hasCreated &&
+ hasUpdated && hasCreatedBy && hasUpdatedBy;
+ } // isTableValid
+
+}
\ No newline at end of file
diff --git a/org.adempiere.base.process/src/org/compiere/process/TabCreateFields.java b/org.adempiere.base.process/src/org/compiere/process/TabCreateFields.java
index e4d7239cf4..5db5fcbb68 100644
--- a/org.adempiere.base.process/src/org/compiere/process/TabCreateFields.java
+++ b/org.adempiere.base.process/src/org/compiere/process/TabCreateFields.java
@@ -105,6 +105,7 @@ public class TabCreateFields extends SvrProcess
sql += "ORDER BY CASE "
+ " WHEN c.ColumnName = 'AD_Client_ID' THEN -100 "
+ " WHEN c.ColumnName = 'AD_Org_ID' THEN -90 "
+ + " WHEN c.IsParent = 'Y' THEN -85 "
+ " WHEN c.ColumnName = 'Value' THEN -80 "
+ " WHEN c.ColumnName = 'Name' THEN -70 "
+ " WHEN c.ColumnName = 'Description' THEN -60 "
diff --git a/org.adempiere.base/src/org/compiere/model/SystemIDs.java b/org.adempiere.base/src/org/compiere/model/SystemIDs.java
index bf6bb08f57..11ffa58441 100644
--- a/org.adempiere.base/src/org/compiere/model/SystemIDs.java
+++ b/org.adempiere.base/src/org/compiere/model/SystemIDs.java
@@ -44,6 +44,14 @@ public class SystemIDs
public final static int COUNTRY_US = 100;
public final static int COUNTRY_JAPAN = 216;
+ public final static int ELEMENT_AD_CLIENT_ID = 102;
+ public final static int ELEMENT_AD_ORG_ID = 113;
+ public final static int ELEMENT_CREATED = 245;
+ public final static int ELEMENT_CREATEDBY = 246;
+ public final static int ELEMENT_UPDATED = 607;
+ public final static int ELEMENT_UPDATEDBY = 608;
+ public final static int ELEMENT_ISACTIVE = 348;
+
public final static int ENTITYTYPE_ADEMPIERE = 20;
public final static int ENTITYTYPE_DICTIONARY = 10;
@@ -73,6 +81,7 @@ public class SystemIDs
public final static int PROCESS_AD_CHANGELOG_UNDO = 306;
public final static int PROCESS_AD_CHANGELOG_REDO = 307;
public final static int PROCESS_AD_NATIVE_SEQUENCE_ENABLE = 53156;
+ public final static int PROCESS_AD_TAB_CREATEFIELDS = 174;
public final static int PROCESS_C_INVOICE_GENERATE = 119;
public final static int PROCESS_C_INVOICE_GENERATE_MANUAL = 134;
public final static int PROCESS_C_INVOICE_GENERATERMA_MANUAL = 52002;