IDEMPIERE-5528 Context parsing on process Parameter not considering tab no (#1765)

- implement parent Evaluatee for GridField and ProcessParameterPanel
This commit is contained in:
hengsin 2023-04-01 22:24:07 +08:00 committed by GitHub
parent ee1b6828f4
commit 65f565e542
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 63 additions and 1 deletions

View File

@ -1344,6 +1344,11 @@ public class GridField
*/ */
public String get_ValueAsString (Properties ctx, String variableName) public String get_ValueAsString (Properties ctx, String variableName)
{ {
if (m_parentEvaluatee != null) {
String value = m_parentEvaluatee.get_ValueAsString(variableName);
if (value != null)
return value;
}
return new DefaultEvaluatee(getGridTab(), m_vo.WindowNo, m_vo.TabNo).get_ValueAsString(ctx, variableName); return new DefaultEvaluatee(getGridTab(), m_vo.WindowNo, m_vo.TabNo).get_ValueAsString(ctx, variableName);
} // get_ValueAsString } // get_ValueAsString
@ -2423,6 +2428,9 @@ public class GridField
/** Is the initial context value for this field backup ? - teo_sarca [ 1699826 ] */ /** Is the initial context value for this field backup ? - teo_sarca [ 1699826 ] */
private boolean m_isBackupValue = false; private boolean m_isBackupValue = false;
/** Optional Parent Evaluatee that take precedence over the value return from GridField's Evaluatee implementation */
private Evaluatee m_parentEvaluatee = null;
/** /**
* Backup the context value * Backup the context value
@ -2705,4 +2713,12 @@ public class GridField
} }
} }
} }
/**
* Set parent Evaluatee that take precedence over value return from GridField's Evaluatee implementation.
* @param evaluatee
*/
public void setParentEvaluatee(Evaluatee evaluatee) {
m_parentEvaluatee = evaluatee;
}
} // GridField } // GridField

View File

@ -19,8 +19,11 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections; import java.util.Collections;
import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -70,6 +73,7 @@ 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.Evaluatee;
import org.compiere.util.Msg; import org.compiere.util.Msg;
import org.compiere.util.Util; import org.compiere.util.Util;
import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.Component;
@ -94,7 +98,7 @@ import org.zkoss.zul.impl.XulElement;
* @version 2006-12-01 * @version 2006-12-01
*/ */
public class ProcessParameterPanel extends Panel implements public class ProcessParameterPanel extends Panel implements
ValueChangeListener, IProcessParameter, EventListener<Event> { ValueChangeListener, IProcessParameter, EventListener<Event>, Evaluatee {
/** /**
* generated serial id * generated serial id
*/ */
@ -311,6 +315,7 @@ public class ProcessParameterPanel extends Panel implements
GridFieldVO voF = listVO.get(i); GridFieldVO voF = listVO.get(i);
GridField field = new GridField(voF); GridField field = new GridField(voF);
m_mFields.add(field); // add to Fields m_mFields.add(field); // add to Fields
field.setParentEvaluatee(this);
String fieldGroup = field.getFieldGroup(); String fieldGroup = field.getFieldGroup();
if (!Util.isEmpty(fieldGroup) && !fieldGroup.equals(currentFieldGroup)) // group changed if (!Util.isEmpty(fieldGroup) && !fieldGroup.equals(currentFieldGroup)) // group changed
@ -1360,4 +1365,45 @@ public class ProcessParameterPanel extends Panel implements
return m_WindowNo; return m_WindowNo;
} }
@Override
public String get_ValueAsString(String variableName) {
for(WEditor editor : m_wEditors) {
if (editor.getGridField().getColumnName().equals(variableName)) {
//base on code in GridField.updateContext() method
int displayType = editor.getGridField().getVO().displayType;
if (displayType == DisplayType.Text
|| displayType == DisplayType.Memo
|| displayType == DisplayType.TextLong
|| displayType == DisplayType.Binary
|| displayType == DisplayType.RowID
|| editor.getGridField().isEncrypted())
return ""; // ignore
Object value = editor.getValue();
if (value == null)
return "";
else if (value instanceof Boolean)
{
return (((Boolean)value) ? "Y" : "N");
}
else if (value instanceof Timestamp)
{
String stringValue = null;
if (value != null && !value.toString().equals("")) {
Calendar c1 = Calendar.getInstance();
c1.setTime((Date) value);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
stringValue = sdf.format(c1.getTime());
}
return stringValue;
}
else
{
return value.toString();
}
}
}
return null;
}
} // ProcessParameterPanel } // ProcessParameterPanel