BOS运行时-简单报表-支持基础资料数据规则

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

BOS运行时-简单报表-支持基础资料数据规则

针对于列表情况,设置基础资料的数据规则可以自动实现数据过滤。因为列表的取数由平台引擎生成取数SQL,构造出数据规则的过滤条件,自动实现数据的过滤功能。


对于简单报表来说,报表是由插件生成一个数据库临时表,由于这个动作是插件来做的,所以就需要插件来获取数据规则,并将sql拼到对应的过滤条件上,以下以采购订单的报表举例,看下具体的插件实现逻辑。


先看配置情况和展示效果:

image.webp


image.webp


在不写代码的情况下,报表是不会过滤对应的数据,这里需要在构造报表的临时表时,设置过滤条件,参考一下代码

 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;
        }


当我们调试报表插件时,我们得到具体的过滤条件,如下:

image.webp

image.webp


对应的报表配置数据表是T_BAS_RptDataRuleConfig

如果是二开报表,需要在T_BAS_RptDataRuleConfig表中预置数据,使用insert语句插入自己的报表formid,对应基础资料的formid,然后是对应报表的中表别名。

如果我在在自己的报表插件中,对供应商校验数据规则,那么应该插入报表唯一标识,BD_Supplier,表别名(如T1,对应创建表中供应商的id表别名)预置数据可以参考系统的格式,建议FID设置超过十万,避免与系统重复。

image.webp



最后,当获取权限的过滤条件后,需加到临时表的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运行时-简单报表-支持基础资料数据规则

针对于列表情况,设置基础资料的数据规则可以自动实现数据过滤。因为列表的取数由平台引擎生成取数SQL,构造出数据规则的过滤条件,自动实...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息