From 87dba26de2ba933019472e090cd8e7de135cfd1b Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Mon, 29 Jul 2013 17:26:03 +0800 Subject: [PATCH] IDEMPIERE-1208 Add API for execution of document action workflow. --- .../src/org/compiere/process/ProcessInfo.java | 10 +++++++ .../src/org/compiere/wf/MWFProcess.java | 2 ++ .../src/org/compiere/wf/MWorkflow.java | 28 +++++++++++++++++++ 3 files changed, 40 insertions(+) diff --git a/org.adempiere.base/src/org/compiere/process/ProcessInfo.java b/org.adempiere.base/src/org/compiere/process/ProcessInfo.java index 0742c93d4c..1f0509789b 100644 --- a/org.adempiere.base/src/org/compiere/process/ProcessInfo.java +++ b/org.adempiere.base/src/org/compiere/process/ProcessInfo.java @@ -23,6 +23,7 @@ import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.util.ArrayList; +import org.compiere.model.PO; import org.compiere.util.DisplayType; import org.compiere.util.Env; import org.compiere.util.Ini; @@ -140,6 +141,8 @@ public class ProcessInfo implements Serializable /** Row count */ private int m_rowCount; + private transient PO m_po = null; + /** * String representation * @return String representation @@ -773,4 +776,11 @@ public class ProcessInfo implements Serializable return m_rowCount; } + public void setPO(PO po) { + m_po = po; + } + + public PO getPO() { + return m_po; + } } // ProcessInfo diff --git a/org.adempiere.base/src/org/compiere/wf/MWFProcess.java b/org.adempiere.base/src/org/compiere/wf/MWFProcess.java index 1db153fde8..0752aa5b9f 100644 --- a/org.adempiere.base/src/org/compiere/wf/MWFProcess.java +++ b/org.adempiere.base/src/org/compiere/wf/MWFProcess.java @@ -108,6 +108,8 @@ public class MWFProcess extends X_AD_WF_Process // Document setAD_Table_ID(wf.getAD_Table_ID()); setRecord_ID(pi.getRecord_ID()); + if (pi.getPO() != null) + m_po = pi.getPO(); if (getPO() == null) { setTextMsg("No PO with ID=" + pi.getRecord_ID()); diff --git a/org.adempiere.base/src/org/compiere/wf/MWorkflow.java b/org.adempiere.base/src/org/compiere/wf/MWorkflow.java index f8c20b4b20..9fa1cec49c 100644 --- a/org.adempiere.base/src/org/compiere/wf/MWorkflow.java +++ b/org.adempiere.base/src/org/compiere/wf/MWorkflow.java @@ -27,11 +27,16 @@ import java.util.Properties; import java.util.logging.Level; import org.adempiere.exceptions.DBException; +import org.compiere.model.MColumn; import org.compiere.model.MMenu; import org.compiere.model.MProduct; +import org.compiere.model.MTable; +import org.compiere.model.PO; import org.compiere.model.Query; import org.compiere.model.X_AD_Workflow; +import org.compiere.process.DocAction; import org.compiere.process.ProcessInfo; +import org.compiere.process.ServerProcessCtl; import org.compiere.process.StateEngine; import org.compiere.util.CCache; import org.compiere.util.CLogger; @@ -951,4 +956,27 @@ public class MWorkflow extends X_AD_Workflow return true; } + /** + * + * @param po + * @param docAction + * @return ProcessInfo + */ + public static ProcessInfo runDocumentActionWorkflow(PO po, String docAction) + { + int AD_Table_ID = po.get_Table_ID(); + MTable table = MTable.get(Env.getCtx(), AD_Table_ID); + MColumn column = table.getColumn("DocAction"); + if (column == null) + return null; + if (!docAction.equals(po.get_Value(column.getColumnName()))) + { + po.set_ValueOfColumn(column.getColumnName(), docAction); + } + ProcessInfo processInfo = new ProcessInfo (((DocAction)po).getDocumentInfo(),column.getAD_Process_ID(),po.get_Table_ID(),po.get_ID()); + processInfo.setTransactionName(po.get_TrxName()); + processInfo.setPO(po); + ServerProcessCtl.process(processInfo, Trx.get(processInfo.getTransactionName(), false)); + return processInfo; + } } // MWorkflow_ID