diff --git a/migration/i8.2z/oracle/202111141400_IDEMPIERE-4900.sql b/migration/i8.2z/oracle/202111141400_IDEMPIERE-4900.sql new file mode 100755 index 0000000000..a5076d4755 --- /dev/null +++ b/migration/i8.2z/oracle/202111141400_IDEMPIERE-4900.sql @@ -0,0 +1,161 @@ +SET SQLBLANKLINES ON +SET DEFINE OFF + +-- Aug 2, 2021, 3:42:37 PM MSK +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,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,SeqNoSelection,IsToolbarButton,IsSecure,IsHtml) VALUES (214567,0,'SQLStatement',706,'SQLStatement',4000,'N','N','N','N','N',0,'N',10,0,0,'Y',TO_DATE('2021-08-02 15:42:36','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2021-08-02 15:42:36','YYYY-MM-DD HH24:MI:SS'),100,50028,'Y','N','D','N','N','N','Y','a3885450-50d5-41b6-a7f4-8cd4bcc9e465','Y',0,'N','N','N') +; + +-- Aug 2, 2021, 3:42:44 PM MSK +ALTER TABLE AD_WF_NextCondition ADD SQLStatement VARCHAR2(4000 CHAR) DEFAULT NULL +; + +-- Aug 2, 2021, 3:42:59 PM MSK +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,ColumnSpan) VALUES (206737,'SQLStatement',644,214567,'Y',4000,130,'N','N','N','N',0,0,'Y',TO_DATE('2021-08-02 15:42:58','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2021-08-02 15:42:58','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','f78eaea8-558a-4d74-8c50-26c59468c3a2','Y',130,5) +; + +-- Aug 2, 2021, 3:43:09 PM MSK +UPDATE AD_Field SET IsDisplayed='Y', SeqNo=110, AD_Reference_Value_ID=NULL, AD_Val_Rule_ID=NULL, XPosition=1, IsToolbarButton=NULL,Updated=TO_DATE('2021-08-02 15:43:09','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=206737 +; + +-- Aug 2, 2021, 3:43:35 PM MSK +UPDATE AD_Field SET DisplayLogic='@SQLStatement@=''''&@Operation@!''SQ''', AD_Reference_Value_ID=NULL, AD_Val_Rule_ID=NULL, IsToolbarButton=NULL,Updated=TO_DATE('2021-08-02 15:43:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=10101 +; + +-- Aug 2, 2021, 3:44:18 PM MSK +UPDATE AD_Field SET DisplayLogic='@AD_Column_ID@=0|@Operation@=''SQ''', AD_Reference_Value_ID=NULL, AD_Val_Rule_ID=NULL, IsToolbarButton=NULL,Updated=TO_DATE('2021-08-02 15:44:18','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=206737 +; + +-- Aug 2, 2021, 3:45:00 PM MSK +UPDATE AD_Column SET IsMandatory='N',Updated=TO_DATE('2021-08-02 15:45:00','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=11579 +; + +-- Aug 2, 2021, 3:45:05 PM MSK +ALTER TABLE AD_WF_NextCondition MODIFY AD_Column_ID NUMBER(10) DEFAULT NULL +; + +-- Aug 2, 2021, 3:45:05 PM MSK +ALTER TABLE AD_WF_NextCondition MODIFY AD_Column_ID NULL +; + +INSERT INTO AD_Message +(MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,Created,AD_Client_ID,AD_Org_ID) +VALUES ('E','Please enter read-only SQL expression or statement',200259,'D','49c3be7e-16de-46ff-a2a9-f9411a6a4982','SQLReadOnly','Y', +TO_DATE('2021-11-14 17:45:57','YYYY-MM-DD HH24:MI:SS'),100,100,TO_DATE('2021-11-14 17:45:57','YYYY-MM-DD HH24:MI:SS'),0,0) +; + +UPDATE AD_Column SET IsMandatory='N', +MandatoryLogic='@Operation@!''SQ''&@SQLStatement@=''''',Updated=TO_DATE('2021-11-14 17:47:52','YYYY-MM-DD HH24:MI:SS'), +UpdatedBy=100 WHERE AD_Column_ID=11579 +; + +-- Nov 15, 2021, 10:43:08 AM MYT +UPDATE AD_Field SET SeqNo=0,IsDisplayed='N', Updated=getDate(), UpdatedBy=100 WHERE AD_Field_ID=10102 +; + +-- Nov 15, 2021, 10:43:08 AM MYT +UPDATE AD_Field SET SeqNo=10,IsDisplayed='Y', Updated=getDate(), UpdatedBy=100 WHERE AD_Field_ID=10094 +; + +-- Nov 15, 2021, 10:43:08 AM MYT +UPDATE AD_Field SET SeqNo=20,IsDisplayed='Y', Updated=getDate(), UpdatedBy=100 WHERE AD_Field_ID=10105 +; + +-- Nov 15, 2021, 10:43:08 AM MYT +UPDATE AD_Field SET SeqNo=30,IsDisplayed='Y', Updated=getDate(), UpdatedBy=100 WHERE AD_Field_ID=10095 +; + +-- Nov 15, 2021, 10:43:08 AM MYT +UPDATE AD_Field SET SeqNo=40,IsDisplayed='Y', Updated=getDate(), UpdatedBy=100 WHERE AD_Field_ID=10096 +; + +-- Nov 15, 2021, 10:43:08 AM MYT +UPDATE AD_Field SET SeqNo=50,IsDisplayed='Y', Updated=getDate(), UpdatedBy=100 WHERE AD_Field_ID=10098 +; + +-- Nov 15, 2021, 10:43:08 AM MYT +UPDATE AD_Field SET SeqNo=60,IsDisplayed='Y', Updated=getDate(), UpdatedBy=100 WHERE AD_Field_ID=10103 +; + +-- Nov 15, 2021, 10:43:08 AM MYT +UPDATE AD_Field SET SeqNo=70,IsDisplayed='Y', Updated=getDate(), UpdatedBy=100 WHERE AD_Field_ID=10104 +; + +-- Nov 15, 2021, 10:43:08 AM MYT +UPDATE AD_Field SET SeqNo=90,IsDisplayed='Y', Updated=getDate(), UpdatedBy=100 WHERE AD_Field_ID=206737 +; + +-- Nov 15, 2021, 10:43:22 AM MYT +UPDATE AD_Field SET SeqNoGrid=0,IsDisplayedGrid='N', Updated=getDate(), UpdatedBy=100 WHERE AD_Field_ID=10102 +; + +-- Nov 15, 2021, 10:43:22 AM MYT +UPDATE AD_Field SET SeqNoGrid=10,IsDisplayedGrid='Y', Updated=getDate(), UpdatedBy=100 WHERE AD_Field_ID=10094 +; + +-- Nov 15, 2021, 10:43:22 AM MYT +UPDATE AD_Field SET SeqNoGrid=20,IsDisplayedGrid='Y', Updated=getDate(), UpdatedBy=100 WHERE AD_Field_ID=10105 +; + +-- Nov 15, 2021, 10:43:22 AM MYT +UPDATE AD_Field SET SeqNoGrid=30,IsDisplayedGrid='Y', Updated=getDate(), UpdatedBy=100 WHERE AD_Field_ID=10095 +; + +-- Nov 15, 2021, 10:43:22 AM MYT +UPDATE AD_Field SET SeqNoGrid=40,IsDisplayedGrid='Y', Updated=getDate(), UpdatedBy=100 WHERE AD_Field_ID=10096 +; + +-- Nov 15, 2021, 10:43:22 AM MYT +UPDATE AD_Field SET SeqNoGrid=50,IsDisplayedGrid='Y', Updated=getDate(), UpdatedBy=100 WHERE AD_Field_ID=10098 +; + +-- Nov 15, 2021, 10:43:22 AM MYT +UPDATE AD_Field SET SeqNoGrid=60,IsDisplayedGrid='Y', Updated=getDate(), UpdatedBy=100 WHERE AD_Field_ID=10103 +; + +-- Nov 15, 2021, 10:43:22 AM MYT +UPDATE AD_Field SET SeqNoGrid=70,IsDisplayedGrid='Y', Updated=getDate(), UpdatedBy=100 WHERE AD_Field_ID=10104 +; + +-- Nov 15, 2021, 10:43:22 AM MYT +UPDATE AD_Field SET SeqNoGrid=90,IsDisplayedGrid='Y', Updated=getDate(), UpdatedBy=100 WHERE AD_Field_ID=206737 +; + +-- Nov 15, 2021, 10:43:47 AM MYT +UPDATE AD_Field SET AD_Reference_Value_ID=NULL, AD_Val_Rule_ID=NULL, XPosition=1, IsToolbarButton=NULL,Updated=TO_DATE('2021-11-15 10:43:47','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=10104 +; + +-- Nov 15, 2021, 10:50:21 AM MYT +UPDATE AD_Element SET Name='SQL Expression/Statement', PrintName='SQL Expression/Statement',Updated=TO_DATE('2021-11-15 10:50:21','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Element_ID=50028 +; + +-- Nov 15, 2021, 10:50:21 AM MYT +UPDATE AD_Column SET ColumnName='SQLStatement', Name='SQL Expression/Statement', Description=NULL, Help=NULL, Placeholder=NULL WHERE AD_Element_ID=50028 +; + +-- Nov 15, 2021, 10:50:21 AM MYT +UPDATE AD_Process_Para SET ColumnName='SQLStatement', Name='SQL Expression/Statement', Description=NULL, Help=NULL, AD_Element_ID=50028 WHERE UPPER(ColumnName)='SQLSTATEMENT' AND IsCentrallyMaintained='Y' AND AD_Element_ID IS NULL +; + +-- Nov 15, 2021, 10:50:21 AM MYT +UPDATE AD_Process_Para SET ColumnName='SQLStatement', Name='SQL Expression/Statement', Description=NULL, Help=NULL, Placeholder=NULL WHERE AD_Element_ID=50028 AND IsCentrallyMaintained='Y' +; + +-- Nov 15, 2021, 10:50:21 AM MYT +UPDATE AD_InfoColumn SET ColumnName='SQLStatement', Name='SQL Expression/Statement', Description=NULL, Help=NULL, Placeholder=NULL WHERE AD_Element_ID=50028 AND IsCentrallyMaintained='Y' +; + +-- Nov 15, 2021, 10:50:21 AM MYT +UPDATE AD_Field SET Name='SQL Expression/Statement', Description=NULL, Help=NULL, Placeholder=NULL WHERE AD_Column_ID IN (SELECT AD_Column_ID FROM AD_Column WHERE AD_Element_ID=50028) AND IsCentrallyMaintained='Y' +; + +-- Nov 15, 2021, 10:50:21 AM MYT +UPDATE AD_PrintFormatItem SET PrintName='SQL Expression/Statement', Name='SQL Expression/Statement' WHERE IsCentrallyMaintained='Y' AND EXISTS (SELECT * FROM AD_Column c WHERE c.AD_Column_ID=AD_PrintFormatItem.AD_Column_ID AND c.AD_Element_ID=50028) +; + +-- Nov 15, 2021, 11:21:22 AM MYT +UPDATE AD_Column SET ReadOnlyLogic='@#ShowAdvanced@!''Y''',Updated=TO_DATE('2021-11-15 11:21:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=214567 +; + +SELECT register_migration_script('202111141400_IDEMPIERE-4900.sql') FROM dual +; + diff --git a/migration/i8.2z/postgresql/202111141400_IDEMPIERE-4900.sql b/migration/i8.2z/postgresql/202111141400_IDEMPIERE-4900.sql new file mode 100755 index 0000000000..8f7f9757fc --- /dev/null +++ b/migration/i8.2z/postgresql/202111141400_IDEMPIERE-4900.sql @@ -0,0 +1,158 @@ +-- Aug 2, 2021, 3:42:37 PM MSK +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,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,SeqNoSelection,IsToolbarButton,IsSecure,IsHtml) VALUES (214567,0,'SQLStatement',706,'SQLStatement',4000,'N','N','N','N','N',0,'N',10,0,0,'Y',TO_TIMESTAMP('2021-08-02 15:42:36','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2021-08-02 15:42:36','YYYY-MM-DD HH24:MI:SS'),100,50028,'Y','N','D','N','N','N','Y','a3885450-50d5-41b6-a7f4-8cd4bcc9e465','Y',0,'N','N','N') +; + +-- Aug 2, 2021, 3:42:44 PM MSK +ALTER TABLE AD_WF_NextCondition ADD COLUMN SQLStatement VARCHAR(4000) DEFAULT NULL +; + +-- Aug 2, 2021, 3:42:59 PM MSK +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,ColumnSpan) VALUES (206737,'SQLStatement',644,214567,'Y',4000,130,'N','N','N','N',0,0,'Y',TO_TIMESTAMP('2021-08-02 15:42:58','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2021-08-02 15:42:58','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','f78eaea8-558a-4d74-8c50-26c59468c3a2','Y',130,5) +; + +-- Aug 2, 2021, 3:43:09 PM MSK +UPDATE AD_Field SET IsDisplayed='Y', SeqNo=110, AD_Reference_Value_ID=NULL, AD_Val_Rule_ID=NULL, XPosition=1, IsToolbarButton=NULL,Updated=TO_TIMESTAMP('2021-08-02 15:43:09','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=206737 +; + +-- Aug 2, 2021, 3:43:35 PM MSK +UPDATE AD_Field SET DisplayLogic='@SQLStatement@=''''&@Operation@!''SQ''', AD_Reference_Value_ID=NULL, AD_Val_Rule_ID=NULL, IsToolbarButton=NULL,Updated=TO_TIMESTAMP('2021-08-02 15:43:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=10101 +; + +-- Aug 2, 2021, 3:44:18 PM MSK +UPDATE AD_Field SET DisplayLogic='@AD_Column_ID@=0|@Operation@=''SQ''', AD_Reference_Value_ID=NULL, AD_Val_Rule_ID=NULL, IsToolbarButton=NULL,Updated=TO_TIMESTAMP('2021-08-02 15:44:18','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=206737 +; + +-- Aug 2, 2021, 3:45:00 PM MSK +UPDATE AD_Column SET IsMandatory='N',Updated=TO_TIMESTAMP('2021-08-02 15:45:00','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=11579 +; + +-- Aug 2, 2021, 3:45:05 PM MSK +INSERT INTO t_alter_column values('ad_wf_nextcondition','AD_Column_ID','NUMERIC(10)',null,'NULL') +; + +-- Aug 2, 2021, 3:45:05 PM MSK +INSERT INTO t_alter_column values('ad_wf_nextcondition','AD_Column_ID',null,'NULL',null) +; + +INSERT INTO AD_Message +(MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,Created,AD_Client_ID,AD_Org_ID) +VALUES ('E','Please enter read-only SQL expression or statement',200259,'D','49c3be7e-16de-46ff-a2a9-f9411a6a4982','SQLReadOnly','Y', +TO_TIMESTAMP('2021-11-14 17:45:57','YYYY-MM-DD HH24:MI:SS'),100,100,TO_TIMESTAMP('2021-11-14 17:45:57','YYYY-MM-DD HH24:MI:SS'),0,0) +; + +UPDATE AD_Column SET IsMandatory='N', +MandatoryLogic='@Operation@!''SQ''&@SQLStatement@=''''',Updated=TO_TIMESTAMP('2021-11-14 17:47:52','YYYY-MM-DD HH24:MI:SS'), +UpdatedBy=100 WHERE AD_Column_ID=11579 +; + +-- Nov 15, 2021, 10:43:08 AM MYT +UPDATE AD_Field SET SeqNo=0,IsDisplayed='N', Updated=statement_timestamp(), UpdatedBy=100 WHERE AD_Field_ID=10102 +; + +-- Nov 15, 2021, 10:43:08 AM MYT +UPDATE AD_Field SET SeqNo=10,IsDisplayed='Y', Updated=statement_timestamp(), UpdatedBy=100 WHERE AD_Field_ID=10094 +; + +-- Nov 15, 2021, 10:43:08 AM MYT +UPDATE AD_Field SET SeqNo=20,IsDisplayed='Y', Updated=statement_timestamp(), UpdatedBy=100 WHERE AD_Field_ID=10105 +; + +-- Nov 15, 2021, 10:43:08 AM MYT +UPDATE AD_Field SET SeqNo=30,IsDisplayed='Y', Updated=statement_timestamp(), UpdatedBy=100 WHERE AD_Field_ID=10095 +; + +-- Nov 15, 2021, 10:43:08 AM MYT +UPDATE AD_Field SET SeqNo=40,IsDisplayed='Y', Updated=statement_timestamp(), UpdatedBy=100 WHERE AD_Field_ID=10096 +; + +-- Nov 15, 2021, 10:43:08 AM MYT +UPDATE AD_Field SET SeqNo=50,IsDisplayed='Y', Updated=statement_timestamp(), UpdatedBy=100 WHERE AD_Field_ID=10098 +; + +-- Nov 15, 2021, 10:43:08 AM MYT +UPDATE AD_Field SET SeqNo=60,IsDisplayed='Y', Updated=statement_timestamp(), UpdatedBy=100 WHERE AD_Field_ID=10103 +; + +-- Nov 15, 2021, 10:43:08 AM MYT +UPDATE AD_Field SET SeqNo=70,IsDisplayed='Y', Updated=statement_timestamp(), UpdatedBy=100 WHERE AD_Field_ID=10104 +; + +-- Nov 15, 2021, 10:43:08 AM MYT +UPDATE AD_Field SET SeqNo=90,IsDisplayed='Y', Updated=statement_timestamp(), UpdatedBy=100 WHERE AD_Field_ID=206737 +; + +-- Nov 15, 2021, 10:43:22 AM MYT +UPDATE AD_Field SET SeqNoGrid=0,IsDisplayedGrid='N', Updated=statement_timestamp(), UpdatedBy=100 WHERE AD_Field_ID=10102 +; + +-- Nov 15, 2021, 10:43:22 AM MYT +UPDATE AD_Field SET SeqNoGrid=10,IsDisplayedGrid='Y', Updated=statement_timestamp(), UpdatedBy=100 WHERE AD_Field_ID=10094 +; + +-- Nov 15, 2021, 10:43:22 AM MYT +UPDATE AD_Field SET SeqNoGrid=20,IsDisplayedGrid='Y', Updated=statement_timestamp(), UpdatedBy=100 WHERE AD_Field_ID=10105 +; + +-- Nov 15, 2021, 10:43:22 AM MYT +UPDATE AD_Field SET SeqNoGrid=30,IsDisplayedGrid='Y', Updated=statement_timestamp(), UpdatedBy=100 WHERE AD_Field_ID=10095 +; + +-- Nov 15, 2021, 10:43:22 AM MYT +UPDATE AD_Field SET SeqNoGrid=40,IsDisplayedGrid='Y', Updated=statement_timestamp(), UpdatedBy=100 WHERE AD_Field_ID=10096 +; + +-- Nov 15, 2021, 10:43:22 AM MYT +UPDATE AD_Field SET SeqNoGrid=50,IsDisplayedGrid='Y', Updated=statement_timestamp(), UpdatedBy=100 WHERE AD_Field_ID=10098 +; + +-- Nov 15, 2021, 10:43:22 AM MYT +UPDATE AD_Field SET SeqNoGrid=60,IsDisplayedGrid='Y', Updated=statement_timestamp(), UpdatedBy=100 WHERE AD_Field_ID=10103 +; + +-- Nov 15, 2021, 10:43:22 AM MYT +UPDATE AD_Field SET SeqNoGrid=70,IsDisplayedGrid='Y', Updated=statement_timestamp(), UpdatedBy=100 WHERE AD_Field_ID=10104 +; + +-- Nov 15, 2021, 10:43:22 AM MYT +UPDATE AD_Field SET SeqNoGrid=90,IsDisplayedGrid='Y', Updated=statement_timestamp(), UpdatedBy=100 WHERE AD_Field_ID=206737 +; + +-- Nov 15, 2021, 10:43:47 AM MYT +UPDATE AD_Field SET AD_Reference_Value_ID=NULL, AD_Val_Rule_ID=NULL, XPosition=1, IsToolbarButton=NULL,Updated=TO_TIMESTAMP('2021-11-15 10:43:47','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=10104 +; + +-- Nov 15, 2021, 10:50:21 AM MYT +UPDATE AD_Element SET Name='SQL Expression/Statement', PrintName='SQL Expression/Statement',Updated=TO_TIMESTAMP('2021-11-15 10:50:21','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Element_ID=50028 +; + +-- Nov 15, 2021, 10:50:21 AM MYT +UPDATE AD_Column SET ColumnName='SQLStatement', Name='SQL Expression/Statement', Description=NULL, Help=NULL, Placeholder=NULL WHERE AD_Element_ID=50028 +; + +-- Nov 15, 2021, 10:50:21 AM MYT +UPDATE AD_Process_Para SET ColumnName='SQLStatement', Name='SQL Expression/Statement', Description=NULL, Help=NULL, AD_Element_ID=50028 WHERE UPPER(ColumnName)='SQLSTATEMENT' AND IsCentrallyMaintained='Y' AND AD_Element_ID IS NULL +; + +-- Nov 15, 2021, 10:50:21 AM MYT +UPDATE AD_Process_Para SET ColumnName='SQLStatement', Name='SQL Expression/Statement', Description=NULL, Help=NULL, Placeholder=NULL WHERE AD_Element_ID=50028 AND IsCentrallyMaintained='Y' +; + +-- Nov 15, 2021, 10:50:21 AM MYT +UPDATE AD_InfoColumn SET ColumnName='SQLStatement', Name='SQL Expression/Statement', Description=NULL, Help=NULL, Placeholder=NULL WHERE AD_Element_ID=50028 AND IsCentrallyMaintained='Y' +; + +-- Nov 15, 2021, 10:50:21 AM MYT +UPDATE AD_Field SET Name='SQL Expression/Statement', Description=NULL, Help=NULL, Placeholder=NULL WHERE AD_Column_ID IN (SELECT AD_Column_ID FROM AD_Column WHERE AD_Element_ID=50028) AND IsCentrallyMaintained='Y' +; + +-- Nov 15, 2021, 10:50:21 AM MYT +UPDATE AD_PrintFormatItem SET PrintName='SQL Expression/Statement', Name='SQL Expression/Statement' WHERE IsCentrallyMaintained='Y' AND EXISTS (SELECT * FROM AD_Column c WHERE c.AD_Column_ID=AD_PrintFormatItem.AD_Column_ID AND c.AD_Element_ID=50028) +; + +-- Nov 15, 2021, 11:21:22 AM MYT +UPDATE AD_Column SET ReadOnlyLogic='@#ShowAdvanced@!''Y''',Updated=TO_TIMESTAMP('2021-11-15 11:21:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=214567 +; + +SELECT register_migration_script('202111141400_IDEMPIERE-4900.sql') FROM dual +; + diff --git a/org.adempiere.base/src/org/compiere/model/I_AD_WF_NextCondition.java b/org.adempiere.base/src/org/compiere/model/I_AD_WF_NextCondition.java index e6c75e4847..9e624eac34 100644 --- a/org.adempiere.base/src/org/compiere/model/I_AD_WF_NextCondition.java +++ b/org.adempiere.base/src/org/compiere/model/I_AD_WF_NextCondition.java @@ -199,6 +199,15 @@ public interface I_AD_WF_NextCondition */ public int getSeqNo(); + /** Column name SQLStatement */ + public static final String COLUMNNAME_SQLStatement = "SQLStatement"; + + /** Set SQLStatement */ + public void setSQLStatement (String SQLStatement); + + /** Get SQLStatement */ + public String getSQLStatement(); + /** Column name Updated */ public static final String COLUMNNAME_Updated = "Updated"; diff --git a/org.adempiere.base/src/org/compiere/model/X_AD_WF_NextCondition.java b/org.adempiere.base/src/org/compiere/model/X_AD_WF_NextCondition.java index 2e7dc9f6cb..dda4092ab5 100644 --- a/org.adempiere.base/src/org/compiere/model/X_AD_WF_NextCondition.java +++ b/org.adempiere.base/src/org/compiere/model/X_AD_WF_NextCondition.java @@ -31,7 +31,7 @@ public class X_AD_WF_NextCondition extends PO implements I_AD_WF_NextCondition, /** * */ - private static final long serialVersionUID = 20210917L; + private static final long serialVersionUID = 20211114L; /** Standard Constructor */ public X_AD_WF_NextCondition (Properties ctx, int AD_WF_NextCondition_ID, String trxName) @@ -39,7 +39,6 @@ public class X_AD_WF_NextCondition extends PO implements I_AD_WF_NextCondition, super (ctx, AD_WF_NextCondition_ID, trxName); /** if (AD_WF_NextCondition_ID == 0) { - setAD_Column_ID (0); setAD_WF_NextCondition_ID (0); setAD_WF_NodeNext_ID (0); // @4|AD_WF_NodeNext_ID@ @@ -279,6 +278,20 @@ public class X_AD_WF_NextCondition extends PO implements I_AD_WF_NextCondition, return ii.intValue(); } + /** Set SQLStatement. + @param SQLStatement SQLStatement */ + public void setSQLStatement (String SQLStatement) + { + set_Value (COLUMNNAME_SQLStatement, SQLStatement); + } + + /** Get SQLStatement. + @return SQLStatement */ + public String getSQLStatement () + { + return (String)get_Value(COLUMNNAME_SQLStatement); + } + /** Set Search Key. @param Value Search key for the record in the format required - must be unique @@ -320,4 +333,4 @@ public class X_AD_WF_NextCondition extends PO implements I_AD_WF_NextCondition, { return (String)get_Value(COLUMNNAME_Value2); } -} \ No newline at end of file +} diff --git a/org.adempiere.base/src/org/compiere/util/DB.java b/org.adempiere.base/src/org/compiere/util/DB.java index 7519aaecc4..94ceafc58b 100644 --- a/org.adempiere.base/src/org/compiere/util/DB.java +++ b/org.adempiere.base/src/org/compiere/util/DB.java @@ -2599,4 +2599,21 @@ public final class DB { return getDatabase().intersectClauseForCSV(columnName, csv); } + + /** + * + * @param sql + * @return true if it is select sql statement + */ + public static boolean isSelectStatement(String sql) { + String removeComments = "/\\*(?:.|[\\n\\r])*?\\*/"; + String removeQuotedStrings = "'(?:.|[\\n\\r])*?'"; + String removeLeadingSpaces = "^\\s+"; + String cleanSql = sql.toLowerCase().replaceAll(removeComments, "").replaceAll(removeQuotedStrings, "").replaceFirst(removeLeadingSpaces, ""); + if(cleanSql.matches("^select\s.*$") && !cleanSql.contains(";")) + return true; + else + return false; + } + } // DB diff --git a/org.adempiere.base/src/org/compiere/wf/MWFNextCondition.java b/org.adempiere.base/src/org/compiere/wf/MWFNextCondition.java index 5e8add6b80..315bb23b79 100644 --- a/org.adempiere.base/src/org/compiere/wf/MWFNextCondition.java +++ b/org.adempiere.base/src/org/compiere/wf/MWFNextCondition.java @@ -17,12 +17,16 @@ package org.compiere.wf; import java.math.BigDecimal; +import java.sql.PreparedStatement; import java.sql.ResultSet; +import java.sql.SQLException; import java.util.Properties; import java.util.logging.Level; import org.compiere.model.PO; +import org.compiere.util.DB; import org.compiere.util.Env; +import org.compiere.util.Util; import org.idempiere.cache.ImmutablePOSupport; import org.compiere.model.X_AD_WF_NextCondition; @@ -40,7 +44,7 @@ public class MWFNextCondition extends X_AD_WF_NextCondition implements Immutable /** * */ - private static final long serialVersionUID = 1694467559057544172L; + private static final long serialVersionUID = 3119863973003103716L; /** * Default Constructor @@ -115,14 +119,42 @@ public class MWFNextCondition extends X_AD_WF_NextCondition implements Immutable */ public boolean evaluate (MWFActivity activity) { - if (getAD_Column_ID() == 0) - throw new IllegalStateException("No Column defined - " + this); + return evaluate(activity.getPO()); + } // evaluate + + /** + * Evaluate Condition + * @param po PO + * @return true if true + */ + protected boolean evaluate (PO po) + { + if (getAD_Column_ID() == 0 && Util.isEmpty(getSQLStatement(), true)) + throw new IllegalStateException("No Column and SQL Statement defined - " + this); - PO po = activity.getPO(); if (po == null || po.get_ID() == 0) throw new IllegalStateException("Could not evaluate " + po + " - " + this); // - Object valueObj = po.get_ValueOfColumn(getAD_Column_ID()); + if (getOperation().equals(OPERATION_Sql)) { + String sqlStatement = getSQLStatement(); + if (Util.isEmpty(getSQLStatement(), true)) + return false; + if (sqlStatement.indexOf("@") >= 0) + sqlStatement = Env.parseVariable(sqlStatement, po, po.get_TrxName(), false); + String result = DB.getSQLValueStringEx(po.get_TrxName(), sqlStatement); + return "true".equalsIgnoreCase(result) || "y".equalsIgnoreCase(result); + } + // + Object valueObj = null; + if (!Util.isEmpty(getSQLStatement(), true)) { + try { + valueObj = getColumnSQLValue(po); + } catch (SQLException e) { + throw new RuntimeException("Could not get result from column sql: " + getSQLStatement(), e); + } + } else { + valueObj = po.get_ValueOfColumn(getAD_Column_ID()); + } if (valueObj == null) valueObj = ""; String value1 = getDecodedValue(getValue(), po); // F3P: added value decoding @@ -133,8 +165,6 @@ public class MWFNextCondition extends X_AD_WF_NextCondition implements Immutable value2 = ""; String resultStr = "PO:{" + valueObj + "} " + getOperation() + " Condition:{" + value1 + "}"; - if (getOperation().equals(OPERATION_Sql)) - throw new IllegalArgumentException("SQL Operator not implemented yet: " + resultStr); if (getOperation().equals(OPERATION_X)) resultStr += "{" + value2 + "}"; @@ -342,5 +372,40 @@ public class MWFNextCondition extends X_AD_WF_NextCondition implements Immutable makeImmutable(); return this; } + + /** + * Get value from Column SQL (SQLStatement) instead of from AD_Column_ID + * @param po + * @return Value from Column SQL + * @throws SQLException + */ + private Object getColumnSQLValue(PO po) throws SQLException { + String columnSQL = getSQLStatement(); + if (columnSQL.indexOf("@") >= 0) { + columnSQL = Env.parseVariable(columnSQL, po, po.get_TrxName(), false); + } + String tableName = po.get_TableName(); + String pkName = po.get_KeyColumns() != null && po.get_KeyColumns().length==1 ? po.get_KeyColumns()[0] : po.getUUIDColumnName(); + String resultSql = String.format("SELECT (%s) FROM %s WHERE %s = ?", columnSQL, tableName, pkName); + + try (PreparedStatement pstmt = DB.prepareStatement(resultSql, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY, po.get_TrxName())) { + if (pkName.endsWith("_UU")) + pstmt.setString(1, po.get_ValueAsString(po.getUUIDColumnName())); + else + pstmt.setInt(1, po.get_ID()); + ResultSet rs = pstmt.executeQuery(); + if (rs.next()) + return rs.getObject(1); + } + return null; + } + + @Override + protected boolean beforeSave(boolean newRecord) { + if (!Util.isEmpty(getSQLStatement(), true)) { + setAD_Column_ID(0); + } + return true; + } } // MWFNextCondition \ No newline at end of file