报表动态增减列

应用场景
在查询报表时,可根据页面参数、过滤条件、查询结果,动态添加、删除报表列表的显示列
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.报表动态增减列
应用场景在查询报表时,可根据页面参数、过滤条件、查询结果,动态添加、删除报表列表的显示列ps:动态增删列只支持插件实现 实现思路在表...
点击下载文档文档为doc格式
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
上一篇
已经是第一篇



