库存预警报表添加自定义字段进行过滤二开方案原创
5人赞赏了该文章
735次浏览
编辑于2021年12月08日 16:01:22
一、在过滤框快捷页签添加过滤字段
由于过滤框条件页签中的字段会应用在取数临时表上,因此,如果新加的字段不是临时表中的列,则查询会报错。由此,我们新加的过滤字段只能加在快捷页签上。如下图:
二、二开报表服务插件处理过滤条件,伪代码示例如下:
public class WarnSafeStockRptTest : WarnSafeStockRpt { public override void BuilderReportSqlAndTempTable(IRptParams filter, string tableName) { DynamicObject customFilterObj = filter.FilterParameter.CustomFilter; //自定义条件,FtestFilter为自定义字段的标识 string testFilter = customFilterObj["FtestFilter"].ToString(); //自定义条件不为空才执行 if (!string.IsNullOrEmpty(testFilter)) { IDBService service = Kingdee.BOS.App.ServiceHelper.GetService<IDBService>(); string tmpDataTbl = service.CreateTemporaryTableName(this.Context); //获取数据 base.BuilderReportSqlAndTempTable(filter, tmpDataTbl); //假设添加的字段是在物料表T_BD_MATERIAL上,需要根据实际情况修改 string whereString = string.Format("TM.自定义字段='{0}'", testFilter); string sqlText = string.Format(@"SELECT T0.* INTO {0} FROM {1} T0 INNER JOIN T_BD_MATERIAL TM ON TM.FMATERIALID = T0.FMATERIALID WHERE {2}", tableName, tmpDataTbl, whereString); DBUtils.Execute(this.Context, sqlText); } else { base.BuilderReportSqlAndTempTable(filter, tableName); } } }
**注:此插件二开方案也适用于给报表新增自定义字段
三、注册二开插件
由于二开插件是继承了标准产品的插件的,引入在服务端插件处注册二开插件后,需要停用标准插件WarnSafeStockRpt。