库存预警报表添加自定义字段进行过滤二开方案原创
金蝶云社区-fengyj
fengyj
5人赞赏了该文章 735次浏览 未经作者许可,禁止转载编辑于2021年12月08日 16:01:22

一、在过滤框快捷页签添加过滤字段


       由于过滤框条件页签中的字段会应用在取数临时表上,因此,如果新加的字段不是临时表中的列,则查询会报错。由此,我们新加的过滤字段只能加在快捷页签上。如下图:

库存预警报表过滤框1208.png


二、二开报表服务插件处理过滤条件,伪代码示例如下:

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。

赞 5