报表动态增减列

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

报表动态增减列

应用场景

在查询报表时,可根据页面参数、过滤条件、查询结果,动态添加、删除报表列表的显示列

ps:动态增删列只支持插件实现

 

实现思路

在表单查询插件query方法中,根据页面参数、过滤条件、查询结果,创建临时标记变量,在getColumns方法中,根据临时标记变量动态添加/删除列。

 

示例

1. 动态增加列

1.1如下图所示,创建包含单价、数量字段的单据


1.2创建报表,绑定报表表单插件、报表查询插件;报表列表添加单价、数量字段,绑定数据源字段


1.3报表过滤控件添加复选框,动态添加总价列开关


2. 动态删除列

2.1 报表列表添加文本字段,标识为动态隐藏列,展示动态删除用,无需绑定数据源字段


2.2 报表过滤控件添加复选框,动态隐藏列开关


ps:动态对列进行增加和删除处理,推荐在 表单插件 的 getColumns() 方法中,在其他方法中也可实现此功能,但可能会导致其他不知名错误,增加时间成本。


插件示例代码

public class DynamicReportColumnFormPlugin extends AbstractReportFormPlugin {  
     
  } 
 
  public class DynamicReportColumnListDataPlugin extends AbstractReportListDataPlugin {  
     
     private String TAG_NAME = "dynamic_rpt_column_bill";  
     
      private String[] SELECTED_FIELD =  {"billno", "billstatus", "createtime", "pricefield",  
             "qtyfield", "unitfield"};  
     
      private static ThreadLocal<Boolean> isAddTotalColumn = new ThreadLocal<>();  
     private static ThreadLocal<Boolean>  isHideDynamicColumn = new ThreadLocal<>();  
   
  
        @Override  
     public DataSet query(ReportQueryParam queryParam, Object selectedObj) throws Throwable {  
    
        List<QFilter> searchFilterList = new ArrayList<>();  
           List<FilterItemInfo> filterItems = queryParam.getFilter().getFilterItems();  
         for (FilterItemInfo filterItem : filterItems) {  
               if ("showamountchkbox".equals(filterItem.getPropName()) && filterItem.getValue().equals(true)) {  
                    //动态添加总价列  
                SELECTED_FIELD[SELECTED_FIELD.length-1] = "pricefield*qtyfield as total";  
                isAddTotalColumn.set(true);  
            }  
   
            if ("dynamichide".equals(filterItem.getPropName()) && filterItem.getValue().equals(true)) {  
                 isHideDynamicColumn.set(true);  
             }  
        }  
  
        if (!CollectionUtils.isEmpty( queryParam.getFilter().getHeadFilters())) {  
             searchFilterList.addAll(queryParam.getFilter().getHeadFilters());  
    }  
          ORM orm = ORM.create();  
            String selectedField = StringUtil.stripChar(StringUtil.stripChar(Arrays.asList(SELECTED_FIELD).toString(), '['), ']');  
          return orm.queryDataSet(getClass().getName(),  
                    TAG_NAME,  
                 selectedField,  
                  searchFilterList.toArray(new QFilter[0]),  
                 queryParam.getSortInfo());  
     }  
   
    @Override  
        public List<AbstractReportColumn> getColumns(List<AbstractReportColumn> columns) throws Throwable {  
      
           if (isAddTotalColumn.get() != null && isAddTotalColumn.get().equals(true)) {  
               ReportColumn totalRpt = new ReportColumn();  
               totalRpt.setCaption( new LocaleString(ResManager.loadKDString("总价", "DynamicReportColumnListDataPlugin_1", "bos-plugin-sample")));  
                totalRpt.setWidth(new LocaleString("100px"));  
                totalRpt.setFieldKey("total");  
               totalRpt.setFieldType(ReportColumn.TYPE_DECIMAL);  
             totalRpt.setScale(2);  
    isAddTotalColumn.remove();  
            }  
      
          if (isHideDynamicColumn.get() != null && isHideDynamicColumn.get().equals(true)) {  
                    if (reportColumn instanceof  ReportColumn && "dynamichidefield".equals(((ReportColumn)reportColumn).getFieldKey())) {  
                         ((ReportColumn) reportColumn).setHide(true);  
                   }  
              }  
            isHideDynamicColumn.remove();  
        }  
   
         return columns;  
    }  
 }



相关链接

开发服务云新特性发布汇总

https://club.kdcloud.com/article/76619783260443136

 


报表动态增减列

应用场景在查询报表时,可根据页面参数、过滤条件、查询结果,动态添加、删除报表列表的显示列ps:动态增删列只支持插件实现 实现思路在表...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息