分页账表做监控预警二开方案原创
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)新建简单账表并配置字段和过滤条件框,如下:
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
4)新建监控方案
参考链接:https://vip.kingdee.com/article/14124