OperationServiceHelper.executeOperate执行操作,提示无权解决方案

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

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执行操作,提示无权解决方案

1 问题描述有些时候,开发因业务某种需要,会在表单插件,或者后台程序的某些时机通过调OperationServiceHelper.executeOperate来触发操...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息