details: /erp/devel/pi/rev/242a9b7ced2e
changeset: 11456:242a9b7ced2e
user: Thirumalai Kandasami <thirumalai <at> qualian.in>
date: Mon Apr 04 14:10:22 2011 +0530
summary: Fixed issue 16602:Module "In development" default value to Yes
details: /erp/devel/pi/rev/2c1f16a95cb3
changeset: 11457:2c1f16a95cb3
user: Thirumalai Kandasami <thirumalai <at> qualian.in>
date: Mon Apr 04 16:13:21 2011 +0530
summary: Related to issue 16602:Backout changeset 11144
details: /erp/devel/pi/rev/58528b0fe598
changeset: 11458:58528b0fe598
user: Thirumalai Kandasami <thirumalai <at> qualian.in>
date: Mon Apr 04 16:19:30 2011 +0530
summary: Fixed issue 16602:Module "In development" default value to Yes
details: /erp/devel/pi/rev/9eac616b891b
changeset: 11459:9eac616b891b
user: Asier Lostalé <asier.lostale <at> openbravo.com>
date: Mon Apr 04 14:29:14 2011 +0200
summary: Merged Thirumalai Kandasami contribution
diffstat:
modules/org.openbravo.client.application/src/org/openbravo/client/application/templates/layout.js.ftl
| 2 +-
modules/org.openbravo.client.application/src/org/openbravo/client/application/templates/ob-view-grid.js.ftl
| 3 +
modules/org.openbravo.client.application/src/org/openbravo/client/application/window/OBViewGridComponent.java
| 6 +
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-action-button.js
| 6 +-
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-classic-popup.js
| 5 +-
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-formitem-widgets.js
| 2 +-
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-help-about-widget.js
| 2 +-
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-standard-view.js
| 2 +-
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-statusbar.js
| 7 +
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-toolbar.js
| 6 +-
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-utilities.js
| 16 ++
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-view-form.js
| 15 +-
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-view-grid.js
| 8 +-
modules/org.openbravo.client.myob/src/org/openbravo/client/myob/MyOpenbravoActionHandler.java
| 16 +-
modules/org.openbravo.client.myob/src/org/openbravo/client/myob/MyOpenbravoComponent.java
| 16 +-
modules/org.openbravo.client.myob/web/org.openbravo.client.myob/js/ob-myopenbravo.js
| 7 +-
referencedata/standard/Initial_Setup.xml
| 76 +++++++++-
src-db/database/model/functions/C_ORDER_POST1.xml
| 7 +-
src-db/database/sourcedata/AD_AUXILIARINPUT.xml
| 4 +-
src-db/database/sourcedata/AD_COLUMN.xml
| 2 +-
src-db/database/sourcedata/AD_TEXTINTERFACES.xml
| 2 +-
src-db/database/sourcedata/OBUISEL_SELECTOR.xml
| 3 +-
src/org/openbravo/erpCommon/ad_forms/DocLineAmortization_data.xsql
| 2 +-
src/org/openbravo/erpReports/C_OrderJR.jrxml
| 33 +--
src/org/openbravo/erpReports/C_OrderLinesJR.jrxml
| 10 +-
25 files changed, 186 insertions(+), 72 deletions(-)
diffs (truncated from 697 to 300 lines):
diff -r dc283db4f5f6 -r 9eac616b891b
modules/org.openbravo.client.application/src/org/openbravo/client/application/templates/layout.js.ftl
---
a/modules/org.openbravo.client.application/src/org/openbravo/client/application/templates/layout.js.ftl
Mon Apr 04 09:39:57 2011 +0200
+++
b/modules/org.openbravo.client.application/src/org/openbravo/client/application/templates/layout.js.ftl
Mon Apr 04 14:29:14 2011 +0200
@@ -36,7 +36,7 @@
// needed for backward compatibility... to open the registration form
function openRegistration() {
- OB.Utilities.openProcessPopup(OB.Application.contextUrl +
'/ad_forms/Registration.html', true);
+ OB.Utilities.openProcessPopup(OB.Application.contextUrl +
'ad_forms/Registration.html', true);
}
isc.Canvas.addClassProperties({neverUsePNGWorkaround:true});
diff -r dc283db4f5f6 -r 9eac616b891b
modules/org.openbravo.client.application/src/org/openbravo/client/application/templates/ob-view-grid.js.ftl
---
a/modules/org.openbravo.client.application/src/org/openbravo/client/application/templates/ob-view-grid.js.ftl
Mon Apr 04 09:39:57 2011 +0200
+++
b/modules/org.openbravo.client.application/src/org/openbravo/client/application/templates/ob-view-grid.js.ftl
Mon Apr 04 14:29:14 2011 +0200
@@ -38,6 +38,9 @@
form.onFieldChanged(form, item, value);
}
</#if>
+ <#if field.firstFocusedField>
+ , firstFocusedField: true
+ </#if>
<#if field.showIf != "">
, showIf: function(item, value, form, currentValues) {
currentValues = currentValues || form.view.getCurrentValues();
diff -r dc283db4f5f6 -r 9eac616b891b
modules/org.openbravo.client.application/src/org/openbravo/client/application/window/OBViewGridComponent.java
---
a/modules/org.openbravo.client.application/src/org/openbravo/client/application/window/OBViewGridComponent.java
Mon Apr 04 09:39:57 2011 +0200
+++
b/modules/org.openbravo.client.application/src/org/openbravo/client/application/window/OBViewGridComponent.java
Mon Apr 04 14:29:14 2011 +0200
@@ -275,6 +275,12 @@
private String showIf;
private boolean redrawOnChange;
+ public boolean isFirstFocusedField() {
+ Boolean focused = field.isFirstFocusedField();
+ Boolean displayed = field.isDisplayed();
+ return focused != null && focused && displayed != null && displayed;
+ }
+
public String getColumnName() {
return property.getColumnName();
}
diff -r dc283db4f5f6 -r 9eac616b891b
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-action-button.js
---
a/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-action-button.js
Mon Apr 04 09:39:57 2011 +0200
+++
b/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-action-button.js
Mon Apr 04 14:29:14 2011 +0200
@@ -64,7 +64,7 @@
if (this.modal){
allProperties.Command = this.command;
callbackFunction = function(){
- OB.Layout.ClassicOBCompatibility.Popup.open('process', 900, 600,
OB.Application.contextUrl + me.obManualURL, '', null, false, false, true,
allProperties);
+ OB.Layout.ClassicOBCompatibility.Popup.open('process', 900, 600,
OB.Utilities.applicationUrl(me.obManualURL), '', null, false, false, true,
allProperties);
};
} else {
var popupParams = {
@@ -98,7 +98,9 @@
OB.ActionButton.executingProcess = null;
if (newWindow) {
- var contextURL = location.href.substr(0,
location.href.indexOf(OB.Application.contextUrl) +
OB.Application.contextUrl.length);
+ var contextURL = location.protocol + '//' +
+ location.host +
+ location.pathname.substr(0,
location.pathname.indexOf(OB.Application.contextUrl) +
OB.Application.contextUrl.length);
if (newWindow.indexOf(contextURL) !== -1){
newWindow = newWindow.substr(contextURL.length);
diff -r dc283db4f5f6 -r 9eac616b891b
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-classic-popup.js
---
a/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-classic-popup.js
Mon Apr 04 09:39:57 2011 +0200
+++
b/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-classic-popup.js
Mon Apr 04 14:29:14 2011 +0200
@@ -42,8 +42,7 @@
urlCharacter = '&';
}
if(this.obManualURL !== '') {
- contentsURL = OB.Application.contextUrl + this.obManualURL + '?Command='
+ this.command;
-// contentsURL = this.appURL + urlCharacter + 'url=' + this.obManualURL +
'&noprefs=true&Command=' + this.command + '&hideMenu=true';
+ contentsURL = OB.Utilities.applicationUrl(this.obManualURL) +
'?Command=' + this.command;
} else {
contentsURL = this.appURL + urlCharacter + 'Command=' + this.command +
'&noprefs=true&tabId=' + this.tabId + '&hideMenu=true';
}
@@ -59,7 +58,7 @@
isc.defineClass('OBClassicPopupModal', isc.Class).addProperties({
showsItself: true,
show: function() {
- OB.Layout.ClassicOBCompatibility.Popup.open(this.id, 625, 450,
OB.Application.contextUrl + this.obManualURL+'?Command='+this.command, '',
null, false, false, true);
+ OB.Layout.ClassicOBCompatibility.Popup.open(this.id, 625, 450,
OB.Utilities.applicationUrl(this.obManualURL) + '?Command='+this.command, '',
null, false, false, true);
}
});
diff -r dc283db4f5f6 -r 9eac616b891b
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-formitem-widgets.js
---
a/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-formitem-widgets.js
Mon Apr 04 09:39:57 2011 +0200
+++
b/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-formitem-widgets.js
Mon Apr 04 14:29:14 2011 +0200
@@ -246,7 +246,7 @@
complementsNS4 = 'alwaysRaised=1, dependent=1, directories=0, hotkeys=0,
menubar=0, ';
}
var complements = complementsNS4 + 'height=' + height + ', width=' + width
+ ', left=' + left + ', top=' + top + ', screenX=' + left + ', screenY=' + top
+ ', location=0, resizable=1, scrollbars=1, status=0, toolbar=0, titlebar=0,
modal=\'yes\'';
- isc.OBSearchItem.openedWindow = window.open(OB.Application.contextUrl +
url + ((auxField === '') ? '' : '?' + auxField), 'SELECTOR', complements);
+ isc.OBSearchItem.openedWindow =
window.open(OB.Utilities.applicationUrl(url) + ((auxField === '') ? '' : '?' +
auxField), 'SELECTOR', complements);
if (isc.OBSearchItem.openedWindow) {
isc.OBSearchItem.openedWindow.focus();
this.setUnloadEventHandling();
diff -r dc283db4f5f6 -r 9eac616b891b
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-help-about-widget.js
---
a/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-help-about-widget.js
Mon Apr 04 09:39:57 2011 +0200
+++
b/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-help-about-widget.js
Mon Apr 04 14:29:14 2011 +0200
@@ -53,7 +53,7 @@
handleClick: function(){
isc.OBQuickRun.hide();
- OB.Layout.ClassicOBCompatibility.Popup.open('About', 620, 500,
OB.Application.contextUrl + '/ad_forms/about.html', '', window);
+ OB.Layout.ClassicOBCompatibility.Popup.open('About', 620, 500,
OB.Application.contextUrl + 'ad_forms/about.html', '', window);
}
};
diff -r dc283db4f5f6 -r 9eac616b891b
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-standard-view.js
---
a/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-standard-view.js
Mon Apr 04 09:39:57 2011 +0200
+++
b/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-standard-view.js
Mon Apr 04 14:29:14 2011 +0200
@@ -842,7 +842,7 @@
this.messageBar.hide();
if (!this.isShowingForm) {
- this.viewForm.showFormOnFICReturn = true;
+ this.switchFormGridVisibility();
}
if (!record) { // new case
diff -r dc283db4f5f6 -r 9eac616b891b
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-statusbar.js
---
a/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-statusbar.js
Mon Apr 04 09:39:57 2011 +0200
+++
b/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-statusbar.js
Mon Apr 04 14:29:14 2011 +0200
@@ -51,6 +51,13 @@
if (this.buttonType === 'close' && !this.view.viewForm.hasChanged &&
this.view.viewForm.isNew) {
this.view.standardWindow.setDirtyEditForm(null);
}
+
+ // or when maximizing/minimizing
+ if (this.buttonType === 'maximize' || this.buttonType === 'restore') {
+ this.doAction();
+ return;
+ }
+
var actionObject = {
target : this,
method : this.doAction,
diff -r dc283db4f5f6 -r 9eac616b891b
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-toolbar.js
---
a/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-toolbar.js
Mon Apr 04 09:39:57 2011 +0200
+++
b/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-toolbar.js
Mon Apr 04 14:29:14 2011 +0200
@@ -1139,7 +1139,7 @@
popupParams += '&inphiddenvalue=' + selectedIds;
view.setContextInfo(sessionProperties, function(){
- OB.Layout.ClassicOBCompatibility.Popup.open('print', 0, 0,
OB.Application.contextUrl + '/businessUtility/PrinterReports.html?' +
popupParams, '', window, false, false, true);
+ OB.Layout.ClassicOBCompatibility.Popup.open('print', 0, 0,
OB.Application.contextUrl + 'businessUtility/PrinterReports.html?' +
popupParams, '', window, false, false, true);
});
};
@@ -1164,7 +1164,7 @@
popupParams += '&inpRecordId=' + view.viewGrid.getSelectedRecord().id;
}
- OB.Layout.ClassicOBCompatibility.Popup.open('audit', 900, 600,
OB.Application.contextUrl + '/businessUtility/AuditTrail.html?' + popupParams,
'', window, false, false, true);
+ OB.Layout.ClassicOBCompatibility.Popup.open('audit', 900, 600,
OB.Application.contextUrl + 'businessUtility/AuditTrail.html?' + popupParams,
'', window, false, false, true);
};
OB.ToolbarUtils.showTree = function(view){
@@ -1174,7 +1174,7 @@
popupParams += '&Command=DEFAULT';
popupParams += '&inpTabId=' + tabId;
popupParams += '&hideMenu=true&noprefs=true';
- OB.Layout.ClassicOBCompatibility.Popup.open('tree', 750, 625,
OB.Application.contextUrl + '/security/Menu.html?' + popupParams, '', window,
false, false, true);
+ OB.Layout.ClassicOBCompatibility.Popup.open('tree', 750, 625,
OB.Application.contextUrl + 'security/Menu.html?' + popupParams, '', window,
false, false, true);
}
var tabId = view.tabId;
diff -r dc283db4f5f6 -r 9eac616b891b
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-utilities.js
---
a/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-utilities.js
Mon Apr 04 09:39:57 2011 +0200
+++
b/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-utilities.js
Mon Apr 04 14:29:14 2011 +0200
@@ -773,3 +773,19 @@
}
return
(/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i).test(url);
};
+
+// ** {{{ applicationUrl(path) }}} **
+//
+// Get the full URL to the supplied path under the application context
+//
+// Parameters:
+// * {{{path}}} path portion of URL
+//
+OB.Utilities.applicationUrl = function(path) {
+ var appUrl = OB.Application.contextUrl + path;
+ if(appUrl.indexOf('//') === 0 ) {
+ // Double slash at start of relative URL only keeps scheme, not server
+ appUrl = appUrl.substring(1);
+ }
+ return appUrl;
+};
\ No newline at end of file
diff -r dc283db4f5f6 -r 9eac616b891b
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-view-form.js
---
a/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-view-form.js
Mon Apr 04 09:39:57 2011 +0200
+++
b/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-view-form.js
Mon Apr 04 14:29:14 2011 +0200
@@ -428,14 +428,7 @@
// TODO: an error occured, handles this much better...
if (!data || !data.columnValues) {
this.setDisabled(false);
- // still open the form, as the user can then correct errors
- if (this.showFormOnFICReturn) {
- if (!this.isVisible()) {
- this.view.switchFormGridVisibility();
- }
- this.validate();
- delete this.showFormOnFICReturn;
- }
+ this.validate();
return;
}
@@ -524,12 +517,6 @@
}
this.markForRedraw();
- if (this.showFormOnFICReturn) {
- if (!this.isVisible()) {
- this.view.switchFormGridVisibility();
- }
- delete this.showFormOnFICReturn;
- }
this.view.toolBar.updateButtonState(true);
diff -r dc283db4f5f6 -r 9eac616b891b
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-view-grid.js
---
a/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-view-grid.js
Mon Apr 04 09:39:57 2011 +0200
+++
b/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-view-grid.js
Mon Apr 04 14:29:14 2011 +0200
@@ -113,9 +113,11 @@
emptyMessage: OB.I18N.getLabel('OBUISC_ListGrid.loadingDataMessage'),
discardEditsSaveButtonTitle: OB.I18N.getLabel('UINAVBA_Save'),
-
- quickDrawAheadRatio: 6.0,
- drawAheadRatio: 4.0,
+
+ // commented out because of: https://issues.openbravo.com/view.php?id=16515
+ // default is much smaller which give smoother scrolling
+ //quickDrawAheadRatio: 4.0,
+ //drawAheadRatio: 6.0,
// note: don't set drawAllMaxCells too high as it results in extra reads
// of data, Smartclient will try to read until drawAllMaxCells has been
// reached
diff -r dc283db4f5f6 -r 9eac616b891b
modules/org.openbravo.client.myob/src/org/openbravo/client/myob/MyOpenbravoActionHandler.java
---
a/modules/org.openbravo.client.myob/src/org/openbravo/client/myob/MyOpenbravoActionHandler.java
Mon Apr 04 09:39:57 2011 +0200
+++
b/modules/org.openbravo.client.myob/src/org/openbravo/client/myob/MyOpenbravoActionHandler.java
Mon Apr 04 14:29:14 2011 +0200
@@ -101,14 +101,22 @@
} else if (strEventType.equals(RELOAD_WIDGETS)) {
// Add available classes
- addAvailableWidgetClasses(o);
+ String roleId = null;
+ if (isAdminMode && availableAtLevel.equals("ROLE")) {
+ roleId = availableAtLevelValue[0];
+ }
+ addAvailableWidgetClasses(o, roleId);
// Add widget instances
widgets = new JSONArray();
reloadWidgets(isAdminMode, message, widgets, availableAtLevel,
availableAtLevelValue);
o.put("widgets", widgets);
} else if (strEventType.equals(GET_AVAILABLE_WIDGET_CLASSES)) {
- addAvailableWidgetClasses(o);
+ String roleId = null;
+ if (isAdminMode && availableAtLevel.equals("ROLE")) {
+ roleId = availableAtLevelValue[0];
+ }
+ addAvailableWidgetClasses(o, roleId);
} else if (strEventType.equals(GET_COMMUNITY_BRANDING_URL)) {
o.put("url", Utility.getCommunityBrandingUrl("MyOB"));
} else {
@@ -170,10 +178,10 @@
}
- private void addAvailableWidgetClasses(JSONObject o) {
+ private void addAvailableWidgetClasses(JSONObject o, String roleId) {
MyOpenbravoComponent component =
weldUtils.getInstance(MyOpenbravoComponent.class);
try {
- List<String> availableClasses = component.getAvailableWidgetClasses();
+ List<String> availableClasses =
component.getAvailableWidgetClasses(roleId);
o.put("availableWidgetClasses", availableClasses);
} catch (Exception e) {
log.error("Error retreiving widget classes", e);
diff -r dc283db4f5f6 -r 9eac616b891b
modules/org.openbravo.client.myob/src/org/openbravo/client/myob/MyOpenbravoComponent.java
---
a/modules/org.openbravo.client.myob/src/org/openbravo/client/myob/MyOpenbravoComponent.java
Mon Apr 04 09:39:57 2011 +0200
+++
b/modules/org.openbravo.client.myob/src/org/openbravo/client/myob/MyOpenbravoComponent.java
Mon Apr 04 14:29:14 2011 +0200
@@ -30,6 +30,7 @@
import javax.inject.Inject;
+import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;
@@ -85,6 +86,10 @@
}
public List<String> getAvailableWidgetClasses() throws Exception {
+ return getAvailableWidgetClasses(null);
------------------------------------------------------------------------------
Create and publish websites with WebMatrix
Use the most popular FREE web apps or write code yourself;
WebMatrix provides all the features you need to develop and
publish your website. http://p.sf.net/sfu/ms-webmatrix-sf
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits