Domino WEB 应用开发(2)—— 从Js执行公式开始

本资料无预览

如感兴趣请 1 金币购买后下载

立即下载

资料简介:
不依赖代理,实现 js直接执行公式的原理
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

已下载用户的评价7.70分

您还未下载该资料,不能发表评价;
查看我的 待评价资源
zhangyan559zhangyan559软件开发工程师水务2017-01-26
有用
非常有用,学习中
mn3711698mn3711698软件实施顾问天晴2014-05-25
没用
这个是一定要支持的呀,这么好的东西
yang0158yang0158软件开发工程师xxxxx2013-09-01
没用
不错

贡献者

leoyin软件开发工程师,海康
X社区推广