OperationServiceHelper.executeOperate执行操作,提示无权解决方案
1 问题描述
有些时候,开发因业务某种需要,会在表单插件,或者后台程序的某些时机通过调OperationServiceHelper.executeOperate来触发操作,偶尔会遇到提示没有执行权限的异常。但是检查用户功能权限报表(userspermreport)发现有权
2 原因分析
(1)此类问题涉及到权限发布应用相关知识:
如果实体指定在“原生应用” 或 “权限发布应用”下验权, 那么就按该应用验权。否则统一按“原生应用”验权。
https://developer.kingdee.com/article/305300216477853696?productLineId=29&isKnowledge=2&lang=zh-CN
(2)当自行调用OperationServiceHelper时,如果不传入需要验权应用id,如上验权逻辑所述,会默认按所属应用验权,往往会与业务需求不符,导致提示无权的问题。
3 解决方法
(1)executeOperate有一个OperateOption的入参,这个是操作上下文。
后台验权时,会从操作上下文(OperateOption)中获取自定义参数值,以用于按应用验权。
(2)修改后代码如下
OperateOption operateOption = OperateOption.create(); operateOption.setVariableValue(OperateOptionConst.CURRBIZAPPID, getView().getFormShowParameter().getAppId()); OperationResult operationResult = OperationServiceHelper.executeOperate("操作", "单据标识", 数据, operateOption);
OperateOptionConst.CURRBIZAPPID是常量,需要指定应用id
getView().getFormShowParameter().getAppId()这样能拿到表单在界面上所处的应用,一般在表单插件中调用。
(如果实在拿不到表单在界面上显示时所在的应用id,需要想其他办法来获取,只有万不得已时,才考虑写死验权的appid)
4 注意事项
(1)通过url访问验权也会有此类问题,需要用”app“这个参数指定应用编码,如
http://***.com/index.html/?app=y1&formId=单据标识(假设应用的编码是y1)
(2)移动端验权场景同理,参考下面方案处理
https://developer.kingdee.com/article/300314502930206464?productLineId=29&lang=zh-CN
OperationServiceHelper.executeOperate执行操作,提示无权解决方案
本文2024-09-23 00:17:23发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-138518.html