BOS运行时-简单报表-支持基础资料数据规则
针对于列表情况,设置基础资料的数据规则可以自动实现数据过滤。因为列表的取数由平台引擎生成取数SQL,构造出数据规则的过滤条件,自动实现数据的过滤功能。
对于简单报表来说,报表是由插件生成一个数据库临时表,由于这个动作是插件来做的,所以就需要插件来获取数据规则,并将sql拼到对应的过滤条件上,以下以采购订单的报表举例,看下具体的插件实现逻辑。
先看配置情况和展示效果:
在不写代码的情况下,报表是不会过滤对应的数据,这里需要在构造报表的临时表时,设置过滤条件,参考一下代码
private string GetBaseRuleFilterStr(IRptParams filter) { //对应报表唯一标识 const string sReportId = "kf65b3565620f4469ad841b7c7b95a105"; //var listBaseDataTempTable = filter.BaseDataTempTable; IPermissionService perService = Kingdee.BOS.Contracts.ServiceFactory.GetPermissionService(Context); var listBaseDataTempTable = perService.GetBaseDataTempTable(Context, sReportId,new List<long>() { Context.CurrentOrganizationInfo.ID}); IBDCommonService service = Kingdee.K3.BD.Contracts.ServiceFactory.GetService<IBDCommonService>(this.Context); string sBaseDataIsolationSql = service.GetBaseDataIsolationSql(Context, "T_BAS_RptDataRuleConfig", sReportId, listBaseDataTempTable); //获取过滤条件 return sBaseDataIsolationSql; }
当我们调试报表插件时,我们得到具体的过滤条件,如下:
对应的报表配置数据表是T_BAS_RptDataRuleConfig
如果是二开报表,需要在T_BAS_RptDataRuleConfig表中预置数据,使用insert语句插入自己的报表formid,对应基础资料的formid,然后是对应报表的中表别名。
如果我在在自己的报表插件中,对供应商校验数据规则,那么应该插入报表唯一标识,BD_Supplier,表别名(如T1,对应创建表中供应商的id表别名)预置数据可以参考系统的格式,建议FID设置超过十万,避免与系统重复。
最后,当获取权限的过滤条件后,需加到临时表的where语句后面,比如原来插件中临时表过滤条件是
where 1=1 and f1=123
权限接口返回的是 AND T1.FSUPPLERID IN (SELECT FSUPPLERID FROM TMPTABLE),那么最后拼接条件是
where 1=1 and f1=123 AND T1.FSUPPLERID IN (SELECT FSUPPLERID FROM TMPTABLE)
这样就实现了按照基础资料数据规则进行报表过滤
请教下:如何引用的服务组件?我使用代码
IBDCommonService service = Kingdee.K3.BD.Contracts.ServiceFactory.GetService<IBDCommonService>(this.Context);
这一段总报错,引用Kingdee.K3.BD.APP.Core 又报错:服务未注册。。
BOS运行时-简单报表-支持基础资料数据规则
本文2024-09-16 18:34:21发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-23025.html