IDEMPIERE-1572 Last Run and Saved parameter for process / based on patch from Deepak Pansheriya
This commit is contained in:
parent
93bc5f0909
commit
772ec43368
|
@ -0,0 +1,35 @@
|
||||||
|
SET SQLBLANKLINES ON
|
||||||
|
SET DEFINE OFF
|
||||||
|
|
||||||
|
-- Nov 27, 2013 10:35:14 AM IST
|
||||||
|
-- IDEMPIERE-1572: Last Run and Saved parameter for process
|
||||||
|
INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,Version,AD_Table_ID,AD_Column_ID,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,ColumnName,Description,Help,Name,IsAllowCopy,CreatedBy,Updated,AD_Org_ID,IsActive,Created,UpdatedBy,IsToolbarButton,IsAlwaysUpdateable,EntityType,IsEncrypted,AD_Element_ID,AD_Client_ID,IsSecure) VALUES (0,'N',0,282,210890,'N','N','Y',0,'N',60,'Y',10,'N','N','Y','4f66cceb-27a2-47b8-a1ef-0bc2882bfdef','Y','Name','Alphanumeric identifier of the entity','The name of an entity (record) is used as an default search option in addition to the search key. The name is up to 60 characters in length.','Name','Y',100,TO_DATE('2013-11-27 10:35:12','YYYY-MM-DD HH24:MI:SS'),0,'Y',TO_DATE('2013-11-27 10:35:12','YYYY-MM-DD HH24:MI:SS'),100,'N','N','D','N',469,0,'N')
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 27, 2013 10:35:20 AM IST
|
||||||
|
-- IDEMPIERE-1572: Last Run and Saved parameter for process
|
||||||
|
ALTER TABLE AD_PInstance ADD Name NVARCHAR2(60) DEFAULT NULL
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 27, 2013 10:36:46 AM IST
|
||||||
|
-- IDEMPIERE-1572: Last Run and Saved parameter for process
|
||||||
|
INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,AD_Org_ID,Created,AD_Client_ID) VALUES ('I','Last Run',200240,'D','fd39a4cd-eb0a-4b35-97ae-cbd4657d8234','LastRun','Y',TO_DATE('2013-11-27 10:36:45','YYYY-MM-DD HH24:MI:SS'),100,100,0,TO_DATE('2013-11-27 10:36:45','YYYY-MM-DD HH24:MI:SS'),0)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 27, 2013 10:37:01 AM IST
|
||||||
|
-- IDEMPIERE-1572: Last Run and Saved parameter for process
|
||||||
|
INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,AD_Org_ID,Created,AD_Client_ID) VALUES ('I','Saved Parameters',200241,'D','f1688973-03c3-4af4-9b76-a0cec366ec41','SavedParameter','Y',TO_DATE('2013-11-27 10:37:00','YYYY-MM-DD HH24:MI:SS'),100,100,0,TO_DATE('2013-11-27 10:37:00','YYYY-MM-DD HH24:MI:SS'),0)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 27, 2013 10:47:53 AM IST
|
||||||
|
-- IDEMPIERE-1572: Last Run and Saved parameter for process
|
||||||
|
INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,AD_Org_ID,Created,AD_Client_ID) VALUES ('I','Could not save parameters.',200242,'D','d07376af-ab08-4835-a962-9f5addc8dedc','SaveParameterError','Y',TO_DATE('2013-11-27 10:47:52','YYYY-MM-DD HH24:MI:SS'),100,100,0,TO_DATE('2013-11-27 10:47:52','YYYY-MM-DD HH24:MI:SS'),0)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Mar 28, 2014 12:23:30 PM IST
|
||||||
|
-- IDEMPIERE-1572: Last Run and Saved parameter for process
|
||||||
|
INSERT INTO AD_SysConfig (AD_SysConfig_ID,ConfigurationLevel,Value,AD_SysConfig_UU,Created,Updated,AD_Org_ID,CreatedBy,IsActive,UpdatedBy,Name,AD_Client_ID,EntityType) VALUES (200046,'C','5','9b2426cb-b513-4199-b835-016cbc34a24f',TO_DATE('2014-03-28 12:23:23','YYYY-MM-DD HH24:MI:SS'),TO_DATE('2014-03-28 12:23:23','YYYY-MM-DD HH24:MI:SS'),0,100,'Y',100,'LASTRUN_RECORD_COUNT',0,'D')
|
||||||
|
;
|
||||||
|
|
||||||
|
SELECT register_migration_script('201404040826_IDEMPIERE-1572.sql') FROM dual
|
||||||
|
;
|
|
@ -0,0 +1,32 @@
|
||||||
|
-- Nov 27, 2013 10:35:14 AM IST
|
||||||
|
-- IDEMPIERE-1572: Last Run and Saved parameter for process
|
||||||
|
INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,Version,AD_Table_ID,AD_Column_ID,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,ColumnName,Description,Help,Name,IsAllowCopy,CreatedBy,Updated,AD_Org_ID,IsActive,Created,UpdatedBy,IsToolbarButton,IsAlwaysUpdateable,EntityType,IsEncrypted,AD_Element_ID,AD_Client_ID,IsSecure) VALUES (0,'N',0,282,210890,'N','N','Y',0,'N',60,'Y',10,'N','N','Y','4f66cceb-27a2-47b8-a1ef-0bc2882bfdef','Y','Name','Alphanumeric identifier of the entity','The name of an entity (record) is used as an default search option in addition to the search key. The name is up to 60 characters in length.','Name','Y',100,TO_TIMESTAMP('2013-11-27 10:35:12','YYYY-MM-DD HH24:MI:SS'),0,'Y',TO_TIMESTAMP('2013-11-27 10:35:12','YYYY-MM-DD HH24:MI:SS'),100,'N','N','D','N',469,0,'N')
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 27, 2013 10:35:20 AM IST
|
||||||
|
-- IDEMPIERE-1572: Last Run and Saved parameter for process
|
||||||
|
ALTER TABLE AD_PInstance ADD COLUMN Name VARCHAR(60) DEFAULT NULL
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 27, 2013 10:36:46 AM IST
|
||||||
|
-- IDEMPIERE-1572: Last Run and Saved parameter for process
|
||||||
|
INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,AD_Org_ID,Created,AD_Client_ID) VALUES ('I','Last Run',200240,'D','fd39a4cd-eb0a-4b35-97ae-cbd4657d8234','LastRun','Y',TO_TIMESTAMP('2013-11-27 10:36:45','YYYY-MM-DD HH24:MI:SS'),100,100,0,TO_TIMESTAMP('2013-11-27 10:36:45','YYYY-MM-DD HH24:MI:SS'),0)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 27, 2013 10:37:01 AM IST
|
||||||
|
-- IDEMPIERE-1572: Last Run and Saved parameter for process
|
||||||
|
INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,AD_Org_ID,Created,AD_Client_ID) VALUES ('I','Saved Parameters',200241,'D','f1688973-03c3-4af4-9b76-a0cec366ec41','SavedParameter','Y',TO_TIMESTAMP('2013-11-27 10:37:00','YYYY-MM-DD HH24:MI:SS'),100,100,0,TO_TIMESTAMP('2013-11-27 10:37:00','YYYY-MM-DD HH24:MI:SS'),0)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 27, 2013 10:47:53 AM IST
|
||||||
|
-- IDEMPIERE-1572: Last Run and Saved parameter for process
|
||||||
|
INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,AD_Org_ID,Created,AD_Client_ID) VALUES ('I','Could not save parameters.',200242,'D','d07376af-ab08-4835-a962-9f5addc8dedc','SaveParameterError','Y',TO_TIMESTAMP('2013-11-27 10:47:52','YYYY-MM-DD HH24:MI:SS'),100,100,0,TO_TIMESTAMP('2013-11-27 10:47:52','YYYY-MM-DD HH24:MI:SS'),0)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Mar 28, 2014 12:23:30 PM IST
|
||||||
|
-- IDEMPIERE-1572: Last Run and Saved parameter for process
|
||||||
|
INSERT INTO AD_SysConfig (AD_SysConfig_ID,ConfigurationLevel,Value,AD_SysConfig_UU,Created,Updated,AD_Org_ID,CreatedBy,IsActive,UpdatedBy,Name,AD_Client_ID,EntityType) VALUES (200046,'C','5','9b2426cb-b513-4199-b835-016cbc34a24f',TO_TIMESTAMP('2014-03-28 12:23:23','YYYY-MM-DD HH24:MI:SS'),TO_TIMESTAMP('2014-03-28 12:23:23','YYYY-MM-DD HH24:MI:SS'),0,100,'Y',100,'LASTRUN_RECORD_COUNT',0,'D')
|
||||||
|
;
|
||||||
|
|
||||||
|
SELECT register_migration_script('201404040826_IDEMPIERE-1572.sql') FROM dual
|
||||||
|
;
|
|
@ -161,6 +161,19 @@ public interface I_AD_PInstance
|
||||||
/** Get Processing */
|
/** Get Processing */
|
||||||
public boolean isProcessing();
|
public boolean isProcessing();
|
||||||
|
|
||||||
|
/** Column name Name */
|
||||||
|
public static final String COLUMNNAME_Name = "Name";
|
||||||
|
|
||||||
|
/** Set Name.
|
||||||
|
* Alphanumeric identifier of the entity
|
||||||
|
*/
|
||||||
|
public void setName (String Name);
|
||||||
|
|
||||||
|
/** Get Name.
|
||||||
|
* Alphanumeric identifier of the entity
|
||||||
|
*/
|
||||||
|
public String getName();
|
||||||
|
|
||||||
/** Column name Record_ID */
|
/** Column name Record_ID */
|
||||||
public static final String COLUMNNAME_Record_ID = "Record_ID";
|
public static final String COLUMNNAME_Record_ID = "Record_ID";
|
||||||
|
|
||||||
|
|
|
@ -25,8 +25,10 @@ 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.util.CLogger;
|
||||||
import org.compiere.util.DB;
|
import org.compiere.util.DB;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
|
import org.compiere.util.Msg;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Process Instance Model
|
* Process Instance Model
|
||||||
|
@ -40,11 +42,12 @@ import org.compiere.util.Env;
|
||||||
*/
|
*/
|
||||||
public class MPInstance extends X_AD_PInstance
|
public class MPInstance extends X_AD_PInstance
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = -3952972645135787655L;
|
||||||
|
|
||||||
/**
|
private static CLogger s_log = CLogger.getCLogger (MPInstance.class);
|
||||||
*
|
|
||||||
*/
|
|
||||||
private static final long serialVersionUID = -5848424269552679604L;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Standard Constructor
|
* Standard Constructor
|
||||||
|
@ -130,6 +133,7 @@ public class MPInstance extends X_AD_PInstance
|
||||||
final String whereClause = "AD_PInstance_ID=?";
|
final String whereClause = "AD_PInstance_ID=?";
|
||||||
List <MPInstancePara> list = new Query(getCtx(), I_AD_PInstance_Para.Table_Name, whereClause, null) // @TODO: Review implications of using transaction
|
List <MPInstancePara> list = new Query(getCtx(), I_AD_PInstance_Para.Table_Name, whereClause, null) // @TODO: Review implications of using transaction
|
||||||
.setParameters(getAD_PInstance_ID())
|
.setParameters(getAD_PInstance_ID())
|
||||||
|
.setOrderBy("SeqNo, ParameterName")
|
||||||
.list();
|
.list();
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -349,4 +353,78 @@ public class MPInstance extends X_AD_PInstance
|
||||||
ip.saveEx();
|
ip.saveEx();
|
||||||
return ip;
|
return ip;
|
||||||
}
|
}
|
||||||
} // MPInstance
|
|
||||||
|
public static List<MPInstance> get(Properties ctx, int AD_Process_ID, int AD_User_ID) {
|
||||||
|
List<MPInstance> list = new ArrayList<MPInstance>();
|
||||||
|
List<String> paramsStrAdded = new ArrayList<String>();
|
||||||
|
|
||||||
|
List<MPInstance> namedInstances = new Query(ctx, Table_Name, "AD_Process_ID=? AND AD_User_ID=? AND Name IS NOT NULL", null)
|
||||||
|
.setClient_ID()
|
||||||
|
.setOnlyActiveRecords(true)
|
||||||
|
.setParameters(AD_Process_ID, AD_User_ID)
|
||||||
|
.setOrderBy("Name")
|
||||||
|
.list();
|
||||||
|
for (MPInstance namedInstance : namedInstances) {
|
||||||
|
list.add(namedInstance);
|
||||||
|
paramsStrAdded.add(namedInstance.getParamsStr());
|
||||||
|
}
|
||||||
|
|
||||||
|
// unnamed instances
|
||||||
|
int lastRunCount = MSysConfig.getIntValue("LASTRUN_RECORD_COUNT", 5, Env.getAD_Client_ID(ctx));
|
||||||
|
if (lastRunCount > 0) {
|
||||||
|
// using JDBC instead of Query for performance reasons, AD_PInstance can be huge
|
||||||
|
String sql = "SELECT * FROM AD_PInstance "
|
||||||
|
+ " WHERE AD_Process_ID=? AND AD_User_ID=? AND IsActive='Y' AND AD_Client_ID=? AND Name IS NULL"
|
||||||
|
+ " ORDER BY Created DESC";
|
||||||
|
PreparedStatement pstmt = null;
|
||||||
|
ResultSet rs = null;
|
||||||
|
int cnt = 0;
|
||||||
|
try {
|
||||||
|
pstmt = DB.prepareStatement(sql, null);
|
||||||
|
pstmt.setInt(1, AD_Process_ID);
|
||||||
|
pstmt.setInt(2, AD_User_ID);
|
||||||
|
pstmt.setInt(3, Env.getAD_Client_ID(ctx));
|
||||||
|
rs = pstmt.executeQuery();
|
||||||
|
while (rs.next()) {
|
||||||
|
MPInstance unnamedInstance = new MPInstance(ctx, rs, null);
|
||||||
|
String paramsStr = unnamedInstance.getParamsStr();
|
||||||
|
if (! paramsStrAdded.contains(paramsStr)) {
|
||||||
|
unnamedInstance.setName(Msg.getMsg(ctx, "LastRun") + " " + unnamedInstance.getCreated());
|
||||||
|
list.add(unnamedInstance);
|
||||||
|
paramsStrAdded.add(paramsStr);
|
||||||
|
cnt++;
|
||||||
|
if (cnt == lastRunCount)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e)
|
||||||
|
{
|
||||||
|
s_log.log(Level.SEVERE, "Error while Fetching last run records", e);
|
||||||
|
} finally {
|
||||||
|
DB.close(rs, pstmt);
|
||||||
|
rs = null; pstmt = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getParamsStr() {
|
||||||
|
StringBuilder cksum = new StringBuilder();
|
||||||
|
for (MPInstancePara ip : getParameters()) {
|
||||||
|
cksum.append("(")
|
||||||
|
.append(ip.getParameterName()).append("|")
|
||||||
|
.append(ip.getP_String()).append("|")
|
||||||
|
.append(ip.getP_String_To()).append("|")
|
||||||
|
.append(ip.getP_Number()).append("|")
|
||||||
|
.append(ip.getP_Number_To()).append("|")
|
||||||
|
.append(ip.getP_Date()).append("|")
|
||||||
|
.append(ip.getP_Date_To()).append("|")
|
||||||
|
.append(ip.getInfo()).append("|")
|
||||||
|
.append(ip.getInfo_To()).append("|")
|
||||||
|
.append(")");
|
||||||
|
}
|
||||||
|
return cksum.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
} // MPInstance
|
|
@ -30,7 +30,7 @@ public class X_AD_PInstance extends PO implements I_AD_PInstance, I_Persistent
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = 20131031L;
|
private static final long serialVersionUID = 20140404L;
|
||||||
|
|
||||||
/** Standard Constructor */
|
/** Standard Constructor */
|
||||||
public X_AD_PInstance (Properties ctx, int AD_PInstance_ID, String trxName)
|
public X_AD_PInstance (Properties ctx, int AD_PInstance_ID, String trxName)
|
||||||
|
@ -209,6 +209,23 @@ public class X_AD_PInstance extends PO implements I_AD_PInstance, I_Persistent
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Set Name.
|
||||||
|
@param Name
|
||||||
|
Alphanumeric identifier of the entity
|
||||||
|
*/
|
||||||
|
public void setName (String Name)
|
||||||
|
{
|
||||||
|
set_Value (COLUMNNAME_Name, Name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get Name.
|
||||||
|
@return Alphanumeric identifier of the entity
|
||||||
|
*/
|
||||||
|
public String getName ()
|
||||||
|
{
|
||||||
|
return (String)get_Value(COLUMNNAME_Name);
|
||||||
|
}
|
||||||
|
|
||||||
/** Set Record ID.
|
/** Set Record ID.
|
||||||
@param Record_ID
|
@param Record_ID
|
||||||
Direct internal record ID
|
Direct internal record ID
|
||||||
|
|
|
@ -16,20 +16,27 @@
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
package org.compiere.apps;
|
package org.compiere.apps;
|
||||||
|
|
||||||
|
import static org.compiere.model.SystemIDs.PROCESS_C_INVOICE_GENERATE;
|
||||||
|
import static org.compiere.model.SystemIDs.PROCESS_M_INOUT_GENERATE;
|
||||||
|
|
||||||
import java.awt.AWTEvent;
|
import java.awt.AWTEvent;
|
||||||
import java.awt.BorderLayout;
|
import java.awt.BorderLayout;
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.FlowLayout;
|
import java.awt.FlowLayout;
|
||||||
import java.awt.GraphicsConfiguration;
|
import java.awt.GraphicsConfiguration;
|
||||||
|
import java.awt.Insets;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
import java.util.List;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
|
import javax.swing.DefaultComboBoxModel;
|
||||||
|
import javax.swing.ImageIcon;
|
||||||
import javax.swing.JEditorPane;
|
import javax.swing.JEditorPane;
|
||||||
import javax.swing.JOptionPane;
|
import javax.swing.JOptionPane;
|
||||||
import javax.swing.JScrollPane;
|
import javax.swing.JScrollPane;
|
||||||
|
@ -39,18 +46,23 @@ import org.adempiere.exceptions.AdempiereException;
|
||||||
import org.adempiere.exceptions.DBException;
|
import org.adempiere.exceptions.DBException;
|
||||||
import org.adempiere.util.Callback;
|
import org.adempiere.util.Callback;
|
||||||
import org.adempiere.util.IProcessUI;
|
import org.adempiere.util.IProcessUI;
|
||||||
import static org.compiere.model.SystemIDs.*;
|
import org.compiere.model.MPInstance;
|
||||||
|
import org.compiere.model.MPInstancePara;
|
||||||
import org.compiere.print.ReportCtl;
|
import org.compiere.print.ReportCtl;
|
||||||
import org.compiere.print.ReportEngine;
|
import org.compiere.print.ReportEngine;
|
||||||
import org.compiere.process.ProcessInfo;
|
import org.compiere.process.ProcessInfo;
|
||||||
import org.compiere.process.ProcessInfoUtil;
|
import org.compiere.process.ProcessInfoUtil;
|
||||||
import org.compiere.swing.CButton;
|
import org.compiere.swing.CButton;
|
||||||
|
import org.compiere.swing.CComboBox;
|
||||||
import org.compiere.swing.CFrame;
|
import org.compiere.swing.CFrame;
|
||||||
|
import org.compiere.swing.CLabel;
|
||||||
import org.compiere.swing.CPanel;
|
import org.compiere.swing.CPanel;
|
||||||
|
import org.compiere.util.AdempiereSystemError;
|
||||||
import org.compiere.util.CLogger;
|
import org.compiere.util.CLogger;
|
||||||
import org.compiere.util.DB;
|
import org.compiere.util.DB;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
import org.compiere.util.Msg;
|
import org.compiere.util.Msg;
|
||||||
|
import org.compiere.util.Util;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dialog to Start process.
|
* Dialog to Start process.
|
||||||
|
@ -75,7 +87,7 @@ public class ProcessDialog extends CFrame
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = 7486479305726277406L;
|
private static final long serialVersionUID = 2435351857958558386L;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @deprecated
|
* @deprecated
|
||||||
|
@ -194,6 +206,11 @@ public class ProcessDialog extends CFrame
|
||||||
private ProcessParameterPanel parameterPanel = null;
|
private ProcessParameterPanel parameterPanel = null;
|
||||||
private JSeparator separator = new JSeparator();
|
private JSeparator separator = new JSeparator();
|
||||||
private ProcessInfo m_pi = null;
|
private ProcessInfo m_pi = null;
|
||||||
|
private CComboBox fSavedName = new CComboBox();
|
||||||
|
private CButton bSave = new CButton();
|
||||||
|
private CButton bDelete = new CButton();
|
||||||
|
private List<MPInstance> savedParams;
|
||||||
|
private CLabel lSaved = new CLabel(Msg.getMsg(Env.getCtx(), "SavedParameter"));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Static Layout
|
* Static Layout
|
||||||
|
@ -207,6 +224,19 @@ public class ProcessDialog extends CFrame
|
||||||
dialog.setMinimumSize(new Dimension(500, 200));
|
dialog.setMinimumSize(new Dimension(500, 200));
|
||||||
bOK.addActionListener(this);
|
bOK.addActionListener(this);
|
||||||
bPrint.addActionListener(this);
|
bPrint.addActionListener(this);
|
||||||
|
fSavedName.setToolTipText (Msg.getMsg(Env.getCtx(),"SavedParameter"));
|
||||||
|
fSavedName.setEditable(true);
|
||||||
|
fSavedName.addActionListener(this);
|
||||||
|
bSave.setIcon(new ImageIcon(org.compiere.Adempiere.class.getResource("images/Save24.gif")));
|
||||||
|
bSave.setMargin(new Insets(2, 2, 2, 2));
|
||||||
|
bSave.setToolTipText(Msg.getMsg(Env.getCtx(),"Save"));
|
||||||
|
bSave.addActionListener(this);
|
||||||
|
bSave.setEnabled(false);
|
||||||
|
bDelete.setIcon(new ImageIcon(org.compiere.Adempiere.class.getResource("images/Delete24.gif")));
|
||||||
|
bDelete.setMargin(new Insets(2, 2, 2, 2));
|
||||||
|
bDelete.setToolTipText(Msg.getMsg(Env.getCtx(),"Delete"));
|
||||||
|
bDelete.addActionListener(this);
|
||||||
|
bDelete.setEnabled(false);
|
||||||
//
|
//
|
||||||
southPanel.setLayout(southLayout);
|
southPanel.setLayout(southLayout);
|
||||||
southLayout.setAlignment(FlowLayout.RIGHT);
|
southLayout.setAlignment(FlowLayout.RIGHT);
|
||||||
|
@ -216,7 +246,12 @@ public class ProcessDialog extends CFrame
|
||||||
message.setFocusable(true);
|
message.setFocusable(true);
|
||||||
getContentPane().add(dialog);
|
getContentPane().add(dialog);
|
||||||
dialog.add(southPanel, BorderLayout.SOUTH);
|
dialog.add(southPanel, BorderLayout.SOUTH);
|
||||||
southPanel.add(bPrint, null);
|
|
||||||
|
southPanel.add(lSaved,"wrap");
|
||||||
|
southPanel.add(fSavedName, "w :200:");
|
||||||
|
southPanel.add(bSave, null);
|
||||||
|
southPanel.add(bDelete, null);
|
||||||
|
southPanel.add(bPrint, "span, split 2, align right, pushx");
|
||||||
southPanel.add(bOK, null);
|
southPanel.add(bOK, null);
|
||||||
dialog.add(messagePane, BorderLayout.NORTH);
|
dialog.add(messagePane, BorderLayout.NORTH);
|
||||||
messagePane.setBorder(null);
|
messagePane.setBorder(null);
|
||||||
|
@ -337,16 +372,39 @@ public class ProcessDialog extends CFrame
|
||||||
if(m_ShowHelp != null && m_ShowHelp.equals("S"))
|
if(m_ShowHelp != null && m_ShowHelp.equals("S"))
|
||||||
bOK.doClick();
|
bOK.doClick();
|
||||||
|
|
||||||
|
querySaved();
|
||||||
|
|
||||||
dialog.revalidate();
|
dialog.revalidate();
|
||||||
return true;
|
return true;
|
||||||
} // init
|
} // init
|
||||||
|
|
||||||
|
private void querySaved() {
|
||||||
|
//user query
|
||||||
|
savedParams = MPInstance.get(Env.getCtx(), m_AD_Process_ID, Env.getContextAsInt(Env.getCtx(), "#AD_User_ID"));
|
||||||
|
String[] queries = new String[savedParams.size()+1];
|
||||||
|
int i = 0;
|
||||||
|
queries[i++] = "";
|
||||||
|
for (MPInstance instance : savedParams)
|
||||||
|
{
|
||||||
|
queries[i++] = instance.getName();
|
||||||
|
}
|
||||||
|
fSavedName.setModel(new DefaultComboBoxModel(queries));
|
||||||
|
fSavedName.setValue("");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ActionListener (Start)
|
* ActionListener (Start)
|
||||||
* @param e ActionEvent
|
* @param e ActionEvent
|
||||||
*/
|
*/
|
||||||
public void actionPerformed (ActionEvent e)
|
public void actionPerformed (ActionEvent e)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
String saveName = null;
|
||||||
|
if (fSavedName.getSelectedItem() != null)
|
||||||
|
saveName = fSavedName.getSelectedItem().toString();
|
||||||
|
|
||||||
|
boolean lastRun = ("** " + Msg.getMsg(Env.getCtx(), "LastRun") + " **").equals(saveName);
|
||||||
|
|
||||||
if (e.getSource() == bOK)
|
if (e.getSource() == bOK)
|
||||||
{
|
{
|
||||||
if (bOK.getText().length() == 0)
|
if (bOK.getText().length() == 0)
|
||||||
|
@ -357,12 +415,92 @@ public class ProcessDialog extends CFrame
|
||||||
ProcessCtl.process(this, m_WindowNo, parameterPanel, m_pi, null);
|
ProcessCtl.process(this, m_WindowNo, parameterPanel, m_pi, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (e.getSource() == fSavedName)
|
||||||
|
{
|
||||||
|
if (savedParams != null && saveName != null)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < savedParams.size(); i++)
|
||||||
|
{
|
||||||
|
if (savedParams.get(i).getName().equals(saveName))
|
||||||
|
{
|
||||||
|
loadSavedParams(savedParams.get(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
boolean enabled = !Util.isEmpty(saveName);
|
||||||
|
bSave.setEnabled(enabled && !lastRun);
|
||||||
|
bDelete.setEnabled(enabled && fSavedName.getSelectedIndex() > -1 && !lastRun);
|
||||||
|
}
|
||||||
|
else if (e.getSource() == bSave && fSavedName != null && !lastRun)
|
||||||
|
{
|
||||||
|
// Update existing
|
||||||
|
if (fSavedName.getSelectedIndex() > -1 && savedParams != null)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < savedParams.size(); i++)
|
||||||
|
{
|
||||||
|
if (savedParams.get(i).getName().equals(saveName))
|
||||||
|
{
|
||||||
|
m_pi.setAD_PInstance_ID(savedParams.get(i).getAD_PInstance_ID());
|
||||||
|
for (MPInstancePara para : savedParams.get(i).getParameters())
|
||||||
|
{
|
||||||
|
para.deleteEx(true);
|
||||||
|
}
|
||||||
|
parameterPanel.saveParameters();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// create new
|
||||||
|
else {
|
||||||
|
MPInstance instance = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
instance = new MPInstance(Env.getCtx(), m_pi.getAD_Process_ID(), m_pi.getRecord_ID());
|
||||||
|
instance.setName(saveName);
|
||||||
|
instance.saveEx();
|
||||||
|
|
||||||
|
m_pi.setAD_PInstance_ID(instance.getAD_PInstance_ID());
|
||||||
|
// Get Parameters
|
||||||
|
if (parameterPanel != null) {
|
||||||
|
if (!parameterPanel.saveParameters())
|
||||||
|
{
|
||||||
|
throw new AdempiereSystemError(Msg.getMsg(Env.getCtx(), "SaveParameterError"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
ADialog.warn(m_WindowNo, this, ex.getLocalizedMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
querySaved();
|
||||||
|
fSavedName.setSelectedItem(saveName);
|
||||||
|
}
|
||||||
|
else if (e.getSource() == bDelete && fSavedName != null && !lastRun )
|
||||||
|
{
|
||||||
|
Object o = fSavedName.getSelectedItem();
|
||||||
|
if (savedParams != null && o != null)
|
||||||
|
{
|
||||||
|
String selected = o.toString();
|
||||||
|
for (int i = 0; i < savedParams.size(); i++)
|
||||||
|
{
|
||||||
|
if (savedParams.get(i).getName().equals(selected))
|
||||||
|
{
|
||||||
|
savedParams.get(i).deleteEx(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
querySaved();
|
||||||
|
}
|
||||||
|
|
||||||
else if (e.getSource() == bPrint)
|
else if (e.getSource() == bPrint)
|
||||||
printScreen();
|
printScreen();
|
||||||
} // actionPerformed
|
} // actionPerformed
|
||||||
|
|
||||||
|
|
||||||
|
private void loadSavedParams(MPInstance instance) {
|
||||||
|
parameterPanel.loadParameters(instance);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Lock User Interface
|
* Lock User Interface
|
||||||
* Called from the Worker before processing
|
* Called from the Worker before processing
|
||||||
|
|
|
@ -40,6 +40,7 @@ import org.compiere.model.GridField;
|
||||||
import org.compiere.model.GridFieldVO;
|
import org.compiere.model.GridFieldVO;
|
||||||
import org.compiere.model.MClient;
|
import org.compiere.model.MClient;
|
||||||
import org.compiere.model.MLookup;
|
import org.compiere.model.MLookup;
|
||||||
|
import org.compiere.model.MPInstance;
|
||||||
import org.compiere.model.MPInstancePara;
|
import org.compiere.model.MPInstancePara;
|
||||||
import org.compiere.process.ProcessInfo;
|
import org.compiere.process.ProcessInfo;
|
||||||
import org.compiere.swing.CLabel;
|
import org.compiere.swing.CLabel;
|
||||||
|
@ -65,7 +66,7 @@ public class ProcessParameterPanel extends CPanel implements VetoableChangeListe
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = 3871379020889713432L;
|
private static final long serialVersionUID = -111202562692738248L;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dynamic generated Parameter panel.
|
* Dynamic generated Parameter panel.
|
||||||
|
@ -638,6 +639,64 @@ public class ProcessParameterPanel extends CPanel implements VetoableChangeListe
|
||||||
return true;
|
return true;
|
||||||
} // saveParameters
|
} // saveParameters
|
||||||
|
|
||||||
|
/*
|
||||||
|
* load parameters from saved instance
|
||||||
|
*/
|
||||||
|
public boolean loadParameters(MPInstance instance)
|
||||||
|
{
|
||||||
|
log.config("");
|
||||||
|
|
||||||
|
MPInstancePara[] params = instance.getParameters();
|
||||||
|
for (int j = 0; j < m_mFields.size(); j++)
|
||||||
|
{
|
||||||
|
GridField mField = (GridField)m_mFields.get(j);
|
||||||
|
|
||||||
|
// Get Values
|
||||||
|
VEditor editor = (VEditor)m_vEditors.get(j);
|
||||||
|
VEditor editor2 = (VEditor)m_vEditors2.get(j);
|
||||||
|
|
||||||
|
editor.setValue(null);
|
||||||
|
if (editor2 != null)
|
||||||
|
editor2.setValue(null);
|
||||||
|
|
||||||
|
for ( int i = 0; i<params.length; i++)
|
||||||
|
{
|
||||||
|
MPInstancePara para = params[i];
|
||||||
|
para.getParameterName();
|
||||||
|
|
||||||
|
if ( mField.getColumnName().equals(para.getParameterName()) )
|
||||||
|
{
|
||||||
|
|
||||||
|
if (para.getP_Date() != null || para.getP_Date_To() != null )
|
||||||
|
{
|
||||||
|
editor.setValue(para.getP_Date());
|
||||||
|
if (editor2 != null )
|
||||||
|
editor2.setValue(para.getP_Date_To());
|
||||||
|
}
|
||||||
|
// String
|
||||||
|
else if ( para.getP_String() != null || para.getP_String_To() != null )
|
||||||
|
{
|
||||||
|
editor.setValue(para.getP_String());
|
||||||
|
if (editor2 != null)
|
||||||
|
editor2.setValue(para.getP_String_To());
|
||||||
|
}
|
||||||
|
else if ( !Env.ZERO.equals(para.getP_Number()) || !Env.ZERO.equals(para.getP_Number_To()) )
|
||||||
|
{
|
||||||
|
editor.setValue(para.getP_Number());
|
||||||
|
if (editor2 != null)
|
||||||
|
editor2.setValue(para.getP_Number_To());
|
||||||
|
}
|
||||||
|
|
||||||
|
log.fine(para.toString());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} // for every saved parameter
|
||||||
|
|
||||||
|
} // for every field
|
||||||
|
|
||||||
|
return true;
|
||||||
|
} // saveParameters
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Restore window context.
|
* Restore window context.
|
||||||
* @author teo_sarca [ 1699826 ]
|
* @author teo_sarca [ 1699826 ]
|
||||||
|
|
|
@ -21,9 +21,14 @@ import org.adempiere.util.ContextRunnable;
|
||||||
import org.adempiere.util.IProcessUI;
|
import org.adempiere.util.IProcessUI;
|
||||||
import org.adempiere.webui.LayoutUtils;
|
import org.adempiere.webui.LayoutUtils;
|
||||||
import org.adempiere.webui.component.Button;
|
import org.adempiere.webui.component.Button;
|
||||||
|
import org.adempiere.webui.component.Combobox;
|
||||||
import org.adempiere.webui.component.ConfirmPanel;
|
import org.adempiere.webui.component.ConfirmPanel;
|
||||||
|
import org.adempiere.webui.component.Grid;
|
||||||
|
import org.adempiere.webui.component.GridFactory;
|
||||||
|
import org.adempiere.webui.component.Label;
|
||||||
import org.adempiere.webui.component.Mask;
|
import org.adempiere.webui.component.Mask;
|
||||||
import org.adempiere.webui.component.Panel;
|
import org.adempiere.webui.component.Panel;
|
||||||
|
import org.adempiere.webui.component.Rows;
|
||||||
import org.adempiere.webui.component.Window;
|
import org.adempiere.webui.component.Window;
|
||||||
import org.adempiere.webui.desktop.IDesktop;
|
import org.adempiere.webui.desktop.IDesktop;
|
||||||
import org.adempiere.webui.factory.ButtonFactory;
|
import org.adempiere.webui.factory.ButtonFactory;
|
||||||
|
@ -36,16 +41,21 @@ import org.adempiere.webui.window.FDialog;
|
||||||
import org.adempiere.webui.window.MultiFileDownloadDialog;
|
import org.adempiere.webui.window.MultiFileDownloadDialog;
|
||||||
import org.adempiere.webui.window.SimplePDFViewer;
|
import org.adempiere.webui.window.SimplePDFViewer;
|
||||||
import org.compiere.Adempiere;
|
import org.compiere.Adempiere;
|
||||||
|
import org.compiere.model.MPInstance;
|
||||||
|
import org.compiere.model.MPInstancePara;
|
||||||
|
import org.compiere.model.MProcess;
|
||||||
import org.compiere.model.X_AD_CtxHelp;
|
import org.compiere.model.X_AD_CtxHelp;
|
||||||
import org.compiere.print.ReportEngine;
|
import org.compiere.print.ReportEngine;
|
||||||
import org.compiere.process.ProcessInfo;
|
import org.compiere.process.ProcessInfo;
|
||||||
import org.compiere.process.ProcessInfoLog;
|
import org.compiere.process.ProcessInfoLog;
|
||||||
import org.compiere.process.ProcessInfoUtil;
|
import org.compiere.process.ProcessInfoUtil;
|
||||||
|
import org.compiere.util.AdempiereSystemError;
|
||||||
import org.compiere.util.CLogger;
|
import org.compiere.util.CLogger;
|
||||||
import org.compiere.util.DB;
|
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;
|
||||||
|
import org.compiere.util.Util;
|
||||||
import org.zkoss.zhtml.Table;
|
import org.zkoss.zhtml.Table;
|
||||||
import org.zkoss.zhtml.Td;
|
import org.zkoss.zhtml.Td;
|
||||||
import org.zkoss.zhtml.Text;
|
import org.zkoss.zhtml.Text;
|
||||||
|
@ -62,11 +72,12 @@ import org.zkoss.zk.ui.util.Clients;
|
||||||
import org.zkoss.zul.A;
|
import org.zkoss.zul.A;
|
||||||
import org.zkoss.zul.Borderlayout;
|
import org.zkoss.zul.Borderlayout;
|
||||||
import org.zkoss.zul.Center;
|
import org.zkoss.zul.Center;
|
||||||
|
import org.zkoss.zul.Comboitem;
|
||||||
import org.zkoss.zul.Div;
|
import org.zkoss.zul.Div;
|
||||||
import org.zkoss.zul.Hlayout;
|
import org.zkoss.zul.Hbox;
|
||||||
import org.zkoss.zul.Html;
|
import org.zkoss.zul.Html;
|
||||||
import org.zkoss.zul.Label;
|
|
||||||
import org.zkoss.zul.North;
|
import org.zkoss.zul.North;
|
||||||
|
import org.zkoss.zul.Row;
|
||||||
import org.zkoss.zul.South;
|
import org.zkoss.zul.South;
|
||||||
|
|
||||||
import com.lowagie.text.Document;
|
import com.lowagie.text.Document;
|
||||||
|
@ -107,7 +118,7 @@ public class ProcessDialog extends Window implements EventListener<Event>, IProc
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = 6316822220179816250L;
|
private static final long serialVersionUID = -899849696748614034L;
|
||||||
|
|
||||||
private static final String MESSAGE_DIV_STYLE = "max-height: 150pt; overflow: auto; margin: 10px;";
|
private static final String MESSAGE_DIV_STYLE = "max-height: 150pt; overflow: auto; margin: 10px;";
|
||||||
private Div messageDiv;
|
private Div messageDiv;
|
||||||
|
@ -117,6 +128,10 @@ public class ProcessDialog extends Window implements EventListener<Event>, IProc
|
||||||
|
|
||||||
private List<File> downloadFiles;
|
private List<File> downloadFiles;
|
||||||
|
|
||||||
|
private boolean showLastRun = false;
|
||||||
|
|
||||||
|
private Grid southRowPanel = GridFactory.newGridLayout();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dialog to start a process/report
|
* Dialog to start a process/report
|
||||||
* @param ctx
|
* @param ctx
|
||||||
|
@ -139,6 +154,11 @@ public class ProcessDialog extends Window implements EventListener<Event>, IProc
|
||||||
Env.setContext(Env.getCtx(), m_WindowNo, "IsSOTrx", isSOTrx ? "Y" : "N");
|
Env.setContext(Env.getCtx(), m_WindowNo, "IsSOTrx", isSOTrx ? "Y" : "N");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
MProcess process = new MProcess(m_ctx, m_AD_Process_ID, null);
|
||||||
|
int count = process.getParameters().length;
|
||||||
|
if (count > 0)
|
||||||
|
showLastRun = true;
|
||||||
|
|
||||||
initComponents();
|
initComponents();
|
||||||
init();
|
init();
|
||||||
addEventListener(WindowContainer.ON_WINDOW_CONTAINER_SELECTION_CHANGED_EVENT, this);
|
addEventListener(WindowContainer.ON_WINDOW_CONTAINER_SELECTION_CHANGED_EVENT, this);
|
||||||
|
@ -174,26 +194,48 @@ public class ProcessDialog extends Window implements EventListener<Event>, IProc
|
||||||
center.setAutoscroll(true);
|
center.setAutoscroll(true);
|
||||||
center.setStyle("border: none");
|
center.setStyle("border: none");
|
||||||
|
|
||||||
Hlayout hbox = new Hlayout();
|
Rows rows = southRowPanel.newRows();
|
||||||
|
Row row = rows.newRow();
|
||||||
|
|
||||||
|
Hbox hBox = new Hbox();
|
||||||
|
|
||||||
|
hBox.appendChild(lSaved);
|
||||||
|
fSavedName.addEventListener(Events.ON_CHANGE, this);
|
||||||
|
hBox.appendChild(fSavedName);
|
||||||
|
|
||||||
|
bSave.setEnabled(false);
|
||||||
|
bSave.addActionListener(this);
|
||||||
|
hBox.appendChild(bSave);
|
||||||
|
|
||||||
|
bDelete.setEnabled(false);
|
||||||
|
bDelete.addActionListener(this);
|
||||||
|
hBox.appendChild(bDelete);
|
||||||
|
|
||||||
|
row.appendChild(hBox);
|
||||||
|
|
||||||
|
if(!showLastRun)
|
||||||
|
hBox.setVisible(false);
|
||||||
|
|
||||||
|
Panel confParaPanel =new Panel();
|
||||||
|
confParaPanel.setAlign("right");
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
String label = Msg.getMsg(Env.getCtx(), "Start");
|
String label = Msg.getMsg(Env.getCtx(), "Start");
|
||||||
// Invert - Unify OK/Cancel IDEMPIERE-77
|
// Invert - Unify OK/Cancel IDEMPIERE-77
|
||||||
bOK = ButtonFactory.createNamedButton(ConfirmPanel.A_OK, true, true);
|
bOK = ButtonFactory.createNamedButton(ConfirmPanel.A_OK, true, true);
|
||||||
bOK.setId("Ok");
|
bOK.setId("Ok");
|
||||||
bOK.addEventListener(Events.ON_CLICK, this);
|
bOK.addEventListener(Events.ON_CLICK, this);
|
||||||
hbox.appendChild(bOK);
|
confParaPanel.appendChild(bOK);
|
||||||
|
|
||||||
Button btn = ButtonFactory.createNamedButton(ConfirmPanel.A_CANCEL, true, true);
|
bCancel = ButtonFactory.createNamedButton(ConfirmPanel.A_CANCEL, true, true);
|
||||||
btn.setId("Cancel");
|
bCancel.setId("Cancel");
|
||||||
btn.addEventListener(Events.ON_CLICK, this);
|
bCancel.addEventListener(Events.ON_CLICK, this);
|
||||||
hbox.appendChild(btn);
|
confParaPanel.appendChild(bCancel);
|
||||||
hbox.setStyle("padding: 10px; margin: auto; overflow: visible;");
|
row.appendChild(confParaPanel);
|
||||||
hbox.setHflex("min");
|
|
||||||
|
|
||||||
South south = new South();
|
South south = new South();
|
||||||
south.setSclass("dialog-footer");
|
south.setSclass("dialog-footer");
|
||||||
layout.appendChild(south);
|
layout.appendChild(south);
|
||||||
south.appendChild(hbox);
|
south.appendChild(southRowPanel);
|
||||||
this.appendChild(layout);
|
this.appendChild(layout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -209,6 +251,7 @@ public class ProcessDialog extends Window implements EventListener<Event>, IProc
|
||||||
private Panel centerPanel = null;
|
private Panel centerPanel = null;
|
||||||
private Html message = null;
|
private Html message = null;
|
||||||
private Button bOK = null;
|
private Button bOK = null;
|
||||||
|
private Button bCancel = null;
|
||||||
|
|
||||||
private boolean valid = true;
|
private boolean valid = true;
|
||||||
|
|
||||||
|
@ -229,6 +272,13 @@ public class ProcessDialog extends Window implements EventListener<Event>, IProc
|
||||||
private static final String ON_STATUS_UPDATE = "onStatusUpdate";
|
private static final String ON_STATUS_UPDATE = "onStatusUpdate";
|
||||||
private static final String ON_COMPLETE = "onComplete";
|
private static final String ON_COMPLETE = "onComplete";
|
||||||
|
|
||||||
|
//saved parameters
|
||||||
|
private Combobox fSavedName=new Combobox();
|
||||||
|
private Button bSave=ButtonFactory.createNamedButton("Save");
|
||||||
|
private Button bDelete=ButtonFactory.createNamedButton("Delete");
|
||||||
|
private List<MPInstance> savedParams;
|
||||||
|
private Label lSaved=new Label(Msg.getMsg(Env.getCtx(), "SavedParameter"));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set Visible
|
* Set Visible
|
||||||
* (set focus to OK if visible)
|
* (set focus to OK if visible)
|
||||||
|
@ -330,9 +380,24 @@ public class ProcessDialog extends Window implements EventListener<Event>, IProc
|
||||||
{
|
{
|
||||||
startProcess();
|
startProcess();
|
||||||
}
|
}
|
||||||
|
querySaved();
|
||||||
return true;
|
return true;
|
||||||
} // init
|
} // init
|
||||||
|
|
||||||
|
private void querySaved()
|
||||||
|
{
|
||||||
|
//user query
|
||||||
|
savedParams = MPInstance.get(Env.getCtx(), m_AD_Process_ID, Env.getContextAsInt(Env.getCtx(), "#AD_User_ID"));
|
||||||
|
fSavedName.removeAllItems();
|
||||||
|
for (MPInstance instance : savedParams)
|
||||||
|
{
|
||||||
|
String queries = instance.get_ValueAsString("Name");
|
||||||
|
fSavedName.appendItem(queries);
|
||||||
|
}
|
||||||
|
|
||||||
|
fSavedName.setValue("");
|
||||||
|
}
|
||||||
|
|
||||||
public void startProcess()
|
public void startProcess()
|
||||||
{
|
{
|
||||||
m_pi.setPrintPreview(true);
|
m_pi.setPrintPreview(true);
|
||||||
|
@ -379,6 +444,14 @@ public class ProcessDialog extends Window implements EventListener<Event>, IProc
|
||||||
|
|
||||||
public void onEvent(Event event) {
|
public void onEvent(Event event) {
|
||||||
Component component = event.getTarget();
|
Component component = event.getTarget();
|
||||||
|
|
||||||
|
String saveName = null;
|
||||||
|
boolean lastRun = false;
|
||||||
|
if (fSavedName.getRawText() != null) {
|
||||||
|
saveName = fSavedName.getRawText();
|
||||||
|
lastRun = ("** " + Msg.getMsg(Env.getCtx(), "LastRun") + " **")
|
||||||
|
.equals(saveName);
|
||||||
|
}
|
||||||
if(component instanceof A && event.getName().equals((Events.ON_CLICK))){
|
if(component instanceof A && event.getName().equals((Events.ON_CLICK))){
|
||||||
doOnClick((A)component);
|
doOnClick((A)component);
|
||||||
} else if (component instanceof Button) {
|
} else if (component instanceof Button) {
|
||||||
|
@ -393,6 +466,59 @@ public class ProcessDialog extends Window implements EventListener<Event>, IProc
|
||||||
restart();
|
restart();
|
||||||
} else if ("Cancel".equalsIgnoreCase(element.getId())) {
|
} else if ("Cancel".equalsIgnoreCase(element.getId())) {
|
||||||
this.dispose();
|
this.dispose();
|
||||||
|
} else if (event.getTarget().equals(bSave) && fSavedName != null
|
||||||
|
&& !lastRun) {
|
||||||
|
|
||||||
|
// Update existing
|
||||||
|
if (fSavedName.getSelectedIndex() > -1 && savedParams != null) {
|
||||||
|
for (int i = 0; i < savedParams.size(); i++) {
|
||||||
|
if (savedParams.get(i).getName().equals(saveName)) {
|
||||||
|
m_pi.setAD_PInstance_ID(savedParams.get(i)
|
||||||
|
.getAD_PInstance_ID());
|
||||||
|
for (MPInstancePara para : savedParams.get(i)
|
||||||
|
.getParameters()) {
|
||||||
|
para.deleteEx(true);
|
||||||
|
}
|
||||||
|
parameterPanel.saveParameters();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// create new
|
||||||
|
else {
|
||||||
|
MPInstance instance = null;
|
||||||
|
try {
|
||||||
|
instance = new MPInstance(Env.getCtx(),
|
||||||
|
m_pi.getAD_Process_ID(), m_pi.getRecord_ID());
|
||||||
|
instance.setName(saveName);
|
||||||
|
instance.saveEx();
|
||||||
|
m_pi.setAD_PInstance_ID(instance.getAD_PInstance_ID());
|
||||||
|
// Get Parameters
|
||||||
|
if (parameterPanel != null) {
|
||||||
|
if (!parameterPanel.saveParameters()) {
|
||||||
|
throw new AdempiereSystemError(Msg.getMsg(
|
||||||
|
Env.getCtx(), "SaveParameterError"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
log.log(Level.SEVERE, ex.getLocalizedMessage(), ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
querySaved();
|
||||||
|
fSavedName.setSelectedItem(getComboItem(saveName));
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (event.getTarget().equals(bDelete) && fSavedName != null
|
||||||
|
&& !lastRun) {
|
||||||
|
Object o = fSavedName.getSelectedItem();
|
||||||
|
if (savedParams != null && o != null) {
|
||||||
|
String selected = fSavedName.getSelectedItem().getLabel();
|
||||||
|
for (int i = 0; i < savedParams.size(); i++) {
|
||||||
|
if (savedParams.get(i).getName().equals(selected)) {
|
||||||
|
savedParams.get(i).deleteEx(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
querySaved();
|
||||||
}
|
}
|
||||||
} else if (event.getName().equals(ON_STATUS_UPDATE)) {
|
} else if (event.getName().equals(ON_STATUS_UPDATE)) {
|
||||||
onStatusUpdate(event);
|
onStatusUpdate(event);
|
||||||
|
@ -400,8 +526,36 @@ public class ProcessDialog extends Window implements EventListener<Event>, IProc
|
||||||
onComplete();
|
onComplete();
|
||||||
} else if (event.getName().equals(WindowContainer.ON_WINDOW_CONTAINER_SELECTION_CHANGED_EVENT)) {
|
} else if (event.getName().equals(WindowContainer.ON_WINDOW_CONTAINER_SELECTION_CHANGED_EVENT)) {
|
||||||
SessionManager.getAppDesktop().updateHelpContext(X_AD_CtxHelp.CTXTYPE_Process, m_AD_Process_ID);
|
SessionManager.getAppDesktop().updateHelpContext(X_AD_CtxHelp.CTXTYPE_Process, m_AD_Process_ID);
|
||||||
|
} else if (event.getTarget().equals(fSavedName)) {
|
||||||
|
if (savedParams != null && saveName != null) {
|
||||||
|
for (int i = 0; i < savedParams.size(); i++) {
|
||||||
|
if (savedParams.get(i).getName().equals(saveName)) {
|
||||||
|
loadSavedParams(savedParams.get(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
boolean enabled = !Util.isEmpty(saveName);
|
||||||
|
bSave.setEnabled(enabled && !lastRun);
|
||||||
|
bDelete.setEnabled(enabled && fSavedName.getSelectedIndex() > -1
|
||||||
|
&& !lastRun);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Comboitem getComboItem( String value) {
|
||||||
|
Comboitem item = null;
|
||||||
|
for (int i = 0; i < fSavedName.getItems().size(); i++) {
|
||||||
|
if (fSavedName.getItems().get(i) != null) {
|
||||||
|
item = (Comboitem)fSavedName.getItems().get(i);
|
||||||
|
if (value.equals(item.getLabel().toString())) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loadSavedParams(MPInstance instance) {
|
||||||
|
parameterPanel.loadParameters(instance);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void doOnClick(A btn) {
|
private void doOnClick(A btn) {
|
||||||
|
|
|
@ -44,6 +44,7 @@ import org.compiere.model.GridField;
|
||||||
import org.compiere.model.GridFieldVO;
|
import org.compiere.model.GridFieldVO;
|
||||||
import org.compiere.model.MClient;
|
import org.compiere.model.MClient;
|
||||||
import org.compiere.model.MLookup;
|
import org.compiere.model.MLookup;
|
||||||
|
import org.compiere.model.MPInstance;
|
||||||
import org.compiere.model.MPInstancePara;
|
import org.compiere.model.MPInstancePara;
|
||||||
import org.compiere.process.ProcessInfo;
|
import org.compiere.process.ProcessInfo;
|
||||||
import org.compiere.util.CLogger;
|
import org.compiere.util.CLogger;
|
||||||
|
@ -71,7 +72,7 @@ public class ProcessParameterPanel extends Panel implements
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = -5996487688479454715L;
|
private static final long serialVersionUID = -6089753824709746119L;
|
||||||
|
|
||||||
private String width;
|
private String width;
|
||||||
|
|
||||||
|
@ -429,6 +430,64 @@ public class ProcessParameterPanel extends Panel implements
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} // validateParameters
|
} // validateParameters
|
||||||
|
|
||||||
|
/*
|
||||||
|
* load parameters from saved instance
|
||||||
|
*/
|
||||||
|
public boolean loadParameters(MPInstance instance)
|
||||||
|
{
|
||||||
|
log.config("");
|
||||||
|
|
||||||
|
MPInstancePara[] params = instance.getParameters();
|
||||||
|
for (int j = 0; j < m_mFields.size(); j++)
|
||||||
|
{
|
||||||
|
GridField mField = (GridField)m_mFields.get(j);
|
||||||
|
|
||||||
|
// Get Values
|
||||||
|
WEditor editor = (WEditor)m_wEditors.get(j);
|
||||||
|
WEditor editor2 = (WEditor)m_wEditors2.get(j);
|
||||||
|
|
||||||
|
editor.setValue(null);
|
||||||
|
if (editor2 != null)
|
||||||
|
editor2.setValue(null);
|
||||||
|
|
||||||
|
for ( int i = 0; i<params.length; i++)
|
||||||
|
{
|
||||||
|
MPInstancePara para = params[i];
|
||||||
|
para.getParameterName();
|
||||||
|
|
||||||
|
if ( mField.getColumnName().equals(para.getParameterName()) )
|
||||||
|
{
|
||||||
|
|
||||||
|
if (para.getP_Date() != null || para.getP_Date_To() != null )
|
||||||
|
{
|
||||||
|
editor.setValue(para.getP_Date());
|
||||||
|
if (editor2 != null )
|
||||||
|
editor2.setValue(para.getP_Date_To());
|
||||||
|
}
|
||||||
|
// String
|
||||||
|
else if ( para.getP_String() != null || para.getP_String_To() != null )
|
||||||
|
{
|
||||||
|
editor.setValue(para.getP_String());
|
||||||
|
if (editor2 != null)
|
||||||
|
editor2.setValue(para.getP_String_To());
|
||||||
|
}
|
||||||
|
else if ( !Env.ZERO.equals(para.getP_Number()) || !Env.ZERO.equals(para.getP_Number_To()) )
|
||||||
|
{
|
||||||
|
editor.setValue(para.getP_Number());
|
||||||
|
if (editor2 != null)
|
||||||
|
editor2.setValue(para.getP_Number_To());
|
||||||
|
}
|
||||||
|
|
||||||
|
log.fine(para.toString());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} // for every saved parameter
|
||||||
|
|
||||||
|
} // for every field
|
||||||
|
|
||||||
|
return true;
|
||||||
|
} // loadParameters
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save Parameter values
|
* Save Parameter values
|
||||||
|
|
|
@ -18,6 +18,8 @@
|
||||||
package org.adempiere.webui.editor;
|
package org.adempiere.webui.editor;
|
||||||
|
|
||||||
import java.beans.PropertyChangeEvent;
|
import java.beans.PropertyChangeEvent;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.sql.Timestamp;
|
||||||
|
|
||||||
import javax.swing.event.ListDataEvent;
|
import javax.swing.event.ListDataEvent;
|
||||||
import javax.swing.event.ListDataListener;
|
import javax.swing.event.ListDataListener;
|
||||||
|
@ -255,7 +257,7 @@ ContextMenuListener, IZoomableEditor
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (value != null && (value instanceof Integer || value instanceof String))
|
if (value != null && (value instanceof Integer || value instanceof String || value instanceof Timestamp || value instanceof BigDecimal))
|
||||||
{
|
{
|
||||||
|
|
||||||
getComponent().setValue(value);
|
getComponent().setValue(value);
|
||||||
|
|
Loading…
Reference in New Issue