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.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());
}
}
}
}