Domino WEB 应用开发(2)—— 从Js执行公式开始
资料简介:
不依赖代理,实现 js直接执行公式的原理
http://www.lotuschina.net/home/s ... 895&do=blog&id=5897
博客不支持markdown直接生成的html,代码有点乱,请见谅
代码补充
公式代码
页面
appinfo.formula({managers:'@dblookup("";"";"vwConfig";"manager";1)'}).then(function(res){ console.log(res.managers) }) docinfo.formula({copyto:"txSendto",now:"@now"}).then(function(res){ console.log(res.copyto) console.log(res.now) })Domino WEB 应用开发(2)—— 从Js执行公式开始
http://www.lotuschina.net/home/s ... 895&do=blog&id=5897
博客不支持markdown直接生成的html,代码有点乱,请见谅
代码补充
公式代码
页面
define("<计算公式>",{<计算公式>})公式计算模块名
@urlQueryString("module")公式获取URL公式,执行公式,返回结果
Q:=@UrlQueryString("formula"); type:=@UrlQueryString("type"); encode:=@False; lt:=@If(type="number";"";type="text";""";@Do( encode:=@True; "decodeURIComponent("" )); gt:=@If(type="number";"";type="text";""";"")"); @If(Q="";""error":"no parameter formula"";@Do( FS:=@Explode(Q;","); result:=""error":0"; @For(i:=1;i<=@Elements(FS);i:=i+1;@Do( FQ:=FS[i]; Q:=@Left(FQ;"="); @If(Q="";@Do( Q:=FQ; QR:=FQ );@Do(QR:=@Right(FQ;"="))) ; R:="""+Q+"":"+@Do( _VLS:=@Eval(@URLDecode("UTF-8";QR)); _VLS:=@If(@IsNumber(_VLS[0]);_VLS;lt+@If(encode;@URLEncode("UTF-8";@Text(_VLS));@Text(_VLS))+gt); @If(@Elements(_VLS)>1;"["+@Do(@Implode(_VLS;","))+"]";_VLS) ); result:=result +"," + R )); @Return(result[1]) ))JS代码
/** * 执行服务器公式 *formula 公式 *type 执行公司类型返回结果,json,text * module 自定义模块名称(如果在启用缓存的情况下,使用自定义模块名称执行查询,多次查询会使用缓存数据) * dbpath 执行公式所在数据库,如果未指定数据库,则在当前数据库进行查询 * unid 执行公式所对于的主文档,如果未指定unid,则不关联任何文档 */ function formula(formula,module,dbpath,unid){ var dbpath =dbpath ||this.dbpath //数据库地址,本模块有数据库地址信息 if(typeof formula=="string"){ formula = formula }else{ var arr=[]; for(i in formula){ arr.push(i+"="+encodeURIComponent(formula[i])) } formula = arr.join(",") } var deferred = new $.Deferred() var url = dbpath; //如果指定文档unid,则在文档内执行公式计算 if(unid){ url += "/(all)/"+unid+"?opendocument&form=SysComputerFormula&formula="+formula }else{ url += "/SysComputerFormula?readForm&formula="+formula } //如果指定module名称,则浏览器启用缓存时,会自动缓存信息,即便浏览器无缓存,require机制也会使用之前定义过的结论。 if(module){ url+= "&module="+module }else{ module = "FORMULA/T" + (new Date()).getTime()+"/R"+Math.random().toString().substr(2); url+= "&module="+module } $.getScript(url).then(function(){ require([module],function(data){ if(data.error==0){ deferred.resolve(data) }else{ deferred.reject(data) } },function(e){ deferred.reject(e) }) }).fail(function(e){ deferred.reject(e) }) return deferred }
2013-08-31
浏览4322
下载23