Просмотр исходного кода

表单组件默认值等脚本,支持异步返回

huqi 5 лет назад
Родитель
Сommit
1d7eb8d49e

+ 66 - 27
o2web/source/o2_core/o2.js

@@ -216,11 +216,11 @@
             callback.apply(b, par);
         }else{
             if (type==="function" || type==="object"){
-                if (callback[key]){
-                    callback[key].apply(b, par);
+                var name = ("on-"+key).camelCase();
+                if (callback[name]){
+                    callback[name].apply(b, par);
                 }else{
-                    var name = ("on-"+key).camelCase();
-                    if (callback[name]) callback[name].apply(b, par);
+                    if (callback[key]) callback[key].apply(b, par);
                 }
             }
         }
@@ -1365,7 +1365,6 @@
         //var noCache = cache===false;
         var noCache = !cache;
 
-
         //if (Browser.name == "ie")
         if (_cacheUrls.length){
             for (var i=0; i<_cacheUrls.length; i++){
@@ -1377,7 +1376,7 @@
             }
         }
 
-        var useWebWorker = (window.layout && layout.config && config.useWebWorker);
+        var useWebWorker = (window.layout && layout.config && layout.config.useWebWorker);
         //var noCache = false;
         if (!loadAsync || !useWebWorker){
             var res = new Request.JSON({
@@ -1423,6 +1422,9 @@
             }
             //Content-Type	application/x-www-form-urlencoded; charset=utf-8
             res.send(data);
+            var oReturn = (callback.success && callback.success.addResolve) ? callback.success : callback;
+            oReturn.res = res;
+            return oReturn;
         }else{
             var workerMessage = {
                 method: method,
@@ -1449,8 +1451,13 @@
                 }else{
                     o2.runCallback(callback, "failure", [result.data]);
                 }
+                actionWorker.terminate();
             }
             actionWorker.postMessage(workerMessage);
+            var oReturn = (callback.success && callback.success.addResolve) ? callback.success : callback;
+            oReturn.actionWorker = actionWorker;
+            return oReturn;
+            //return callback;
         }
         //return res;
     };
@@ -1615,19 +1622,29 @@
     //         }
     //     }
     // });
-    Date.getFromServer = function(callback){
-            if (callback){
-                o2.Actions.get("x_program_center").echo(function(json){
-                    d = Date.parse(json.data.serverTime);
-                    o2.runCallback(callback, "success", [d]);
-                });
-            }else{
-                var d;
-                o2.Actions.get("x_program_center").echo(function(json){
-                    d = Date.parse(json.data.serverTime);
-                }, null, false);
-                return d;
-            }
+    Date.getFromServer = function(async){
+        var d;
+        var cb = function(json){
+            d = Date.parse(json.data.serverTime);
+            return d;
+        }.ag().catch(function(json){ return d; });
+
+        o2.Actions.get("x_program_center").echo(cb, null, !!async);
+
+        return (!!async) ? cd : d;
+
+            // if (callback){
+            //     o2.Actions.get("x_program_center").echo(function(json){
+            //         d = Date.parse(json.data.serverTime);
+            //         o2.runCallback(callback, "success", [d]);
+            //     });
+            // }else{
+            //     var d;
+            //     o2.Actions.get("x_program_center").echo(function(json){
+            //         d = Date.parse(json.data.serverTime);
+            //     }, null, false);
+            //     return d;
+            // }
     };
 
     Object.appendChain = function(oChain, oProto) {
@@ -1679,7 +1696,7 @@
                 if (_self.success.resolve) result = _self.success.resolve.apply(this, arguments);
                 if (_self.success.resolveList){
                     _self.success.resolveList.each(function(r){
-                        r(result, arguments);
+                        result = r(result, arguments) || result;
                     });
                 }
             }
@@ -1691,7 +1708,7 @@
                 if (_self.failure.reject) result = _self.failure.reject(arguments);
                 if (_self.failure.rejectList){
                     _self.failure.rejectList.each(function(r){
-                        r(result, arguments);
+                        result = r(result, arguments) || result;
                     });
                 }
             }
@@ -1699,25 +1716,43 @@
         setResolve: function(resolve){
             if (!this.success) this._createSuccess();
             this.success.resolve = resolve;
+            return this;
         },
         setReject: function(reject){
             if (!this.failure) this._createFailure();
-            this.reject = reject;
+            this.failure.reject = reject;
+            return this;
         },
         addResolve: function(resolve){
             if (!this.success) this._createSuccess();
             if (resolve){
-                if (!this.success.resolveList) this.success.resolveList = [];
-                this.success.resolveList.push(resolve);
+                if (!this.success.resolve){
+                    this.success.resolve = resolve;
+                }else{
+                    if (!this.success.resolveList) this.success.resolveList = [];
+                    this.success.resolveList.push(resolve);
+                }
             }
+            return this;
         },
         addReject: function(reject){
             if (!this.failure) this._createFailure();
             if (reject){
-                if (!this.success.rejectList) this.success.rejectList = [];
-                this.success.rejectList.push(reject);
+                if (!this.failure.reject){
+                    this.failure.reject = reject;
+                }else{
+                    if (!this.failure.rejectList) this.failure.rejectList = [];
+                    this.failure.rejectList.push(reject);
+                }
             }
-        }
+            return this;
+        },
+        then: function(resolve){
+            return this.addResolve(resolve);
+        },
+        "catch": function(reject){
+            return this.addReject(reject);
+        },
     });
     var _AsyncGenerator = function(resolve, reject, name){
         var asyncGeneratorPrototype = new _AsyncGeneratorPrototype(resolve, reject, name);
@@ -1726,6 +1761,10 @@
 
     o2.AsyncGenerator = o2.AG = _AsyncGenerator;
 
+    Function.prototype.ag = function(){
+        return o2.AG(this);
+    }
+
 })();
 o2.core = true;
 

+ 2 - 1
o2web/source/o2_core/o2/actionWorker.js

@@ -58,15 +58,16 @@ function V(httpRequest) {
                 json.xToken = xToken;
             }
             _worker.postMessage({"type": "done", "data": json});
+            _worker.close();
         },
         _errorRequest: function(){
             _worker.postMessage({"type":"error", "data": {"status":  this.request.status, "statusText":  this.request.statusText, "responseText":this.request.responseText}});
+            _worker.close();
         }
     };
 
     this.action = _action;
 })();
-debugger;
 
 onmessage = function(e) {
     debugger;

+ 15 - 4
o2web/source/o2_core/o2/xDesktop/Actions/RestActions.js

@@ -92,6 +92,10 @@ MWF.xDesktop.Actions.RestActions = new Class({
             var async = (option.async===false) ? false : true;
 
             if (option.failure && option.failure.failure) option.failure = option.failure.failure;
+            if (!option.failure && option.success && option.success.failure){
+                option.failure = option.success.failure;
+                option.failure.owner = option.success;
+            }
 
             var callback = new MWF.xDesktop.Actions.RestActions.Callback(option.success, option.failure);
             if (action.enctype && (action.enctype.toLowerCase()=="formdata")){
@@ -555,16 +559,16 @@ MWF.xDesktop.Actions.RestActions.Callback = new Class({
 			switch(responseJSON.type) {
 			   case "success":
 				   if (this.appendSuccess) this.appendSuccess(responseJSON);
-				   if (this.success) this.success(responseJSON, responseText);
+				   if (this.success) return this.success(responseJSON, responseText);
 			       break;
 			   case "warn":
 				   MWF.xDesktop.notice("info", {x: "right", y:"top"}, responseJSON.errorMessage.join("\n"));
 				   
 				   if (this.appendSuccess) this.appendSuccess(responseJSON);
-				   if (this.success) this.success(responseJSON);
+				   if (this.success) return this.success(responseJSON);
 			       break;
 			   case "error":
-				   this.doError(null, responseText, responseJSON.message);
+				   return this.doError(null, responseText, responseJSON.message);
 				   break;
 			}
 		}else{
@@ -582,7 +586,14 @@ MWF.xDesktop.Actions.RestActions.Callback = new Class({
 	},
 	doError: function(xhr, text, error){
 		if (this.appendFailure) this.appendFailure(xhr, text, error);
-		if (this.failure) this.failure(xhr, text, error);
+		if (this.failure && this.failure.owner){
+            if (this.failure.reject || (this.failure.rejectList && this.failure.rejectList.length)){
+                return this.failure(xhr, text, error);
+            }
+            this.failure = null;
+        }else{
+            if (this.failure) return this.failure(xhr, text, error);
+        }
 		if (!this.failure && !this.appendFailure){
             if (xhr.status!=0){
                 var errorText = error;

+ 6 - 2
o2web/source/o2_core/o2/xDesktop/Common.js

@@ -492,14 +492,18 @@ MWF.xDesktop.getServiceAddressConfigArray = function(config, callback, error) {
     config.center.each(function(center){
         requests.push(
             MWF.xDesktop.getServiceAddressConfigObject(center, function(serviceAddressList, center){
+                debugger;
                 requests.each(function(res){
-                    if (res) if (res.isRunning()){res.cancel();}
+                    if (res && res.res) if (res.res.isRunning()){res.res.cancel();}
+                    if (res && res.actionWorker) res.actionWorker.terminate();
                 });
                 if (callback) callback(serviceAddressList, center);
             }.bind(this), function(){
+                debugger;
                 if (requests.length){
                     for (var i=0; i<requests.length; i++){
-                        if (requests[i].isRunning()) return "";
+                        if (requests[i].res) if (requests[i].res.isRunning()) return "";
+                        if (requests[i].actionWorker && requests[i].actionWorker.terminate) return "";
                     }
                 }
                 if (error) error();

+ 484 - 222
o2web/source/o2_core/o2/xScript/Environment.js

@@ -241,297 +241,459 @@ MWF.xScript.Environment = function(ev){
     this.org = {
         //群组***************
         //获取群组--返回群组的对象数组
-        getGroup: function(name){
+        getGroup: function(name, async){
             getOrgActions();
             var data = {"groupList": getNameFlag(name)};
+
             var v = null;
-            orgActions.listGroup(data, function(json){v = json.data;}, null, false);
-            return (v && v.length===1) ? v[0] : v;
+            var cb = function(json){
+                v = json.data;
+                v = (v && v.length===1) ? v[0] : v
+                return v;
+            }.ag().catch(function(json){ return v; });
+
+            orgActions.listGroup(data, cb, null, !!async);
+            return (!!async) ? cb : v;
+
+            // var v = null;
+            // orgActions.listGroup(data, function(json){v = json.data;}, null, false);
+            // return (v && v.length===1) ? v[0] : v;
         },
         //查询下级群组--返回群组的对象数组
         //nested  布尔  true嵌套下级;false直接下级;默认false;
-        listSubGroup: function(name, nested){
+        listSubGroup: function(name, nested, async){
             getOrgActions();
             var data = {"groupList": getNameFlag(name)};
+
             var v = null;
+            var cb = function(json){
+                v = json.data;
+                return v;
+            }.ag().catch(function(json){ return v; });
+
             if (nested){
-                orgActions.listSubGroupNested(data, function(json){v = json.data;}, null, false);
+                orgActions.listSubGroupNested(data, cb, null, !!async);
             }else{
-                orgActions.listSubGroupDirect(data, function(json){v = json.data;}, null, false);
+                orgActions.listSubGroupDirect(data, cb, null, !!async);
             }
-            return v;
+            return (!!async) ? cb : v;
+
+            // var v = null;
+            // if (nested){
+            //     orgActions.listSubGroupNested(data, function(json){v = json.data;}, null, false);
+            // }else{
+            //     orgActions.listSubGroupDirect(data, function(json){v = json.data;}, null, false);
+            // }
+            // return v;
         },
         //查询上级群组--返回群组的对象数组
         //nested  布尔  true嵌套上级;false直接上级;默认false;
-        listSupGroup:function(name, nested){
+        listSupGroup:function(name, nested, async){
             getOrgActions();
             var data = {"groupList": getNameFlag(name)};
+
             var v = null;
+            var cb = function(json){
+                v = json.data;
+                return v;
+            }.ag().catch(function(json){ return v; });
+
             if (nested){
-                orgActions.listSupGroupNested(data, function(json){v = json.data;}, null, false);
+                orgActions.listSupGroupNested(data, cb, null, !!async);
             }else{
-                orgActions.listSupGroupDirect(data, function(json){v = json.data;}, null, false);
+                orgActions.listSupGroupDirect(data, cb, null, !!async);
             }
-            return v;
+            return (!!async) ? cb : v;
+            // var v = null;
+            // if (nested){
+            //     orgActions.listSupGroupNested(data, function(json){v = json.data;}, null, false);
+            // }else{
+            //     orgActions.listSupGroupDirect(data, function(json){v = json.data;}, null, false);
+            // }
+            // return v;
         },
         //人员所在群组(嵌套)--返回群组的对象数组
-        listGroupWithPerson:function(name){
+        listGroupWithPerson:function(name, async){
             getOrgActions();
             var data = {"personList": getNameFlag(name)};
+
             var v = null;
-            orgActions.listGroupWithPerson(data, function(json){v = json.data;}, null, false);
-            return v;
+            var cb = function(json){
+                v = json.data;
+                return v;
+            }.ag().catch(function(json){ return v; });
+
+            orgActions.listGroupWithPerson(data, cb, null, !!async);
+            return (!!async) ? cb : v;
+            // var v = null;
+            // orgActions.listGroupWithPerson(data, function(json){v = json.data;}, null, false);
+            // return v;
         },
         //群组是否拥有角色--返回true, false
-        groupHasRole: function(name, role){
+        groupHasRole: function(name, role, async){
             getOrgActions();
             nameFlag = (typeOf(name)==="object") ? (name.distinguishedName || name.id || name.unique || name.name) : name;
             var data = {"group":nameFlag,"roleList":getNameFlag(role)};
+
             var v = false;
-            orgActions.groupHasRole(data, function(json){v = json.data.value;}, null, false);
-            return v;
+            var cb = function(json){
+                v = json.data.value;
+                return v;
+            }.ag().catch(function(json){ return v; });
+
+            orgActions.groupHasRole(data, cb, null, !!async);
+            return (!!async) ? cb : v;
+
+            // var v = false;
+            // orgActions.groupHasRole(data, function(json){v = json.data.value;}, null, false);
+            // return v;
         },
 
         //角色***************
         //获取角色--返回角色的对象数组
-        getRole: function(name){
+        getRole: function(name, async){
             getOrgActions();
             var data = {"roleList": getNameFlag(name)};
+
             var v = null;
-            orgActions.listRole(data, function(json){v = json.data;}, null, false);
-            return (v && v.length===1) ? v[0] : v;
+            var cb = function(json){
+                v = json.data;
+                v = (v && v.length===1) ? v[0] : v;
+                return v;
+            }.ag().catch(function(json){ return v; });
+
+            orgActions.listRole(data, cb, null, !!async);
+            return (!!async) ? cb : v;
+
+            // var v = null;
+            // orgActions.listRole(data, function(json){v = json.data;}, null, false);
+            // return (v && v.length===1) ? v[0] : v;
         },
         //人员所有角色(嵌套)--返回角色的对象数组
-        listRoleWithPerson:function(name){
+        listRoleWithPerson:function(name, async){
             getOrgActions();
             var data = {"personList": getNameFlag(name)};
+
             var v = null;
-            orgActions.listRoleWithPerson(data, function(json){v = json.data;}, null, false);
-            return v;
+            var cb = function(json){
+                v = json.data;
+                return v;
+            }.ag().catch(function(json){ return v; });
+
+            orgActions.listRoleWithPerson(data, cb, null, !!async);
+            return (!!async) ? cb : v;
+            // var v = null;
+            // orgActions.listRoleWithPerson(data, function(json){v = json.data;}, null, false);
+            // return v;
         },
 
         //人员***************
         //人员是否拥有角色--返回true, false
-        personHasRole: function(name, role){
+        personHasRole: function(name, role, async){
             getOrgActions();
             nameFlag = (typeOf(name)==="object") ? (name.distinguishedName || name.id || name.unique || name.name) : name;
             var data = {"person":nameFlag,"roleList":getNameFlag(role)};
+
             var v = false;
-            orgActions.personHasRole(data, function(json){v = json.data.value;}, null, false);
-            return v;
+            var cb = function(json){
+                v = json.data.value;
+                return v;
+            }.ag().catch(function(json){ return v; });
+
+            orgActions.listRoleWithPerson(data, cb, null, !!async);
+            return (!!async) ? cb : v;
+
+            // var v = false;
+            // orgActions.personHasRole(data, function(json){v = json.data.value;}, null, false);
+            // return v;
         },
         //获取人员--返回人员的对象数组
-        getPerson: function(name, callback){
+        getPerson: function(name, async){
             getOrgActions();
             var data = {"personList": getNameFlag(name)};
-            if (callback){
-                orgActions.listPerson(data, function(json){
-                    v = json.data;
-                    o2.runCallback(callback, "success", [v], this);
-                });
-            }else{
-                var v = null;
-                orgActions.listPerson(data, function(json){v = json.data;}, null, false);
-                return (v && v.length===1) ? v[0] : v;
-            }
+
+            var v = null;
+            var cb = function(json){
+                v = json.data;
+                v = (v && v.length===1) ? v[0] : v;
+                return v;
+            }.ag().catch(function(json){ return v; });
+
+            orgActions.listPerson(data, cb, null, !!async);
+            return (!!async) ? cb : v;
+            // var v = null;
+            // orgActions.listPerson(data, function(json){v = json.data;}, null, false);
+            // return (v && v.length===1) ? v[0] : v;
         },
         //查询下级人员--返回人员的对象数组
         //nested  布尔  true嵌套下级;false直接下级;默认false;
-        listSubPerson: function(name, nested){
+        listSubPerson: function(name, nested, async){
             getOrgActions();
             var data = {"personList": getNameFlag(name)};
+
             var v = null;
+            var cb = function(json){
+                v = json.data;
+                return v;
+            }.ag().catch(function(json){ return v; });
+
             if (nested){
-                orgActions.listPersonSubNested(data, function(json){v = json.data;}, null, false);
+                orgActions.listPersonSubNested(data, cb, null, !!async);
             }else{
-                orgActions.listPersonSubDirect(data, function(json){v = json.data;}, null, false);
+                orgActions.listPersonSubDirect(data, cb, null, !!async);
             }
-            return v;
+            return (!!async) ? cb : v;
         },
         //查询上级人员--返回人员的对象数组
         //nested  布尔  true嵌套上级;false直接上级;默认false;
-        listSupPerson: function(name, nested){
+        listSupPerson: function(name, nested, async){
             getOrgActions();
             var data = {"personList": getNameFlag(name)};
             var v = null;
+            var cb = function(json){
+                v = json.data;
+                return v;
+            }.ag().catch(function(json){ return v; });
+
             if (nested){
-                orgActions.listPersonSupNested(data, function(json){v = json.data;}, null, false);
+                orgActions.listPersonSupNested(data, cb, null, !!async);
             }else{
-                orgActions.listPersonSupDirect(data, function(json){v = json.data;}, null, false);
+                orgActions.listPersonSupDirect(data, cb, null, !!async);
             }
-            return v;
+            return (!!async) ? cb : v;
         },
         //获取群组的所有人员--返回人员的对象数组
-        listPersonWithGroup: function(name){
+        listPersonWithGroup: function(name, async){
             getOrgActions();
             var data = {"groupList": getNameFlag(name)};
+
             var v = null;
-            orgActions.listPersonWithGroup(data, function(json){v = json.data;}, null, false);
-            return v;
+            var cb = function(json){
+                v = json.data;
+                return v;
+            }.ag().catch(function(json){ return v; });
+
+            orgActions.listPersonWithGroup(data, cb, null, !!async);
+            return (!!async) ? cb : v;
         },
         //获取角色的所有人员--返回人员的对象数组
-        listPersonWithRole: function(name){
+        listPersonWithRole: function(name, async){
             getOrgActions();
             var data = {"roleList": getNameFlag(name)};
             var v = null;
-            orgActions.listPersonWithRole(data, function(json){v = json.data;}, null, false);
-            return v;
+            var cb = function(json){
+                v = json.data;
+                return v;
+            }.ag().catch(function(json){ return v; });
+
+            orgActions.listPersonWithRole(data, cb, null, !!async);
+            return (!!async) ? cb : v;
         },
         //获取身份的所有人员--返回人员的对象数组
-        listPersonWithIdentity: function(name){
+        listPersonWithIdentity: function(name, async){
             getOrgActions();
             var data = {"identityList": getNameFlag(name)};
             var v = null;
-            orgActions.listPersonWithIdentity(data, function(json){v = json.data;}, null, false);
-            return v;
+            var cb = function(json){
+                v = json.data;
+                return v;
+            }.ag().catch(function(json){ return v; });
+            orgActions.listPersonWithIdentity(data, cb, null, !!async);
+            return (!!async) ? cb : v;
         },
         //获取身份的所有人员--返回人员的对象数组或人员对象
-        getPersonWithIdentity: function(name){
+        getPersonWithIdentity: function(name, async){
             getOrgActions();
             var data = {"identityList": getNameFlag(name)};
             var v = null;
-            orgActions.listPersonWithIdentity(data, function(json){v = json.data;}, null, false);
-            return (v && v.length===1) ? v[0] : v;
+            var cb = function(json){
+                v = json.data;
+                v =  (v && v.length===1) ? v[0] : v;
+                return v;
+            }.ag().catch(function(json){ return v; });
+            orgActions.listPersonWithIdentity(data, cb, null, !!async);
+            return (!!async) ? cb : v;
         },
         //查询组织成员的人员--返回人员的对象数组
         //nested  布尔  true嵌套的所有成员;false直接成员;默认false;
-        listPersonWithUnit: function(name, nested){
+        listPersonWithUnit: function(name, nested, async){
             getOrgActions();
             var data = {"unitList": getNameFlag(name)};
             var v = null;
+            var cb = function(json){
+                v = json.data;
+                return v;
+            }.ag().catch(function(json){ return v; });
+
             if (nested){
-                orgActions.listPersonWithUnitNested(data, function(json){v = json.data;}, null, false);
+                orgActions.listPersonWithUnitNested(data, cb, null, !!async);
             }else{
-                orgActions.listPersonWithUnitDirect(data, function(json){v = json.data;}, null, false);
+                orgActions.listPersonWithUnitDirect(data, cb, null, !!async);
             }
-            return v;
+            return (!!async) ? cb : v;
         },
         //根据属性查询人员--返回人员的对象数组
         //name  string 属性名
         //value  string 属性值
-        listPersonWithAttribute: function(name, value){
+        listPersonWithAttribute: function(name, value, async){
             getOrgActions();
             var data = {"name": name, "attribute": value};
             var v = null;
-            orgActions.listPersonWithAttribute(data, function(json){v = json.data;}, null, false);
-            return v;
+            var cb = function(json){
+                v = json.data;
+                return v;
+            }.ag().catch(function(json){ return v; });
+
+            orgActions.listPersonWithAttribute(data, cb, null, !!async);
+            return (!!async) ? cb : v;
         },
         //根据属性查询人员--返回人员的全称数组
         //name  string 属性名
         //value  string 属性值
-        listPersonNameWithAttribute: function(name, value){
+        listPersonNameWithAttribute: function(name, value, async){
             getOrgActions();
             var data = {"name": name, "attribute": value};
             var v = null;
-            orgActions.listPersonWithAttributeValue(data, function(json){v = json.data.personList;}, null, false);
-            return v;
+            var cb = function(json){
+                v = json.data.personList;
+                return v;
+            }.ag().catch(function(json){ return v; });
+
+            orgActions.listPersonWithAttributeValue(data, cb, null, !!async);
+            return (!!async) ? cb : v;
         },
 
         //人员属性************
         //添加人员属性值(在属性中添加values值,如果没有此属性,则创建一个)
-        appendPersonAttribute: function(person, attr, values, success, failure){
+        appendPersonAttribute: function(person, attr, values, success, failure, async){
             getOrgActions();
             var personFlag = (typeOf(person)==="object") ? (person.distinguishedName || person.id || person.unique || person.name) : person;
             var data = {"attributeList":values,"name":attr,"person":personFlag};
-            orgActions.appendPersonAttribute(data, function(json){
-                if (json.data.value){
-                    if (success) success();
-                }else{
-                    if (failure) failure(null, "", "append values failed");
-                }
-            }, function(xhr, text, error){
-                if (failure) failure(xhr, text, error);
-            }, false);
+
+            var cb = function(json){
+                if (success) return success(json);
+            }.ag().catch(function(xhr, text, error){
+                if (failure) return failure(xhr, text, error);
+            });
+
+            orgActions.appendPersonAttribute(data, cb, null, !!async);
         },
         //设置人员属性值(将属性值修改为values,如果没有此属性,则创建一个)
-        setPersonAttribute: function(person, attr, values, success, failure){
+        setPersonAttribute: function(person, attr, values, success, failure, async){
             getOrgActions();
             var personFlag = (typeOf(person)==="object") ? (person.distinguishedName || person.id || person.unique || person.name) : person;
             var data = {"attributeList":values,"name":attr,"person":personFlag};
-            orgActions.setPersonAttribute(data, function(json){
-                if (json.data.value){
-                    if (success) success();
-                }else{
-                    if (failure) failure(null, "", "append values failed");
-                }
-            }, function(xhr, text, error){
-                if (failure) failure(xhr, text, error);
-            }, false);
+
+            var cb = function(json){
+                if (success) return success(json);
+            }.ag().catch(function(xhr, text, error){
+                if (failure) return failure(xhr, text, error);
+            });
+
+            orgActions.setPersonAttribute(data, cb, null, !!async);
         },
         //获取人员属性值
-        getPersonAttribute: function(person, attr){
+        getPersonAttribute: function(person, attr, async){
             getOrgActions();
             var personFlag = (typeOf(person)==="object") ? (person.distinguishedName || person.id || person.unique || person.name) : person;
             var data = {"name":attr,"person":personFlag};
             var v = null;
-            orgActions.getPersonAttribute(data, function(json){v = json.data.attributeList;}, null, false);
-            return v;
+            var cb = function(json){
+                v = json.data.attributeList;
+                return v;
+            }.ag().catch(function(json){ return v; });
+
+            orgActions.getPersonAttribute(data, cb, null, !!async);
+            return (!!async) ? cb : v;
         },
         //列出人员所有属性的名称
-        listPersonAttributeName: function(name){
+        listPersonAttributeName: function(name, async){
             getOrgActions();
             var data = {"personList":getNameFlag(name)};
             var v = null;
-            orgActions.listPersonAttributeName(data, function(json){v = json.data.nameList;}, null, false);
-            return v;
+            var cb = function(json){
+                v = json.data.nameList;
+                return v;
+            }.ag().catch(function(json){ return v; });
+
+            orgActions.listPersonAttributeName(data, cb, null, !!async);
+            return (!!async) ? cb : v;
         },
         //列出人员的所有属性
-        listPersonAllAttribute: function(name){
+        listPersonAllAttribute: function(name, async){
             getOrgActions();
             var data = {"personList":getNameFlag(name)};
             var v = null;
-            orgActions.listPersonAllAttribute(data, function(json){v = json.data;}, null, false);
-            return v;
+            var cb = function(json){
+                v = json.data;
+                return v;
+            }.ag().catch(function(json){ return v; });
+            orgActions.listPersonAllAttribute(data, cb, null, !!async);
+            return (!!async) ? cb : v;
         },
 
         //身份**********
         //获取身份
-        getIdentity: function(name, callback){
+        getIdentity: function(name, async){
             getOrgActions();
             var data = {"identityList":getNameFlag(name)};
+            var v = null;
+            var cb = function(json){
+                v = json.data;
+                v = (v && v.length===1) ? v[0] : v
+                return v;
+            }.ag().catch(function(json){ return v; });
 
-            if (callback){
-                orgActions.listIdentity(data, function(json){
-                    v = json.data;
-                    v = (v && v.length===1) ? v[0] : v;
-                    o2.runCallback(callback, "success", [v], this);
-                });
-            }else{
-                var v = null;
-                orgActions.listIdentity(data, function(json){v = json.data;}, null, false);
-                return (v && v.length===1) ? v[0] : v;
-            }
+            orgActions.listIdentity(data, cb, null, !!async);
+            return (!!async) ? cb : v;
         },
         //列出人员的身份
-        listIdentityWithPerson: function(name){
+        listIdentityWithPerson: function(name, async){
             getOrgActions();
             var data = {"personList":getNameFlag(name)};
             var v = null;
-            orgActions.listIdentityWithPerson(data, function(json){v = json.data;}, null, false);
-            return v;
+            var cb = function(json){
+                v = json.data;
+                return v;
+            }.ag().catch(function(json){ return v; });
+
+            orgActions.listIdentityWithPerson(data, cb, null, !!async);
+            return (!!async) ? cb : v;
         },
         //查询组织成员身份--返回身份的对象数组
         //nested  布尔  true嵌套的所有成员;false直接成员;默认false;
-        listIdentityWithUnit: function(name, nested){
+        listIdentityWithUnit: function(name, nested, async){
             getOrgActions();
             var data = {"unitList": getNameFlag(name)};
             var v = null;
+
+            var cb = function(json){
+                v = json.data;
+                return v;
+            }.ag().catch(function(json){ return v; });
+
             if (nested){
-                orgActions.listIdentityWithUnitNested(data, function(json){v = json.data;}, null, false);
+                orgActions.listIdentityWithUnitNested(data, cb, null, !!async);
             }else{
-                orgActions.listIdentityWithUnitDirect(data, function(json){v = json.data;}, null, false);
+                orgActions.listIdentityWithUnitDirect(data, cb, null, !!async);
             }
-            return v;
+            return (!!async) ? cb : v;
         },
 
         //组织**********
         //获取组织
-        getUnit: function(name){
+        getUnit: function(name, async){
             getOrgActions();
             var data = {"unitList":getNameFlag(name)};
             var v = null;
-            orgActions.listUnit(data, function(json){v = json.data;}, null, false);
-            return (v && v.length===1) ? v[0] : v;
+            var cb = function(json){
+                v = json.data;
+                v = (v && v.length===1) ? v[0] : v;
+                return v;
+            }.ag().catch(function(json){ return v; });
+
+            orgActions.listUnit(data, cb, null, !!async);
+            return (!!async) ? cb : v;
         },
         //查询组织的下级--返回组织的对象数组
         //nested  布尔  true嵌套下级;false直接下级;默认false;
@@ -539,32 +701,38 @@ MWF.xScript.Environment = function(ev){
             getOrgActions();
             var data = {"unitList": getNameFlag(name)};
             var v = null;
+
+            var cb = function(json){
+                v = json.data;
+                return v;
+            }.ag().catch(function(json){ return v; });
+
             if (nested){
-                orgActions.listUnitSubNested(data, function(json){v = json.data;}, null, false);
+                orgActions.listUnitSubNested(data, cb, null, !!async);
             }else{
-                orgActions.listUnitSubDirect(data, function(json){v = json.data;}, null, false);
+                orgActions.listUnitSubDirect(data, cb, null, !!async);
             }
-            return v;
+            return (!!async) ? cb : v;
         },
         //查询组织的上级--返回组织的对象数组
         //nested  布尔  true嵌套上级;false直接上级;默认false;
-        listSupUnit: function(name, nested, callback){
-            debugger;
+        //async 布尔 true异步请求
+        listSupUnit: function(name, nested, async){
             getOrgActions();
             var data = {"unitList": getNameFlag(name)};
+
+            var v = null;
             var cb = function(json){
                 v = json.data;
-                if (callback) o2.runCallback(callback, "success", [v], this);
-            };
-            var async = !!callback;
+                return v;
+            }.ag().catch(function(json){ return v; });
 
-            var v = null;
             if (nested){
-                orgActions.listUnitSupNested(data, cb, null, async);
+                orgActions.listUnitSupNested(data, cb, null, !!async);
             }else{
-                orgActions.listUnitSupDirect(data, cb, null, async);
+                orgActions.listUnitSupDirect(data, cb, null, !!async);
             }
-            return callback||v;
+            return (!!async) ? cb : v;
 
             // if (callback){
             //     if (nested){
@@ -586,7 +754,7 @@ MWF.xScript.Environment = function(ev){
         //flag 数字    表示获取第几层的组织
         //     字符串  表示获取指定类型的组织
         //     空     表示获取直接所在的组织
-        getUnitByIdentity: function(name, flag){
+        getUnitByIdentity: function(name, flag, async){
             getOrgActions();
             var getUnitMethod = "current";
             var v;
@@ -594,161 +762,237 @@ MWF.xScript.Environment = function(ev){
                 if (typeOf(flag)==="string") getUnitMethod = "type";
                 if (typeOf(flag)==="number") getUnitMethod = "level";
             }
+
+            var cb;
             switch (getUnitMethod){
                 case "current":
                     var data = {"identityList":getNameFlag(name)};
-                    orgActions.listUnitWithIdentity(data, function(json){ v = json.data; v=(v&&v.length===1) ? v[0] : v }, null, false);
+                    cb = function(json){ v = json.data;  v=(v&&v.length===1) ? v[0] : v; return v; }.ag().catch(function(json){ return v; });
+                    orgActions.listUnitWithIdentity(data, cb, null, !!async);
                     break;
                 case "type":
                     var data = {"identity":(typeOf(name)==="object") ? (name.distinguishedName || name.id || name.unique || name.name) : name,"type":flag};
-                    orgActions.getUnitWithIdentityAndType(data, function(json){ v = json.data; }, null, false);
+                    cb = function(json){ v = json.data; }.ag().catch(function(json){ return v; });
+                    orgActions.getUnitWithIdentityAndType(data, cb, null, !!async);
                     break;
                 case "level":
                     var data = {"identity":(typeOf(name)==="object") ? (name.distinguishedName || name.id || name.unique || name.name) : name,"level":flag};
-                    orgActions.getUnitWithIdentityAndLevel(data, function(json){ v = json.data; }, null, false);
+                    cb = function(json){ v = json.data; }.ag().catch(function(json){ return v; });
+                    orgActions.getUnitWithIdentityAndLevel(data, cb, null, !!async);
                     break;
             }
-            return v;
+            return (!!async) ? cb : v;
         },
         //列出身份所在组织的所有上级组织
-        listAllSupUnitWithIdentity: function(name){
+        listAllSupUnitWithIdentity: function(name, async){
             getOrgActions();
             var data = {"identityList":getNameFlag(name)};
             var v = null;
-            orgActions.listUnitSupNestedWithIdentity(data, function(json){v = json.data;}, null, false);
-            return v;
+            var cb = function(json){
+                v = json.data;
+                return v;
+            }.ag().catch(function(json){ return v; });
+            orgActions.listUnitSupNestedWithIdentity(data, cb, null, !!async);
+            return (!!async) ? cb : v;
         },
         //获取人员所在的所有组织
-        listUnitWithPerson: function(name){
+        listUnitWithPerson: function(name, async){
             getOrgActions();
             var data = {"personList":getNameFlag(name)};
             var v = null;
-            orgActions.listUnitWithPerson(data, function(json){v = json.data;}, null, false);
-            return v;
+            var cb = function(json){
+                v = json.data;
+                return v;
+            }.ag().catch(function(json){ return v; });
+            orgActions.listUnitWithPerson(data, cb, null, !!async);
+            return (!!async) ? cb : v;
         },
         //列出人员所在组织的所有上级组织
-        listAllSupUnitWithPerson: function(name){
+        listAllSupUnitWithPerson: function(name, async){
             getOrgActions();
             var data = {"personList":getNameFlag(name)};
             var v = null;
-            orgActions.listUnitSupNestedWithPerson(data, function(json){v = json.data;}, null, false);
-            return v;
+            var cb = function(json){
+                v = json.data;
+                return v;
+            }.ag().catch(function(json){ return v; });
+            orgActions.listUnitSupNestedWithPerson(data, cb, null, !!async);
+            return (!!async) ? cb : v;
         },
         //根据组织属性,获取所有符合的组织
-        listUnitWithAttribute: function(name, attribute){
+        listUnitWithAttribute: function(name, attribute, async){
             getOrgActions();
             var data = {"name":name,"attribute":attribute};
             var v = null;
-            orgActions.listUnitWithAttribute(data, function(json){v = json.data;}, null, false);
-            return v;
+            var cb = function(json){
+                v = json.data;
+                return v;
+            }.ag().catch(function(json){ return v; });
+            orgActions.listUnitWithAttribute(data, cb, null, !!async);
+            return (!!async) ? cb : v;
         },
         //根据组织职务,获取所有符合的组织
-        listUnitWithDuty: function(name, id){
+        listUnitWithDuty: function(name, id, async){
             getOrgActions();
             var data = {"name":name,"identity":(typeOf(id)==="object") ? (id.distinguishedName || id.id || id.unique || id.name) : id};
             var v = null;
-            orgActions.listUnitWithDuty(data, function(json){v = json.data;}, null, false);
-            return v;
+            var cb = function(json){
+                v = json.data;
+                return v;
+            }.ag().catch(function(json){ return v; });
+            orgActions.listUnitWithDuty(data, cb, null, !!async);
+            return (!!async) ? cb : v;
         },
 
         //组织职务***********
         //获取指定的组织职务的身份
-        getDuty: function(duty, id){
+        getDuty: function(duty, id, async){
             getOrgActions();
             var data = {"name":duty,"unit":(typeOf(id)==="object") ? (id.distinguishedName || id.id || id.unique || id.name) : id};
             var v = null;
-            orgActions.getDuty(data, function(json){v = json.data;}, null, false);
-            return v;
+            var cb = function(json){
+                v = json.data;
+                return v;
+            }.ag().catch(function(json){ return v; });
+            orgActions.getDuty(data, cb, null, !!async);
+            return (!!async) ? cb : v;
         },
         //获取身份的所有职务名称
-        listDutyNameWithIdentity: function(name){
+        listDutyNameWithIdentity: function(name, async){
             getOrgActions();
             var data = {"identityList":getNameFlag(name)};
             var v = null;
-            orgActions.listDutyNameWithIdentity(data, function(json){v = json.data.nameList;}, null, false);
-            return v;
+            var cb = function(json){
+                v = json.data.nameList;
+                return v;
+            }.ag().catch(function(json){ return v; });
+            orgActions.listDutyNameWithIdentity(data, cb, null, !!async);
+            return (!!async) ? cb : v;
         },
         //获取组织的所有职务名称
-        listDutyNameWithUnit: function(name){
+        listDutyNameWithUnit: function(name, async){
             getOrgActions();
             var data = {"unitList":getNameFlag(name)};
             var v = null;
-            orgActions.listDutyNameWithUnit(data, function(json){v = json.data.nameList;}, null, false);
-            return v;
+            var cb = function(json){
+                v = json.data.nameList;
+                return v;
+            }.ag().catch(function(json){ return v; });
+            orgActions.listDutyNameWithUnit(data, cb, null, !!async);
+            return (!!async) ? cb : v;
         },
         //获取组织的所有职务
-        listUnitAllDuty: function(name){
+        listUnitAllDuty: function(name, async){
             getOrgActions();
             var data = {"unitList":getNameFlag(name)};
             var v = null;
-            orgActions.listUnitAllDuty(data, function(json){v = json.data;}, null, false);
-            return v;
+            var cb = function(json){
+                v = json.data;
+                return v;
+            }.ag().catch(function(json){ return v; });
+            orgActions.listUnitAllDuty(data, cb, null, !!async);
+            return (!!async) ? cb : v;
         },
         //列出顶层组织
-        listTopUnit: function(){
+        listTopUnit: function(async){
             var action = MWF.Actions.get("x_organization_assemble_control");
             var v = null;
-            action.listTopUnit(function(json){
+            var cb = function(json){
                 v = json.data;
-            }, null, false);
-            return v;
+                return v;
+            }.ag().catch(function(json){ return v; });
+
+            action.listTopUnit(cb, null, !!async);
+            return (!!async) ? cb : v;
         },
 
         //组织属性**************
         //添加组织属性值(在属性中添加values值,如果没有此属性,则创建一个)
-        appendUnitAttribute: function(unit, attr, values, success, failure){
+        appendUnitAttribute: function(unit, attr, values, success, failure, async){
             getOrgActions();
             var unitFlag = (typeOf(unit)==="object") ? (unit.distinguishedName || unit.id || unit.unique || unit.name) : unit;
             var data = {"attributeList":values,"name":attr,"unit":unitFlag};
-            orgActions.appendUnitAttribute(data, function(json){
-                if (json.data.value){
-                    if (success) success();
-                }else{
-                    if (failure) failure(null, "", "append values failed");
-                }
-            }, function(xhr, text, error){
-                if (failure) failure(xhr, text, error);
-            }, false);
+
+            var cb = function(json){
+                if (success) return success(json);
+            }.ag().catch(function(xhr, text, error){
+                if (failure) return failure(xhr, text, error);
+            });
+
+            orgActions.appendPersonAttribute(data, cb, null, !!async);
+
+            // orgActions.appendUnitAttribute(data, function(json){
+            //     if (json.data.value){
+            //         if (success) success();
+            //     }else{
+            //         if (failure) failure(null, "", "append values failed");
+            //     }
+            // }, function(xhr, text, error){
+            //     if (failure) failure(xhr, text, error);
+            // }, false);
         },
         //设置组织属性值(将属性值修改为values,如果没有此属性,则创建一个)
-        setUnitAttribute: function(unit, attr, values, success, failure){
+        setUnitAttribute: function(unit, attr, values, success, failure, async){
             getOrgActions();
             var unitFlag = (typeOf(unit)==="object") ? (unit.distinguishedName || unit.id || unit.unique || unit.name) : unit;
             var data = {"attributeList":values,"name":attr,"unit":unitFlag};
-            orgActions.setUnitAttribute(data, function(json){
-                if (json.data.value){
-                    if (success) success();
-                }else{
-                    if (failure) failure(null, "", "append values failed");
-                }
-            }, function(xhr, text, error){
-                if (failure) failure(xhr, text, error);
-            }, false);
+
+            var cb = function(json){
+                if (success) return success(json);
+            }.ag().catch(function(xhr, text, error){
+                if (failure) return failure(xhr, text, error);
+            });
+            orgActions.setUnitAttribute(data, cb, null, !!async);
+
+            // orgActions.setUnitAttribute(data, function(json){
+            //     if (json.data.value){
+            //         if (success) success();
+            //     }else{
+            //         if (failure) failure(null, "", "append values failed");
+            //     }
+            // }, function(xhr, text, error){
+            //     if (failure) failure(xhr, text, error);
+            // }, false);
         },
         //获取组织属性值
-        getUnitAttribute: function(unit, attr){
+        getUnitAttribute: function(unit, attr, async){
             getOrgActions();
             var unitFlag = (typeOf(unit)==="object") ? (unit.distinguishedName || unit.id || unit.unique || unit.name) : unit;
             var data = {"name":attr,"unit":unitFlag};
             var v = null;
-            orgActions.getUnitAttribute(data, function(json){v = json.data.attributeList;}, null, false);
-            return v;
+            var cb = function(json){
+                v = json.data.attributeList;
+                return v;
+            }.ag().catch(function(json){ return v; });
+
+            orgActions.getUnitAttribute(data, cb, null, !!async);
+            return (!!async) ? cb : v;
         },
         //列出组织所有属性的名称
-        listUnitAttributeName: function(name){
+        listUnitAttributeName: function(name, async){
             getOrgActions();
             var data = {"unitList":getNameFlag(name)};
             var v = null;
-            orgActions.listUnitAttributeName(data, function(json){v = json.data.nameList;}, null, false);
-            return v;
+            var cb = function(json){
+                v = json.data.nameList;
+                return v;
+            }.ag().catch(function(json){ return v; });
+
+            orgActions.listUnitAttributeName(data, cb, null, !!async);
+            return (!!async) ? cb : v;
         },
         //列出组织的所有属性
-        listUnitAllAttribute: function(name){
+        listUnitAllAttribute: function(name, async){
             getOrgActions();
             var data = {"unitList":getNameFlag(name)};
             var v = null;
-            orgActions.listUnitAllAttribute(data, function(json){v = json.data;}, null, false);
-            return v;
+            var cb = function(json){
+                v = json.data;
+                return v;
+            }.ag().catch(function(json){ return v; });
+
+            orgActions.listUnitAllAttribute(data, cb, null, !!async);
+            return (!!async) ? cb : v;
         }
     };
 
@@ -1893,60 +2137,78 @@ MWF.xScript.createDict = function(application){
                 }
             }
 
-            if (path){
+            if (success===true) async=true;
+            if (failure===true) async=true;
+
+            var cb = function(json){
+                value = json.data;
+                MWF.xScript.addDictToCache(opt, path, value);
+                if (success) value = success(json.data);
+                return value;
+            }.ag().catch(function(xhr, text, error){ if (failure) return failure(xhr, text, error); });
 
+            if (path){
                 var p = encodePath( path );
                 //var p = path.replace(/\./g, "/");
-                action[ ( (enableAnonymous && type == "cms") ? "getDictDataAnonymous" : "getDictData" ) ](encodeURIComponent(this.name), applicationId, p, function(json){
-                    value = json.data;
-                    // this.dictData[path] = value;
-                    MWF.xScript.addDictToCache(opt, path, value);
-                    if (success) success(json.data);
-                }.bind(this), function(xhr, text, error){
-                    if (failure) failure(xhr, text, error);
-                }, !!async, false);
+                action[ ( (enableAnonymous && type == "cms") ? "getDictDataAnonymous" : "getDictData" ) ](encodeURIComponent(this.name), applicationId, p, cb, null, !!async);
             }else{
-                action[ ( (enableAnonymous && type == "cms") ? "getDictRootAnonymous" : "getDictRoot" ) ](this.name, applicationId, function(json){
-                    value = json.data;
-                    // this.dictData["root"] = value;
-                    MWF.xScript.addDictToCache(opt, path, value);
-                    if (success) success(json.data);
-                }.bind(this), function(xhr, text, error){
-                    if (failure) failure(xhr, text, error);
-                }, !!async);
+                action[ ( (enableAnonymous && type == "cms") ? "getDictRootAnonymous" : "getDictRoot" ) ](this.name, applicationId, cb, null, !!async);
             }
+            return (!!async) ? cb : value;
+
+            // if (path){
+            //     var p = encodePath( path );
+            //     //var p = path.replace(/\./g, "/");
+            //     action[ ( (enableAnonymous && type == "cms") ? "getDictDataAnonymous" : "getDictData" ) ](encodeURIComponent(this.name), applicationId, p, function(json){
+            //         value = json.data;
+            //         // this.dictData[path] = value;
+            //         MWF.xScript.addDictToCache(opt, path, value);
+            //         if (success) success(json.data);
+            //     }.bind(this), function(xhr, text, error){
+            //         if (failure) failure(xhr, text, error);
+            //     }, !!async);
+            // }else{
+            //     action[ ( (enableAnonymous && type == "cms") ? "getDictRootAnonymous" : "getDictRoot" ) ](this.name, applicationId, function(json){
+            //         value = json.data;
+            //         // this.dictData["root"] = value;
+            //         MWF.xScript.addDictToCache(opt, path, value);
+            //         if (success) success(json.data);
+            //     }.bind(this), function(xhr, text, error){
+            //         if (failure) failure(xhr, text, error);
+            //     }, !!async);
+            // }
 
-            return value;
+            //return value;
         };
 
         this.set = function(path, value, success, failure){
             var p = encodePath( path );
             //var p = path.replace(/\./g, "/");
-            action.setDictData(encodeURIComponent(this.name), applicationId, p, value, function(json){
+            return action.setDictData(encodeURIComponent(this.name), applicationId, p, value, function(json){
                 MWF.xScript.setDictToCache(key, path, value);
-                if (success) success(json.data);
+                if (success) return success(json.data);
             }, function(xhr, text, error){
-                if (failure) failure(xhr, text, error);
+                if (failure) return failure(xhr, text, error);
             }, false, false);
         };
         this.add = function(path, value, success, failure){
             var p = encodePath( path );
             //var p = path.replace(/\./g, "/");
-            action.addDictData(encodeURIComponent(this.name), applicationId, p, value, function(json){
+            return action.addDictData(encodeURIComponent(this.name), applicationId, p, value, function(json){
                 MWF.xScript.insertDictToCache(key, path, value);
-                if (success) success(json.data);
+                if (success) return success(json.data);
             }, function(xhr, text, error){
-                if (failure) failure(xhr, text, error);
+                if (failure) return failure(xhr, text, error);
             }, false, false);
         };
         this["delete"] = function(path, success, failure){
             var p = encodePath( path );
             //var p = path.replace(/\./g, "/");
-            action.deleteDictData(encodeURIComponent(this.name), applicationId, p, function(json){
+            return action.deleteDictData(encodeURIComponent(this.name), applicationId, p, function(json){
                 MWF.xScript.deleteDictToCache(key, path);
-                if (success) success(json.data);
+                if (success) return success(json.data);
             }, function(xhr, text, error){
-                if (failure) failure(xhr, text, error);
+                if (failure) return failure(xhr, text, error);
             }, false, false);
         };
         this.destory = this["delete"];

+ 15 - 6
o2web/source/x_component_process_Xform/$Input.js

@@ -184,11 +184,13 @@ MWF.xApplication.process.Xform.$Input = MWF.APP$Input =  new Class({
     },
 	getValue: function(){
         var value = this._getBusinessData();
+        if (!value && this.moduleValueAG) value = this.moduleValueAG;
         if (!value) value = this._computeValue();
 		return value || "";
 	},
     _setValue: function(value){
 	    if (o2.typeOf(value)==="function" && value.addResolve){
+	        this.moduleValueAG = value;
             value.addResolve(function(v){
                 this._setValue(v);
                 // this._setBusinessData(v);
@@ -199,6 +201,7 @@ MWF.xApplication.process.Xform.$Input = MWF.APP$Input =  new Class({
             this._setBusinessData(value);
             if (this.node.getFirst()) this.node.getFirst().set("value", value || "");
             if (this.readonly || this.json.isReadonly) this.node.set("text", value);
+            this.moduleValueAG = null;
         }
     },
 	_loadValue: function(){
@@ -250,13 +253,19 @@ MWF.xApplication.process.Xform.$Input = MWF.APP$Input =  new Class({
         this.setData(this.getValue());
     },
 	setData: function(data){
-        this._setBusinessData(data);
-		if (this.node.getFirst()){
-            this.node.getFirst().set("value", data);
-            this.checkDescription();
-            this.validationMode();
+        if (o2.typeOf(data)==="function" && data.addResolve){
+            data.addResolve(function(v){
+                this.setData(v);
+            }.bind(this));
         }else{
-            this.node.set("text", data);
+            this._setBusinessData(data);
+            if (this.node.getFirst()){
+                this.node.getFirst().set("value", data);
+                this.checkDescription();
+                this.validationMode();
+            }else{
+                this.node.set("text", data);
+            }
         }
 	},
 

+ 13 - 2
o2web/source/x_component_process_Xform/Label.js

@@ -10,7 +10,9 @@ MWF.xApplication.process.Xform.Label = MWF.APPLabel =  new Class({
 		if (this.json.valueType == "script"){
 			var code = (this.json.script) ? this.json.script.code : "";
 			if (code){
-				this.node.set("text", this.form.Macro.exec(code, this) || "");
+			    var value = this.form.Macro.exec(code, this);
+			    this._setNodeText(value);
+				//this.node.set("text", this.form.Macro.exec(code, this) || "");
 			} 
 		}
 		if (this.json.prefixIcon || this.json.suffixIcon){
@@ -41,7 +43,16 @@ MWF.xApplication.process.Xform.Label = MWF.APPLabel =  new Class({
             }
 		}
 	},
+    _setNodeText: function(value){
+        if (o2.typeOf(value)==="function" && value.addResolve){
+            value.addResolve(function(v){
+                this._setNodeText(v);
+            }.bind(this));
+        }else{
+            this.node.set("text", value || "");
+        }
+    },
     setText: function(text){
         this.node.set("text", text);
     }
-});
+});

+ 17 - 12
o2web/source/x_component_process_Xform/Org.js

@@ -868,21 +868,26 @@ MWF.xApplication.process.Xform.Org = MWF.APPOrg =  new Class({
     _setValue: function(value){
         debugger;
         if (o2.typeOf(value)==="object" && value.resolve){
+            var simple = this.json.storeRange === "simple";
             var values = value.values;
             value.resolve.addResolve(function(fd){
-                if (typeOf(fd)!=="array") fd = (fd) ? [fd] : [];
-                fd.each(function(fdd){
-                    if (fdd){
-                        if (typeOf(fdd)==="string"){
-                            var data;
-                            this.getOrgAction()[this.getValueMethod(fdd)](function(json){ data = MWF.org.parseOrgData(json.data, true, simple); }.bind(this), null, fdd, false);
-                            values.push(data);
-                        }else{
-                            values.push(fdd);
+                if (o2.typeOf(fd)==="function" && fd.addResolve){
+                    this._setValue({"values": values, "resolve": fd});
+                }else{
+                    if (typeOf(fd)!=="array") fd = (fd) ? [fd] : [];
+                    fd.each(function(fdd){
+                        if (fdd){
+                            if (typeOf(fdd)==="string"){
+                                var data;
+                                this.getOrgAction()[this.getValueMethod(fdd)](function(json){ data = MWF.org.parseOrgData(json.data, true, simple); }.bind(this), null, fdd, false);
+                                values.push(data);
+                            }else{
+                                values.push(fdd);
+                            }
                         }
-                    }
-                }.bind(this));
-                this.__setValue(values);
+                    }.bind(this));
+                    this.__setValue(values);
+                }
             }.bind(this));
         }else{
             this.__setValue(value);