java 调用nc查询引擎_用友NC系统查询引擎应用心得

本文分享了关于用友NC系统查询引擎的应用心得,包括查询引擎是否支持视图、交叉报表的合计项添加、保存查询条件的方法、穿透查询的实现、报表发布后的功能限制及其解决策略等关键知识点。
摘要由CSDN通过智能技术生成

41528d3028836879cd698677c3999917.gif用友NC系统查询引擎应用心得

1. 查询引擎向导设计可否使用视图? 答:需要将视图维护到数据字典中才可使用,这个视图一定要物理创建也可用也可直接在 SQL 手工设计中使用2. 在交叉报表上,一些常用到的合计项目要如何添加,如报表最后添加的合计行、合计列要如何添加?答:对于交叉报表列合计,在交叉属性页签“值”上单击鼠标,会弹出“小计设置”对话框,根据需要打上勾即可,入下图所示运行结果如下,后两列对于合计行,运行显示结果后,右键就有小计合计功能3. 报表发布为“报表模板节点”后,查询条件使用比较灵活,能否支持用户灵活使用?比如,用户使用多个存货编码作为查询条件答:QE 与模板只是实现了简单应用的集成,无法实现一个查询参数与多行查询模板条件之间的对应。其原因是,QE 的一个查询参数只能有一个固定取值,这个参数可以在查询定义中被多次引用,引用处才决定筛选条件的逻辑;而查询模板直接定义的就是筛选条件(字段+操作符+ 值) 。查询模板与 QE 之间以参数哈希表的方式实现参数传递,当查询模板利用自身功能将一个参数对应的筛选条件复制成多个筛选条件,那么构造参数哈希表时只能相互冲掉,在 QE 的 SQL 整理处无法得到该参数的不同取值,也就无法加以区别。所以,QE 与模板的集成支持不了查询模板的高级功能,包括通过项目名称下拉列表和增加自定义条件等方式基于一个参数构造多行条件。对于范例中提及的应用,只能支持到“商品编码 in ( 编码 1 , 编码 2 ,.)”的应用。4. 查询引擎报表如何保存查询条件?答: a)发布为普通报表节点,见下图b)V56 版本支持发布为独立节点保存查询条件,如下图[历史设置] 中可保存查询条件5. 穿透穿透分查询间穿透和穿透到节点a) 查询间穿透这种穿透方式虽然便捷,但是有些场景却不太适用:假设查询 A 穿透到查询 B,查询 B 中有需要隐藏的 ID 列或者有公式列举例:查询A如下查询A根据存货id穿透到查询B,穿透规则中加如下代码String value = getPenue(“CINVBASDOCID“);getHashParam().put(“cinvbasdocid“, new ParamVO(value));StorageDataSet ds = ModelUtil.getQueryResult(“z10“, getHashParam(), getEnvInfo().getAccountDsn());setId(“z10“);setDataSet(ds);穿透结果结果如下:上面显示结果中存货的公式列未执行公式,显然不合要求b) 穿透到节点,分下面两种1)查询A穿透到单据B,只要目标单据实现 ILinkQuery 接口,就可以根据单据号穿透到对应单据2)查询A穿透到报表B(报表B为查询B发布后的表报节点) ,针对上面查询间穿透不适合的场景,穿透到报表节点就能解决该问题将报表B发布为报表节点后,将功能注册脚本类名修改为"nc.ui.pub.querymodel.LinkableQueryNodeUI",如图查询A穿透到表报B的运行结果如下6. 报表发布为普通报表节点后,对 in 操作符的支持情况如何? 答:V56 版本及之前版本,均不支持 in 操作符,因此不适合将参数包含 in 操作符的自定义查询发布为普通报表节点;后续版本是否支持未知.现象如下:在 V56 环境中,进行查询引擎报表设计时参数设置如下 ,操作符为{=@in}将节点发布为普通报表节点后,查询对话框中的操作符显示为两个“等于“, 并且无论使用哪个操作符,都报“查询执行有误 “;并且参照选择值时可以多选,返回到界面上时为多值,但是焦点移开就变成一个值7. 表报发布为普通节点是否支持新查询模板?答:V56及以前版本均未支持新查询模板8. 如何实现发布一个节点,根据参数决定执行不同查询?效果如下:在SQL整理中加如下代码:String parc = (getValue(“cby“) == null) ? ““ : getValue(“cby“).toString();//根据执行方案确定调用哪个查询String rptID = null;if ( parc.equals(“执行 z1 查询“)){rptID = “z1“;} else if ( parc.equals(“执行 z3 查询“)) {rptID = “z3“;}//改变查询定义changeDef(rptID);9. #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)10. 如何实现一个查询设计完成多种动态交叉?效果如下:所加 SQL 整理代码片段如下:// 获得“交叉样式”参数的值String par = (getValue(“crossby“) == null) ? ““ : getValue(“crossby“).toString();if (par.equalsIgnoreCase(“按仓库交叉“)) {// 设置不同交叉样式QueryBaseDef qbd = getQueryBaseDef();RotateCrossVO rc = qbd.getRotateCross();rc.setStrRows(new String[] {“invname“});//设置行砝码rc.setStrCols(new String[] {“storname“,“//设置列砝码rc.setStrVals(new String[] {“nnumber“, “npacknumber“});//设置值砝码setQueryBaseDef(qbd);}上面代码中“&type“的顺序相当于下图中的"★交叉砝码★ "的排列顺序&type 必须有,否则结果不交叉11. 查询引擎分页显示在参数定义配置参数页设置是否分页和每页行数结果如下注意:如果查询设计有数据加工代码,则不支持分页显示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值