IDEMPIERE-3916 / FHEG-599 / Implement migrate ID for nodes in tree tables
This commit is contained in:
parent
d7f6cc7b84
commit
4f321005d7
|
@ -54,7 +54,7 @@ public class MSequence extends X_AD_Sequence
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = 7331047665037991960L;
|
private static final long serialVersionUID = -2215317912000946608L;
|
||||||
|
|
||||||
/** Log Level for Next ID Call */
|
/** Log Level for Next ID Call */
|
||||||
private static final Level LOGLEVEL = Level.ALL;
|
private static final Level LOGLEVEL = Level.ALL;
|
||||||
|
@ -919,16 +919,22 @@ public class MSequence extends X_AD_Sequence
|
||||||
return retValue;
|
return retValue;
|
||||||
} // getNextNo
|
} // getNextNo
|
||||||
|
|
||||||
|
public String validateTableIDValue()
|
||||||
|
{
|
||||||
|
return validateTableIDValue(null);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Validate Table Sequence Values
|
* Validate Table Sequence Values
|
||||||
|
* trxName the Transaction
|
||||||
* @return true if updated
|
* @return true if updated
|
||||||
*/
|
*/
|
||||||
public String validateTableIDValue()
|
public String validateTableIDValue(String trxName)
|
||||||
{
|
{
|
||||||
if (!isTableID())
|
if (!isTableID())
|
||||||
return null;
|
return null;
|
||||||
String tableName = getName();
|
String tableName = getName();
|
||||||
int AD_Column_ID = DB.getSQLValue(null, "SELECT MAX(c.AD_Column_ID) "
|
int AD_Column_ID = DB.getSQLValue(trxName, "SELECT MAX(c.AD_Column_ID) "
|
||||||
+ "FROM AD_Table t"
|
+ "FROM AD_Table t"
|
||||||
+ " INNER JOIN AD_Column c ON (t.AD_Table_ID=c.AD_Table_ID) "
|
+ " INNER JOIN AD_Column c ON (t.AD_Table_ID=c.AD_Table_ID) "
|
||||||
+ "WHERE t.TableName='" + tableName + "'"
|
+ "WHERE t.TableName='" + tableName + "'"
|
||||||
|
@ -949,7 +955,7 @@ public class MSequence extends X_AD_Sequence
|
||||||
String sql = "SELECT MAX(" + tableName + "_ID) FROM " + tableName;
|
String sql = "SELECT MAX(" + tableName + "_ID) FROM " + tableName;
|
||||||
if (IDRangeEnd > 0)
|
if (IDRangeEnd > 0)
|
||||||
sql += " WHERE " + tableName + "_ID < " + IDRangeEnd;
|
sql += " WHERE " + tableName + "_ID < " + IDRangeEnd;
|
||||||
int maxTableID = DB.getSQLValue(null, sql);
|
int maxTableID = DB.getSQLValue(trxName, sql);
|
||||||
if (maxTableID < INIT_NO)
|
if (maxTableID < INIT_NO)
|
||||||
maxTableID = INIT_NO - 1;
|
maxTableID = INIT_NO - 1;
|
||||||
maxTableID++; // Next
|
maxTableID++; // Next
|
||||||
|
@ -965,7 +971,7 @@ public class MSequence extends X_AD_Sequence
|
||||||
// Get Max System_ID used in Table
|
// Get Max System_ID used in Table
|
||||||
sql = "SELECT MAX(" + tableName + "_ID) FROM " + tableName
|
sql = "SELECT MAX(" + tableName + "_ID) FROM " + tableName
|
||||||
+ " WHERE " + tableName + "_ID < " + INIT_NO;
|
+ " WHERE " + tableName + "_ID < " + INIT_NO;
|
||||||
int maxTableSysID = DB.getSQLValue(null, sql);
|
int maxTableSysID = DB.getSQLValue(trxName, sql);
|
||||||
if (maxTableSysID <= 0)
|
if (maxTableSysID <= 0)
|
||||||
maxTableSysID = INIT_SYS_NO;
|
maxTableSysID = INIT_SYS_NO;
|
||||||
int currentNextSysValue = getCurrentNextSys();
|
int currentNextSysValue = getCurrentNextSys();
|
||||||
|
|
|
@ -26,12 +26,14 @@
|
||||||
|
|
||||||
package org.idempiere.process;
|
package org.idempiere.process;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
import org.compiere.model.MSequence;
|
import org.compiere.model.MSequence;
|
||||||
import org.compiere.model.MTable;
|
import org.compiere.model.MTable;
|
||||||
|
import org.compiere.model.MTree;
|
||||||
import org.compiere.model.Query;
|
import org.compiere.model.Query;
|
||||||
import org.compiere.process.ProcessInfoParameter;
|
import org.compiere.process.ProcessInfoParameter;
|
||||||
import org.compiere.process.SvrProcess;
|
import org.compiere.process.SvrProcess;
|
||||||
|
@ -113,9 +115,18 @@ public class MigraID extends SvrProcess {
|
||||||
msg = "@OK@";
|
msg = "@OK@";
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
boolean seqCheck = false;
|
||||||
String idCol = tableName + "_ID";
|
String idCol = tableName + "_ID";
|
||||||
if (p_ID_To <= 0) {
|
if (p_ID_To <= 0) {
|
||||||
p_ID_To = DB.getNextID(getAD_Client_ID(), tableName, get_TrxName());
|
p_ID_To = DB.getNextID(getAD_Client_ID(), tableName, get_TrxName());
|
||||||
|
} else {
|
||||||
|
StringBuilder sqlMaxSB = new StringBuilder()
|
||||||
|
.append("SELECT MAX(").append(tableName).append("_ID)")
|
||||||
|
.append(" FROM ").append(tableName);
|
||||||
|
int maxID = DB.getSQLValueEx(get_TrxName(), sqlMaxSB.toString());
|
||||||
|
if (p_ID_To > maxID) {
|
||||||
|
seqCheck = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// convert ID
|
// convert ID
|
||||||
int cnt = updID(tableName, idCol);
|
int cnt = updID(tableName, idCol);
|
||||||
|
@ -130,15 +141,17 @@ public class MigraID extends SvrProcess {
|
||||||
migrateChildren(tableName);
|
migrateChildren(tableName);
|
||||||
migrateRecordID();
|
migrateRecordID();
|
||||||
migrateAD_Preference(idCol);
|
migrateAD_Preference(idCol);
|
||||||
|
migrateTrees(tableName);
|
||||||
if ("C_DocType_ID".equals(idCol)) {
|
if ("C_DocType_ID".equals(idCol)) {
|
||||||
// special preference C_DocTypeTarget_ID
|
// special preference C_DocTypeTarget_ID
|
||||||
migrateAD_Preference("C_DocTypeTarget_ID");
|
migrateAD_Preference("C_DocTypeTarget_ID");
|
||||||
}
|
}
|
||||||
// TODO: implement migration for SingleSelectionGrid and MultipleSelectionGrid
|
// TODO: implement migration for SingleSelectionGrid and MultipleSelectionGrid
|
||||||
if (p_ID_To > p_ID_From) {
|
|
||||||
|
if (seqCheck) {
|
||||||
MSequence seq = MSequence.get(getCtx(), tableName, get_TrxName());
|
MSequence seq = MSequence.get(getCtx(), tableName, get_TrxName());
|
||||||
if (seq != null) {
|
if (seq != null) {
|
||||||
seq.validateTableIDValue(); // ignore output messages
|
seq.validateTableIDValue(get_TrxName()); // ignore output messages
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -275,4 +288,81 @@ public class MigraID extends SvrProcess {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void migrateTrees(String tableName) {
|
||||||
|
switch (tableName) {
|
||||||
|
case "AD_Menu":
|
||||||
|
migraTree("AD_TreeBar", MTree.TREETYPE_Menu);
|
||||||
|
migraTree("AD_TreeNodeMM", MTree.TREETYPE_Menu);
|
||||||
|
break;
|
||||||
|
case "C_BPartner":
|
||||||
|
migraTree("AD_TreeNodeBP", MTree.TREETYPE_BPartner);
|
||||||
|
break;
|
||||||
|
case "CM_Container":
|
||||||
|
migraTree("AD_TreeNodeCMC", MTree.TREETYPE_CMContainer);
|
||||||
|
break;
|
||||||
|
case "CM_Media":
|
||||||
|
migraTree("AD_TreeNodeCMM", MTree.TREETYPE_CMMedia);
|
||||||
|
break;
|
||||||
|
case "CM_CStage":
|
||||||
|
migraTree("AD_TreeNodeCMS", MTree.TREETYPE_CMContainerStage);
|
||||||
|
break;
|
||||||
|
case "CM_Template":
|
||||||
|
migraTree("AD_TreeNodeCMT", MTree.TREETYPE_CMTemplate);
|
||||||
|
break;
|
||||||
|
case "M_Product":
|
||||||
|
migraTree("AD_TreeNodePR", MTree.TREETYPE_Product);
|
||||||
|
break;
|
||||||
|
case "C_ElementValue":
|
||||||
|
migraTree("AD_TreeNodeU1", MTree.TREETYPE_User1);
|
||||||
|
migraTree("AD_TreeNodeU2", MTree.TREETYPE_User2);
|
||||||
|
migraTree("AD_TreeNodeU3", MTree.TREETYPE_User3);
|
||||||
|
migraTree("AD_TreeNodeU4", MTree.TREETYPE_User4);
|
||||||
|
break;
|
||||||
|
case "AD_Org":
|
||||||
|
migraTree("AD_TreeNode", MTree.TREETYPE_Organization);
|
||||||
|
break;
|
||||||
|
case "M_Product_Category":
|
||||||
|
migraTree("AD_TreeNode", MTree.TREETYPE_ProductCategory);
|
||||||
|
break;
|
||||||
|
case "M_BOM":
|
||||||
|
migraTree("AD_TreeNode", MTree.TREETYPE_BoM);
|
||||||
|
break;
|
||||||
|
case "C_Campaign":
|
||||||
|
migraTree("AD_TreeNode", MTree.TREETYPE_Campaign);
|
||||||
|
break;
|
||||||
|
case "C_Project":
|
||||||
|
migraTree("AD_TreeNode", MTree.TREETYPE_Project);
|
||||||
|
break;
|
||||||
|
case "C_Activity":
|
||||||
|
migraTree("AD_TreeNode", MTree.TREETYPE_Activity);
|
||||||
|
break;
|
||||||
|
case "C_SalesRegion":
|
||||||
|
migraTree("AD_TreeNode", MTree.TREETYPE_SalesRegion);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
migraTree("AD_TreeNode", MTree.TREETYPE_CustomTable);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void migraTree(String menuTable, String treeType) {
|
||||||
|
List<String> columns = new ArrayList<String>();
|
||||||
|
columns.add("Node_ID");
|
||||||
|
if (! "AD_TreeBar".equalsIgnoreCase(menuTable)) {
|
||||||
|
columns.add("Parent_ID");
|
||||||
|
}
|
||||||
|
for (String col : columns) {
|
||||||
|
StringBuilder sqlUpdTreeSB = new StringBuilder()
|
||||||
|
.append("UPDATE ").append(menuTable)
|
||||||
|
.append(" SET ").append(col).append("=? WHERE ").append(col).append("=? AND AD_Tree_ID IN (SELECT AD_Tree_ID FROM AD_Tree WHERE TreeType=?");
|
||||||
|
if (MTree.TREETYPE_CustomTable.equals(treeType)) {
|
||||||
|
sqlUpdTreeSB.append(" AND AD_Table_ID=").append(p_AD_Table_ID);
|
||||||
|
}
|
||||||
|
sqlUpdTreeSB.append(")");
|
||||||
|
int cnt = DB.executeUpdateEx(sqlUpdTreeSB.toString(), new Object[] {p_ID_To, p_ID_From, treeType}, get_TrxName());
|
||||||
|
if (cnt > 0) {
|
||||||
|
String msg = cnt + " tree records updated in " + menuTable + "." + col;
|
||||||
|
addBufferLog(p_ID_From, null, null, msg, 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue