单据列表控件使用案例-查询结果刷新时保留上次点选结果原创
金蝶云社区-范老师加油
范老师加油
2人赞赏了该文章 858次浏览 未经作者许可,禁止转载编辑于2022年01月07日 17:41:05

单据列表控件是可以嵌在单据,动态表单,基础资料的一种表格控件,通过与这些页面类型相融合,可以创造出一些更加高度定制化的功能,就比如bos_list是我们最常见的单据列表页面,它里面展示列表数据的控件也是单据列表控件.

         最近有个需求,在动态表单里的 单据列表控件点选了列表行之后,在改变过滤条件后,这个点选的列表行依然要存在查询结果里,作为对比行与其他的结果做对比,那这个需求是可以通过插件来实现的.(有同学可能就会问了,为什么不用系统自带的单据列表来做呢,因为使用系统的单据列表只能在过滤里面增加缩小查询范围的filter,而不能像这个需求一样扩大查询范围)

实现方案

         我们先来构建一下我们的测试页面

         1 新建一个单据页面,单据列表控件是需要有单据才能创建的,单据使用默认的模板就可以,

131.PNG

2 新建一个动态表单,表单里面添加两个控件,一个是我们用来切换过滤条件的下拉列表,下拉列表里面配置暂存提交审核,对应着ABC的值,另外一个就是我们的主角,单据列表控件了

在这里我们没有配置他的单据实体,这里可以通过插件代码里的初始化生效的,

132.PNG

3 添加插件,在动态表单上添加插件,

import kd.bos.bill.AbstractBillPlugIn;

import kd.bos.entity.datamodel.ListSelectedRowCollection;

import kd.bos.entity.datamodel.events.ChangeData;

import kd.bos.entity.datamodel.events.PropertyChangedArgs;

import kd.bos.form.events.SetFilterEvent;

import kd.bos.form.events.SetFilterListener;

import kd.bos.list.BillList;

import kd.bos.orm.query.QCP;

import kd.bos.orm.query.QFilter;

public  class CommonBillListPlugin4 extends AbstractBillPlugIn implements SetFilterListener{

         private QFilter qFilter;

    @Override

    public void initialize() {

        super.initialize();

        BillList billList = this.getView().getControl("kded_billlistap");

        billList.addSetFilterListener(this);//添加filter监听

        billList.setBillFormId("kded_aaaaa");//初始化单据实体--加载的单据页面标识,这个也可以在页面配置的

    }

    public void propertyChanged(PropertyChangedArgs e) {

        super.propertyChanged(e);

        ChangeData[] valueSet = e.getChangeSet();

        Object newValue = valueSet[0].getNewValue();

        Object oldValue = valueSet[0].getOldValue();

        if (null != newValue && newValue.equals(oldValue)) {

            return;

        }

        String propName = e.getProperty().getName();

        if (propName.equals("kded_combofield")) {

                 qFilter=null;

                 String status= (String) newValue;

            queryBillList(status);

        }

    }

    void queryBillList(String status){

              BillList billlistap = getControl("kded_billlistap");

         ListSelectedRowCollection selectedRows = billlistap.getSelectedRows();

         int[] rks=selectedRows.getRowKeys();

         Object[] list = selectedRows.getPrimaryKeyValues();

         qFilter = new QFilter("billstatus",QCP.equals,status);

         qFilter=qFilter.or("id",QCP.in,list);

         billlistap.selectRows(rks);

         billlistap.refresh();

    }

         @Override

         public void setFilter(SetFilterEvent paramSetFilterEvent) {

                   paramSetFilterEvent.addCustomQFilter(qFilter);

         }

}

实现效果

首先我们在单据上添加几条数据,最好各种状态的数据都有几条

133.PNG

我们在下拉列表选取提交,这个时候查询的结果的就会弹出提交的结果,我们这个时候点选一条数据134.PNG

然后我们再在下拉列表里面选择其他状态,就可以看到这次查询出来的结果不仅是可以查到当前状态的数据,也包括我们之前点选的数据


135.PNG



赞 2