diff --git a/base/src/org/adempiere/pipo/PackOut.java b/base/src/org/adempiere/pipo/PackOut.java
index 1bdc3b7551..e4ea278592 100644
--- a/base/src/org/adempiere/pipo/PackOut.java
+++ b/base/src/org/adempiere/pipo/PackOut.java
@@ -85,6 +85,9 @@ import org.xml.sax.helpers.AttributesImpl;
* @author Teo Sarca, SC ARHIPAC SERVICE SRL
*
BF [ 1819315 ] PackOut: fix xml indentation not working
* BF [ 1819319 ] PackOut: use just active AD_Package_Exp_Detail lines
+ * --
+ * FR [ 2847727 ] 2pack export all messages for a entity type functionality
+ * https://sourceforge.net/tracker/?func=detail&atid=879335&aid=2847727&group_id=176962
*/
public class PackOut extends SvrProcess
@@ -263,15 +266,20 @@ public class PackOut extends SvrProcess
packOutDocument.startElement("","","adempiereAD",atts);
atts.clear();
- String sql = "SELECT * FROM AD_Package_Exp_Detail WHERE AD_Package_Exp_ID = "+p_PackOut_ID+" AND IsActive='Y' ORDER BY Line ASC";
+ final String sql = "SELECT * FROM AD_Package_Exp_Detail WHERE AD_Package_Exp_ID = "+p_PackOut_ID+" AND IsActive='Y' ORDER BY Line ASC";
PreparedStatement pstmt = null;
- pstmt = DB.prepareStatement (sql, get_TrxName());
-
- try {
- ResultSet rs = pstmt.executeQuery();
- while (rs.next()){
- String Type = rs.getString(X_AD_Package_Exp_Detail.COLUMNNAME_Type);
+ ResultSet rs = null;
+ try
+ {
+ pstmt = DB.prepareStatement (sql, get_TrxName());
+ rs = pstmt.executeQuery();
+ while (rs.next())
+ {
+ final String Type = rs.getString(X_AD_Package_Exp_Detail.COLUMNNAME_Type);
+ final int AD_EntityType_ID = rs.getInt(X_AD_Package_Exp_Detail.COLUMNNAME_AD_EntityType_ID);
+ Env.setContext(getCtx(), X_AD_Package_Exp_Detail.COLUMNNAME_AD_EntityType_ID, AD_EntityType_ID);
+ //
log.info(rs.getString(X_AD_Package_Exp_Detail.COLUMNNAME_Line));
if (Type.compareTo("M") == 0){
createMenu(rs.getInt(X_AD_Package_Exp_Detail.COLUMNNAME_AD_Menu_ID), packOutDocument );
@@ -315,7 +323,7 @@ public class PackOut extends SvrProcess
else if (Type.compareTo(X_AD_Package_Exp_Detail.TYPE_ModelValidator) == 0)
createModelValidator(rs.getInt(X_AD_Package_Exp_Detail.COLUMNNAME_AD_ModelValidator_ID), packOutDocument);
else if (Type.compareTo(X_AD_Package_Exp_Detail.TYPE_EntityType) == 0)
- createEntityType(rs.getInt(X_AD_Package_Exp_Detail.COLUMNNAME_AD_EntityType_ID), packOutDocument);
+ createEntityType(AD_EntityType_ID, packOutDocument);
else if (Type.compareTo("C") == 0){
log.log(Level.INFO,"In PackOut.java handling Code or Other 2pack module creation");
@@ -389,20 +397,13 @@ public class PackOut extends SvrProcess
packageDocument.endElement("","","filenotes");
}
}
- rs.close();
- pstmt.close();
- pstmt = null;
+ //
+ getCtx().remove(X_AD_Package_Exp_Detail.COLUMNNAME_AD_EntityType_ID);
}
finally
{
- try
- {
- if (pstmt != null)
- pstmt.close ();
- }
- catch (Exception e)
- {}
- pstmt = null;
+ DB.close(rs, pstmt);
+ rs = null; pstmt = null;
}
atts.clear();
//no longer use
@@ -821,9 +822,9 @@ public class PackOut extends SvrProcess
*/
public void createEntityType (int AD_EntityType_ID, TransformerHandler packOutDocument) throws Exception
{
- Env.setContext(getCtx(), X_AD_Package_Exp_Detail.COLUMNNAME_AD_EntityType_ID, AD_EntityType_ID);
+ //Env.setContext(getCtx(), X_AD_Package_Exp_Detail.COLUMNNAME_AD_EntityType_ID, AD_EntityType_ID);
entitytypeHandler.create(getCtx(), packOutDocument);
- getCtx().remove(X_AD_Package_Exp_Detail.COLUMNNAME_AD_EntityType_ID);
+ //getCtx().remove(X_AD_Package_Exp_Detail.COLUMNNAME_AD_EntityType_ID);
}
diff --git a/base/src/org/adempiere/pipo/handler/MessageElementHandler.java b/base/src/org/adempiere/pipo/handler/MessageElementHandler.java
index 8a2b353807..af888556ef 100644
--- a/base/src/org/adempiere/pipo/handler/MessageElementHandler.java
+++ b/base/src/org/adempiere/pipo/handler/MessageElementHandler.java
@@ -12,16 +12,14 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
*
* Copyright (C) 2005 Robert Klein. robeklein@hotmail.com
- * Contributor(s): Low Heng Sin hengsin@avantz.com
+ * Contributor(s): Low Heng Sin hengsin@avantz.com
+ * Teo Sarca, teo.sarca@gmail.com
*****************************************************************************/
package org.adempiere.pipo.handler;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
-import java.util.logging.Level;
import javax.xml.transform.sax.TransformerHandler;
@@ -30,9 +28,9 @@ import org.adempiere.pipo.Element;
import org.adempiere.pipo.PackOut;
import org.adempiere.pipo.exception.POSaveFailedException;
import org.compiere.model.MMessage;
+import org.compiere.model.Query;
import org.compiere.model.X_AD_Message;
import org.compiere.model.X_AD_Package_Exp_Detail;
-import org.compiere.util.DB;
import org.compiere.util.Env;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
@@ -86,40 +84,49 @@ public class MessageElementHandler extends AbstractElementHandler {
public void endElement(Properties ctx, Element element) throws SAXException {
}
- public void create(Properties ctx, TransformerHandler document)
- throws SAXException {
- int AD_Message_ID = Env.getContextAsInt(ctx, X_AD_Package_Exp_Detail.COLUMNNAME_AD_Message_ID);
- if (messages.contains(AD_Message_ID))
- return;
- messages.add(AD_Message_ID);
- String sql = "SELECT value FROM AD_Message WHERE AD_Message_ID= " + AD_Message_ID;
- AttributesImpl atts = new AttributesImpl();
- PreparedStatement pstmt = null;
- ResultSet rs = null;
- pstmt = DB.prepareStatement (sql, getTrxName(ctx));
-
- try {
-
- rs = pstmt.executeQuery();
-
- while (rs.next())
- {
- X_AD_Message m_Message = new X_AD_Message (ctx, AD_Message_ID, null);
- createMessageBinding(atts,m_Message);
- document.startElement("","","message",atts);
- document.endElement("","","message");
- }
- }
-
- catch (Exception e){
- log.log(Level.SEVERE,"getProcess", e);
- }
- finally
+ public void create(Properties ctx, TransformerHandler document) throws SAXException
+ {
+ for (X_AD_Message message : getMessages(ctx))
{
- DB.close(rs, pstmt);
- rs = null; pstmt = null;
+ if (messages.contains(message.getAD_Message_ID()))
+ continue;
+ messages.add(message.getAD_Message_ID());
+ //
+ AttributesImpl atts = new AttributesImpl();
+ createMessageBinding(atts, message);
+ document.startElement("","","message",atts);
+ document.endElement("","","message");
}
}
+
+ private List getMessages(Properties ctx)
+ {
+ int AD_Message_ID = Env.getContextAsInt(ctx, X_AD_Package_Exp_Detail.COLUMNNAME_AD_Message_ID);
+ int AD_EntityType_ID = Env.getContextAsInt(ctx, X_AD_Package_Exp_Detail.COLUMNNAME_AD_EntityType_ID);
+ String whereClause;
+ Object[] params;
+ if (AD_Message_ID > 0)
+ {
+ whereClause = X_AD_Message.COLUMNNAME_AD_Message_ID+"=?";
+ params = new Object[]{AD_Message_ID};
+ }
+ else if (AD_EntityType_ID > 0)
+ {
+ whereClause = " EXISTS (SELECT 1 FROM AD_EntityType et"
+ +" WHERE et.AD_EntityType_ID=? AND et.EntityType=AD_Message.EntityType)";
+ params = new Object[]{AD_EntityType_ID};
+ }
+ else
+ {
+ throw new IllegalArgumentException("AD_Message_ID and AD_EntityType_ID not found");
+ }
+
+ List list = new Query(ctx, X_AD_Message.Table_Name, whereClause, null)
+ .setParameters(params)
+ .setOrderBy(X_AD_Message.COLUMNNAME_AD_Message_ID)
+ .list();
+ return list;
+ }
private AttributesImpl createMessageBinding( AttributesImpl atts, X_AD_Message m_Message)
{