电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

必看!列表开发典型场景解决方案

来源:金蝶云社区作者:金蝶2024-09-234

必看!列表开发典型场景解决方案



列表是单据模型的重要组成部分,预置实体的数据展现、操作、权限、筛选排序、基本数据统计等框架逻辑。


对于常规单据来说,仅通过简单配置即可实现基本的列表查询功能;对于业务场景复杂的单据,则需要通过插件开发的方式实现个性化逻辑。


本文总结了列表自定义开发的典型场景解决方案,能够有效解决列表开发中遇到的常见问题,干货满满,推荐收藏 ~




1 典型场景一览


1. 列表包含多分录数据时,如何指定默认展示分录

2. 如何给列表上的基础资料过滤字段添加过滤条件?

3. 列表/单据列表控件如何添加过滤条件?

4. 如何在列表上添加字段、控件

5. 如何实现过滤字段的级联

6. 如何在列表上切换不同的布局或者实体


2 解决方案


场景1:列表包含多分录数据时,如何指定默认展示分录


苍穹单据支持多分录数据录入,但因为多分录数据是笛卡尔积关系,关联出来的数据无实际意义,故列表只能展示一个分录数据,或父子分录数据,无法同时展示同级分录数据


列表默认展示单据上的第一个分录数据,并在过滤控件中提供【查询范围】选项,用户可自定义切换要展示的分录数据。


列表过滤控件示例


如需指定默认展示分录,可通过以下两种方式进行调整:


方式一在【应用菜单】→【入口参数】中进行调整


如下图所示,单据上有两个单据体:entryentity、entryentity1,希望打开列表时默认展现entryentity1的数据:


单据体示例


如果单据是通过应用发布的,可以通过应用查找到应用菜单,在菜单的【高级信息】→【入口参数】配置selectedEntity参数,如下图所示:


配置selectedEntity参数示例


方式二插件调整


如果是通过showform打开的表单,比如通过列表的beforeShowBill事件来干预单据打开列表页面,可以通过如下代码来设置:


@Override
public void registerListener(EventObject e) {
    BasedataEdit basedataEdit = getControl("mulbasedatafield");
    basedataEdit.addBeforeF7SelectListener(new BeforeF7SelectListener() {
        @Override
        public void beforeF7Select(BeforeF7SelectEvent beforeF7SelectEvent) {
            ListShowParameter listShowParameter = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter();
            listShowParameter.seSelectedEntity("entryentity1");
        }
    });
}


场景2:如何给列表上的基础资料过滤字段添加过滤条件


对于列表基础资料字段的过滤,如需限制数据范围,则可通过为基础资料添加过滤条件的方式来实现。常用过滤及方案过滤的过滤条件设置方式如下所述:


方式一:配置方式(推荐,同时对常用条件和方案过滤生效


比如表单上有个“币别”字段,需要指定币别的范围为“人民币”,可以通过“过滤条件”设置货币编码为“RMB”,然后勾选“应用到列表”来实现,如下图所示:


配置方式示例


方式二:插件开发方式


  • 用条件】过滤条件个性化设置


如果列表上的过滤条件需要跟单据上有所区分,可根据过滤字段所在的不同位置处理。常用过滤基础资料字段,可通过插件方式设置过滤条件,代码示例如下:


@Override
public void filterColumnSetFilter(SetFilterEvent args) {
    if ("currencyfield.number".equals(args.getFieldName())) {
        args.addCustomQFilter(new QFilter("number", QFilter.equals, "RMB"));
    }
    super.filterColumnSetFilter(args);
}



当基础资料的过滤条件较多时,选项无法全部平铺出来。如果想要查看全部选项,需要点击“更多”打开F7。对此,需要单独对“更多”进行处理,代码示例如下:


@Override
public void filterContainerBeforeF7Select(BeforeFilterF7SelectEvent args) {
    if ("currencyfield.number".equals(args.getFieldName())) {
        args.addCustomQFilter(new QFilter("number", QFilter.equals, "RMB"));
    }
    super.filterContainerBeforeF7Select(args);
}



注意:下述代码可抽取为一个方法供filterColumnSetFilter和filterContainerBeforeF7Select调用:



    if ("currencyfield.number".equals(args.getFieldName())) {
        args.addCustomQFilter(new QFilter("number", QFilter.equals, "RMB"));
    }


  • 方案过滤】过滤条件个性化设置


对于方案过滤条件的个性化设置,有以下两种实现方法:


1、可以在设计器上配置方案过滤字段,如下图所示:


设计器配置方案过滤字段


2、插件开发方式,复用上面的filterContainerBeforeF7Select方法进行过滤条件设置,代码示例如下:


@Override
public void filterContainerBeforeF7Select(BeforeFilterF7SelectEvent args) {
    if ("currencyfield.number".equals(args.getFieldName())) {
        args.addCustomQFilter(new QFilter("number", QFilter.equals, "RMB"));
    }
    super.filterContainerBeforeF7Select(args);
}



场景3:列表/单据列表控件如何添加过滤条件


方式一:列表设计器配置方式


打开列表设计器,选中“单据列表”节点,通过“过滤条件”属性来进行设置,如下图所示:


列表设计器配置过滤条件示例


方式二:单据上的配置方式


1. 选中“单据列表”控件;

2. 打开“过滤条件”属性;

3. 通过“添加条件”来增加过滤;

4. 最后点击“确定”,然后“保存”。


单据上配置过滤条件示例


方式三:插件方式


  • 列表上添加过滤条件

通过重写setFilter方法实现,代码示例如下:


@Override
      public void setFilter(SetFilterEvent setFilterEvent) {
         setFilterEvent.addCustomQFilter(new QFilter("number", "=", "RMB"));
      }


  • 单据列表控件添加过滤条件

通过单据控件的addSetFilterListener进行注册,代码示例如下:


@Override
public void initialize() {
   BillList billList = getControl("billlistap");
   billList.addSetFilterListener(new SetFilterListener() {
      @Override
      public void setFilter(SetFilterEvent setFilterEvent) {
         setFilterEvent.addCustomQFilter(new QFilter("number", "=", "RMB"));
      }
   });
}


场景4:如何在列表上添加字段、控件


若想要在列表上展现额外元素,该怎

必看!列表开发典型场景解决方案

列表是单据模型的重要组成部分,预置实体的数据展现、操作、权限、筛选排序、基本数据统计等框架逻辑。对于常规单据来说,仅通过简单配置即...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信