org.compiere.wf - Workflow Engine :

* Remove SQL code and Replace for Query
https://sourceforge.net/tracker/?func=detail&atid=879335&aid=2214883&group_id=176962
* use DB.getSQLValue*Ex methods
* add WorkflowTest JUnit Test Case
This commit is contained in:
teo_sarca 2009-04-27 10:07:47 +00:00
parent db6295a9ad
commit c1f7b16c08
10 changed files with 179 additions and 211 deletions

View File

@ -18,7 +18,6 @@ package org.compiere.wf;
import java.io.File; import java.io.File;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.sql.Savepoint; import java.sql.Savepoint;
@ -26,10 +25,12 @@ import java.sql.Timestamp;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.List;
import java.util.Properties; import java.util.Properties;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import java.util.logging.Level; import java.util.logging.Level;
import org.adempiere.exceptions.AdempiereException;
import org.compiere.db.CConnection; import org.compiere.db.CConnection;
import org.compiere.interfaces.Server; import org.compiere.interfaces.Server;
import org.compiere.model.MAttachment; import org.compiere.model.MAttachment;
@ -49,13 +50,13 @@ import org.compiere.model.MTable;
import org.compiere.model.MUser; import org.compiere.model.MUser;
import org.compiere.model.MUserRoles; import org.compiere.model.MUserRoles;
import org.compiere.model.PO; import org.compiere.model.PO;
import org.compiere.model.Query;
import org.compiere.model.X_AD_WF_Activity; import org.compiere.model.X_AD_WF_Activity;
import org.compiere.print.ReportEngine; import org.compiere.print.ReportEngine;
import org.compiere.process.DocAction; import org.compiere.process.DocAction;
import org.compiere.process.ProcessInfo; import org.compiere.process.ProcessInfo;
import org.compiere.process.StateEngine; import org.compiere.process.StateEngine;
import org.compiere.util.CLogger; import org.compiere.util.CLogger;
import org.compiere.util.DB;
import org.compiere.util.DisplayType; import org.compiere.util.DisplayType;
import org.compiere.util.Env; import org.compiere.util.Env;
import org.compiere.util.Msg; import org.compiere.util.Msg;
@ -89,31 +90,19 @@ public class MWFActivity extends X_AD_WF_Activity implements Runnable
*/ */
public static MWFActivity[] get (Properties ctx, int AD_Table_ID, int Record_ID, boolean activeOnly) public static MWFActivity[] get (Properties ctx, int AD_Table_ID, int Record_ID, boolean activeOnly)
{ {
ArrayList<MWFActivity> list = new ArrayList<MWFActivity>(); ArrayList<Object> params = new ArrayList<Object>();
PreparedStatement pstmt = null; StringBuffer whereClause = new StringBuffer("AD_Table_ID=? AND Record_ID=?");
ResultSet rs = null; params.add(AD_Table_ID);
String sql = "SELECT * FROM AD_WF_Activity WHERE AD_Table_ID=? AND Record_ID=?"; params.add(Record_ID);
if (activeOnly) if (activeOnly)
sql += " AND Processed<>'Y'";
sql += " ORDER BY AD_WF_Activity_ID";
try
{ {
pstmt = DB.prepareStatement (sql, null); whereClause.append(" AND Processed<>?");
pstmt.setInt (1, AD_Table_ID); params.add(true);
pstmt.setInt (2, Record_ID);
rs = pstmt.executeQuery ();
while (rs.next ())
list.add(new MWFActivity (ctx, rs, null));
}
catch (Exception e)
{
s_log.log(Level.SEVERE, sql, e);
}
finally
{
DB.close(rs, pstmt);
rs = null; pstmt = null;
} }
List<MWFActivity> list = new Query(ctx, Table_Name, whereClause.toString(), null)
.setParameters(params)
.setOrderBy(COLUMNNAME_AD_WF_Activity_ID)
.list();
MWFActivity[] retValue = new MWFActivity[list.size ()]; MWFActivity[] retValue = new MWFActivity[list.size ()];
list.toArray (retValue); list.toArray (retValue);
@ -144,9 +133,6 @@ public class MWFActivity extends X_AD_WF_Activity implements Runnable
return sb.toString(); return sb.toString();
} // getActivityInfo } // getActivityInfo
/** Static Logger */
private static CLogger s_log = CLogger.getCLogger (MWFActivity.class);
/************************************************************************** /**************************************************************************
* Standard Constructor * Standard Constructor
@ -262,9 +248,12 @@ public class MWFActivity extends X_AD_WF_Activity implements Runnable
} // getState } // getState
/** /**
* Set Activity State * Set Activity State.
* @param WFState * It also validates the new state and if is valid,
* then create event audit and call {@link MWFProcess#checkActivities(String, PO)}
* @param WFState
*/ */
@Override
public void setWFState (String WFState) public void setWFState (String WFState)
{ {
if (m_state == null) if (m_state == null)
@ -297,6 +286,7 @@ public class MWFActivity extends X_AD_WF_Activity implements Runnable
Trace.printStack(); Trace.printStack();
setTextMsg(msg); setTextMsg(msg);
save(); save();
// TODO: teo_sarca: throw exception ? please analyze the call hierarchy first
} }
} // setWFState } // setWFState
@ -446,6 +436,7 @@ public class MWFActivity extends X_AD_WF_Activity implements Runnable
* (Re)Set to Not Started * (Re)Set to Not Started
* @param AD_WF_Node_ID now node * @param AD_WF_Node_ID now node
*/ */
@Override
public void setAD_WF_Node_ID (int AD_WF_Node_ID) public void setAD_WF_Node_ID (int AD_WF_Node_ID)
{ {
if (AD_WF_Node_ID == 0) if (AD_WF_Node_ID == 0)
@ -1088,6 +1079,14 @@ public class MWFActivity extends X_AD_WF_Activity implements Runnable
} }
} }
} }
else if(resp.isOrganization())
{
throw new AdempiereException("Support not implemented for "+resp);
}
else
{
throw new AdempiereException("@NotSupported@ "+resp);
}
// end MZ // end MZ
} }
if (autoApproval if (autoApproval
@ -1216,7 +1215,7 @@ public class MWFActivity extends X_AD_WF_Activity implements Runnable
DocAction doc = (DocAction)m_po; DocAction doc = (DocAction)m_po;
try try
{ {
// Not pproved // Not approved
if (!"Y".equals(value)) if (!"Y".equals(value))
{ {
newState = StateEngine.STATE_Aborted; newState = StateEngine.STATE_Aborted;

View File

@ -16,15 +16,13 @@
*****************************************************************************/ *****************************************************************************/
package org.compiere.wf; package org.compiere.wf;
import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import java.util.Properties; import java.util.Properties;
import java.util.logging.Level;
import org.compiere.model.Query;
import org.compiere.model.X_AD_WF_EventAudit; import org.compiere.model.X_AD_WF_EventAudit;
import org.compiere.util.CLogger;
import org.compiere.util.DB;
import org.compiere.util.Env; import org.compiere.util.Env;
/** /**
@ -68,32 +66,18 @@ public class MWFEventAudit extends X_AD_WF_EventAudit
*/ */
public static MWFEventAudit[] get (Properties ctx, int AD_WF_Process_ID, int AD_WF_Node_ID, String trxName) public static MWFEventAudit[] get (Properties ctx, int AD_WF_Process_ID, int AD_WF_Node_ID, String trxName)
{ {
ArrayList<MWFEventAudit> list = new ArrayList<MWFEventAudit>(); ArrayList<Object> params = new ArrayList<Object>();
String sql = "SELECT * FROM AD_WF_EventAudit " StringBuffer whereClause = new StringBuffer("AD_WF_Process_ID=?");
+ "WHERE AD_WF_Process_ID=?"; params.add(AD_WF_Process_ID);
if (AD_WF_Node_ID > 0) if (AD_WF_Node_ID > 0)
sql += " AND AD_WF_Node_ID=?";
sql += " ORDER BY AD_WF_EventAudit_ID";
PreparedStatement pstmt = null;
ResultSet rs = null;
try
{ {
pstmt = DB.prepareStatement (sql, trxName); whereClause.append(" AND AD_WF_Node_ID=?");
pstmt.setInt (1, AD_WF_Process_ID); params.add(AD_WF_Node_ID);
if (AD_WF_Node_ID > 0)
pstmt.setInt (2, AD_WF_Node_ID);
rs = pstmt.executeQuery ();
while (rs.next ())
list.add (new MWFEventAudit (ctx, rs, trxName));
}
catch (Exception e)
{
s_log.log(Level.SEVERE, "get", e);
}
finally {
DB.close(rs, pstmt);
rs = null; pstmt = null;
} }
List<MWFEventAudit> list = new Query(ctx, Table_Name, whereClause.toString(), trxName)
.setParameters(params)
.setOrderBy(COLUMNNAME_AD_WF_EventAudit_ID)
.list();
// //
MWFEventAudit[] retValue = new MWFEventAudit[list.size()]; MWFEventAudit[] retValue = new MWFEventAudit[list.size()];
list.toArray (retValue); list.toArray (retValue);
@ -125,10 +109,6 @@ public class MWFEventAudit extends X_AD_WF_EventAudit
} // get } // get
/** Static Logger */
private static CLogger s_log = CLogger.getCLogger (MWFEventAudit.class);
/************************************************************************** /**************************************************************************
* Standard Constructor * Standard Constructor
* @param ctx context * @param ctx context

View File

@ -49,7 +49,7 @@ public class MWFNode extends X_AD_WF_Node
/** /**
* *
*/ */
private static final long serialVersionUID = -7541139807980623316L; private static final long serialVersionUID = 4330589837679937718L;
/** /**
@ -533,6 +533,7 @@ public class MWFNode extends X_AD_WF_Node
* @param newRecord new * @param newRecord new
* @return true if can be saved * @return true if can be saved
*/ */
@Override
protected boolean beforeSave (boolean newRecord) protected boolean beforeSave (boolean newRecord)
{ {
if(MWorkflow.WORKFLOWTYPE_Manufacturing.equals(getWorkflow().getWorkflowType())) if(MWorkflow.WORKFLOWTYPE_Manufacturing.equals(getWorkflow().getWorkflowType()))
@ -632,6 +633,7 @@ public class MWFNode extends X_AD_WF_Node
* @param success success * @param success success
* @return saved * @return saved
*/ */
@Override
protected boolean afterSave (boolean newRecord, boolean success) protected boolean afterSave (boolean newRecord, boolean success)
{ {
if (!success) if (!success)
@ -644,6 +646,7 @@ public class MWFNode extends X_AD_WF_Node
* @param success success * @param success success
* @return deleted * @return deleted
*/ */
@Override
protected boolean afterDelete (boolean success) protected boolean afterDelete (boolean success)
{ {
return success; return success;

View File

@ -16,16 +16,15 @@
*****************************************************************************/ *****************************************************************************/
package org.compiere.wf; package org.compiere.wf;
import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.util.ArrayList; import java.util.List;
import java.util.Properties; import java.util.Properties;
import java.util.logging.Level;
import org.compiere.model.MRefList;
import org.compiere.model.PO; import org.compiere.model.PO;
import org.compiere.model.Query;
import org.compiere.model.X_AD_WF_NodeNext; import org.compiere.model.X_AD_WF_NodeNext;
import org.compiere.process.DocAction; import org.compiere.process.DocAction;
import org.compiere.util.DB;
/** /**
* Workflow Node Next - Transition * Workflow Node Next - Transition
@ -128,34 +127,12 @@ public class MWFNodeNext extends X_AD_WF_NodeNext
if (!requery && m_conditions != null) if (!requery && m_conditions != null)
return m_conditions; return m_conditions;
// //
ArrayList<MWFNextCondition> list = new ArrayList<MWFNextCondition>(); final String whereClause = MWFNextCondition.COLUMNNAME_AD_WF_NodeNext_ID+"=?";
String sql = "SELECT * FROM AD_WF_NextCondition WHERE AD_WF_NodeNext_ID=? AND IsActive='Y' ORDER BY SeqNo"; List<MWFNextCondition> list = new Query(getCtx(), MWFNextCondition.Table_Name, whereClause, get_TrxName())
PreparedStatement pstmt = null; .setParameters(new Object[]{getAD_WF_NodeNext_ID()})
try .setOnlyActiveRecords(true)
{ .setOrderBy(MWFNextCondition.COLUMNNAME_SeqNo)
pstmt = DB.prepareStatement (sql, get_TrxName()); .list();
pstmt.setInt (1, getAD_WF_NodeNext_ID());
ResultSet rs = pstmt.executeQuery ();
while (rs.next ())
list.add(new MWFNextCondition(getCtx(), rs, get_TrxName()));
rs.close ();
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
log.log(Level.SEVERE, sql, e);
}
try
{
if (pstmt != null)
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
m_conditions = new MWFNextCondition[list.size()]; m_conditions = new MWFNextCondition[list.size()];
list.toArray (m_conditions); list.toArray (m_conditions);
return m_conditions; return m_conditions;

View File

@ -16,16 +16,13 @@
*****************************************************************************/ *****************************************************************************/
package org.compiere.wf; package org.compiere.wf;
import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.util.ArrayList; import java.util.List;
import java.util.Properties; import java.util.Properties;
import java.util.logging.Level;
import org.compiere.model.MProcessPara; import org.compiere.model.MProcessPara;
import org.compiere.model.Query;
import org.compiere.model.X_AD_WF_Node_Para; import org.compiere.model.X_AD_WF_Node_Para;
import org.compiere.util.CLogger;
import org.compiere.util.DB;
/** /**
@ -50,43 +47,15 @@ public class MWFNodePara extends X_AD_WF_Node_Para
*/ */
public static MWFNodePara[] getParameters (Properties ctx, int AD_WF_Node_ID) public static MWFNodePara[] getParameters (Properties ctx, int AD_WF_Node_ID)
{ {
ArrayList<MWFNodePara> list = new ArrayList<MWFNodePara>();
String sql = "SELECT * FROM AD_WF_Node_Para " List<MWFNodePara> list = new Query(ctx, Table_Name, "AD_WF_Node_ID=?", null)
+ "WHERE AD_WF_Node_ID=?"; .setParameters(new Object[]{AD_WF_Node_ID})
PreparedStatement pstmt = null; .list();
try
{
pstmt = DB.prepareStatement (sql, null);
pstmt.setInt (1, AD_WF_Node_ID);
ResultSet rs = pstmt.executeQuery ();
while (rs.next ())
list.add(new MWFNodePara (ctx, rs, null));
rs.close ();
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
s_log.log(Level.SEVERE, "getParameters", e);
}
try
{
if (pstmt != null)
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
MWFNodePara[] retValue = new MWFNodePara[list.size ()]; MWFNodePara[] retValue = new MWFNodePara[list.size ()];
list.toArray (retValue); list.toArray (retValue);
return retValue; return retValue;
} // getParameters } // getParameters
/** Static Logger */
private static CLogger s_log = CLogger.getCLogger (MWFNodePara.class);
/************************************************************************** /**************************************************************************
* Standard Constructor * Standard Constructor

View File

@ -16,15 +16,16 @@
*****************************************************************************/ *****************************************************************************/
package org.compiere.wf; package org.compiere.wf;
import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import java.util.Properties; import java.util.Properties;
import java.util.logging.Level; import java.util.logging.Level;
import org.compiere.model.MRole; import org.compiere.model.MRole;
import org.compiere.model.MTable; import org.compiere.model.MTable;
import org.compiere.model.PO; import org.compiere.model.PO;
import org.compiere.model.Query;
import org.compiere.model.X_AD_WF_Process; import org.compiere.model.X_AD_WF_Process;
import org.compiere.process.DocAction; import org.compiere.process.DocAction;
import org.compiere.process.ProcessInfo; import org.compiere.process.ProcessInfo;
@ -167,30 +168,17 @@ public class MWFProcess extends X_AD_WF_Process
if (!requery && m_activities != null) if (!requery && m_activities != null)
return m_activities; return m_activities;
// //
ArrayList<MWFActivity> list = new ArrayList<MWFActivity>(); ArrayList<Object> params = new ArrayList<Object>();
PreparedStatement pstmt = null; StringBuffer whereClause = new StringBuffer("AD_WF_Process_ID=?");
ResultSet rs = null; params.add(getAD_WF_Process_ID());
String sql = "SELECT * FROM AD_WF_Activity WHERE AD_WF_Process_ID=?";
if (onlyActive) if (onlyActive)
sql += " AND Processed='N'";
try
{ {
pstmt = DB.prepareStatement (sql, trxName); whereClause.append(" AND Processed=?");
pstmt.setInt (1, getAD_WF_Process_ID()); params.add(false);
rs = pstmt.executeQuery ();
while (rs.next ())
list.add (new MWFActivity(getCtx(), rs, trxName));
}
catch (Exception e)
{
log.log(Level.SEVERE, sql, e);
} }
finally List<MWFActivity> list = new Query(getCtx(), MWFActivity.Table_Name, whereClause.toString(), trxName)
{ .setParameters(params)
DB.close(rs, pstmt); .list();
rs = null; pstmt = null;
}
m_activities = new MWFActivity[list.size ()]; m_activities = new MWFActivity[list.size ()];
list.toArray (m_activities); list.toArray (m_activities);
return m_activities; return m_activities;
@ -392,7 +380,7 @@ public class MWFProcess extends X_AD_WF_Process
*/ */
public void setAD_WF_Responsible_ID () public void setAD_WF_Responsible_ID ()
{ {
int AD_WF_Responsible_ID = DB.getSQLValue(null, int AD_WF_Responsible_ID = DB.getSQLValueEx(null,
MRole.getDefault(getCtx(), false).addAccessSQL( MRole.getDefault(getCtx(), false).addAccessSQL(
"SELECT AD_WF_Responsible_ID FROM AD_WF_Responsible " "SELECT AD_WF_Responsible_ID FROM AD_WF_Responsible "
+ "WHERE ResponsibleType='H' AND COALESCE(AD_User_ID,0)=0 " + "WHERE ResponsibleType='H' AND COALESCE(AD_User_ID,0)=0 "

View File

@ -482,7 +482,7 @@ public class MWorkflow extends X_AD_Workflow
} }
return null; return null;
} // getNext } // getNext
/** /**
* Get (first) Previous Node of ID * Get (first) Previous Node of ID
* @param AD_WF_Node_ID id * @param AD_WF_Node_ID id
@ -936,7 +936,7 @@ public class MWorkflow extends X_AD_Workflow
int AD_Client_ID = Env.getAD_Client_ID(product.getCtx()); int AD_Client_ID = Env.getAD_Client_ID(product.getCtx());
String sql = "SELECT AD_Workflow_ID FROM AD_Workflow " String sql = "SELECT AD_Workflow_ID FROM AD_Workflow "
+" WHERE Value = ? AND AD_Client_ID = ?"; +" WHERE Value = ? AND AD_Client_ID = ?";
return DB.getSQLValue(null, sql, product.getValue(), AD_Client_ID); return DB.getSQLValueEx(null, sql, product.getValue(), AD_Client_ID);
} }
/** /**

View File

@ -16,17 +16,15 @@
*****************************************************************************/ *****************************************************************************/
package org.compiere.wf; package org.compiere.wf;
import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.ArrayList; import java.util.List;
import java.util.Properties; import java.util.Properties;
import java.util.logging.Level;
import org.compiere.model.AdempiereProcessor; import org.compiere.model.AdempiereProcessor;
import org.compiere.model.AdempiereProcessorLog; import org.compiere.model.AdempiereProcessorLog;
import org.compiere.model.Query;
import org.compiere.model.X_AD_WorkflowProcessor; import org.compiere.model.X_AD_WorkflowProcessor;
import org.compiere.util.CLogger;
import org.compiere.util.DB; import org.compiere.util.DB;
@ -52,37 +50,15 @@ public class MWorkflowProcessor extends X_AD_WorkflowProcessor
*/ */
public static MWorkflowProcessor[] getActive (Properties ctx) public static MWorkflowProcessor[] getActive (Properties ctx)
{ {
ArrayList<MWorkflowProcessor> list = new ArrayList<MWorkflowProcessor>(); List<MWorkflowProcessor> list = new Query(ctx, Table_Name, null, null)
String sql = "SELECT * FROM AD_WorkflowProcessor WHERE IsActive='Y'"; .setOnlyActiveRecords(true)
PreparedStatement pstmt = null; .list();
ResultSet rs = null;
try
{
pstmt = DB.prepareStatement (sql, null);
rs = pstmt.executeQuery ();
while (rs.next ())
list.add (new MWorkflowProcessor (ctx, rs, null));
}
catch (Exception e)
{
s_log.log(Level.SEVERE, sql, e);
}
finally
{
DB.close(rs, pstmt);
rs = null; pstmt = null;
}
MWorkflowProcessor[] retValue = new MWorkflowProcessor[list.size ()]; MWorkflowProcessor[] retValue = new MWorkflowProcessor[list.size ()];
list.toArray (retValue); list.toArray (retValue);
return retValue; return retValue;
} // getActive } // getActive
/** Static Logger */
private static CLogger s_log = CLogger.getCLogger (MWorkflowProcessor.class);
/************************************************************************** /**************************************************************************
* Standard Constructor * Standard Constructor
* @param ctx context * @param ctx context
@ -132,31 +108,10 @@ public class MWorkflowProcessor extends X_AD_WorkflowProcessor
*/ */
public AdempiereProcessorLog[] getLogs () public AdempiereProcessorLog[] getLogs ()
{ {
ArrayList<MWorkflowProcessorLog> list = new ArrayList<MWorkflowProcessorLog>(); List<MWorkflowProcessorLog> list = new Query(getCtx(), MWorkflowProcessorLog.Table_Name, "AD_WorkflowProcessor_ID=?", get_TrxName())
String sql = "SELECT * " .setParameters(new Object[]{getAD_WorkflowProcessor_ID()})
+ "FROM AD_WorkflowProcessorLog " .setOrderBy("Created DESC")
+ "WHERE AD_WorkflowProcessor_ID=? " .list();
+ "ORDER BY Created DESC";
PreparedStatement pstmt = null;
ResultSet rs = null;
try
{
pstmt = DB.prepareStatement (sql, get_TrxName());
pstmt.setInt (1, getAD_WorkflowProcessor_ID());
rs = pstmt.executeQuery ();
while (rs.next ())
list.add (new MWorkflowProcessorLog (getCtx(), rs, get_TrxName()));
}
catch (Exception e)
{
log.log(Level.SEVERE, sql, e);
}
finally
{
DB.close(rs, pstmt);
rs = null; pstmt = null;
}
MWorkflowProcessorLog[] retValue = new MWorkflowProcessorLog[list.size ()]; MWorkflowProcessorLog[] retValue = new MWorkflowProcessorLog[list.size ()];
list.toArray (retValue); list.toArray (retValue);
return retValue; return retValue;

View File

@ -107,7 +107,7 @@ public class WFProcessManage extends SvrProcess
msg += " - " + msg1; msg += " - " + msg1;
} }
// //
process.save(); process.saveEx();
return "OK"; return "OK";
} // doIt } // doIt

View File

@ -0,0 +1,97 @@
/******************************************************************************
* Product: Adempiere ERP & CRM Smart Business Solution *
* Copyright (C) 2008 SC ARHIPAC SERVICE SRL. 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 *
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU General Public License for more details. *
* You should have received a copy of the GNU General Public License along *
* with this program; if not, write to the Free Software Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
*****************************************************************************/
package test.functional;
import org.compiere.model.MRequisition;
import org.compiere.model.Query;
import org.compiere.util.Env;
import org.compiere.wf.MWFActivity;
import org.compiere.wf.MWFEventAudit;
import org.compiere.wf.MWFNode;
import org.compiere.wf.MWFNodeNext;
import org.compiere.wf.MWFNodePara;
import org.compiere.wf.MWFProcess;
import org.compiere.wf.MWorkflow;
import org.compiere.wf.MWorkflowProcessor;
import test.AdempiereTestCase;
/**
* Test Workflow related classes
* @author Teo Sarca, www.arhipac.ro
*/
public class WorkflowTest extends AdempiereTestCase
{
@Override
protected void setUp() throws Exception
{
super.setUp();
assertEquals("Client is not GardenWorld", 11, Env.getAD_Client_ID(getCtx()));
}
public void testQuery() throws Exception
{
//
// Check MWFActivity
int AD_Table_ID = MRequisition.Table_ID;
int Record_ID = 1; // dummy;
MWFActivity.get(getCtx(), AD_Table_ID, Record_ID, false);
MWFActivity.get(getCtx(), AD_Table_ID, Record_ID, true);
//
// Check MWFEventAudit
int AD_WF_Process_ID = 1; // dummy
int AD_WF_Node_ID = 1; // dummy
MWFEventAudit.get(getCtx(), AD_WF_Process_ID, AD_WF_Node_ID, getTrxName());
MWFEventAudit.get(getCtx(), AD_WF_Process_ID, getTrxName());
//
// Check MWFProcess
MWFProcess proc = new Query(getCtx(), MWFProcess.Table_Name, null, getTrxName())
.setClient_ID()
.setOrderBy(MWFProcess.COLUMNNAME_AD_WF_Process_ID)
.first();
if (proc != null)
{
proc.getActivities(true, false, getTrxName());
proc.getActivities(true, true, getTrxName());
}
else
{
// TODO: check MWFProcess - need better test
}
//
// Check MWorkflow, MWFNode, MWFNodeNext etc
int AD_Client_ID = getAD_Client_ID();
int AD_Workflow_ID = 115; // Process_Requisition
MWorkflow wf = MWorkflow.get(getCtx(), AD_Workflow_ID);
for (MWFNode node : wf.getNodes(false, AD_Client_ID))
{
MWFNodePara.getParameters(node.getCtx(), node.getAD_WF_Node_ID());
for (MWFNodeNext next : node.getTransitions(AD_Client_ID))
{
next.getConditions(true);
next.getConditions(false);
}
}
//
// Check MWorkflowProcessor
for (MWorkflowProcessor processor : MWorkflowProcessor.getActive(getCtx()))
{
processor.getLogs();
}
//
//
}
}