diff --git a/base/src/org/compiere/process/SynchronizeTerminology.java b/base/src/org/compiere/process/SynchronizeTerminology.java index 92ddff4d0a..7eeb7dbad1 100644 --- a/base/src/org/compiere/process/SynchronizeTerminology.java +++ b/base/src/org/compiere/process/SynchronizeTerminology.java @@ -1,6 +1,6 @@ /****************************************************************************** * Product: Adempiere ERP & CRM Smart Business Solution * - * Copyright (C) 1999-2006 Adempiere, Inc. All Rights Reserved. * + * Copyright (C) 1999-2006 Adempiere, Inc. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify it * * under the terms version 2 of the GNU General Public License as published * * by the Free Software Foundation. This program is distributed in the hope * @@ -23,6 +23,7 @@ import org.compiere.util.CLogMgt; import org.compiere.util.CLogger; import org.compiere.util.DB; import org.compiere.util.Env; +import org.compiere.util.Trx; /** * Synchronize Column with Database @@ -52,6 +53,8 @@ public class SynchronizeTerminology extends SvrProcess String sql = null; try { int no; + Trx trx = Trx.get(get_TrxName(), false); + // Create Elements from ColumnNames sql="SELECT DISTINCT ColumnName, Name, Description, Help, EntityType " +"FROM AD_COLUMN c WHERE NOT EXISTS " +"(SELECT 1 FROM AD_ELEMENT e " @@ -72,6 +75,8 @@ public class SynchronizeTerminology extends SvrProcess } pstmt.close(); rs.close(); + trx.commit(true); + // Create Elements from Process Parameters sql="SELECT DISTINCT ColumnName, Name, Description, Help, EntityType " +" FROM AD_PROCESS_PARA p " +" WHERE NOT EXISTS " @@ -94,6 +99,7 @@ public class SynchronizeTerminology extends SvrProcess } pstmt.close(); rs.close(); + trx.commit(true); log.info("Adding missing Element Translations"); sql="INSERT INTO AD_ELEMENT_TRL (AD_Element_ID, AD_LANGUAGE, AD_Client_ID, AD_Org_ID," +" IsActive, Created, CreatedBy, Updated, UpdatedBy," @@ -107,7 +113,7 @@ public class SynchronizeTerminology extends SvrProcess +" (SELECT AD_Element_ID || AD_LANGUAGE FROM AD_ELEMENT_TRL)"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); - + trx.commit(true); log.info("Creating link from Element to Column"); sql="UPDATE AD_COLUMN c" @@ -117,7 +123,7 @@ public class SynchronizeTerminology extends SvrProcess +" WHERE AD_Element_ID IS NULL"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); - + trx.commit(true); log.info("Deleting unused Elements"); sql="DELETE AD_ELEMENT_TRL" @@ -129,6 +135,7 @@ public class SynchronizeTerminology extends SvrProcess +" (SELECT 1 FROM AD_PROCESS_PARA p WHERE UPPER(e.ColumnName)=UPPER(p.ColumnName)))"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows deleted: "+no); + trx.commit(true); sql="DELETE AD_ELEMENT e" +" WHERE AD_Element_ID >= 1000000 AND NOT EXISTS" @@ -137,7 +144,7 @@ public class SynchronizeTerminology extends SvrProcess +" (SELECT 1 FROM AD_PROCESS_PARA p WHERE UPPER(e.ColumnName)=UPPER(p.ColumnName))"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows deleted: "+no); - + trx.commit(true); // Columns log.info("Synchronize Column"); @@ -152,6 +159,7 @@ public class SynchronizeTerminology extends SvrProcess +" OR NVL(c.Description,' ') <> NVL(e.Description,' ') OR NVL(c.Help,' ') <> NVL(e.Help,' ')))"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); + trx.commit(true); // Fields should now be synchronized log.info("Synchronize Field"); @@ -168,6 +176,7 @@ public class SynchronizeTerminology extends SvrProcess +" AND (f.Name <> e.Name OR NVL(f.Description,' ') <> NVL(e.Description,' ') OR NVL(f.Help,' ') <> NVL(e.Help,' ')))"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); + trx.commit(true); // Field Translations log.info("Synchronize Field Translations"); @@ -194,6 +203,7 @@ public class SynchronizeTerminology extends SvrProcess +" AND (trl.Name <> e.Name OR NVL(trl.Description,' ') <> NVL(e.Description,' ') OR NVL(trl.Help,' ') <> NVL(e.Help,' ')))"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); + trx.commit(true); // Fields should now be synchronized log.info("Synchronize PO Field"); @@ -217,6 +227,7 @@ public class SynchronizeTerminology extends SvrProcess +" AND w.IsSOTrx='N')"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); + trx.commit(true); // Field Translations log.info("Synchronize PO Field Translations"); @@ -249,7 +260,7 @@ public class SynchronizeTerminology extends SvrProcess +" AND w.IsSOTrx='N')"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); - + trx.commit(true); // Fields from Process log.info("Synchronize Field from Process"); @@ -267,6 +278,7 @@ public class SynchronizeTerminology extends SvrProcess +" AND (f.Name<>p.Name OR NVL(f.Description,' ')<>NVL(p.Description,' ') OR NVL(f.Help,' ')<>NVL(p.Help,' ')))"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); + trx.commit(true); // Field Translations from Process log.info("Synchronize Field Trl from Process Trl"); @@ -291,18 +303,20 @@ public class SynchronizeTerminology extends SvrProcess +" AND (trl.Name<>p.Name OR NVL(trl.Description,' ')<>NVL(p.Description,' ') OR NVL(trl.Help,' ')<>NVL(p.Help,' ')))"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); + trx.commit(true); // Sync Parameter ColumnName sql="UPDATE AD_PROCESS_PARA f" +" SET ColumnName = (SELECT e.ColumnName FROM AD_ELEMENT e" - // +" WHERE UPPER(e.ColumnName)=UPPER(f.ColumnName))" - +" WHERE e.ColumnName=f.ColumnName)" + +" WHERE UPPER(e.ColumnName)=UPPER(f.ColumnName))" + // +" WHERE e.ColumnName=f.ColumnName)" +" WHERE f.IsCentrallyMaintained='Y' AND f.IsActive='Y'" +" AND EXISTS (SELECT 1 FROM AD_ELEMENT e" +" WHERE UPPER(e.ColumnName)=UPPER(f.ColumnName)" +" AND e.ColumnName<>f.ColumnName)"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); + trx.commit(true); // Parameter Fields sql="UPDATE AD_PROCESS_PARA p" @@ -311,6 +325,7 @@ public class SynchronizeTerminology extends SvrProcess +" AND NOT EXISTS (SELECT 1 FROM AD_ELEMENT e WHERE p.ColumnName=e.ColumnName)"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); + trx.commit(true); // Parameter Fields log.info("Synchronize Process Parameter"); @@ -328,6 +343,7 @@ public class SynchronizeTerminology extends SvrProcess +" AND (f.Name <> e.Name OR NVL(f.Description,' ') <> NVL(e.Description,' ') OR NVL(f.Help,' ') <> NVL(e.Help,' ')))"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); + trx.commit(true); // Parameter Translations log.info("Synchronize Process Parameter Trl"); @@ -352,6 +368,7 @@ public class SynchronizeTerminology extends SvrProcess +" AND (trl.Name <> et.Name OR NVL(trl.Description,' ') <> NVL(et.Description,' ') OR NVL(trl.Help,' ') <> NVL(et.Help,' ')))"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); + trx.commit(true); // Workflow Node - Window log.info("Synchronize Workflow Node from Window"); @@ -368,6 +385,7 @@ public class SynchronizeTerminology extends SvrProcess +" AND (w.Name <> n.Name OR NVL(w.Description,' ') <> NVL(n.Description,' ') OR NVL(w.Help,' ') <> NVL(n.Help,' ')))"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); + trx.commit(true); // Workflow Translations - Window log.info("Synchronize Workflow Node Trl from Window Trl"); @@ -387,6 +405,7 @@ public class SynchronizeTerminology extends SvrProcess +" AND (trl.Name <> t.Name OR NVL(trl.Description,' ') <> NVL(t.Description,' ') OR NVL(trl.Help,' ') <> NVL(t.Help,' ')))"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); + trx.commit(true); // Workflow Node - Form log.info("Synchronize Workflow Node from Form"); @@ -400,6 +419,7 @@ public class SynchronizeTerminology extends SvrProcess +" AND (f.Name <> n.Name OR NVL(f.Description,' ') <> NVL(n.Description,' ') OR NVL(f.Help,' ') <> NVL(n.Help,' ')))"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); + trx.commit(true); // Workflow Translations - Form log.info("Synchronize Workflow Node Trl from Form Trl"); @@ -414,6 +434,7 @@ public class SynchronizeTerminology extends SvrProcess +" AND (trl.Name <> t.Name OR NVL(trl.Description,' ') <> NVL(t.Description,' ') OR NVL(trl.Help,' ') <> NVL(t.Help,' ')))"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); + trx.commit(true); // Workflow Node - Report log.info("Synchronize Workflow Node from Process"); @@ -427,6 +448,7 @@ public class SynchronizeTerminology extends SvrProcess +" AND (f.Name <> n.Name OR NVL(f.Description,' ') <> NVL(n.Description,' ') OR NVL(f.Help,' ') <> NVL(n.Help,' ')))"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); + trx.commit(true); // Workflow Translations - Form log.info("Synchronize Workflow Node Trl from Process Trl"); @@ -441,6 +463,7 @@ public class SynchronizeTerminology extends SvrProcess +" AND (trl.Name <> t.Name OR NVL(trl.Description,' ') <> NVL(t.Description,' ') OR NVL(trl.Help,' ') <> NVL(t.Help,' ')))"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); + trx.commit(true); // Need centrally maintained flag here! log.info("Synchronize PrintFormatItem Name from Element"); @@ -459,6 +482,7 @@ public class SynchronizeTerminology extends SvrProcess +" WHERE AD_Client_ID=pfi.AD_Client_ID AND IsMultiLingualDocument='Y')"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); + trx.commit(true); log.info("Synchronize PrintFormatItem PrintName from Element"); sql="UPDATE AD_PRINTFORMATITEM pfi" @@ -479,6 +503,7 @@ public class SynchronizeTerminology extends SvrProcess +" WHERE AD_Client_ID=pfi.AD_Client_ID AND IsMultiLingualDocument='Y')"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); + trx.commit(true); log.info("Synchronize PrintFormatItem Trl from Element Trl (Multi-Lingual)"); sql="UPDATE AD_PRINTFORMATITEM_TRL trl" @@ -503,6 +528,7 @@ public class SynchronizeTerminology extends SvrProcess +" WHERE AD_Client_ID=trl.AD_Client_ID AND IsMultiLingualDocument='Y')"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); + trx.commit(true); log.info("Synchronize PrintFormatItem Trl (Not Multi-Lingual)"); sql="UPDATE AD_PRINTFORMATITEM_TRL trl" @@ -521,6 +547,7 @@ public class SynchronizeTerminology extends SvrProcess +" WHERE AD_Client_ID=trl.AD_Client_ID AND IsMultiLingualDocument='N')"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); + trx.commit(true); log.info("Reset PrintFormatItem Trl where not used in base table"); sql="UPDATE AD_PRINTFORMATITEM_TRL trl" @@ -533,6 +560,7 @@ public class SynchronizeTerminology extends SvrProcess +" AND (LENGTH (pfi.PrintName) = 0 OR pfi.PrintName IS NULL))"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); + trx.commit(true); /** SELECT e.PrintName "Element", pfi.PrintName "FormatItem", trl.AD_Language, trl.PrintName "Trl" @@ -552,6 +580,7 @@ public class SynchronizeTerminology extends SvrProcess +" AND Action = 'W'"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); + trx.commit(true); sql="UPDATE AD_MENU_TRL mt" +" SET Name = (SELECT wt.Name FROM AD_WINDOW_TRL wt, AD_MENU m " @@ -570,6 +599,7 @@ public class SynchronizeTerminology extends SvrProcess +" AND m.Action = 'W')"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); + trx.commit(true); // Sync Names - Process log.info("Synchronizing Menu with Processes"); @@ -580,6 +610,7 @@ public class SynchronizeTerminology extends SvrProcess +" AND m.Action IN ('R', 'P')"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); + trx.commit(true); sql="UPDATE AD_MENU_TRL mt" +" SET Name = (SELECT pt.Name FROM AD_PROCESS_TRL pt, AD_MENU m" @@ -598,6 +629,7 @@ public class SynchronizeTerminology extends SvrProcess +" AND Action IN ('R', 'P'))"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); + trx.commit(true); // Sync Names = Form log.info("Synchronizing Menu with Forms"); @@ -608,6 +640,7 @@ public class SynchronizeTerminology extends SvrProcess +" AND Action = 'X'"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); + trx.commit(true); sql="UPDATE AD_MENU_TRL mt" +" SET Name = (SELECT ft.Name FROM AD_FORM_TRL ft, AD_MENU m" @@ -626,6 +659,7 @@ public class SynchronizeTerminology extends SvrProcess +" AND Action = 'X')"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); + trx.commit(true); // Sync Names - Workflow log.info("Synchronizing Menu with Workflows"); @@ -636,6 +670,7 @@ public class SynchronizeTerminology extends SvrProcess +" AND m.Action = 'F'"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); + trx.commit(true); sql="UPDATE AD_MENU_TRL mt" +" SET Name = (SELECT pt.Name FROM AD_WORKFLOW_TRL pt, AD_MENU m" @@ -654,6 +689,7 @@ public class SynchronizeTerminology extends SvrProcess +" AND Action = 'F')"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); + trx.commit(true); // Sync Names = Task log.info("Synchronizing Menu with Tasks"); @@ -664,6 +700,7 @@ public class SynchronizeTerminology extends SvrProcess +" AND Action = 'T'"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); + trx.commit(true); sql="UPDATE AD_MENU_TRL mt" +" SET Name = (SELECT ft.Name FROM AD_TASK_TRL ft, AD_MENU m" @@ -682,6 +719,7 @@ public class SynchronizeTerminology extends SvrProcess +" AND Action = 'T')"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); + trx.commit(true); // Column Name + Element log.info("Synchronizing Column with Element"); @@ -705,7 +743,7 @@ public class SynchronizeTerminology extends SvrProcess +" AND ct.Name<>e.Name)"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" rows updated: "+no); - + trx.commit(true); // Table Name + Element log.info("Synchronizing Table with Element"); @@ -716,6 +754,7 @@ public class SynchronizeTerminology extends SvrProcess +"WHERE t.TableName||'_ID'=e.ColumnName " +"AND t.Name<>e.Name)"; no = DB.executeUpdate(sql, false, get_TrxName()); + trx.commit(true); log.info(" rows updated: " +no); sql="UPDATE AD_TABLE_TRL tt" @@ -730,6 +769,7 @@ public class SynchronizeTerminology extends SvrProcess +" AND tt.Name<>e.Name)"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" trl rows updated: "+no); + trx.commit(true); // Trl Table Name + Element sql="UPDATE AD_TABLE t" @@ -742,6 +782,8 @@ public class SynchronizeTerminology extends SvrProcess +" AND t.Name<>e.Name)"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" trl rows updated: "+no); + trx.commit(true); + sql=" UPDATE AD_TABLE_TRL tt" +" SET Name = (SELECT e.Name || ' **'" +" FROM AD_TABLE t INNER JOIN AD_ELEMENT ex ON (SUBSTR(t.TableName,1,LENGTH(t.TableName)-4)||'_ID'=ex.ColumnName)" @@ -755,6 +797,8 @@ public class SynchronizeTerminology extends SvrProcess +" AND tt.Name<>e.Name)"; no = DB.executeUpdate(sql, false, get_TrxName()); log.info(" trl rows updated: "+no); + trx.commit(true); + } catch (Exception e) { log.log (Level.SEVERE, "@Failed@: "+e.getLocalizedMessage(), e); throw e; diff --git a/migration/354a-trunk/oracle/689_BF2889652_IndexElementUpperColumnName.sql b/migration/354a-trunk/oracle/689_BF2889652_IndexElementUpperColumnName.sql new file mode 100644 index 0000000000..68653d40b4 --- /dev/null +++ b/migration/354a-trunk/oracle/689_BF2889652_IndexElementUpperColumnName.sql @@ -0,0 +1,4 @@ +DROP INDEX ad_element_columnname; + +CREATE UNIQUE INDEX ad_element_uppercolumnname + ON ad_element(UPPER(columnname)); diff --git a/migration/354a-trunk/postgresql/689_BF2889652_IndexElementUpperColumnName.sql b/migration/354a-trunk/postgresql/689_BF2889652_IndexElementUpperColumnName.sql new file mode 100644 index 0000000000..68653d40b4 --- /dev/null +++ b/migration/354a-trunk/postgresql/689_BF2889652_IndexElementUpperColumnName.sql @@ -0,0 +1,4 @@ +DROP INDEX ad_element_columnname; + +CREATE UNIQUE INDEX ad_element_uppercolumnname + ON ad_element(UPPER(columnname));