IDEMPIERE-4871 Added Data Type for Script Column (#776)

* IDEMPIERE-4871 Added Data Type for Script Column

* IDEMPIERE-4871 Script Column -Fix Script Evaluation Data Type
This commit is contained in:
igorpojzl 2021-07-14 02:06:27 +02:00 committed by GitHub
parent 19cfc2d07d
commit de2b29d129
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 42 additions and 14 deletions

View File

@ -24,6 +24,7 @@ import java.sql.ResultSet;
import java.sql.ResultSetMetaData; import java.sql.ResultSetMetaData;
import java.sql.SQLException; import java.sql.SQLException;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.sql.Types;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -1030,7 +1031,8 @@ public class DataEngine
if (pdc.hasAlias()) if (pdc.hasAlias())
{ {
// DisplayColumn first // DisplayColumn first
String display = rs.getString(counter++); int displayIndex = counter++;
String display = rs.getString(displayIndex);
if (pdc.getColumnName().endsWith("_ID")) if (pdc.getColumnName().endsWith("_ID"))
{ {
int id = rs.getInt(counter++); int id = rs.getInt(counter++);
@ -1042,26 +1044,52 @@ public class DataEngine
} }
else else
{ {
String id = rs.getString(counter++); String id = rs.getString(counter++);
if (display != null && !rs.wasNull()) if (display != null && !rs.wasNull())
{ {
/** START DEVCOFFEE: script column **/ /** START DEVCOFFEE: script column **/
int displayType = pdc.getDisplayType(); int displayType = pdc.getDisplayType();
if (display.startsWith("@SCRIPT")) if(rs.getMetaData().getColumnName(displayIndex).contains("SCRIPTCOLUMN")) {
{ Object value = rs.getObject(displayIndex);
displayType = DisplayType.Number; int columnType = rs.getMetaData().getColumnType(displayIndex);
display = display.replace("@SCRIPT", ""); // String, Text
display = parseVariable(display, pdc, pd); if (columnType == Types.CHAR || columnType == Types.VARCHAR)
Interpreter bsh = new Interpreter (); {
try { displayType = DisplayType.Text;
display = bsh.eval(display).toString(); }
} catch (EvalError e) { else if (columnType == Types.DATE || columnType == Types.TIME
log.severe(e.getMessage()); || 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); if (display.startsWith("@SCRIPT"))
pde = new PrintDataElement(pdc.getAD_PrintFormatItem_ID(), pdc.getColumnName(), pp, displayType, pdc.getFormatPattern()); {
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());
}
} }
} }
} }