var resources = { "getEntityManagerContainer": function(){ return {}; }, "getContext": function(){ return {}; }, "getApplications": function(){ return {}; }, "getOrganization": function(){ return { group: function(){ return {}; }, identity: function(){ return {}; }, person: function(){ return {}; }, personAttribute: function(){ return {}; }, role: function(){ return {}; }, unit: function(){ return {}; }, unitAttribute: function(){ return {}; }, unitDuty: function(){ return {}; } }; }, "getWebservicesClient": function(){ return {}; } }; var effectivePerson = this.effectivePerson = {}; bind = this; var library = { 'version': '4.0', "defineProperties": Object.defineProperties || function (obj, properties) { return obj; }, 'typeOf': function(item){ if (item == null) return 'null'; if (item.$family != null) return item.$family(); if (item.constructor == Array) return 'array'; if (item.nodeName){ if (item.nodeType == 1) return 'element'; if (item.nodeType == 3) return (/\S/).test(item.nodeValue) ? 'textnode' : 'whitespace'; } else if (typeof item.length == 'number'){ if (item.callee) return 'arguments'; //if ('item' in item) return 'collection'; } return typeof item; }, 'JSONDecode': function(string, secure){ if (!string || library.typeOf(string) != 'string') return null; return eval('(' + string + ')'); }, 'JSONEncode': function(obj){ if (obj && obj.toJSON) obj = obj.toJSON(); switch (library.typeOf(obj)){ case 'string': return '"' + obj.replace(/[\x00-\x1f\\"]/g, escape) + '"'; case 'array': var string = []; for (var i=0; i>> 0; for (var i = (from < 0) ? Math.max(0, length + from) : from || 0; i < length; i++){ if (this[i] === item) return i; } return -1; } }}; library.defineProperties(Array.prototype, o); })(); /******************** this.entityManager; //实体管理器 this.context; //上下文根 this.applications; this.org; //组织访问 this.service;//webSerivces客户端 this.response; this.response.seeOther(url); //303跳转 this.response.temporaryRedirect(url); //304跳转 this.response.setBody(body); //设置返回 this.requestText//请求正文 this.request//请求 this.currentPerson//当前用户 this.Actions; this.Actions.load(root); //获取接口服务 ********************/ bind.entityManager = resources.getEntityManagerContainer(); bind.context = resources.getContext(); bind.applications = resources.getApplications(); bind.organization = resources.getOrganization(); bind.service = resources.getWebservicesClient(); //bind.response = customResponse; //bind.customResponse = customResponse; bind.requestText = this.requestText || null; bind.request = this.request || null; if (this.effectivePerson) bind.currentPerson = bind.effectivePerson = effectivePerson; if (this.parameters) bind.parameters = JSON.parse(this.parameters); //JPQL语句传入参数 if (this.customResponse){ var _response = { "customResponse": this.customResponse || "", seeOther: function(url){ customResponse.seeOther(url); }, temporaryRedirect: function(url){ customResponse.temporaryRedirect(url); }, setBody: function(o, contentType){ var body = o; if (typeOf(o)=="object"){ body = JSON.stringify(o); } customResponse.setBody(body, contentType || ""); } }; bind.response = _response; } //定义方法 var _define = function(name, fun, overwrite){ var over = true; if (overwrite===false) over = false; var o = {}; o[name] = {"value": fun, "configurable": over}; library.defineProperties(bind, o); }; //Action对象 var restfulAcpplication = resources.getApplications(); var _Action = (function(){ //var actions = []; return function(root, json){ this.actions = json; // Object.keys(json).forEach(function(key){ // this.actions[key] = json[key]; // }); //Object.merge(actions[root], json); this.root = root; //this.actions = actions[root]; var invokeFunction = function(service, parameters, key){ var _self = this; return function(){ var i = parameters.length-1; var n = arguments.length; var functionArguments = arguments; var parameter = {}; var success, failure, async, data, file; if (typeOf(functionArguments[0])==="function"){ i=-1; success = (n>++i) ? functionArguments[i] : null; failure = (n>++i) ? functionArguments[i] : null; parameters.each(function(p, x){ parameter[p] = (n>++i) ? functionArguments[i] : null; }); if (service.method && (service.method.toLowerCase()==="post" || service.method.toLowerCase()==="put")){ data = (n>++i) ? functionArguments[i] : null; } }else{ parameters.each(function(p, x){ parameter[p] = (n>x) ? functionArguments[x] : null; }); if (service.method && (service.method.toLowerCase()==="post" || service.method.toLowerCase()==="put")){ data = (n>++i) ? functionArguments[i] : null; } success = (n>++i) ? functionArguments[i] : null; failure = (n>++i) ? functionArguments[i] : null; } return _self.invoke({"name": key, "data": data, "parameter": parameter, "success": success, "failure": failure}); }; }; var createMethod = function(service, key){ var jaxrsUri = service.uri; var re = new RegExp("\{.+?\}", "g"); var replaceWords = jaxrsUri.match(re); var parameters = []; if (replaceWords) parameters = replaceWords.map(function(s){ return s.substring(1,s.length-1); }); this[key] = invokeFunction.call(this, service, parameters, key); }; Object.keys(this.actions).forEach(function(key){ var service = this.actions[key]; if (service.uri) if (!this[key]) createMethod.call(this, service, key); }, this); this.invoke = function(option){ // { // "name": "", // "data": "", // "parameter": "",, // "success": function(){} // "failure": function(){} // } if (this.actions[option.name]){ var uri = this.actions[option.name].uri; var method = this.actions[option.name].method || "get"; if (option.parameter){ Object.keys(option.parameter).forEach(function(key){ var v = option.parameter[key]; uri = uri.replace("{"+key+"}", v); }); } var res = null; try{ switch (method.toLowerCase()){ case "get": res = bind.applications.getQuery(this.root, uri); break; case "post": res = bind.applications.postQuery(this.root, uri, JSON.stringify(option.data)); break; case "put": res = bind.applications.putQuery(this.root, uri, JSON.stringify(option.data)); break; case "delete": res = bind.applications.deleteQuery(this.root, uri); break; default: res = bind.applications.getQuery(this.root, uri); } if (res && res.getType().toString()==="success"){ var json = JSON.parse(res.toString()); if (option.success) option.success(json); }else{ if (option.failure) option.failure(((res) ? JSON.parse(res.toString()) : null)); } return res; }catch(e){ if (option.failure) option.failure(e); } } }; } })(); var _Actions = { "loadedActions": {}, "load": function(root){ if (this.loadedActions[root]) return this.loadedActions[root]; var jaxrsString = bind.applications.describeApi(root); var json = JSON.parse(jaxrsString.toString()); if (json && json.jaxrs){ var actionObj = {}; json.jaxrs.each(function(o){ if (o.methods && o.methods.length){ var actions = {}; o.methods.each(function(m){ var o = {"uri": "/"+m.uri}; if (m.method) o.method = m.method; if (m.enctype) o.enctype = m.enctype; actions[m.name] = o; }.bind(this)); actionObj[o.name] = new bind.Action(root, actions); } }.bind(this)); this.loadedActions[root] = actionObj; return actionObj; } return null; } }; bind.Actions = _Actions; //定义所需的服务 var _processActions = new _Action("x_processplatform_assemble_surface", { "getDictionary": {"uri": "/jaxrs/applicationdict/{applicationDict}/application/{applicationFlag}"}, "getDictRoot": {"uri": "/jaxrs/applicationdict/{applicationDict}/application/{application}/data"}, "getDictData": {"uri": "/jaxrs/applicationdict/{applicationDict}/application/{application}/{path}/data"}, "setDictData": {"uri": "/jaxrs/applicationdict/{applicationDict}/application/{application}/{path}/data", "method": "PUT"}, "addDictData": {"uri": "/jaxrs/applicationdict/{applicationDict}/application/{application}/{path}/data", "method": "POST"}, "deleteDictData": {"uri": "/jaxrs/applicationdict/{applicationDict}/application/{application}/{path}/data", "method": "DELETE"}, "getScript": {"uri": "/jaxrs/script/{flag}/application/{applicationFlag}", "method": "POST"}, }); var _cmsActions = new _Action("x_cms_assemble_control", { "getDictionary": {"uri": "/jaxrs/design/appdict/{appDictId}"}, "getDictRoot": {"uri": "/jaxrs/surface/appdict/{appDictId}/appInfo/{appId}/data"}, "getDictData": {"uri": "/jaxrs/surface/appdict/{appDictId}/appInfo/{appId}/{path}/data"}, "setDictData": {"uri": "/jaxrs/surface/appdict/{appDictId}/appInfo/{appId}/{path}/data", "method": "PUT"}, "addDictData": {"uri": "/jaxrs/surface/appdict/{appDictId}/appInfo/{appId}/{path}/data", "method": "POST"}, "deleteDictData": {"uri": "/jaxrs/surface/appdict/{appDictId}/appInfo/{appId}/{path}/data", "method": "DELETE"}, "getDictRootAnonymous" : {"uri": "/jaxrs/anonymous/surface/appdict/{appDictId}/appInfo/{appId}/data"}, "getDictDataAnonymous" : {"uri": "/jaxrs/anonymous/surface/appdict/{appDictId}/appInfo/{appId}/{path}/data"}, "getScript": {"uri": "/jaxrs/script/{flag}/appInfo/{appInfoFlag}", "method": "POST"}, }); var _portalActions = new _Action("x_portal_assemble_surface", { "getScript": {"uri": "/jaxrs/script/portal/{portal}/name/{ }","method": "POST"} }); //include 引用脚本 //optionsOrName : { // type : "", 默认为process, 可以为 portal process cms // application : "", 门户/流程/CMS的名称/别名/id, 默认为当前应用 // name : "" // 脚本名称/别名/id //} //或者name: "" // 脚本名称/别名/id var _exec = function(code, _self){ var returnValue; //try{ if (!_self) _self = this; try { var f = eval("(function(){return function(){\n"+code+"\n}})();"); returnValue = f.apply(_self); }catch(e){ console.log("exec", new Error("exec script error")); console.log(e); } return returnValue; } var includedScripts = this.includedScripts || {}; this.includedScripts = includedScripts; var _include = function( optionsOrName , callback ){ var options = optionsOrName; if( typeOf( options ) == "string" ){ options = { name : options }; } var name = options.name; var type = ( options.type && options.application ) ? options.type : "process"; var application = options.application if (!name || !type || !application){ console.log("include", new Error("can not find script. missing script name or application")); return false; } if (!includedScripts[application]) includedScripts[application] = []; if (includedScripts[application].indexOf( name )> -1){ if (callback) callback.apply(this); return; } var scriptAction; var scriptData; switch ( type ){ case "portal" : _portalActions.getScript( application, name, {"importedList":includedScripts[application]}, function(json){ if (json.data){ includedScripts[application] = includedScripts[application].concat(json.data.importedList); scriptData = json.data; } }.bind(this)); break; case "process" : _processActions.getScript( name, application, {"importedList":includedScripts[application]}, function(json){ if (json.data){ includedScripts[application] = includedScripts[application].concat(json.data.importedList); scriptData = json.data; } }.bind(this)); break; case "cms" : _cmsActions.getScript(name, application, {"importedList":includedScripts[application]}, function(json){ if (json.data){ includedScripts[application] = includedScripts[application].concat(json.data.importedList); scriptData = json.data; } }.bind(this)); break; } includedScripts[application].push(name); if (scriptData && scriptData.text){ bind.exec(scriptData.text, this); if (callback) callback.apply(this); } }; var _createDict = function(application){ //optionsOrName : { // type : "", //默认为process, 可以为 process cms // application : "", //流程/CMS的名称/别名/id, 默认为当前应用 // name : "", // 数据字典名称/别名/id // enableAnonymous : false //允许在未登录的情况下读取CMS的数据字典 //} //或者name: "" // 数据字典名称/别名/id return function(optionsOrName){ var options = optionsOrName; if( typeOf( options ) == "string" ){ options = { name : options }; } var name = this.name = options.name; var type = ( options.type && options.application ) ? options.type : "process"; var applicationId = options.application || application; var enableAnonymous = options.enableAnonymous || false; //MWF.require("MWF.xScript.Actions.DictActions", null, false); if( type == "cms" ){ var action = bind.cmsActions; }else{ var action = bind.processActions; } var encodePath = function( path ){ var arr = path.split(/\./g); var ar = arr.map(function(v){ return encodeURIComponent(v); }); return ar.join("/"); }; this.get = function(path, success, failure){ var value = null; if (path){ var p = encodePath( path ); action[(enableAnonymous && type == "cms") ? "getDictDataAnonymous" : "getDictData"](encodeURIComponent(this.name), applicationId, p, function(json){ value = json.data; if (success) success(json.data); }, function(xhr, text, error){ if (failure) failure(xhr, text, error); }); }else{ action[(enableAnonymous && type == "cms") ? "getDictRootAnonymous" : "getDictRoot"](encodeURIComponent(this.name), applicationId, function(json){ value = json.data; if (success) success(json.data); }, function(xhr, text, error){ if (failure) failure(xhr, text, error); }, false); } 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){ if (success) success(json.data); }, function(xhr, text, error){ if (failure) 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){ if (success) success(json.data); }, function(xhr, text, error){ if (failure) 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){ if (success) success(json.data); }, function(xhr, text, error){ if (failure) failure(xhr, text, error); }, false, false); }; this.destory = this["delete"]; } }; var getNameFlag = function(name){ var t = library.typeOf(name); if (t==="array"){ var v = []; name.forEach(function(id){ v.push((library.typeOf(id)==="object") ? (id.distinguishedName || id.id || id.unique || id.name) : id); }); return v; }else{ return [(t==="object") ? (name.distinguishedName || name.id || name.unique || name.name) : name]; } }; var _org = { "oGroup": this.organization.group(), "oIdentity": this.organization.identity(), "oPerson": this.organization.person(), "oPersonAttribute": this.organization.personAttribute(), "oRole": this.organization.role(), "oUnit": this.organization.unit(), "oUnitAttribute": this.organization.unitAttribute(), "oUnitDuty": this.organization.unitDuty(), "group": function() { return this.oGroup}, "identity": function() { return this.oIdentity}, "person": function() { return this.oPerson}, "personAttribute": function() { return this.oPersonAttribute}, "role": function() { return this.oRole}, "unit": function() { return this.oUnit}, "unitAttribute": function() { return this.oUnitAttribute}, "unitDuty": function() { return this.oUnitDuty}, "getObject": function(o, v){ var arr = []; if (!v || !v.length){ return null; }else{ for (var i=0; i