插件案例 —— 换个思维查系统报表

业务背景
有的时候,需要查询通版的报表,但是有些业务取数逻辑,挺复杂的。通常我们的做法可能是查找对应的报表取数逻辑,然后把取数逻辑罗列出来,然后根据自己的业务查询,但是可以换个思路,从底层查询报表。这里需要一定的代码抽象思维。
技术思路
对于BOS来说,所有的报表就只是一张DataTable,然后根据DataTbale进行渲染,分页等内容。那么就存在一个通用的GetData方法,这些方法就由抽象插件来进行实现,并让派生类进行实现。那么我们查询通版报表,就可以直接调用BOS的查询代码,触发业务过滤方案,等内容。
代码示例
//获取基本元数据信息
var filterMetadata = FormMetaDataCache.GetCachedFilterMetaData(this.Context);
var reportMetadata = FormMetaDataCache.GetCachedFormMetaData(this.Context, "报表FormId");
var reportFilterMetadata = FormMetaDataCache.GetCachedFormMetaData(this.Context, "报表过滤方案FormId");
//获取报表过滤方案的构建基础,便于后续模型构建
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();
//获取过滤方案,可以通过LoadScheme("Id"),查询报表默认存在的一些过滤方案
model.LoadDefaultScheme();
var filter = model.GetFilterParameter();
var det = reportFilterMetadata.BusinessInfo.GetDynamicObjectType();
//这里填写普通过滤方案,填充实体信息
DynamicObject filterObj = filter.CustomFilter;
filterObj["StockOrgId"] = qpovOrgId;
filterObj["BeginDate"] = qpovDate;
filterObj["EndDate"] = qpovDate;
filterObj["BeginStockId_Id"] = qpovStockId;
filterObj["BeginStockId"] = qpovStock;
插件案例 —— 换个思维查系统报表
业务背景有的时候,需要查询通版的报表,但是有些业务取数逻辑,挺复杂的。通常我们的做法可能是查找对应的报表取数逻辑,然后把取数逻辑罗...
点击下载文档文档为doc格式
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
上一篇
已经是第一篇



