如何开发自定义列表界面-使用动态表单、单据列表控件、过滤控件实现原创
金蝶云社区-cosmicstudio
cosmicstudio
24人赞赏了该文章 1.1万次浏览 未经作者许可,禁止转载编辑于2022年04月15日 13:54:16
summary-icon摘要由AI智能服务提供

本文档描述了通过动态表单实现单据列表的需求背景、思路与方案以及实现过程。需求背景是要求通过动态表单实现单据列表,并包含过滤控件与单据列表控件,同时保证刷新操作不影响过滤条件。方案包括在页面添加工具栏、单据列表和过滤控件,并编写动态表单插件以实现联动和常用操作。实现过程中,详细说明了页面添加控件、编写插件以持久化过滤条件并实现刷新操作的具体步骤和代码实现。

关键词:动态表单,过滤控件,单据列表


一、需求背景

通过动态表单实现单据列表其中包含过滤控件与单据列表控件实现刷新操作保证刷新不影响过滤条件


二、思路与方案

通过动态表单实现单据列表那么就要考虑几个问题 

1. 添加过滤控件与单据列表

2. 单据列表与过滤控件联动

3. 过滤控件过滤列自定义

4. 实现刷新等常用操作

方案动态表单添加工具栏单据列表过滤控件

先在页面添加工具栏添加工具栏项,单据列表,过滤控件。编写动态表单插件, 通过插件实现单据列表与过滤控件联动, 实现列表常用操作


、实现过程

1. 页面添加工具栏添加工具栏项,单据列表,过滤控件,过滤控件过滤列自定义

image.png 

1

 

2. 编写动态表单插件 持久化过滤条件,实现刷新操作

package kd.bos.debug.mservice;

import kd.bos.entity.filter.FilterParameter;
import kd.bos.filter.FilterColumn;
import kd.bos.filter.FilterContainer;
import kd.bos.form.control.events.AfterSearchClickListener;
import kd.bos.form.control.events.FilterContainerInitEvent;
import kd.bos.form.control.events.FilterContainerInitListener;
import kd.bos.form.control.events.SearchClickEvent;
import kd.bos.form.events.*;
import kd.bos.form.plugin.AbstractFormPlugin;
import kd.bos.list.BillList;
import kd.bos.mvc.list.AbstractListView;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.EventObject;
import java.util.Iterator;
import java.util.List;

public class TestDataList extends AbstractFormPlugin implements FilterContainerInitListener, AfterSearchClickListener, AfterBindDataListener, BeforeBindDataListener {

    private static final String BILL_FORM_ID = "kdec_base_ttt";
    /** 单据列表标识*/
    private static final String BILLLISTAP = "billlistap";
    @Override
    public void initialize() {
        super.initialize();
        FilterContainer filterContainer = this.getControl(AbstractListView.FILTERCONTAINERID);
        if (filterContainer != null) {
            filterContainer.setBillFormId(BILL_FORM_ID);
            filterContainer.setNeedShareScheme(false);
            filterContainer.addFilterContainerInitListener(this);
        }
    }

    @Override
    public void registerListener(EventObject e) {
        super.registerListener(e);
        BillList list = this.getControl(BILLLISTAP);
        if(list != null){
            list.addAfterBindDataListener(this);
        }

        FilterContainer filterContainer = this.getControl(AbstractListView.FILTERCONTAINERID);
        if (filterContainer != null) {
            filterContainer.addAfterSearchClickListener(this);
        }
    }


    @Override
    public void beforeBindData(BeforeBindDataEvent beforeBindDataEvent) {
        // 单据列表触发绑定数据前的事件,需要先增加单据列表事件监听
    }

    @Override
    public void beforeBindData(EventObject e) {
        super.beforeBindData(e);
        BillList list = this.getControl(BILLLISTAP);
        if(list != null){
            list.addAfterBindDataListener(this);
            list.addBeforeBindDataListener(this);
            // 设置 常用、方案过滤条件参数
            list.setClientQueryFilterParameter(new FilterParameter(filterInit(), null));
        }
    }

    @Override
    public void afterBindData(AfterBindDataEvent afterBindDataEvent) {
        // 单据列表触发绑定数据后的事件,需要先增加单据列表事件监听

    }

    @Override
    public void afterBindData(EventObject e) {
        super.afterBindData(e);
    }

    /**
     * 初始化过滤按根据业务需求过滤
     * @return
     */
    private QFilter filterInit() {
        // TODO 初始化过滤

        return new QFilter("1", QCP.equals,"1");
    }

    /**
     * 初始化过滤列默认为单据->列表配置的过滤列
     * @param filterContainerInitEvent
     */
    @Override
    public void filterContainerInit(FilterContainerInitEvent filterContainerInitEvent) {
        List<FilterColumn> columnList = filterContainerInitEvent.getCommonFilterColumns();
        List<FilterColumn> schemeList = filterContainerInitEvent.getSchemeFilterColumns();

        Iterator<FilterColumn> filterColumnIterator =  columnList.iterator();
        while (filterColumnIterator.hasNext()){
            FilterColumn filterColumn = filterColumnIterator.next();
            String fieldName = filterColumn.getFieldName();
            if(StringUtils.equals(fieldName,"createtime") || StringUtils.equals(fieldName,"enable")) {
                //设置初始值
                //filterColumn.setDefaultValue("");
            }else {
                filterColumnIterator.remove();
            }
        }

        Iterator<FilterColumn> filterColumnSchemeIterator =  schemeList.iterator();
        while (filterColumnSchemeIterator.hasNext()){
            FilterColumn filterColumn = filterColumnSchemeIterator.next();
            String fieldName = filterColumn.getFieldName();
            if(!StringUtils.equals(fieldName,"createtime") && !StringUtils.equals(fieldName,"enable")) {
                filterColumnSchemeIterator.remove();
            }
        }
    }

    @Override
    public void click(SearchClickEvent searchClickEvent) {
        BillList list = this.getControl(BILLLISTAP);

        List<QFilter> qFiltersClient = new ArrayList();
        QFilter myPartner = filterInit();
        qFiltersClient.add(myPartner);

        // 只过滤制定属性
        QFilter qFilterApprove = searchClickEvent.getQFilter("createtime");
        if(qFilterApprove != null){
            qFiltersClient.add(qFilterApprove);
        }

        // 只过滤制定属性
        QFilter qFilterEnable = searchClickEvent.getQFilter("enable");
        if(qFilterEnable != null){
            qFiltersClient.add(qFilterEnable);
        }

        // 设置 常用、方案过滤条件参数
        list.setClientQueryFilterParameter(new FilterParameter(qFiltersClient, null));
        // 设置快速过滤/左数过滤参数
        list.setQueryFilterParameter(new FilterParameter(searchClickEvent.getFastQFilters(), null));

        this.getView().updateView(BILLLISTAP);
    }


    @Override
    public void afterDoOperation(AfterDoOperationEventArgs afterDoOperationEventArgs) {
        super.afterDoOperation(afterDoOperationEventArgs);
        // 点击刷新刷新页面
        if(StringUtils.equals("refresh",afterDoOperationEventArgs.getOperateKey())){
            BillList billList = this.getControl(BILLLISTAP);
            if (billList != null) {
                billList.clearSelection();
                billList.refresh();
            }
        }
    }
}

 

四、效果图image.png

2


、开发环境版本

V4.0.015.0


、注意事项

  1. 单据列表需要绑定单据实体。


、参考资料

【开发平台】指导手册

学习成长中心

表格控件-列表

插件开发-动态表单插件

 


图标赞 24
24人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!