找回密码
 注册账号

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

初学者课程:T3自学|T6自学|U8自学软件下载课件下载工具下载资料:通资料|U8资料|NC|培训|年结积分规则 | 使用常见问题Q&A
知识库:U8 | | NC | U9 | OA | 政务U8|U9|NCC|NC65|NC65客开|NCC客开新手必读 | 任务 | 快速增金币用友QQ群[微信群]
查看: 4485|回复: 1

[学习] NC65报表开发如何实现联查钻取

[复制链接]
发表于 2021-10-22 11:34:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册账号

×
(1)自由报表,数据--联查设置中,可以定义联查类。需要实现接口nc.pub.smart.tracedata.TraceDataInterface
        @Override
        public ITraceDataOperator[] provideTraceDataOperator() {
                // 对应产生两个联查按钮:联查账期明细,联查资金明细
                return new ITraceDataOperator[]{new LinkZqdataDetailOperator(),new LinkCapitalDetailOperator()};
        }


(2):上面对应两个联查按钮。LinkZqdataDetailOperator 需要实现接口:nc.pub.smart.tracedata.ITraceDataOperator  和 nc.pub.smart.tracedata.IBeforeTraceData  

(3):联查的上下文数据,1是取当前报表的查询条件,2是,获取当前鼠标所在位置的维度坐标信息。再作为条件传递到联查的明细报表中。如:
     //下面获取原有查询条件
                SmartContext context = (SmartContext)param.getParam(FreeReportContextKey.KEY_ICONTEXT);
                    SoCapitalQueryVO condition = (SoCapitalQueryVO) context.getAttribute("LC1");  //这个值在主报表查询时,代码插入的。
                    SoCapitalQueryVO newCond = (SoCapitalQueryVO) condition.clone();

    // 读取当前行的相关值
   IRowData rowData = param.getRowData();
   String custcode = (String) rowData.getData("custcode");
                    if (!StringUtil.isEmptyOrNull(custcode)){
                        CustomerVO[] vos = (CustomerVO[]) HYPubBO_Client.queryByCondition(CustomerVO.class, "dr =0 and code ='" + custcode +"'");
                        if (vos !=null && vos.length>0){
                                newCond.setPk_customer("'" +vos[0].getPk_customer() + "'");   
                        }
                    }   //end


    //获取钻取参数
           public FreeReportDrillParam getReportDrillParam(TraceDataParam traceData) {
                FreeReportDrillParam drillParam = new FreeReportDrillParam();
                drillParam
                                .setTraceDatas(new SimpleRowDataParam[] { new SimpleRowDataParam(
                                                traceData) });
                drillParam.setDrillRule(new ReportDrillInfo());
                IQueryCondition queryCondition = (IQueryCondition) traceData
                                .getParam(FreeReportContextKey.KEY_IQUERYCONDITION);
                drillParam.setSrcCondition(queryCondition);
                return drillParam;
        }

    //准备参数,并弹出新的联查报表
                    FreeReportDrillParam drillParam = getReportDrillParam(param);
                    drillParam.getDrillContext().setAttribute(FreePrivateContextKey.KEY_MAINORG_ORG, newCond);
            FreeReportFuncletUtil.showReportInFrame("1001ZX100000000GFY6S", drillParam);
            //注:工品账期逾期明细  中该号 对应 iufo_freereport.id




 楼主| 发表于 2021-10-22 11:38:03 | 显示全部楼层
实际语义模型,数据加工处理时,IContext context = getContext();  获得上下文。
并传递都后台服务进行处理:
IContext context = getContext();

        DataSet ds = nc.bs.framework.common.NCLocator.getInstance()
                                                     .lookup(nc.itf.so.lc.IlcReportQuery.class)
                                                     .queryGpzqyqData(context);

        setDataSet(ds);
回复 点赞 拍砖

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|站长微信|Archiver|手机版|小黑屋|用友之家 ( 蜀ICP备07505338号|51072502110008 )

GMT+8, 2024-4-20 12:55 , Processed in 0.027974 second(s), 8 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表