如何实现将不同的单据展示在同一个列表(一)原创
金蝶云社区-wbshcy
wbshcy
7人赞赏了该文章 1,622次浏览 未经作者许可,禁止转载编辑于2021年10月14日 17:31:57
summary-icon摘要由AI智能服务提供

本文描述了为了方便查看和操作不同类型单据,如办公用品登记单和领用单,提出并实现了一个解决方案。该方案通过构建一个动态表单,并在其中嵌入一个列表控件,展示两类单据的共同字段如单据编号和状态。通过自定义插件,实现列表数据的动态获取和超链接点击事件处理,以便根据单据编号打开相应的单据查看页面。最终实现了将不同单据整合到一个列表中,并通过超链接方便地查看具体单据信息的功能。

标签:

列表、不同单据

需求背景:

为了方便查看和操作单据,想要实现将不同类型单据放在同一列表展示;并且列表可通过超链接进入单据展开界面。比如将办公用品登记单和办公用品领用单放在同一个列表展示,方便物品管理员查看和操作单据。

实现方案:

建一个动态表单,动态表单放一个列表控件,列表控件先绑定某个单据,并且列表控件增加办公用品登记单和办公用品领用单共同的一些字段然后通过插件实现列表的自定义取数和超链接逻辑。

 

关键步骤1新建一个动态表单,增加一个列表控件,布局如图,列表绑定【办公用品登记单】实体,并增加单据编号、单据状态等字段,单号设置超链接,如图:

 

01.png

 

 

关键步骤2.给动态表单注册表单插件,在插件beforeBindData事件注册CreateListDataProviderListener,然后在createListDataProvider事件自己构造列表展示的数据。

@Override
public void initialize() {
// TODO Auto-generated method stub
super.initialize();
BillList billlist=this.getView().getControl("billlistap");
billlist.addCreateListDataProviderListener(this);
}
@Override
public void createListDataProvider(BeforeCreateListDataProviderArgs paramBeforeCreateListDataProviderArgs) {
// TODO Auto-generated method stub
paramBeforeCreateListDataProviderArgs.setListDataProvider(new ListDataProvider() {
@Override
public DynamicObjectCollection getData(int start, int limit) {      
return getCollection();//自己重新取数
}
});
}

private DynamicObjectCollection getCollection() {
QFilter  filter= new QFilter("billstatus", QCP.not_equals,"A");//根据业务需求自定义数据过滤条件
DynamicObjectCollection dCollection1 = QueryServiceHelper.query("kded_officesuppliesbill", "billno, billstatus,id", new QFilter[] {filter});
DynamicObjectCollection dCollection2 = QueryServiceHelper.query("kded_offsupregisterbill", "billno, billstatus,id", new QFilter[] {filter});
 dCollection1.addAll(dCollection2);
 return dCollection1;//返回两个单据的数据集合
}


 

关键步骤3.给列表控件注册超链接监听,然后重写超链接事件,超链接事件根据单据编号区分打开的是哪个单据

@Override
public void registerListener(EventObject e) {
// TODO Auto-generated method stub
super.registerListener(e);
//注册列表控件超链接点击监听
BillList billlist=this.getView().getControl("billlistap");
billlist.addHyperClickListener(this);  
}
@Override
public void hyperLinkClick(HyperLinkClickEvent paramHyperLinkClickEvent) {
// TODO Auto-generated method stub
// 获取单据列表控件
BillList billList = (BillList) this.getControl("billlistap");  
// 获取列名
String fieldName = paramHyperLinkClickEvent.getFieldName();  
if (fieldName.equals("billno")) {
// 取消系统自动打开本单据的处理
//arg0.setCancel(true);
// 获取当前选中行记录,注意:得到的结果是记录的主键ID
ListSelectedRow currow = billList.getCurrentSelectedRowInfo();
BillShowParameter showParameter = new BillShowParameter();
//根据单据编号确定要打开是哪个单据
String formid;
if(currow.getBillNo().startsWith("SRB")) {
formid="kded_offsupregisterbill";//办公用品登记单
}else {
formid="kded_officesuppliesbill";//办公用品领用单
}
showParameter.setFormId(formid);
showParameter.setPkId(currow.getPrimaryKeyValue());
showParameter.setCaption(currow.getBillNo());
showParameter.getOpenStyle().setShowType(ShowType.MainNewTabPage);
showParameter.setStatus(OperationStatus.VIEW);
this.getView().showForm(showParameter);    
} 
}


 

实现效果:

列表展示了不同单据的数据,且超链接能打开不同的单据查看页面。

 

02.png

代码类见附件

赞 7