details:   /erp/devel/pi/rev/14a07ffec279
changeset: 9236:14a07ffec279
user:      Antonio Moreno <antonio.moreno <at> openbravo.com>
date:      Mon Dec 20 12:32:21 2010 +0100
summary:   Fixed issue related to dependency computation.

details:   /erp/devel/pi/rev/f07e878cd429
changeset: 9237:f07e878cd429
user:      Antonio Moreno <antonio.moreno <at> openbravo.com>
date:      Mon Dec 20 13:13:26 2010 +0100
summary:   Moved auxiliary input computation to an earlier position so that 
combo computation works correctly. Moved the setting of the values of the 
columns in the request to an ealier position so that the auxiliary input 
computation keeps working correctly.

diffstat:

 
modules/org.openbravo.client.application/src/org/openbravo/client/application/window/FormInitializationComponent.java
 |  108 ++++++---
 1 files changed, 67 insertions(+), 41 deletions(-)

diffs (194 lines):

diff -r c427d88ec525 -r f07e878cd429 
modules/org.openbravo.client.application/src/org/openbravo/client/application/window/FormInitializationComponent.java
--- 
a/modules/org.openbravo.client.application/src/org/openbravo/client/application/window/FormInitializationComponent.java
     Mon Dec 20 13:10:26 2010 +0100
+++ 
b/modules/org.openbravo.client.application/src/org/openbravo/client/application/window/FormInitializationComponent.java
     Mon Dec 20 13:13:26 2010 +0100
@@ -91,7 +91,6 @@
   // @Override
   protected JSONObject execute(Map<String, Object> parameters, String content) 
{
     OBContext.setAdminMode(true);
-
     long iniTime = System.currentTimeMillis();
     try {
       // OBCriteria<Tab> tabs = OBDal.getInstance().createCriteria(Tab.class);
@@ -119,6 +118,7 @@
       String rowId = (String) parameters.get("ROW_ID");
       String changedColumn = (String) parameters.get("CHANGED_COLUMN");
       Tab tab = OBDal.getInstance().get(Tab.class, tabId);
+      List<Field> fields = tab.getADFieldList();
       BaseOBObject row = OBDal.getInstance().get(tab.getTable().getName(), 
rowId);
       Tab parentTab = null;
       BaseOBObject parentRecord = null;
@@ -138,12 +138,17 @@
       if (parentTab != null && parentRecord != null) {
         setSessionValues(parentRecord, parentTab);
       }
+      if (mode.equals("EDIT")) {
+        // We also need to set the current record values in the request
+        for (Field field : fields) {
+          setValueOfColumnInRequest(row, field.getColumn().getDBColumnName());
+        }
+      }
       HashMap<String, JSONObject> columnValues = new HashMap<String, 
JSONObject>();
       HashMap<String, Field> columnsOfFields = new HashMap<String, Field>();
       ArrayList<String> allColumns = new ArrayList<String>();
       ArrayList<String> calloutsToCall = new ArrayList<String>();
       ArrayList<String> lastfieldChanged = new ArrayList<String>();
-      List<Field> fields = tab.getADFieldList();
 
       for (Field field : fields) {
         columnsOfFields.put(field.getColumn().getDBColumnName(), field);
@@ -153,6 +158,30 @@
       HashMap<String, List<String>> columnsInValidation = new HashMap<String, 
List<String>>();
       computeListOfColumnsSortedByValidationDependencies(tab, allColumns, 
columnsInValidation);
 
+      // Computation of the Auxiliary Input values
+      OBCriteria<AuxiliaryInput> auxInC = 
OBDal.getInstance().createCriteria(AuxiliaryInput.class);
+      auxInC.add(Expression.eq(AuxiliaryInput.PROPERTY_TAB, tab));
+      List<AuxiliaryInput> auxInputs = auxInC.list();
+      for (AuxiliaryInput auxIn : auxInputs) {
+        Object value = computeAuxiliaryInput(auxIn, tab.getWindow().getId());
+        System.out.println("Final Value " + auxIn.getName() + ": " + value);
+        JSONObject jsonObj = new JSONObject();
+        try {
+          jsonObj.put("value", value);
+        } catch (JSONException e) {
+          log.error("Error while computing auxiliary input " + 
auxIn.getName(), e);
+        }
+        columnValues.put("inp" + 
Sqlc.TransformaNombreColumna(auxIn.getName()), jsonObj);
+        RequestContext.get().setRequestParameter(
+            "inp" + Sqlc.TransformaNombreColumna(auxIn.getName()),
+            value == null ? null : value.toString());
+        // Now we insert session values for auxiliary inputs
+        if (mode.equals("NEW") || mode.equals("EDIT") || 
mode.equals("SETSESSION")) {
+          setSessionValue(tab.getWindow().getId() + "|" + auxIn.getName(), 
columnValues.get("inp"
+              + Sqlc.TransformaNombreColumna(auxIn.getName())));
+        }
+      }
+
       // Column values are set in the RequestContext
       for (String col : allColumns) {
         Field field = columnsOfFields.get(col);
@@ -165,7 +194,6 @@
             // used)
             value = uiDef.getFieldProperties(field, false);
           } else if (mode.equals("EDIT")) {
-            setValueOfColumnInRequest(row, 
field.getColumn().getDBColumnName());
             value = uiDef.getFieldProperties(field, true);
           } else if (mode.equals("CHANGE") || (mode.equals("SETSESSION"))) {
             // On CHANGE and SETSESSION mode, the values are read from the 
request
@@ -204,29 +232,6 @@
         }
       }
 
-      // Computation of the Auxiliary Input values
-      OBCriteria<AuxiliaryInput> auxInC = 
OBDal.getInstance().createCriteria(AuxiliaryInput.class);
-      auxInC.add(Expression.eq(AuxiliaryInput.PROPERTY_TAB, tab));
-      List<AuxiliaryInput> auxInputs = auxInC.list();
-      for (AuxiliaryInput auxIn : auxInputs) {
-        Object value = computeAuxiliaryInput(auxIn, tab.getWindow().getId());
-        System.out.println("Final Value " + auxIn.getName() + ": " + value);
-        JSONObject jsonObj = new JSONObject();
-        try {
-          jsonObj.put("value", value);
-        } catch (JSONException e) {
-          log.error("Error while computing auxiliary input " + 
auxIn.getName(), e);
-        }
-        columnValues.put("inp" + 
Sqlc.TransformaNombreColumna(auxIn.getName()), jsonObj);
-        RequestContext.get().setRequestParameter(
-            "inp" + Sqlc.TransformaNombreColumna(auxIn.getName()),
-            value == null ? null : value.toString());
-        // Now we insert session values for auxiliary inputs
-        if (mode.equals("NEW") || mode.equals("EDIT") || 
mode.equals("SETSESSION")) {
-          setSessionValue(tab.getWindow().getId() + "|" + auxIn.getName(), 
columnValues.get("inp"
-              + Sqlc.TransformaNombreColumna(auxIn.getName())));
-        }
-      }
       // System.out.println("Field values");
       // System.out.println("************");
       // for (Field field : fields) {
@@ -348,26 +353,51 @@
   }
 
   private void computeListOfColumnsSortedByValidationDependencies(Tab tab,
-      ArrayList<String> allColumns, HashMap<String, List<String>> 
columnsInValidation) {
+      ArrayList<String> sortedColumns, HashMap<String, List<String>> 
columnsInValidation) {
     List<Field> fields = tab.getADFieldList();
     ArrayList<String> columns = new ArrayList<String>();
     List<String> columnsWithValidation = new ArrayList<String>();
     HashMap<String, String> validations = new HashMap<String, String>();
     for (Field field : fields) {
       String columnName = field.getColumn().getDBColumnName();
-      columns.add(columnName);
+      columns.add(columnName.toUpperCase());
       if (field.getColumn().getValidation() != null) {
         columnsWithValidation.add(field.getColumn().getDBColumnName());
         validations.put(field.getColumn().getDBColumnName(), 
getValidation(field));
       }
     }
-
     for (String column : columnsWithValidation) {
-      columnsInValidation.put(column, parseValidation(column, 
validations.get(column),
-          columnsWithValidation));
+      columnsInValidation.put(column, parseValidation(column, 
validations.get(column), columns));
+      String cols = "";
+      for (String col : columnsInValidation.get(column)) {
+        cols += col + ",";
+      }
+      log.debug("Column: " + column);
+      log.debug("Validation: '" + validations.get(column) + "'");
+      log.debug("Columns in validation: '" + cols + "'");
     }
 
-    ArrayList<String> sortedColumns = new ArrayList<String>();
+    // Add client and org first to compute dependencies correctly
+    for (Field field : fields) {
+      String colName = field.getColumn().getDBColumnName();
+      if (colName.equalsIgnoreCase("Ad_Client_Id")) {
+        sortedColumns.add(colName);
+      }
+    }
+    for (Field field : fields) {
+      String colName = field.getColumn().getDBColumnName();
+      if (colName.equalsIgnoreCase("Ad_Org_Id")) {
+        sortedColumns.add(colName);
+      }
+    }
+    // we add the columns not included in the sortedColumns
+    // (the ones which don't have validations)
+    for (Field field : fields) {
+      String colName = field.getColumn().getDBColumnName();
+      if (field.getColumn().getValidation() == null && 
!sortedColumns.contains(colName)) {
+        sortedColumns.add(colName);
+      }
+    }
     String nonDepColumn = pickNonDependantColumn(sortedColumns, 
columnsWithValidation,
         columnsInValidation);
     while (nonDepColumn != null) {
@@ -386,15 +416,11 @@
       throw new OBException("Error. The columns " + cycleCols.substring(1)
           + " have validations which form a cycle.");
     }
-
-    // we add the columns not included in the sortedColumns
-    // (the ones which don't have validations)
-    for (Field field : fields) {
-      if (!sortedColumns.contains(field.getColumn().getDBColumnName())) {
-        allColumns.add(field.getColumn().getDBColumnName());
-      }
+    String finalCols = "";
+    for (String col : sortedColumns) {
+      finalCols += col + ",";
     }
-    allColumns.addAll(sortedColumns);
+    log.debug("Final order of column computation: " + finalCols);
   }
 
   private void setValueOfColumnInRequest(BaseOBObject obj, String columnName) {
@@ -716,7 +742,7 @@
           String strAux = token.substring(0, i);
           token = token.substring(i + 1);
           if (!columns.contains(strAux)) {
-            if (!strAux.equals(column) && possibleColumns.contains(strAux)) {
+            if (!strAux.equalsIgnoreCase(column) && 
possibleColumns.contains(strAux.toUpperCase())) {
               columns.add(strAux);
             }
           }

------------------------------------------------------------------------------
Lotusphere 2011
Register now for Lotusphere 2011 and learn how
to connect the dots, take your collaborative environment
to the next level, and enter the era of Social Business.
http://p.sf.net/sfu/lotusphere-d2d
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to