分页账表做监控预警二开方案原创
金蝶云社区-fengyj
fengyj
6人赞赏了该文章 1,602次浏览 未经作者许可,禁止转载编辑于2021年03月23日 15:46:52

一、业务场景

       因业务需求,需要对分页账表数据设置监控预警,以便提醒业务人员及时处理,而目前监控预警方案仅支持简单账表而不支持分页账表的,因此需要把分页账表的的数据转换成简单账表,用简单账表作为一个中间桥梁。


二、二开方案

       1)新增简单账表以及过滤条件框,编写通过调用分页账表接口的服务端插件获取数据;

       2)新增监控对象,数据源设置为新增的简单账表;

       3)配置监控方案;


        参考资料:     

              1)创建监控方案:https://vip.kingdee.com/article/14124

              2)调用接口获取分页账表数据:https://vip.kingdee.com/article/25709

              3)创建简单账表以及相关资料:https://vip.kingdee.com/article/64993872014591232


三、示例

       以库存账龄分析表作为例子进行说明

      1)新建简单账表并配置字段和过滤条件框,如下:

库存账龄简单账表.png


       2)编写简单账表服务端插件并注册到简单账表

[Description("库存账龄分析简单账表")]
public class InvAgeAnalyzeTestRpt : SysReportBaseService
{
	public override void Initialize()
	{
		//设置为简单账表
		base.Initialize();
		this.ReportProperty.ReportType = ReportType.REPORTTYPE_NORMAL;
		this.ReportProperty.IsUIDesignerColumns = true;         
	}

	public override void BuilderReportSqlAndTempTable(IRptParams filter, string tableName)
	{
		ISysReportService sysReporSservice = ServiceFactory.GetSysReportService(this.Context);
		var filterMetadata = FormMetaDataCache.GetCachedFilterMetaData(this.Context);//加载字段比较条件元数据。
		var reportMetadata = FormMetaDataCache.GetCachedFormMetaData(this.Context, "STK_InvAgeAnalyzeRpt");//加载物料收发明细表
		var reportFilterMetadata = FormMetaDataCache.GetCachedFormMetaData(this.Context, "STK_InvAgeAnalyzeFilter");//加载物料收发明细表表过滤条件元数据。
		var reportFilterServiceProvider = reportFilterMetadata.BusinessInfo.GetForm().GetFormServiceProvider();
		var model = new SysReportFilterModel();
		
		model.SetContext(this.Context, reportFilterMetadata.BusinessInfo, reportFilterServiceProvider);
		model.FormId = reportFilterMetadata.BusinessInfo.GetForm().Id;
		model.FilterObject.FilterMetaData = filterMetadata;
		model.InitFieldList(reportMetadata, reportFilterMetadata);
		model.GetSchemeList();
		//过滤方案的主键值,可通过该SQL语句查询得到:SELECT * FROM T_BAS_FILTERSCHEME
		var entity = model.Load("60502535e5269e");
		var filterParam = model.GetFilterParameter();
		IRptParams p = new RptParams();
		p.FormId = reportFilterMetadata.BusinessInfo.GetForm().Id;
		//StartRow和EndRow是报表数据分页的起始行数和截至行数,一般取所有数据,所以EndRow取int最大值。
		p.StartRow = 1;
		p.EndRow = int.MaxValue;
		p.FilterParameter = filterParam;
		p.FilterFieldInfo = model.FilterFieldInfo;
		p.CustomParams.Add("OpenParameter", "");
		MoveReportServiceParameter param = new MoveReportServiceParameter(this.Context, reportMetadata.BusinessInfo, Guid.NewGuid().ToString(), p);
		var rpt = sysReporSservice.GetListAndReportData(param);
		System.Data.DataTable dt = new System.Data.DataTable();
		dt = rpt.DataSource;
		
		//获取字段名并生成临时表
		List<string> fields = new List<string>();
		foreach (System.Data.DataColumn col in dt.Columns)
		{
			fields.Add(col.ColumnName);
		}
		string createTable = string.Format(@"create table {0}({1});", tableName, string.Join(" varchar(50),", fields).TrimEnd(new char[] { ',' }) + " varchar(50)");
		DBUtils.Execute(this.Context, createTable);

		//把数据填充到临时表
		dt.TableName = tableName;
		DBUtils.BulkInserts(this.Context, dt);
	}
}


        3)新增监控对象

              新增监控对象参考链接:https://vip.kingdee.com/article/8671

              

库存账龄监控对象.png

        

         4)新建监控方案

              参考链接:https://vip.kingdee.com/article/14124

赞 6