1、适用范围:以收证查询为例:要实现这样的效果1语义模型设计1。1添加分类。序号与菜单注册的编码相同.1.2添加语义模型。保存时,弹出提示框“是否启动设计向导”,点“是”。进入设计器1.3选择【元数据】或者【元定义】,都可以。区别在于【元定义】比【元数据】多了“语义模型的选择.我们选【元定义】。说明:a有些基础档案,我们需要显示它们的名称,例如财务组织,币种。这里有两种实现。b这里先说第一种:可以继续选择【元定义】,找到对应的基础档案的元数据,有多个就都选择上.1。4。 做好之后保存,点下一步.进入【连接条件】,通过主键关联将刚才选择的几张表关联起来。保存.1.5点下一步之后进入【选择字段】,选择
2、你要用来做展示的字段。说明a财务组织PK,集团PK,币种PK必须选择,用来处理精度b这里也可以实现基本档案,或者其他需要显示名称的字段。如图中红色字段标识。1.6.保存进入下一步。进入【描述器】,这里要做的是添加一些约束条件.1.7点击下一步,进入【选项】,这里不用做什么修改,直接保存,点击完成。这样语义模型就设计完成了。2自由报表预置自由报表是用来展示数据的。这里会有:小计合计、数据格式、查询注册、联查、穿透等内容。2.1跟语义模型一样,先建立分类,然后新增一个报表。保存,点【格式设计】2。2如图,右上角,关联刚才建立的语义模型.2。3设置可扩展区域。右键设置可扩展区域,如下图。2。4设置表
3、格字段的格式。2。5设置几个隐藏字段,这是后期用来处理精度的2。6插入小计合计如图点1.红色区域2是分组字段。红色区域4是合计字段,小计与合计,红色区域5是设置是否合计3代码实现的部分例:nc.ui.lcm。report.receive.ReceiveLCQueryAction这个类继承nc。ui.iufo。freereport.extend。DefaultQueryAction。实现doQueryAction()这个类里可以有注册精度处理的条件,查询模板过滤,加载自由报表格式等实现.具体内容可以参考上面提供的类。3。1上面的代码写完之后。打开刚才做的自由报表预置,格式设计数据功能注册。如图在
4、【查询扩展类】中注册刚才写的查询类。要是订阅报表的话,订阅条件设置也写上刚才的类(一般条件设置和查询写在同一个类中)。【报表订阅条件处理类】:在这里我们要实现这个类来获得我们的查询条件,调试订阅类报表的话,点“立即执行”,可以在这里打断点,看下传递的条件是否正确。例:nc。vo。fbm。report.digitbusi。processor.APBillAccDetailRptConvertor实现com。ufida.report.anareport。base。DefaultSubConvertor.4发布报表保存格式设计,回到列表界面4.1有两种类型的报表:【查询】和【报表】,【报表】其实就是
5、我们所说的可以订阅的报表。功能节点填完整,点击下一步.4.2同样填上菜单编码,点完成,发布成功,分配权限查看报表。4.2。1.点开节点之后会报这么个错。需要手动设置一个查询模板。选择使用元数据(或者不使用元数据,但字段必须和数据库中相同).如下图。4.2.2.去【功能节点默认模板设置】分配查询模板。重新打开节点5 订阅报表下面还是以收证查询为例,说明下订阅报表。发布报表:选择【报表】发布成功之后,点击订阅,界面如图1:PS:这里出现了个查询按钮,可能是我没删除开始发布的那个查询报表,而是直接覆盖造成的。订阅没有这个查询按钮.Ps1点击条件设置,会弹出查询模板,设置条件,确定,生成一条查询.Ps
6、2选中刚才生成的查询,点立即执行,查询出数据,并且执行一次会生成一条查询记录。如图2图1图26数据加工:数据加工实现的报表和上面那种方式实现的报表唯一区别就是取数方式。如下图,语义模型设计时选择【数据加工】点【数据加工】。6.1设置接口,元数据IContext context = getContext();DataSet ds = nc。pubitf。fac.report。CenterInterestBillSumFund。queryDataSet(context);setDataSet(ds);具体实现,参照上面的类。点击下一步,如果代码没有错误的话,会显示出来你设置的元数据.6。2其他和上
7、面步骤相同7交叉报表(例:应收票据到期分析)7.1效果数据根据日期区间交叉显示数据加工处理类:nc。pubitf.fbm.billacc。ObtainBillAccBooks。obtainAREndDateAnalyse(context);7。2交叉小计交叉小计:对于要小计合计的字段都要设置8动态表头(例:银行定期(通知)汇总利息清单)数据加工处理类:nc.pubitf.fac.report.CenterInterestBillSumFund。queryDataSet(context)前台入口类:nc。ui.fac.report.centerinterestsum。CenterInterest
8、SummaryQueryAction8.1效果查询模板中会有分组条件,选择那些条件,对应的在报表中也只显示这些字段。如下图:选择了币种,财务组织,存入银行三个条件。8.2 自由报表模型设计器 上面这种报表主要就是借助这个功能实现的,还有下面这种情况也是使用这种条件实现的。如下图:圆圈标注的字段示例:nc。ui。fac。report。centerinterestsum。CenterInterestSummaryQueryAction。createAdjustor(IContext, AbsAnaReportModel)9联查:将接口实现类注册到iufo_tracedataregister表;语义
9、模型设置工具-业务扩展:在对应的模块下面就能看到你刚才注册接口名称注册类中实现nc。pub.smart.tracedata.TraceDataInterface的traceData()方法;示例:nc。ui。fac.report.centerinterestsum。LinkQueryEntryImpl注意:这里会使用要去联查的目标单据主键、单据类型,所以在rowData中记得设置这两个值(可以使用报表隐藏项)。自由报表预置节点10 报表穿透由报表联查报表,在目标报表的查询入口类中实现如下方法。nc。ui。fbm.billacc。BillAccDailyQryAction。doQueryByDr
10、ill(Container, IContext, AbsAnaReportModel, FreeReportDrillParam)10。1打开自由报表预置:a自由报表预置-数据-穿透规则,如下图b穿透字段:参照到你语义模型设置的元数据字段,选择可穿透的字段。11数据格式打开自由报表预置节点格式设计格式数据格式12调试分析12。1非数据加工实现报表nc.bs.smart.data。SmartService。fetchDataSet(DataSetRequest),这个方法有执行查询的sql12.2 数据加工实现的报表这里我们经常会发现在fetchDataSet(),方法打断点的时候,sql语句中没有条件语句。这是因为报表平台会根据我们返回的dataset,将它插入到一张临时表中,再从临时表中查询数据,而这次从临时表中查询数据时,那里面的数据已经使我们自己处理过的数据了,所以它默认是符合你要求的数据。所以首先nc。bs。smart。data.DataProcessService.storeDataSet(DataSet, DbTable)查看我们插入临时表中的数据是否正确,其次再可以使用12.1的方法再调试。