单据联查实现步骤:
1.元数据设置
元数据主实体实现IFlowBizItf业务接口,此接口针对联查扩展了两个字段:来源单据类型和来源单据id,将这两个属性对应到元数据的子实体对应字段上
2.单据类型注册
可能是由于老脚本的原因,还有很多的单据类型配置中的“来源数据查询类”使用了5系列提供的供应链查询类,在V6.1中都需要删除,保持为空的状态,使用默认的查询类
3.按钮配置
在界面上添加联查按钮Action:nc.ui.pubapp.uif2app.actions.LinkQueryAction,需要设置model和单据类型,配置如下:
<bean id="actiont18" class="nc.ui.pubapp.uif2app.actions.LinkQueryAction"> |
关于openMode的问题,若不设置,则默认为单据联查,联查打开的单据没有提交、审批之类的按钮。
可以在界面配置文件中联查按钮中配置openMode为1,表示该按钮为单据追溯,打开的单据有审批按钮。
也可以在按钮的类中赋值 this.setOpenMode(1);
4.打开界面监听
为了从联查界面能直接打开单据,需要被打开单据配置打开节点监听器,典型的配置如下所示,
<!-- 打开节点监听 --> |
5.多来源单据处理
系统提供了一个多来源单据的查找器,nc.impl.pubapp.linkquery.MutiSrcTypeDataFinder,这个类需要传入返回多个记录上下游关键字段信息IBillFlow的工厂IMutiBillFlowFactory,通过此工厂返回的多组信息进行多次查找,业务组可根据各自的记录多源头单据的情况实现工厂并创建自己的BillFlow。
目前系统默认提供了两种IMutiBillFlowFactory的实现:
- nc.impl.pubapp.linkquery.SingleTagSuportBillFlowFactory 此工厂创建的IBillFlow是基于单属性的上游单据记录方式,适用于采用一个字段记录固定类型的上游单据id的情况,使用时只需要在对应id字段的元数据标签上配置如下标签:SRCTYPE:单据类型,某个字段是来源于销售订单,则标签配置为:SRCTYPE:30
- nc.impl.pubapp.linkquery.SrcGroupTagSuportBillFlowFactory 此工厂创建的IBillFlow是基于成对字段的上游单据记录方式,适用于对于每张上游单据都是用两个字段来记录的情况,一个字段记录上游的单据类型,一个字段记录上游的单据id,使用时对于每一组的来源单据type和id,在元数据标签上分别配上“SRCGROUP_TYPE:X”和“SRCGROUP_ID:X”, 其中X可以自己任意指定,只要保证对于每一组一致即可; 比如:单据有两组上游单据字段,分别是srctype1、srctypeid1和srctype1、srctypeid2, 那么在元数据标签上可以这样配置:
字段名 A srctypeid1 srctype2 SRCGROUP_TYPE:B srctypeid2 SRCGROUP_ID:B | 标签 |
---|---|
srctype1 | SRCGROUP_TYPE:A |
srctype1 | SRCGROUP_ID:A |
srctype2 | SRCGROUP_TYPE:B |
srctype2 | SRCGROUP_ID:B |
注册方法.
业务组实现自己的MutiSrcTypeDataFinder类,传入的工厂根据自己的情况进行选择,可能的代码如下:
public class TagMutiSrcTypeDataFinder extends MutiSrcTypeDataFinder { public TagMutiSrcTypeDataFinder() { super(); // 声明一个组合工厂 CompositeBillFlowFactory factory = new CompositeBillFlowFactory(); // 默认的支持元数据接口的工厂 factory.addFactory(new SingleTagSuportBillFlowFactory()); // 单字段的工厂 factory.addFactory(new SrcGroupTagSuportBillFlowFactory()); // 设置工厂类 this.setBillFlowFactory(factory); } } |
单据联查自由报表的方法
ReportDrillItem[] drillItems = new ReportDrillItem[1]; |