用友NC系统查询引擎应用心得.doc

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用友NC系统查询引擎应用心得

查询引擎向导设计可否使用视图? 数据字典中QE与模板只是实现了简单应用的集成,无法实现一个查询参数与多行查询模板条件之间的对应。其原因是,QE的一个查询参数只能有一个固定取值,这个参数可以在查询定义中被多次引用,引用处才决定筛选条件的逻辑;而查询模板直接定义的就是筛选条件(字段+操作符+值)。查询模板与QE之间以参数哈希表的方式实现参数传递,当查询模板利用自身功能将一个参数对应的筛选条件复制成多个筛选条件,那么构造参数哈希表时只能相互冲掉,在QE的SQL整理处无法得到该参数的不同取值,也就无法加以区别。 ? 所以,QE与模板的集成支持不了查询模板的高级功能,包括通过项目名称下拉列表和增加自定义条件等方式基于一个参数构造多行条件。对于范例中提及的应用,只能支持到“商品编码 in (编码1,编码2,...)”的应用。 String value = getPeneValue(CINVBASDOCID); getHashParam().put(cinvbasdocid, new ParamVO(value)); StorageDataSet ds = ModelUtil.getQueryResult(z10, getHashParam(), getEnvInfo().getAccountDsn()); setId(z10); setDataSet(ds); 穿透结果结果如下: 上面显示结果中存货的公式列未执行公式,显然不合要求 穿透到节点,分下面两种 1)查询A穿透到单据B,只要目标单据实现ILinkQuery接口,就可以根据单据号穿透到对应单据 2)查询A穿透到报表B(报表B为查询B发布后的表报节点),针对上面查询间穿透不适合的场景,穿透到报表节点就能解决该问题 将报表B发布为报表节点后,将功能注册脚本类名修改为"nc.ui.pub.querymodel.LinkableQueryNodeUI",如图 查询A穿透到表报B的运行结果如下 报表发布为普通报表节点后,对in操作符的支持情况如何?   答:V56版本及之前版本,均不支持in操作符,因此不适合将参数包含in操作符的自定义查询发布为普通报表节点;后续版本是否支持未知. 现象如下: 在V56环境中,进行查询引擎报表设计时参数设置如下,操作符为{=@in} 将节点发布为普通报表节点后,查询对话框中的操作符显示为两个等于,并且无论使用哪个操作符,都报查询执行有误参照选择值时可以多选,返回到界面上时为多值,但是焦点移开就变成一个值 表报发布为普通节点是否支持新查询模板? 答:V56及以前版本均未支持新查询模板 如何实现发布一个节点,根据参数决定执行不同查询? 效果如下: 在SQL整理中加如下代码: String parExec = (getValue(execby) == null) ? : getValue(execby).toString(); //根据执行方案确定调用哪个查询 String rptID = null; if ( parExec.equals(执行z1查询)) { rptID = z1; } else if ( parExec.equals(执行z3查询)) { rptID = z3; } //改变查询定义 changeDef(rptID); #PENE_RULE_ID#是什么? 如:数据加工中有如下代码 StorageDataSet ds = ModelUtil.getQueryResult_Sql(id, getHashParam(), getEnvInfo( ).getAccountDsn(), getEnvInfo().getAccountDsn()); getHashParam().put(#PENE_RULE_ID#,new ParamVO( id)); setDataSet(ds); 答:#PENE_RULE_ID#是穿透用ID,在数据加工中这样使用可以实现发布一个节点根据不同参数值对应不同查询。(执行效果可参考8) 如何实现一个查询设计完成多种动态交叉? 效果如下: ? 所加SQL整理代码片段:String par = (getValue(crossby) == null) ? : getValue(crossby).toString(); if (par.equalsIgnoreCase(按仓库交叉)) { // 设置不同交叉样式 QueryBaseDef qbd = getQueryBaseDef(); RotateCrossVO rc = qbd.getRotateCross(); rc.setStrRows(new String[] {invname});//设置行砝码

文档评论(0)

almm118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档