IDEMPIERE-5645 - Print Format Script Column cannot find Columns from context (#1760)
* IDEMPIERE-5645 - Print Format Script Column cannot find Columns from context * IDEMPIERE-5645 - move script columnd parsing after 'all rows' loop * IDEMPIERE-5645 - fixes
This commit is contained in:
parent
9e18bc725e
commit
33de756336
|
@ -28,6 +28,7 @@ import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
@ -895,6 +896,7 @@ public class DataEngine
|
||||||
boolean hasLevelNo = pd.hasLevelNo();
|
boolean hasLevelNo = pd.hasLevelNo();
|
||||||
int levelNo = 0;
|
int levelNo = 0;
|
||||||
int reportLineID = 0;
|
int reportLineID = 0;
|
||||||
|
ArrayList<PrintDataColumn> scriptColumns = new ArrayList<PrintDataColumn>();
|
||||||
//
|
//
|
||||||
PreparedStatement pstmt = null;
|
PreparedStatement pstmt = null;
|
||||||
ResultSet rs = null;
|
ResultSet rs = null;
|
||||||
|
@ -1061,18 +1063,13 @@ public class DataEngine
|
||||||
int displayType = pdc.getDisplayType();
|
int displayType = pdc.getDisplayType();
|
||||||
if(MPrintFormatItem.PRINTFORMATTYPE_Script.equalsIgnoreCase(pdc.getPrintFormatType())) { // ScriptColumn
|
if(MPrintFormatItem.PRINTFORMATTYPE_Script.equalsIgnoreCase(pdc.getPrintFormatType())) { // ScriptColumn
|
||||||
Object value = rs.getObject(displayIndex);
|
Object value = rs.getObject(displayIndex);
|
||||||
displayType = getDisplayType(value);
|
|
||||||
|
|
||||||
if (display.startsWith("@SCRIPT")) {
|
if (display.startsWith("@SCRIPT")) {
|
||||||
display = display.replace("@SCRIPT", "");
|
if(!scriptColumns.contains(pdc))
|
||||||
value = parseVariable(display, pdc, pd);
|
scriptColumns.add(pdc);
|
||||||
Interpreter bsh = new Interpreter ();
|
displayType = DisplayType.Text;
|
||||||
try {
|
|
||||||
value = bsh.eval(value.toString());
|
|
||||||
}
|
|
||||||
catch (EvalError e) {
|
|
||||||
log.severe(e.getMessage());
|
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
displayType = getDisplayType(value);
|
displayType = getDisplayType(value);
|
||||||
}
|
}
|
||||||
pde = new PrintDataElement(pdc.getAD_PrintFormatItem_ID(), pdc.getColumnName(), (Serializable) value, displayType, pdc.getFormatPattern());
|
pde = new PrintDataElement(pdc.getAD_PrintFormatItem_ID(), pdc.getColumnName(), (Serializable) value, displayType, pdc.getFormatPattern());
|
||||||
|
@ -1167,6 +1164,28 @@ public class DataEngine
|
||||||
rs = null; pstmt = null;
|
rs = null; pstmt = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Parse Script column values
|
||||||
|
if(scriptColumns.size() > 0) {
|
||||||
|
for(int i = 0; i < pd.getRowCount(); i++) {
|
||||||
|
for(PrintDataColumn c : scriptColumns) {
|
||||||
|
pd.setRowIndex(i);
|
||||||
|
PrintDataElement e = (PrintDataElement) pd.getNodeByPrintFormatItemId(c.getAD_PrintFormatItem_ID());
|
||||||
|
Object value = parseVariable(e.getValueAsString().replace("@SCRIPT", ""), c, pd);
|
||||||
|
Interpreter bsh = new Interpreter();
|
||||||
|
try {
|
||||||
|
value = bsh.eval(value.toString());
|
||||||
|
}
|
||||||
|
catch (EvalError err) {
|
||||||
|
log.severe(err.getMessage());
|
||||||
|
}
|
||||||
|
e.setDisplayType(getDisplayType(value));
|
||||||
|
if(value instanceof Serializable)
|
||||||
|
e.setValue((Serializable) value);
|
||||||
|
else
|
||||||
|
e.setValue(Objects.toString(value, ""));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
// -- we have all rows - finish
|
// -- we have all rows - finish
|
||||||
// Check last Group Change
|
// Check last Group Change
|
||||||
if (m_group.getGroupColumnCount() > 1) // one is TOTAL
|
if (m_group.getGroupColumnCount() > 1) // one is TOTAL
|
||||||
|
|
|
@ -160,6 +160,14 @@ public class PrintDataElement implements Serializable
|
||||||
return m_value;
|
return m_value;
|
||||||
} // getValue
|
} // getValue
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set Node Value
|
||||||
|
* @param value
|
||||||
|
*/
|
||||||
|
public void setValue(Serializable value) {
|
||||||
|
this.m_value = value;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get Function Value
|
* Get Function Value
|
||||||
* @return length or numeric value
|
* @return length or numeric value
|
||||||
|
@ -323,6 +331,14 @@ public class PrintDataElement implements Serializable
|
||||||
return m_displayType;
|
return m_displayType;
|
||||||
} // getDisplayType
|
} // getDisplayType
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set Display Type
|
||||||
|
*/
|
||||||
|
public void setDisplayType(int displayType)
|
||||||
|
{
|
||||||
|
this.m_displayType = displayType;
|
||||||
|
} // setDisplayType
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Is Value numeric
|
* Is Value numeric
|
||||||
* @return true if value is a numeric
|
* @return true if value is a numeric
|
||||||
|
|
Loading…
Reference in New Issue