details: https://code.openbravo.com/erp/devel/pi/rev/093cf42d6fa6 changeset: 30054:093cf42d6fa6 user: Carlos Aristu <carlos.aristu <at> openbravo.com> date: Fri Sep 09 15:18:08 2016 +0200 summary: related to issue 33900: apply the format when default value is a SQL expression
diffstat: modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/NumberUIDefinition.java | 33 ++- modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/UIDefinition.java | 94 ++++++--- 2 files changed, 82 insertions(+), 45 deletions(-) diffs (169 lines): diff -r cd053689a095 -r 093cf42d6fa6 modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/NumberUIDefinition.java --- a/modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/NumberUIDefinition.java Fri Sep 09 12:39:08 2016 +0000 +++ b/modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/NumberUIDefinition.java Fri Sep 09 15:18:08 2016 +0200 @@ -11,7 +11,7 @@ * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SLU - * All portions are Copyright (C) 2010-2012 Openbravo SLU + * All portions are Copyright (C) 2010-2016 Openbravo SLU * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************ @@ -158,14 +158,8 @@ public String getDefaultValue(VariablesSecureApp vars, String columnName, String defaultValueExpression, String windowId) { String defaultValue = super.getDefaultValue(vars, columnName, defaultValueExpression, windowId); - if (defaultValue == null || defaultValue.length() == 0) { - return defaultValue; - } try { - // Format the numeric default value - DecimalFormat df = Utility.getFormat(vars, getFormat()); - BigDecimal numericDefaultValue = new BigDecimal(defaultValue); - return df.format(numericDefaultValue); + return formatDefaultValue(vars, defaultValue); } catch (Exception ex) { throw new OBException("Invalid numeric default value (" + defaultValueExpression + ") defined for column " + columnName + " in window " + windowId, ex); @@ -173,6 +167,29 @@ } @Override + public String getDefaultValueFromSQLExpression(VariablesSecureApp vars, Field field, + String defaultValueExpression) { + String defaultValue = super.getDefaultValueFromSQLExpression(vars, field, + defaultValueExpression); + try { + return formatDefaultValue(vars, defaultValue); + } catch (Exception ex) { + throw new OBException("Invalid numeric value retrieved from default expression (" + + defaultValueExpression + ") defined for field " + field.getName(), ex); + } + } + + private String formatDefaultValue(VariablesSecureApp vars, String defaultValue) { + if (defaultValue == null || defaultValue.length() == 0) { + return defaultValue; + } + // Format the numeric default value + DecimalFormat df = Utility.getFormat(vars, getFormat()); + BigDecimal numericDefaultValue = new BigDecimal(defaultValue); + return df.format(numericDefaultValue); + } + + @Override public Object createFromClassicString(String value) { if (value == null || value.length() == 0) { return null; diff -r cd053689a095 -r 093cf42d6fa6 modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/UIDefinition.java --- a/modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/UIDefinition.java Fri Sep 09 12:39:08 2016 +0000 +++ b/modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/UIDefinition.java Fri Sep 09 15:18:08 2016 +0200 @@ -213,43 +213,8 @@ } else if (!defaultS.startsWith("@SQL=")) { columnValue = getDefaultValue(rq.getVariablesSecureApp(), colName, defaultS, windowId); } else { - ArrayList<String> params = new ArrayList<String>(); - String sql = parseSQL(defaultS, params); - int indP = 1; - PreparedStatement ps = null; - try { - ps = OBDal.getInstance().getConnection(false).prepareStatement(sql); - for (String parameter : params) { - String value = ""; - if (parameter.substring(0, 1).equals("#")) { - value = Utility.getContext(new DalConnectionProvider(false), RequestContext.get() - .getVariablesSecureApp(), parameter, field.getTab().getWindow().getId()); - } else { - String fieldId = "inp" + Sqlc.TransformaNombreColumna(parameter); - if (RequestContext.get().getParameterMap().containsKey(fieldId)) { - value = RequestContext.get().getRequestParameter(fieldId); - } - if (value == null || value.equals("")) { - value = Utility.getContext(new DalConnectionProvider(false), RequestContext.get() - .getVariablesSecureApp(), parameter, field.getTab().getWindow().getId()); - } - } - ps.setObject(indP++, value); - } - ResultSet rs = ps.executeQuery(); - if (rs.next()) { - columnValue = getValueFromSQLDefault(rs); - } - } catch (Exception e) { - log.error("Error computing default value for field " + field.getName() + " of tab " - + field.getTab().getName(), e); - } finally { - try { - ps.close(); - } catch (SQLException e) { - // won't happen - } - } + columnValue = getDefaultValueFromSQLExpression(rq.getVariablesSecureApp(), field, + defaultS); } } } @@ -289,6 +254,61 @@ } /** + * Returns the value for a default value expression based on a SQL expression. This kind of + * expressions that start with '@SQL='. + * + * @param vars + * Handler for the session info. + * @param field + * Field whose column has the default value. + * @param defaultValueExpression + * String with the default value expression. + * @return String with the calculated default value. + */ + public String getDefaultValueFromSQLExpression(VariablesSecureApp vars, Field field, + String defaultValueExpression) { + ArrayList<String> params = new ArrayList<String>(); + String sql = parseSQL(defaultValueExpression, params); + int indP = 1; + PreparedStatement ps = null; + String columnValue = null; + try { + ps = OBDal.getInstance().getConnection(false).prepareStatement(sql); + for (String parameter : params) { + String value = ""; + if (parameter.substring(0, 1).equals("#")) { + value = Utility.getContext(new DalConnectionProvider(false), RequestContext.get() + .getVariablesSecureApp(), parameter, field.getTab().getWindow().getId()); + } else { + String fieldId = "inp" + Sqlc.TransformaNombreColumna(parameter); + if (RequestContext.get().getParameterMap().containsKey(fieldId)) { + value = RequestContext.get().getRequestParameter(fieldId); + } + if (value == null || value.equals("")) { + value = Utility.getContext(new DalConnectionProvider(false), RequestContext.get() + .getVariablesSecureApp(), parameter, field.getTab().getWindow().getId()); + } + } + ps.setObject(indP++, value); + } + ResultSet rs = ps.executeQuery(); + if (rs.next()) { + columnValue = getValueFromSQLDefault(rs); + } + } catch (Exception e) { + log.error("Error computing default value for field " + field.getName() + " of tab " + + field.getTab().getName(), e); + } finally { + try { + ps.close(); + } catch (SQLException e) { + // won't happen + } + } + return columnValue; + } + + /** * It returns the same as getFieldProperties except in the case of combo UIDefinitions. In combo * UI definitions, a call to the super will be done, but the combo computation itself will not be * done (so only the default value, or the current request value, will be considered). ------------------------------------------------------------------------------ _______________________________________________ Openbravo-commits mailing list Openbravo-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openbravo-commits