diff --git a/base/src/org/adempiere/process/rpl/exp/ExportHelper.java b/base/src/org/adempiere/process/rpl/exp/ExportHelper.java
index 486fb931fe..2b4ebfbbd6 100644
--- a/base/src/org/adempiere/process/rpl/exp/ExportHelper.java
+++ b/base/src/org/adempiere/process/rpl/exp/ExportHelper.java
@@ -29,8 +29,6 @@
**********************************************************************/
package org.adempiere.process.rpl.exp;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
@@ -45,22 +43,21 @@ import javax.xml.parsers.ParserConfigurationException;
import org.adempiere.process.rpl.IExportProcessor;
import org.compiere.model.MClient;
import org.compiere.model.MColumn;
+import org.compiere.model.MEXPFormat;
+import org.compiere.model.MEXPFormatLine;
+import org.compiere.model.MEXPProcessor;
+import org.compiere.model.MEXPProcessorType;
import org.compiere.model.MReplicationStrategy;
import org.compiere.model.MTable;
import org.compiere.model.PO;
import org.compiere.model.Query;
import org.compiere.model.X_EXP_FormatLine;
import org.compiere.util.CLogger;
-import org.compiere.util.DB;
import org.compiere.util.DisplayType;
import org.compiere.util.Env;
import org.compiere.util.Language;
import org.compiere.util.Msg;
import org.compiere.util.Trx;
-import org.compiere.model.MEXPFormat;
-import org.compiere.model.MEXPFormatLine;
-import org.compiere.model.MEXPProcessor;
-import org.compiere.model.MEXPProcessorType;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Text;
@@ -74,6 +71,8 @@ import org.w3c.dom.Text;
* @author victor.perez@e-evolution.com, e-Evolution
*
[ 2195090 ] Stabilization of replication
* https://sourceforge.net/tracker/?func=detail&atid=879332&aid=2936561&group_id=176962
+ * BF [2947622] The replication ID (Primary Key) is not working
+ * https://sourceforge.net/tracker/?func=detail&aid=2947622&group_id=176962&atid=879332
*
*/
public class ExportHelper {
@@ -157,49 +156,21 @@ public class ExportHelper {
outDocument = createNewDocument();
- StringBuffer sql = new StringBuffer("SELECT * ")
- .append("FROM ").append(po.get_TableName()).append(" ")
- .append("WHERE ").append(po.get_KeyColumns()[0]).append("=?")
- ;
-
- if (exportFormat.getWhereClause() != null & !"".equals(exportFormat.getWhereClause())) {
- sql.append(" AND ").append(exportFormat.getWhereClause());
- }
-
- ResultSet rs = null;
- PreparedStatement pstmt = null;
- try
+ HashMap variableMap = new HashMap();
+
+ Element rootElement = outDocument.createElement(exportFormat.getValue());
+ if (exportFormat.getDescription() != null && !"".equals(exportFormat.getDescription()))
{
- pstmt = DB.prepareStatement(sql.toString(), po.get_TrxName());
- pstmt.setInt(1, po.get_ID());
- rs = pstmt.executeQuery();
- if (rs.next())
- {
- HashMap variableMap = new HashMap();
- //variableMap.put(TOTAL_SEGMENTS, new Integer(1));
-
- Element rootElement = outDocument.createElement(exportFormat.getValue());
- if (exportFormat.getDescription() != null && !"".equals(exportFormat.getDescription())) {
- rootElement.appendChild(outDocument.createComment(exportFormat.getDescription()));
- }
- rootElement.setAttribute("AD_Client_Value", client.getValue());
- rootElement.setAttribute("Version", exportFormat.getVersion());
- rootElement.setAttribute("ReplicationMode", ReplicationMode.toString());
- rootElement.setAttribute("ReplicationType", ReplicationType);
- rootElement.setAttribute("ReplicationEvent", ReplicationEvent.toString());
- outDocument.appendChild(rootElement);
- generateExportFormat(rootElement, exportFormat, rs, po, po.get_ID(), variableMap);
- }
-
- } finally {
- try {
- if (rs != null) rs.close();
- if (pstmt != null) pstmt.close();
- } catch (SQLException ex) {/*ignored*/}
- rs = null;
- pstmt = null;
- }
-
+ rootElement.appendChild(outDocument.createComment(exportFormat.getDescription()));
+ }
+ rootElement.setAttribute("AD_Client_Value", client.getValue());
+ rootElement.setAttribute("Version", exportFormat.getVersion());
+ rootElement.setAttribute("ReplicationMode", ReplicationMode.toString());
+ rootElement.setAttribute("ReplicationType", ReplicationType);
+ rootElement.setAttribute("ReplicationEvent", ReplicationEvent.toString());
+ outDocument.appendChild(rootElement);
+ generateExportFormat(rootElement, exportFormat, po, po.get_ID(), variableMap);
+
MEXPProcessor mExportProcessor = null;
mExportProcessor = new MEXPProcessor (po.getCtx(), m_rplStrategy.getEXP_Processor_ID(), po.get_TrxName() );
log.fine("ExportProcessor = " + mExportProcessor);
@@ -236,11 +207,11 @@ public class ExportHelper {
MTable table = MTable.get(exportFormat.getCtx(), exportFormat.getAD_Table_ID());
log.info("Table = " + table);
- Collection datas = new Query(exportFormat.getCtx(),table.getTableName(), exportFormat.getWhereClause(), exportFormat.get_TrxName())
+ Collection records = new Query(exportFormat.getCtx(),table.getTableName(), exportFormat.getWhereClause(), exportFormat.get_TrxName())
.setOnlyActiveRecords(true)
.list();
- for (PO po : datas)
+ for (PO po : records)
{
log.info("Client = " + client.toString());
log.finest("po.getAD_Org_ID() = " + po.getAD_Org_ID());
@@ -257,48 +228,20 @@ public class ExportHelper {
String version = "3.2.0";
outDocument = createNewDocument();
- StringBuffer sql = new StringBuffer("SELECT * ")
- .append("FROM ").append(table.getTableName()).append(" ")
- .append("WHERE ").append(po.get_KeyColumns()[0]).append("=?")
- ;
-
- if (exportFormat.getWhereClause() != null & !"".equals(exportFormat.getWhereClause())) {
- sql.append(" AND ").append(exportFormat.getWhereClause());
- }
-
- ResultSet rs = null;
- PreparedStatement pstmt = null;
- try
+
+ HashMap variableMap = new HashMap();
+ Element rootElement = outDocument.createElement(exportFormat.getValue());
+ if (exportFormat.getDescription() != null && !"".equals(exportFormat.getDescription()))
{
- pstmt = DB.prepareStatement(sql.toString(), po.get_TrxName());
- pstmt.setInt(1, po.get_ID());
- rs = pstmt.executeQuery();
- if (rs.next())
- {
- HashMap variableMap = new HashMap();
- //variableMap.put(TOTAL_SEGMENTS, new Integer(1));
-
- Element rootElement = outDocument.createElement(exportFormat.getValue());
- if (exportFormat.getDescription() != null && !"".equals(exportFormat.getDescription())) {
- rootElement.appendChild(outDocument.createComment(exportFormat.getDescription()));
- }
- rootElement.setAttribute("AD_Client_Value", client.getValue());
- rootElement.setAttribute("Version", exportFormat.getVersion());
- rootElement.setAttribute("ReplicationMode", ReplicationMode.toString());
- rootElement.setAttribute("ReplicationType", ReplicationType);
- rootElement.setAttribute("ReplicationEvent", ReplicationEvent.toString());
- outDocument.appendChild(rootElement);
- generateExportFormat(rootElement, exportFormat, rs, po, po.get_ID(), variableMap);
- }
-
- } finally {
- try {
- if (rs != null) rs.close();
- if (pstmt != null) pstmt.close();
- } catch (SQLException ex) {/*ignored*/}
- rs = null;
- pstmt = null;
- }
+ rootElement.appendChild(outDocument.createComment(exportFormat.getDescription()));
+ }
+ rootElement.setAttribute("AD_Client_Value", client.getValue());
+ rootElement.setAttribute("Version", exportFormat.getVersion());
+ rootElement.setAttribute("ReplicationMode", ReplicationMode.toString());
+ rootElement.setAttribute("ReplicationType", ReplicationType);
+ rootElement.setAttribute("ReplicationEvent", ReplicationEvent.toString());
+ outDocument.appendChild(rootElement);
+ generateExportFormat(rootElement, exportFormat, po, po.get_ID(), variableMap);
}// finish record read
return outDocument;
}
@@ -310,7 +253,7 @@ public class ExportHelper {
* 101
*
*/
- private void generateExportFormat(Element rootElement, MEXPFormat exportFormat, ResultSet rs, PO masterPO, int masterID, HashMap variableMap) throws SQLException, Exception
+ private void generateExportFormat(Element rootElement, MEXPFormat exportFormat, PO masterPO, int masterID, HashMap variableMap) throws SQLException, Exception
{
Collection formatLines = exportFormat.getFormatLines();
@SuppressWarnings("unused")
@@ -323,7 +266,7 @@ public class ExportHelper {
// process single XML Attribute
// Create new element
Element newElement = outDocument.createElement(formatLine.getValue());
-
+ log.info("Format Line Seach key"+ formatLine.getValue());
if (formatLine.getAD_Column_ID() == 0) {
throw new Exception(Msg.getMsg (masterPO.getCtx(), "EXPColumnMandatory"));
}
@@ -336,7 +279,7 @@ public class ExportHelper {
} else { }
//log.info("["+column.getColumnName()+"]");
- Object value = rs.getObject(column.getColumnName());
+ Object value = masterPO.get_Value(column.getColumnName());
String valueString = null;
if (value != null) {
valueString = value.toString();
@@ -350,14 +293,12 @@ public class ExportHelper {
if (valueString != null) {
if (formatLine.getDateFormat() != null && !"".equals(formatLine.getDateFormat())) {
m_customDateFormat = new SimpleDateFormat( formatLine.getDateFormat() ); // "MM/dd/yyyy"
- //Date date = m_customDateFormat.parse ( valueString );
+
valueString = m_customDateFormat.format(Timestamp.valueOf (valueString));
newElement.setAttribute("DateFormat", m_customDateFormat.toPattern()); // Add "DateForamt attribute"
- } else {
- //valueString = m_dateFormat.format (Timestamp.valueOf (valueString));
- //newElement.setAttribute("DateFormat", m_dateTimeFormat.toPattern()); // Add "DateForamt attribute
- //Standard Japanese Format (default) works better (yyyy-mm-dd)
- newElement.setAttribute("DateFormat", valueString);
+ } else
+ {
+ newElement.setAttribute("DateFormat", valueString);
}
}
@@ -365,13 +306,9 @@ public class ExportHelper {
if (valueString != null) {
if (formatLine.getDateFormat() != null && !"".equals(formatLine.getDateFormat())) {
m_customDateFormat = new SimpleDateFormat( formatLine.getDateFormat() ); // "MM/dd/yyyy"
- //Date date = m_customDateFormat.parse ( valueString );
valueString = m_customDateFormat.format(Timestamp.valueOf (valueString));
newElement.setAttribute("DateFormat", m_customDateFormat.toPattern()); // Add "DateForamt attribute"
} else {
- //valueString = m_dateTimeFormat.format (Timestamp.valueOf (valueString));
- //newElement.setAttribute("DateFormat", m_dateTimeFormat.toPattern()); // Add "DateForamt attribute
- //Standard Japanese Format (default) works better (yyyy-mm-dd hh:mm:ss m.mm)
newElement.setAttribute("DateFormat", valueString);
}
}
@@ -382,8 +319,6 @@ public class ExportHelper {
newElement.appendChild(newText);
rootElement.appendChild(newElement);
elementHasValue = true;
- //increaseVariable(variableMap, formatLines[i].getVariableName()); // Increase value of Variable if any Variable
- //increaseVariable(variableMap, TOTAL_SEGMENTS);
} else {
// Empty field.
if (formatLine.isMandatory()) {
@@ -407,7 +342,7 @@ public class ExportHelper {
} else { }
//log.info("["+column.getColumnName()+"]");
- Object value = rs.getObject(column.getColumnName());
+ Object value = masterPO.get_Value(column.getColumnName());
String valueString = null;
if (value != null) {
valueString = value.toString();
@@ -442,8 +377,7 @@ public class ExportHelper {
if (valueString != null && !"".equals(valueString) && !"null".equals(valueString)) {
rootElement.setAttribute(formatLine.getValue(), valueString);
elementHasValue = true;
- //increaseVariable(variableMap, formatLines[i].getVariableName()); // Increase value of Variable if any Variable
- //increaseVariable(variableMap, TOTAL_SEGMENTS);
+
} else {
// Empty field.
}
@@ -458,44 +392,30 @@ public class ExportHelper {
MTable tableEmbedded = MTable.get(masterPO.getCtx(), embeddedFormat.getAD_Table_ID());
log.info("Table Embedded = " + tableEmbedded);
- StringBuffer sql = new StringBuffer("SELECT * ")
- .append("FROM ").append(tableEmbedded.getTableName()).append(" ")
- .append("WHERE ").append(masterPO.get_KeyColumns()[0]).append("=?")
- //+ "WHERE " + po.get_WhereClause(false)
- ;
- if (embeddedFormat.getWhereClause() != null & !"".equals(embeddedFormat.getWhereClause())) {
- sql.append(" AND ").append(embeddedFormat.getWhereClause());
- }
- log.info(sql.toString());
- ResultSet rsEmbedded = null;
- PreparedStatement pstmt = null;
- try
+
+ final StringBuffer whereClause = new StringBuffer(masterPO.get_KeyColumns()[0] +"=?");
+
+ if (embeddedFormat.getWhereClause() != null & !"".equals(embeddedFormat.getWhereClause()))
{
- pstmt = DB.prepareStatement(sql.toString(), masterPO.get_TrxName());
- pstmt.setInt(1, masterID);
- rsEmbedded = pstmt.executeQuery();
- while (rsEmbedded.next())
- {
- //System.out.println("Trifon - tableEmbedded.getTableName()_ID = "+ tableEmbedded.getTableName() + "_ID");
- int embeddedID = rsEmbedded.getInt(tableEmbedded.getTableName() + "_ID");
- PO poEmbedded = tableEmbedded.getPO (embeddedID, masterPO.get_TrxName());
-
- Element embeddedElement = outDocument.createElement(formatLine.getValue());
- if (formatLine.getDescription() != null && !"".equals(formatLine.getDescription())) {
- embeddedElement.appendChild(outDocument.createComment(formatLine.getDescription()));
- }
- generateExportFormat(embeddedElement, embeddedFormat, rsEmbedded, poEmbedded, embeddedID, variableMap);
- rootElement.appendChild(embeddedElement);
- }
-
- } finally {
- try {
- if (rsEmbedded != null) rsEmbedded.close();
- if (pstmt != null) pstmt.close();
- } catch (SQLException ex) { }
- rsEmbedded = null;
- pstmt = null;
+ whereClause.append(" AND ").append(embeddedFormat.getWhereClause());
}
+ Collection instances = new Query(masterPO.getCtx(),
+ tableEmbedded.getTableName(), whereClause.toString(),
+ masterPO.get_TrxName()).setClient_ID().setParameters(
+ new Object[] { masterID }).list();
+
+ for (PO instance : instances)
+ {
+ Element embeddedElement = outDocument.createElement(formatLine.getValue());
+ if (formatLine.getDescription() != null && !"".equals(formatLine.getDescription()))
+ {
+ embeddedElement.appendChild(outDocument.createComment(formatLine.getDescription()));
+ }
+
+ generateExportFormat(embeddedElement, embeddedFormat, instance, instance.get_ID(), variableMap);
+ rootElement.appendChild(embeddedElement);
+ }
+
}
else if ( formatLine.getType().equals(X_EXP_FormatLine.TYPE_ReferencedEXPFormat) )
@@ -508,64 +428,35 @@ public class ExportHelper {
MTable tableEmbedded = MTable.get(masterPO.getCtx(), embeddedFormat.getAD_Table_ID());
log.info("Table Embedded = " + tableEmbedded);
- StringBuffer sql = new StringBuffer("SELECT * ")
- .append("FROM ").append(tableEmbedded.getTableName()).append(" ")
- .append("WHERE ").append(tableEmbedded.getTableName() + "_ID").append("=?")
- //+ "WHERE " + po.get_WhereClause(false)
- ;
- if (embeddedFormat.getWhereClause() != null & !"".equals(embeddedFormat.getWhereClause())) {
- sql.append(" AND ").append(embeddedFormat.getWhereClause());
- }
- log.info(sql.toString());
- if (formatLine.getAD_Column_ID() == 0) {
- throw new Exception(Msg.getMsg (masterPO.getCtx(), "EXPColumnMandatory"));
- }
- MColumn column = MColumn.get(masterPO.getCtx(), formatLine.getAD_Column_ID());
- if (column == null) {
- throw new Exception(Msg.getMsg (masterPO.getCtx(), "EXPColumnMandatory"));
- }
- if ( column.isVirtualColumn() ) {
- log.info("This is Virtual Column!");
- } else { }
- //log.info("["+column.getColumnName()+"]");
- Object value = rs.getObject(column.getColumnName());
-/* String valueString = null;
- if (value != null) {
- valueString = value.toString();
- } else {
- throw new Exception(Msg.getMsg (masterPO.getCtx(), "EXPFieldMandatory"));
- }
-*/
- log.info(sql.toString());
- ResultSet rsEmbedded = null;
- PreparedStatement pstmt = null;
- try
+
+ final StringBuffer whereClause = new StringBuffer(tableEmbedded.getTableName() + "_ID =?");
+ if (embeddedFormat.getWhereClause() != null & !"".equals(embeddedFormat.getWhereClause()))
{
- pstmt = DB.prepareStatement(sql.toString(), masterPO.get_TrxName());
- pstmt.setObject(1, value);
- rsEmbedded = pstmt.executeQuery();
- while (rsEmbedded.next())
- {
- //System.out.println("Trifon - tableEmbedded.getTableName()_ID = "+ tableEmbedded.getTableName() + "_ID");
- int embeddedID = rsEmbedded.getInt(tableEmbedded.getTableName() + "_ID");
- PO poEmbedded = tableEmbedded.getPO (embeddedID, masterPO.get_TrxName());
-
- Element embeddedElement = outDocument.createElement(formatLine.getValue());
- if (formatLine.getDescription() != null && !"".equals(formatLine.getDescription())) {
- embeddedElement.appendChild(outDocument.createComment(formatLine.getDescription()));
- }
- generateExportFormat(embeddedElement, embeddedFormat, rsEmbedded, poEmbedded, embeddedID, variableMap);
- rootElement.appendChild(embeddedElement);
- }
-
- } finally {
- try {
- if (rsEmbedded != null) rsEmbedded.close();
- if (pstmt != null) pstmt.close();
- } catch (SQLException ex) { }
- rsEmbedded = null;
- pstmt = null;
+ whereClause.append(" AND ").append(embeddedFormat.getWhereClause());
}
+
+ Object value = masterPO.get_Value(tableEmbedded.getTableName() + "_ID");
+ if (value == null)
+ {
+ continue;
+ }
+
+ Collection instances = new Query(masterPO.getCtx(),tableEmbedded.getTableName(), whereClause.toString(),masterPO.get_TrxName())
+ .setClient_ID()
+ .setParameters(new Object[] { value })
+ .list();
+
+ for (PO instance : instances)
+ {
+ Element embeddedElement = outDocument.createElement(formatLine.getValue());
+ if (formatLine.getDescription() != null && !"".equals(formatLine.getDescription()))
+ {
+ embeddedElement.appendChild(outDocument.createComment(formatLine.getDescription()));
+ }
+
+ generateExportFormat(embeddedElement, embeddedFormat, instance, instance.get_ID(), variableMap);
+ rootElement.appendChild(embeddedElement);
+ }
}
diff --git a/base/src/org/adempiere/process/rpl/imp/ImportHelper.java b/base/src/org/adempiere/process/rpl/imp/ImportHelper.java
index 8575540c3b..a0a89207fe 100755
--- a/base/src/org/adempiere/process/rpl/imp/ImportHelper.java
+++ b/base/src/org/adempiere/process/rpl/imp/ImportHelper.java
@@ -40,8 +40,8 @@ import java.util.Properties;
import javax.xml.xpath.XPathExpressionException;
import org.adempiere.exceptions.AdempiereException;
-import org.adempiere.process.rpl.exp.ExportHelper;
import org.adempiere.process.rpl.XMLHelper;
+import org.adempiere.process.rpl.exp.ExportHelper;
import org.compiere.model.I_AD_Client;
import org.compiere.model.MClient;
import org.compiere.model.MColumn;
@@ -52,7 +52,9 @@ import org.compiere.model.MTable;
import org.compiere.model.ModelValidator;
import org.compiere.model.PO;
import org.compiere.model.Query;
+import org.compiere.model.X_AD_ReplicationDocument;
import org.compiere.model.X_AD_ReplicationTable;
+import org.compiere.process.DocAction;
import org.compiere.util.CLogger;
import org.compiere.util.DisplayType;
import org.compiere.util.Env;
@@ -69,6 +71,8 @@ import org.w3c.dom.NodeList;
* @author victor.perez@e-evolution.com, e-Evolution
* [ 2195090 ] Stabilization of replication
* https://sourceforge.net/tracker/?func=detail&atid=879332&aid=2936561&group_id=176962
+ * BF [2947622] The replication ID (Primary Key) is not working
+ * https://sourceforge.net/tracker/?func=detail&aid=2947622&group_id=176962&atid=879332
*
*/
public class ImportHelper {
@@ -171,65 +175,62 @@ public class ImportHelper {
if(po != null)
{
- // Here must invoke other method else we get cycle...
- if (ModelValidator.TYPE_BEFORE_DELETE == ReplicationEvent
- || ModelValidator.TYPE_BEFORE_DELETE_REPLICATION == ReplicationEvent
- || ModelValidator.TYPE_DELETE == ReplicationEvent)
- {
- po.deleteEx(true);
- }
- else
- {
- if(X_AD_ReplicationTable.REPLICATIONTYPE_Broadcast.equals(ReplicationType))
- {
- po.saveReplica(true);
- MReplicationStrategy rplStrategy = new MReplicationStrategy(client.getCtx(), client.getAD_ReplicationStrategy_ID(), null);
- ExportHelper expHelper = new ExportHelper(client, rplStrategy);
- expHelper.exportRecord( po,
- MReplicationStrategy.REPLICATION_TABLE,
- X_AD_ReplicationTable.REPLICATIONTYPE_Merge,
- ModelValidator.TYPE_AFTER_CHANGE);
- }
- else if(X_AD_ReplicationTable.REPLICATIONTYPE_Merge.equals(ReplicationType)
- || X_AD_ReplicationTable.REPLICATIONTYPE_Reference.equals(ReplicationType))
- {
- po.saveReplica(true);
- }
- /*else if (X_AD_ReplicationTable.REPLICATIONTYPE_Reference.equals(ReplicationType))
- {
- //Do nothing??
- }*/
- else if(X_AD_ReplicationTable.REPLICATIONTYPE_Local.equals(ReplicationType))
- {
- //Do nothing??
- }
- else
- {
- // Replication Type is not one of the possible values...ERROR
- throw new Exception(Msg.getMsg(ctx, "EXPReplicationTypeNonValidType"));
- }
-
-
- }
- }
- result.append("Save Successful ;");
- /*if (resultSave)
- {
- if(ReplicationMode == MReplicationStrategy.REPLICATION_DOCUMENT &&
- ReplicationType == X_AD_ReplicationDocument.REPLICATIONTYPE_Merge)
- {
- String status = po.get_ValueAsString("DocStatus");
- String action = po.get_ValueAsString("DocAction");
- DocAction m_document;
- m_document=(DocAction) po;
- DocumentEngine engine = new DocumentEngine (m_document, status);
- engine.processIt (action);
- }
- // Success in save
- } else {
- // Failed in save
- throw new Exception(Msg.getMsg(ctx, "EXPFormatFailedSave"));
- }*/
+ if(MReplicationStrategy.REPLICATION_TABLE==ReplicationMode)
+ {
+ // Here must invoke other method else we get cycle...
+ if ( ModelValidator.TYPE_BEFORE_DELETE == ReplicationEvent
+ || ModelValidator.TYPE_BEFORE_DELETE_REPLICATION == ReplicationEvent
+ || ModelValidator.TYPE_DELETE == ReplicationEvent)
+ {
+ po.deleteEx(true);
+ }
+ else
+ {
+ if(X_AD_ReplicationTable.REPLICATIONTYPE_Broadcast.equals(ReplicationType))
+ {
+ po.saveReplica(true);
+ MReplicationStrategy rplStrategy = new MReplicationStrategy(client.getCtx(), client.getAD_ReplicationStrategy_ID(), null);
+ ExportHelper expHelper = new ExportHelper(client, rplStrategy);
+ expHelper.exportRecord( po,
+ MReplicationStrategy.REPLICATION_TABLE,
+ X_AD_ReplicationTable.REPLICATIONTYPE_Merge,
+ ModelValidator.TYPE_AFTER_CHANGE);
+
+ }
+ else if(X_AD_ReplicationTable.REPLICATIONTYPE_Merge.equals(ReplicationType)
+ || X_AD_ReplicationTable.REPLICATIONTYPE_Reference.equals(ReplicationType))
+ {
+ if(po.is_Changed())
+ {
+ po.saveReplica(true);
+ }
+ }
+ /*else if (X_AD_ReplicationTable.REPLICATIONTYPE_Reference.equals(ReplicationType))
+ {
+ //Do nothing??
+ }*/
+ else if(X_AD_ReplicationTable.REPLICATIONTYPE_Local.equals(ReplicationType))
+ {
+ //Do nothing??
+ }
+ else
+ {
+ // Replication Type is not one of the possible values...ERROR
+ throw new Exception(Msg.getMsg(ctx, "EXPReplicationTypeNonValidType"));
+ }
+ }
+ }
+ else if(MReplicationStrategy.REPLICATION_DOCUMENT == ReplicationMode
+ && X_AD_ReplicationDocument.REPLICATIONTYPE_Merge.equals(ReplicationType)
+ && po instanceof DocAction)
+ {
+ Env.setContext(Env.getCtx(), "#AD_Client_ID", po.getAD_Client_ID());
+ DocAction document = (DocAction)po;
+ document.processIt(document.getDocAction());
+ po.saveEx();
+ }
+ }
+ result.append("Save Successful ;");
}
/**
@@ -279,7 +280,7 @@ public class ImportHelper {
log.info("=================== Beginnig of Format Line ===============================");
log.info("formatLine: [" + formatLine.toString() + "]");
//Get the value
- Object value = getValueFromFormat(formatLine,po,rootElement,result,ReplicationType,trxName);
+ Object value = getValueFromFormat(formatLine,po,rootElement,result,ReplicationType);
if (value == null || value.toString().equals(""))
continue;
//Set the value
@@ -300,7 +301,7 @@ public class ImportHelper {
* @throws Exception
*/
private Object getValueFromFormat(MEXPFormatLine line,PO po,Element rootElement,
- StringBuffer result, String ReplicationType, String trxName) throws Exception
+ StringBuffer result, String ReplicationType) throws Exception
{
Object value = null;
@@ -315,7 +316,7 @@ public class ImportHelper {
{
// Referenced Export Format
//get from cache
- MEXPFormat referencedExpFormat = MEXPFormat.get(ctx, line.getEXP_EmbeddedFormat_ID(), trxName);
+ MEXPFormat referencedExpFormat = MEXPFormat.get(ctx, line.getEXP_EmbeddedFormat_ID(), po.get_TrxName());
log.info("referencedExpFormat = " + referencedExpFormat);
int refRecord_ID = 0;
@@ -329,7 +330,7 @@ public class ImportHelper {
log.info("referencedNode = " + referencedNode);
if(referencedNode!=null)
{
- refRecord_ID = getID(ctx, referencedExpFormat, referencedNode, line.getValue(), trxName);
+ refRecord_ID = getID(ctx, referencedExpFormat, referencedNode, line.getValue(), po.get_TrxName());
log.info("refRecord_ID = " + refRecord_ID);
value = new Integer(refRecord_ID);
}
@@ -349,7 +350,7 @@ public class ImportHelper {
// Embedded Export Format It is used for Parent-Son records like Order&OrderLine
//get from cache
- MEXPFormat referencedExpFormat = MEXPFormat.get(ctx, line.getEXP_EmbeddedFormat_ID(), trxName);
+ MEXPFormat referencedExpFormat = MEXPFormat.get(ctx, line.getEXP_EmbeddedFormat_ID(), po.get_TrxName());
log.info("embeddedExpFormat = " + referencedExpFormat);
NodeList nodeList = XMLHelper.getNodeList("/"+rootElement.getNodeName() + "/" + line.getValue(), rootElement);
@@ -361,7 +362,7 @@ public class ImportHelper {
PO embeddedPo = null;
// Import embedded PO
log.info("=== BEGIN RECURSION CALL ===");
- embeddedPo = importElement(ctx, result, referencedElement, referencedExpFormat,ReplicationType, trxName);
+ embeddedPo = importElement(ctx, result, referencedElement, referencedExpFormat,ReplicationType, po.get_TrxName());
log.info("embeddedPo = " + embeddedPo);
embeddedPo.saveReplica(true);
result.append(" Embedded Save Successful ; ");
@@ -394,12 +395,13 @@ public class ImportHelper {
*/
private void setReplicaValues(Object value,MEXPFormatLine line,PO po,StringBuffer result)throws Exception
{
+ MColumn column = MColumn.get(ctx, line.getAD_Column_ID());
+ log.info("column=[" + column + "]");
+
if (value !=null)
{
if (!MEXPFormatLine.TYPE_EmbeddedEXPFormat.equals(line.getType()) )
{
- MColumn column = MColumn.get(ctx, line.getAD_Column_ID());
- log.info("column=[" + column + "]");
// Clazz
Class clazz = DisplayType.getClass(column.getAD_Reference_ID(), true);
@@ -481,7 +483,11 @@ public class ImportHelper {
}
else if(DisplayType.YesNo == column.getAD_Reference_ID())
{
- po.set_ValueOfColumn(line.getAD_Column_ID(), value);
+ if(clazz == Boolean.class)
+ {
+ String v = value.toString().equals("true") ? "Y" : "N";
+ po.set_ValueOfColumn(line.getAD_Column_ID(), v);
+ }
}
else
{
@@ -491,7 +497,8 @@ public class ImportHelper {
if(clazz == Boolean.class)
{
- po.set_ValueOfColumn(line.getAD_Column_ID(), value);
+ String v = value.toString().equals("true") ? "Y" : "N";
+ po.set_ValueOfColumn(line.getAD_Column_ID(), v);
}
else
{
@@ -565,6 +572,7 @@ public class ImportHelper {
throw new AdempiereException(Msg.getMsg(ctx, "EXPFormatLineNoUniqueColumns"));
}
+ int replication_id = 0;
Object[] cols = new Object[uniqueFormatLines.size()];
Object[] params = new Object[uniqueFormatLines.size()];
StringBuffer whereClause= new StringBuffer("");
@@ -634,6 +642,10 @@ public class ImportHelper {
{
//double doubleValue = Double.parseDouble(value.toString());
value = new Integer(value.toString());
+ if (DisplayType.ID == column.getAD_Reference_ID())
+ {
+ replication_id = (Integer) value;
+ }
}
else
{
@@ -671,7 +683,14 @@ public class ImportHelper {
if(values.size()<=0)//Means that is a new record
{
- return MTable.get(ctx, expFormat.getAD_Table_ID()).getPO(0,trxName);
+ PO po = po = MTable.get(ctx, expFormat.getAD_Table_ID()).getPO(0,trxName);
+
+ if (replication_id > 0 )
+ {
+ po.set_CustomColumn(po.get_KeyColumns()[0], replication_id);
+ }
+
+ return po;
}
return values.get(0);//Return the first (unique) record.
diff --git a/base/src/org/compiere/model/PO.java b/base/src/org/compiere/model/PO.java
index bc22517a0e..dd177b30f1 100644
--- a/base/src/org/compiere/model/PO.java
+++ b/base/src/org/compiere/model/PO.java
@@ -86,6 +86,8 @@ import org.w3c.dom.Element;
* @author Victor Perez, e-Evolution SC
* [ 2195894 ] Improve performance in PO engine
* http://sourceforge.net/tracker/index.php?func=detail&aid=2195894&group_id=176962&atid=879335
+ * BF [2947622] The replication ID (Primary Key) is not working
+ * https://sourceforge.net/tracker/?func=detail&aid=2947622&group_id=176962&atid=879332
*/
public abstract class PO
implements Serializable, Comparator, Evaluatee
@@ -2512,6 +2514,14 @@ public abstract class PO
int no = saveNew_getID();
if (no <= 0)
no = DB.getNextID(getAD_Client_ID(), p_info.getTableName(), m_trxName);
+ // the primary key is not overwrite with the local sequence
+ if (isReplication())
+ {
+ if (get_ID() > 0)
+ {
+ no = get_ID();
+ }
+ }
if (no <= 0)
{
log.severe("No NextID (" + no + ")");