SQL:关于SQL账表如何传递参数_CurrentUserOrgIds_给存储过程的应用
一、业务背景
在使用BOS平台编写SQL账表时,我们会有一些权限控制的需求,比如说根据当前用户、当前组织或者当前用户所拥有权限的组织来过滤数据,比如说你做了一个采购报表,要求每一个采购员看报表时只能看到自己创建的采购订单等等。BOS平台的SQL账表中预置了三个关键字参数,就是为了解决这个需求的,如下图。
二、遇到的问题
由于我们是多组织的企业,所以我们开发了一支报表,要求查看报表的人员,只能看到这个人员对应的组织的数据。举个例子,张三只有A组织的权限,那他在查看报表时,就只能看到A组织的数据。而李四有A组织、C组织的权限,所以李四就能看到这两个组织的数据,那这时候就可以使用_CurrentUserOrgIds_参数传递给SQL报表的数据源,在SQL语句或者存储过程里面根据_CurrentUserOrgIds_来设置条件。
SQL账表的数据源一般有SQL和存储过程两种,如上图,我是用的就是SQLSERVER的存储过程。
如果SQL账表数据源是SQL语句的话,使用这个_CurrentUserOrgIds_是没有问题的。但是如果SQL账表数据源是存储过程的时候,打开报表就会有报错,提示“一旦使用了'@name=value'形式之后,所有后续的参数就必须以'@name=value'的形式传递。”
根本原因就是因为当查询报表的用户有多个组织时,BOS平台传递的_CurrentUserOrgIds_的值是‘1,100005,100006,100007’这种格式,那数据库引擎就会以为有多个存储过程参数(因为存储过程的参数也是用“,”来分隔的,看上图就知道了),所以就报错了!
三、解决方案
解决方案如下:使用CHARINDEX函数进行处理一下就好了,具体代码看下面第130行即可!
最后,感谢@王文亮 大佬提供的协助
感谢分享。
SQL:关于SQL账表如何传递参数_CurrentUserOrgIds_给存储过程的应用
本文2024-09-16 17:17:06发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-14717.html