details: /erp/devel/pi/rev/a927f57fdb41
changeset: 10365:a927f57fdb41
user: Antonio Moreno <antonio.moreno <at> openbravo.com>
date: Thu Feb 03 18:24:27 2011 +0100
summary: Several big changes related to callout execution:
Do not add first element when on a combo reload, except when the comboreload
was triggered by the UI to reload the state of the tab
When computing validation ordering, take correctly into account whereclauses of
table references
Execute a second call to column value computation to emulate a comboreload when
callouts change a dynamic column
diffstat:
modules/org.openbravo.client.application/src/org/openbravo/client/application/window/FormInitializationComponent.java
| 49 +++++++--
modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/UIDefinition.java
| 7 +-
2 files changed, 40 insertions(+), 16 deletions(-)
diffs (168 lines):
diff -r fabb1da12fc0 -r a927f57fdb41
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
Thu Feb 03 18:23:55 2011 +0100
+++
b/modules/org.openbravo.client.application/src/org/openbravo/client/application/window/FormInitializationComponent.java
Thu Feb 03 18:24:27 2011 +0100
@@ -158,8 +158,14 @@
changedColumn, jsContent, changeEventCols, calloutsToCall,
lastfieldChanged);
// Execution of callouts
- executeCallouts(mode, tab, columnValues, changedColumn, calloutsToCall,
lastfieldChanged,
- calloutMessages);
+ boolean comboReloadNeeded = executeCallouts(mode, tab, columnValues,
changedColumn,
+ calloutsToCall, lastfieldChanged, calloutMessages, changeEventCols);
+
+ if (comboReloadNeeded) {
+ RequestContext.get().setRequestParameter("donotaddcurrentelement",
"true");
+ computeColumnValues("CHANGE", tab, allColumns, columnValues,
parentRecord, parentId, null,
+ jsContent, changeEventCols, calloutsToCall, lastfieldChanged);
+ }
// Construction of the final JSONObject
JSONObject finalObject = buildJSONObject(mode, tab, columnValues, row,
changeEventCols,
@@ -279,6 +285,9 @@
String changedColumn, JSONObject jsContent, List<String> changeEventCols,
List<String> calloutsToCall, List<String> lastfieldChanged) {
boolean forceComboReload = (mode.equals("CHANGE") && changedColumn ==
null);
+ if (mode.equals("CHANGE") && changedColumn != null) {
+ RequestContext.get().setRequestParameter("donotaddcurrentelement",
"true");
+ }
HashMap<String, Field> columnsOfFields = new HashMap<String, Field>();
for (Field field : tab.getADFieldList()) {
columnsOfFields.put(field.getColumn().getDBColumnName(), field);
@@ -347,7 +356,8 @@
// We need to fire callouts if the field is a combo
// (due to how ComboReloads worked, callouts were always called)
if (mode.equals("NEW")
- && (uiDef instanceof EnumUIDefinition || uiDef instanceof
FKComboUIDefinition)) {
+ && (uiDef instanceof EnumUIDefinition || uiDef instanceof
FKComboUIDefinition)
+ && field.getColumn().isValidateOnNew()) {
if (field.getColumn().getCallout() != null) {
addCalloutToList(field.getColumn(), calloutsToCall,
lastfieldChanged);
}
@@ -489,9 +499,10 @@
for (Field field : fields) {
String columnName = field.getColumn().getDBColumnName();
columns.add(columnName.toUpperCase());
- if (field.getColumn().getValidation() != null) {
+ String validation = getValidation(field);
+ if (!validation.equals("")) {
columnsWithValidation.add(field.getColumn().getDBColumnName());
- validations.put(field.getColumn().getDBColumnName(),
getValidation(field));
+ validations.put(field.getColumn().getDBColumnName(), validation);
}
}
for (String column : columnsWithValidation) {
@@ -522,7 +533,8 @@
// (the ones which don't have validations)
for (Field field : fields) {
String colName = field.getColumn().getDBColumnName();
- if (field.getColumn().getValidation() == null &&
!sortedColumns.contains(colName)) {
+ if (!columnsWithValidation.contains(field.getColumn().getDBColumnName())
+ && !sortedColumns.contains(colName)) {
sortedColumns.add(colName);
}
}
@@ -649,9 +661,9 @@
return inpFields;
}
- private void executeCallouts(String mode, Tab tab, Map<String, JSONObject>
columnValues,
+ private boolean executeCallouts(String mode, Tab tab, Map<String,
JSONObject> columnValues,
String changedColumn, List<String> calloutsToCall, List<String>
lastfieldChanged,
- List<String> messages) {
+ List<String> messages, List<String> dynamicCols) {
// In CHANGE mode, we will add the initial callout call for the changed
column, if there is
// one
@@ -669,15 +681,17 @@
}
ArrayList<String> calledCallouts = new ArrayList<String>();
- runCallouts(columnValues, tab, calledCallouts, calloutsToCall,
lastfieldChanged, messages);
+ return runCallouts(columnValues, tab, calledCallouts, calloutsToCall,
lastfieldChanged,
+ messages, dynamicCols);
}
- private void runCallouts(Map<String, JSONObject> columnValues, Tab tab,
+ private boolean runCallouts(Map<String, JSONObject> columnValues, Tab tab,
List<String> calledCallouts, List<String> calloutsToCall, List<String>
lastfieldChangedList,
- List<String> messages) {
+ List<String> messages, List<String> dynamicCols) {
List<Field> fields = tab.getADFieldList();
HashMap<String, Field> inpFields = buildInpField(fields);
+ boolean comboReloadNeeded = false;
while (!calloutsToCall.isEmpty() && calledCallouts.size() <
MAX_CALLOUT_CALLS) {
String calloutClassName = calloutsToCall.get(0);
@@ -761,6 +775,9 @@
|| (oldValue != null && newValue != null &&
!oldValue
.equals(newValue))) {
columnValues.put(colId, jsonobject);
+ if (dynamicCols.contains(colId)) {
+ comboReloadNeeded = true;
+ }
changed = true;
} else {
log
@@ -797,7 +814,9 @@
columnValues.put("inp"
+
Sqlc.TransformaNombreColumna(col.getDBColumnName()), jsonobj);
changed = true;
-
+ if (dynamicCols.contains(colId)) {
+ comboReloadNeeded = true;
+ }
rq.setRequestParameter(colId,
jsonobj.getString("classicValue"));
}
} else {
@@ -824,6 +843,7 @@
if (calledCallouts.size() == MAX_CALLOUT_CALLS) {
log.warn("Warning: maximum number of callout calls reached");
}
+ return comboReloadNeeded;
}
@@ -898,7 +918,10 @@
private String getValidation(Field field) {
Column c = field.getColumn();
- String val = c.getValidation().getValidationCode();
+ String val = "";
+ if (c.getValidation() != null && c.getValidation().getValidationCode() !=
null) {
+ val += c.getValidation().getValidationCode();
+ }
if (c.getReference().getId().equals("18")) {
if (c.getReferenceSearchKey() != null) {
for (ReferencedTable t :
c.getReferenceSearchKey().getADReferencedTableList()) {
diff -r fabb1da12fc0 -r a927f57fdb41
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
Thu Feb 03 18:23:55 2011 +0100
+++
b/modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/UIDefinition.java
Thu Feb 03 18:24:27 2011 +0100
@@ -326,7 +326,8 @@
try {
RequestContext rq = RequestContext.get();
VariablesSecureApp vars = rq.getVariablesSecureApp();
-
+ boolean comboreload = rq.getRequestParameter("donotaddcurrentelement")
!= null
+ && rq.getRequestParameter("donotaddcurrentelement").equals("true");
String ref = field.getColumn().getReference().getId();
String objectReference = "";
if (field.getColumn().getReferenceSearchKey() != null) {
@@ -356,7 +357,7 @@
clientList, 0);
FieldProvider tabData = generateTabData(field.getTab().getADFieldList(),
field, columnValue);
comboTableData.fillParameters(tabData,
field.getTab().getWindow().getId(), columnValue);
- FieldProvider[] fps = comboTableData.select(getValueFromSession);
+ FieldProvider[] fps = comboTableData.select(getValueFromSession &&
!comboreload);
ArrayList<FieldProvider> values = new ArrayList<FieldProvider>();
values.addAll(Arrays.asList(fps));
ArrayList<JSONObject> comboEntries = new ArrayList<JSONObject>();
@@ -376,7 +377,7 @@
comboEntries.add(entry);
}
JSONObject fieldProps = new JSONObject();
- if (getValueFromSession) {
+ if (getValueFromSession && !comboreload) {
fieldProps.put("value", columnValue);
fieldProps.put("classicValue", columnValue);
} else {
------------------------------------------------------------------------------
Special Offer-- Download ArcSight Logger for FREE (a $49 USD value)!
Finally, a world-class log management solution at an even better price-free!
Download using promo code Free_Logger_4_Dev2Dev. Offer expires
February 28th, so secure your free ArcSight Logger TODAY!
http://p.sf.net/sfu/arcsight-sfd2d
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits