diff --git a/org.adempiere.base/src/org/compiere/print/DataEngine.java b/org.adempiere.base/src/org/compiere/print/DataEngine.java index ed9471dbde..be97679f4e 100644 --- a/org.adempiere.base/src/org/compiere/print/DataEngine.java +++ b/org.adempiere.base/src/org/compiere/print/DataEngine.java @@ -24,6 +24,7 @@ import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Timestamp; +import java.sql.Types; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; @@ -1030,7 +1031,8 @@ public class DataEngine if (pdc.hasAlias()) { // DisplayColumn first - String display = rs.getString(counter++); + int displayIndex = counter++; + String display = rs.getString(displayIndex); if (pdc.getColumnName().endsWith("_ID")) { int id = rs.getInt(counter++); @@ -1042,26 +1044,52 @@ public class DataEngine } else { + + + String id = rs.getString(counter++); if (display != null && !rs.wasNull()) { /** START DEVCOFFEE: script column **/ int displayType = pdc.getDisplayType(); - if (display.startsWith("@SCRIPT")) - { - displayType = DisplayType.Number; - display = display.replace("@SCRIPT", ""); - display = parseVariable(display, pdc, pd); - Interpreter bsh = new Interpreter (); - try { - display = bsh.eval(display).toString(); - } catch (EvalError e) { - log.severe(e.getMessage()); + if(rs.getMetaData().getColumnName(displayIndex).contains("SCRIPTCOLUMN")) { + Object value = rs.getObject(displayIndex); + int columnType = rs.getMetaData().getColumnType(displayIndex); + // String, Text + if (columnType == Types.CHAR || columnType == Types.VARCHAR) + { + displayType = DisplayType.Text; + } + else if (columnType == Types.DATE || columnType == Types.TIME + || columnType == Types.TIMESTAMP) + { + displayType = DisplayType.DateTime; + } + // Number + else if (columnType == Types.INTEGER || columnType == Types.SMALLINT + || columnType == Types.DECIMAL || columnType == Types.NUMERIC) + { + displayType = DisplayType.Number; } - } - ValueNamePair pp = new ValueNamePair(id, display); - pde = new PrintDataElement(pdc.getAD_PrintFormatItem_ID(), pdc.getColumnName(), pp, displayType, pdc.getFormatPattern()); + if (display.startsWith("@SCRIPT")) + { + displayType = DisplayType.Number; + display = display.replace("@SCRIPT", ""); + value = parseVariable(display, pdc, pd); + Interpreter bsh = new Interpreter (); + try { + value = bsh.eval(value.toString()); + + } catch (EvalError e) { + log.severe(e.getMessage()); + } + } + pde = new PrintDataElement(pdc.getAD_PrintFormatItem_ID(), pdc.getColumnName(), (Serializable) value, displayType, pdc.getFormatPattern()); + } else { + ValueNamePair pp = new ValueNamePair(id, display); + pde = new PrintDataElement(pdc.getAD_PrintFormatItem_ID(), pdc.getColumnName(), pp, displayType, pdc.getFormatPattern()); + } } } }