动态表单弹窗单据列表控件引出原创
金蝶云社区-Jim2021
Jim2021
4人赞赏了该文章 1,763次浏览 未经作者许可,禁止转载编辑于2023年07月21日 16:37:26
  1. 前言

            该方式具有局限性,原理是打开动态表单时设置单据标识,把单据列表控件(动态表单里面的单据列表的标识和单据列表(引出单据的单据列表)的标识保存一,会把单据列表加载到单据列表控件,这样会把单据列表的操作代码加载到动态表单,目前根据我测试的情况来看支持引出数据(按列表)、引出数据(按引出模板)和引出数据(按引入模板)。

  2. 实现步骤

    2.1创建动态表单

            单据列表控件的标识要和单据列表的标识保持一致,单据列表的标识一般都是billlistap,里面的表格视图的标识为gridview。然后自己加一个按钮触发引出用。如下图。

    image.png

    image.png


    2.2动态表单相关触发引出的代码,就是代码执行引出数据(按列表)的操作代码。代码如下:


    package pexd.study.test.dynamicform.export;
    
    import kd.bos.form.control.Button;
    import kd.bos.form.control.Control;
    import kd.bos.form.plugin.AbstractFormPlugin;
    
    import java.util.EventObject;
    
    
    public class ExportFormPlugin extends AbstractFormPlugin{
    
    
        @Override
        public void registerListener(EventObject e) {
            // 按钮监听
            Button export = this.getView().getControl("pexd_export");
            export.addClickListener(this);
            Button export1 = this.getView().getControl("pexd_exportlist_expt");
            export1.addClickListener(this);
            Button export2 = this.getView().getControl("pexd_exportlist");
            export2.addClickListener(this);
        }
    
    
    
        @Override
        public void click(EventObject evt) {
            Control source = (Control)evt.getSource();
            // 根据不同按钮执行不同的操作代码
            if ("pexd_export".equals(source.getKey())){
                this.getView().invokeOperation("exportlistbyselectfields");
            }
            if ("pexd_exportlist_expt".equals(source.getKey())){
                this.getView().invokeOperation("exportlist_expt");
            }
            if ("pexd_exportlist".equals(source.getKey())){
                this.getView().invokeOperation("exportlist");
            }
        }
    }

    2.3打开动态表单

           我是在单据列表打开的动态表单,具体代码如下


    package pexd.study.test.dynamicform.export;
    
    import kd.bos.form.ShowType;
    import kd.bos.form.events.BeforeDoOperationEventArgs;
    import kd.bos.form.plugin.AbstractFormPlugin;
    import kd.bos.list.ListShowParameter;
    import pexd.common.util.GeneralUtil;
    
    
    public class TestFormPlugin extends AbstractFormPlugin {
        @Override
        public void beforeDoOperation(BeforeDoOperationEventArgs args) {
            if (GeneralUtil.isOperateKey(args,"open")) {
                // 打开原列表
                ListShowParameter showParameter = new ListShowParameter();
                showParameter.setFormId("pexd_test_dynamic_form");
                // 设置单据标识或者布局标识
                showParameter.setBillFormId("pexd_integration_tar");
                // 设置展开模式
                showParameter.getOpenStyle().setShowType(ShowType.Modal);
                //设置为不能多选,如果为true则表示可以多选
                showParameter.setMultiSelect(true);
                this.getView().showForm(showParameter);
            }else if (GeneralUtil.isOperateKey(args,"open1")) {
                // 打开新布局列表
                ListShowParameter showParameter = new ListShowParameter();
                showParameter.setFormId("pexd_test_dynamic_form");
                // 设置单据标识或者布局标识
                showParameter.setBillFormId("pexd_integration_tar_1");
                // 设置展开模式
                showParameter.getOpenStyle().setShowType(ShowType.Modal);
                //设置为不能多选,如果为true则表示可以多选
                showParameter.setMultiSelect(true);
                this.getView().showForm(showParameter);
            }
        }
    }
  3. 效果展示

    看附件里面的效果演示gif

  4. 结语

    这种方式可以实现动态表单的点击列表引出,想要不同的列表字段显示和引出可以通过不同的布局和列表右上角的小齿轮打开列表控制里面设置来实现。


赞 4