报表动态增减列
应用场景
在查询报表时,可根据页面参数、过滤条件、查询结果,动态添加、删除报表列表的显示列
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:动态增删列只支持插件实现 实现思路在表...
点击下载文档
上一篇:报表界面插件-插件基类下一篇:动态表单属性
本文2024-09-23 00:17:39发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-138545.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章