使用RFC跳过权限校验的方法

1、业务背景

由于业务流程的复杂性,用户往往只具备部分功能的权限,导致在操作自开发程序时出现权限问题。例如前台限制了用户对销售订单的修改,而自开发功能中又涉及单据修改,此时一味限制权限,则无法正常使用功能。

2、使用RFC跳过权限

2.1、实现原理

将被权限限制的逻辑,封装成RFC函数,在调用时,使用拥有大权限的账号,远程调用目标系统(实际还是本系统)的RFC,则实际上在代码运行时,是使用了大权限的账号,执行了该函数。最终在凭证中的更改日志,也是记录了大权限账号的修改记录。

2.2、封装RFC

例如将销售订单修改逻辑封装到RFC中

复制BAPI_SALESORDER_CHANGE到ZBAPI_SALESORDER_CHANGE,确保远程模式

原参数保持不变,多增加一个返回结构E_RESULT,将调用BAPI的最终结果处理后返回,这样外部调用时,可以避免重复编写处理BAPI消息的代码

将commit和rollback写在函数中,待凭证处理完之后,执行事务,防止事务一直未提交,出现锁单情况

FUNCTION zbapi_salesorder_change.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(SALESDOCUMENT) LIKE  BAPIVBELN-VBELN
*"     VALUE(ORDER_HEADER_IN) LIKE  BAPISDH1 STRUCTURE  BAPISDH1
*"       OPTIONAL
*"     VALUE(ORDER_HEADER_INX) LIKE  BAPISDH1X STRUCTURE  BAPISDH1X
*"     VALUE(SIMULATION) LIKE  BAPIFLAG-BAPIFLAG OPTIONAL
*"     VALUE(BEHAVE_WHEN_ERROR) LIKE  BAPIFLAG-BAPIFLAG DEFAULT SPACE
*"     VALUE(INT_NUMBER_ASSIGNMENT) LIKE  BAPIFLAG-BAPIFLAG DEFAULT
*"       SPACE
*"     VALUE(LOGIC_SWITCH) LIKE  BAPISDLS STRUCTURE  BAPISDLS OPTIONAL
*"     VALUE(NO_STATUS_BUF_INIT) LIKE  BAPIFLAG-BAPIFLAG DEFAULT SPACE
*"  EXPORTING
*"     VALUE(E_RESULT) TYPE  BAPIRETURN
*"  TABLES
*"      RETURN STRUCTURE  BAPIRET2
*"      ORDER_ITEM_IN STRUCTURE  BAPISDITM OPTIONAL
*"      ORDER_ITEM_INX STRUCTURE  BAPISDITMX OPTIONAL
*"      PARTNERS STRUCTURE  BAPIPARNR OPTIONAL
*"      PARTNERCHANGES STRUCTURE  BAPIPARNRC OPTIONAL
*"      PARTNERADDRESSES STRUCTURE  BAPIADDR1 OPTIONAL
*"      ORDER_CFGS_REF STRUCTURE  BAPICUCFG OPTIONAL
*"      ORDER_CFGS_INST STRUCTURE  BAPICUINS OPTIONAL
*"      ORDER_CFGS_PART_OF STRUCTURE  BAPICUPRT OPTIONAL
*"      ORDER_CFGS_VALUE STRUCTURE  BAPICUVAL OPTIONAL
*"      ORDER_CFGS_BLOB STRUCTURE  BAPICUBLB OPTIONAL
*"      ORDER_CFGS_VK STRUCTURE  BAPICUVK OPTIONAL
*"      ORDER_CFGS_REFINST STRUCTURE  BAPICUREF OPTIONAL
*"      SCHEDULE_LINES STRUCTURE  BAPISCHDL OPTIONAL
*"      SCHEDULE_LINESX STRUCTURE  BAPISCHDLX OPTIONAL
*"      ORDER_TEXT STRUCTURE  BAPISDTEXT OPTIONAL
*"      ORDER_KEYS STRUCTURE  BAPISDKEY OPTIONAL
*"      CONDITIONS_IN STRUCTURE  BAPICOND OPTIONAL
*"      CONDITIONS_INX STRUCTURE  BAPICONDX OPTIONAL
*"      EXTENSIONIN STRUCTURE  BAPIPAREX OPTIONAL
*"      EXTENSIONEX STRUCTURE  BAPIPAREX OPTIONAL
*"----------------------------------------------------------------------DATA:lv_check   TYPE char1,lv_message TYPE char255."修改销售订单CALL FUNCTION 'BAPI_SALESORDER_CHANGE'EXPORTINGsalesdocument    = salesdocument
*     order_header_in  = order_header_inorder_header_inx = order_header_inxlogic_switch     = logic_switchTABLESreturn           = returnorder_item_in    = order_item_inorder_item_inx   = order_item_inxschedule_lines   = schedule_linesschedule_linesx  = schedule_linesxextensionin      = extensionin.CLEAR:lv_check,lv_message,e_result.LOOP AT return INTO DATA(ls_return) WHERE type CA 'AEX'.lv_message = lv_message && ls_return-message.lv_check = 'E'.CLEAR:ls_return.ENDLOOP.IF lv_check = 'E'.CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.e_result-type = 'E'.e_result-message = lv_message.ELSE.CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGwait = abap_true.e_result-type = 'S'.e_result-message = '修改成功'.ENDIF.ENDFUNCTION.

2.3、配置目标系统

创建ABAP连接

 目标系统

 拥有大权限的账密

 Unicode

连接测试成功。点击远程登录,则能直接用配置的账号登录SAPGUI

2.4、调用RFC

DATA:gv_system          TYPE rfcdes-rfcdest.
"目标系统
gv_system = sy-sysid && '_' && sy-mandt."S4D_300"修改销售订单
PERFORM frm_salesorder_change.
IF ls_result-type = 'E'."失败
ELSE."成功 
ENDIF.FORM frm_salesorder_change."修改销售订单CALL FUNCTION 'ZBAPI_SALESORDER_CHANGE' DESTINATION gv_systemEXPORTINGsalesdocument    = lv_salesdocument
*     order_header_in  = ls_order_header_inorder_header_inx = ls_order_header_inxlogic_switch     = ls_logic_switchIMPORTINGe_result         = ls_resultTABLESreturn           = lt_so_returnorder_item_in    = lt_order_item_inorder_item_inx   = lt_order_item_inxschedule_lines   = lt_schedule_linesschedule_linesx  = lt_schedule_linesxextensionin      = lt_extensionin.
ENDFORM.

2.5、关于通讯类型Unicode

Unicode:表示目标系统能够处理Unicode字符集。Unicode是一种全球通用的字符编码标准,用于表示世界上几乎所有语言的字符。使用Unicode通讯类型,可以在SAP系统中处理并传输多种语言的数据,包括特殊字符和非拉丁字母字符。

非Unicode:表示目标系统只能处理非Unicode字符集。即系统仅支持传输和处理特定的字符集,如ANSI和ASCII字符集。非Unicode通讯类型适用于处理少数语言或特定的本地化需求。

区别:在于系统对字符集的支持和处理能力。Unicode通讯类型允许SAP系统处理更广泛的字符集,使其具有更好的国际化和本地化能力。而非Unicode通讯类型的系统则限制了字符集的范围,可能导致在处理和传输多语言数据时出现问题。在选择目标系统的通讯类型时,需要根据具体的业务需求和语言环境来考虑。如果需要处理多语言数据或具有全球化的需求,建议选择Unicode通讯类型。而如果业务仅涉及特定的语言或本地化需求,非Unicode通讯类型可能更加适合。

文章转载自:斌将军

原文链接:https://www.cnblogs.com/BinGeneral/p/17928332.html

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2661605.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

API 开放平台项目(已整理,已废弃)

项目大纲 前端 React 18Ant Design Pro 5.x 脚手架Ant Design & Procomponents 组件库Umi 4 前端框架OpenAPI 前端代码生成 后端 Java Spring BootMySQL 数据库MyBatis-Plus 及 MyBatis X 自动生成API 签名认证(Http 调用)Spring Boot Starter&#…

L1-070:吃火锅

以上图片来自微信朋友圈:这种天气你有什么破事打电话给我基本没用。但是如果你说“吃火锅”,那就厉害了,我们的故事就开始了。 本题要求你实现一个程序,自动检查你朋友给你发来的信息里有没有 chi1 huo3 guo1。 输入格式&#xff…

nestjs入门教程系列(三):动态路由到底该怎么用

如何获取前端请求中的参数 引子 我们在处理前端发送过来的请求时,需要访问客户端的request信息,那么我们该怎么操作呢?由于nestjs提供对底层平台的访问即express,所以我们可以通过注入的方式来方位请求对象 TIPS:需要从nestjs/common包里…

旅行旅游研学线路景点门票特产周边小程序开源版开发

旅行旅游研学线路景点门票特产周边小程序开源版开发 以下是旅行旅游研学线路景点门票特产周边小程序开源版开发的功能列表: 首页: 展示热门线路和推荐景点信息提供搜索功能,用户可以通过关键词搜索线路、景点、特产等显示当前位置和附近的景…

wish店铺的审核周期是多久?wish排名规则是什么?-站斧浏览器

wish店铺的审核周期是多久? 在开设新的Wish店铺或者新增产品时,Wish会对店铺和产品进行审核,确保它们符合平台的规定和要求。然而,Wish并没有明确说明店铺审核的具体周期,审核时间会因各种因素而有所不同。 1.新店铺…

SEM扫描电镜成像质量影响因素

本文介绍影响扫描电镜图像质量的因素及其对图像质量的影响,分别从加速电压、扫描速度和信噪比、束斑直径、探针电流、消像散校正、工作距离以及反差对比等分析图像质量的变化原因,提出提高图像质量的方法。 扫描电子显微镜是(Scanning El…

LangChain(0.0.340)官方文档十一:Agents之Agent Types

LangChain官网、LangChain官方文档 、langchain Github、langchain API文档、llm-universe《Agent Types》、《Examples using AgentType》 文章目录 一、快速入门1.1 概念1.2 基本示例1.2.1 配置LangSmith1.2.2 使用LCEL语法创建Agents1.2.3 使用自定义runtime执行1.2.4 使用A…

哪种猫粮比较好?超能打的5款主食冻干测评

不知道从什么时候开始掀起一股冻干喂养风,各种查资料阅读文献发现冻干喂养是最适合忙碌地打工人的“生骨肉喂养”替代版,是最符合猫咪饮食天性的一种。很多养猫人纷纷开始冻干喂养,但对于主食冻干猫粮的选择就让很多猫奴犯了难在电商平台随便…

AMR在机械行业中的运用十分广泛,提高了生产效率和降低了人力成本

随着智能制造和工业4.0的发展,AMR在机械行业中的运用十分广泛,成为推动机械行业智能化和自动化的重要技术装备之一。AMR的出现在很大程度上改变了传统的人工搬运方式,提高了生产效率和降低了人力成本。 在机械行业中,富唯智能AMR…

Arduino串口发送接收和串口中断事件

目录 一、硬件介绍 1、控制器 2、TTL转USB串口 二、软件程序 1、单片机发送字符串 (1)每个串口对应的类名称介绍 (2)发送功能 (3)代码 (4)测试 2、单片机接收字符串 &…

elasticsearch系列七:聚合查询

概述 今天咱们来看下es中的聚合查询,在es中聚合查询分为三大类bucket、metrics、pipeline,每一大类下又有十几种小类,咱们各举例集中,有兴许的同学可以参考官网:https://www.elastic.co/guide/en/elasticsearch/refere…

闲来无事互相翻包,来看看我们的2023通勤EDC

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 卷圈 运营 / SandLiu 卷圈 监制 / 姝琦 封面 / 姝琦Midjourney 产品统筹 / bobo 场地支持 / 声湃轩北京录音间 EDC,Every Day Carry,顾名思义就是每天包里装的东西。 什么?难道除了…

idea的pom.xml文件灰色删除线解决办法

以上是点击了移除module后就变成这样 如果再次对着已移除的module右键会发现有个delete,点击这个是真删了,要谨慎备份哦 解决方案:恢复误操作remove module的解决方法 idea最右边,有个Maven控件,找到要恢复的module&a…

ssm基于vue的大学生社团管理系统的设计与实现+vue论文

基于vue的大学生社团管理系统的设计与实现 计算机科学与技术 2022届 姓名 学号 摘要 当下,正处于信息化的时代,许多行业顺应时代的变化,结合使用计算机技术向数字化、信息化建设迈进。传统的大学生社团信息管理模式,采用人工登…

java-MyBatis项目配置

java-MyBatis项目配置 最近博主在学习MyBatis,学习了一下MyBatis项目配置。 下面博主就讲一下这个项目配置的一个情况 先看一下配置流程大纲: 后续,我会解释一下这些配置文件的意义 1.创建一个maven项目,为什么要创建这个项目&…

在markdown中添加视频的两种方法

查看专栏目录 Network 灰鸽宝典专栏主要关注服务器的配置,前后端开发环境的配置,编辑器的配置,网络服务的配置,网络命令的应用与配置,windows常见问题的解决等。 文章目录 方式一源代码: 方式二结尾语网络的梦想 markd…

Qt篇——QwtPainter::drawPie绘制扇形

QwtPainter::drawPie(QPainter *painter, const QRectF &rect, int startAngle, int angle); 一、参数含义: painter: 重绘函数中的painter对象 rect: 要绘制扇形的圆的外切矩形。 startAngle: 要绘制的扇形的起始角 …

Scala知识点——App类

我们在代码中一般程序都是是通过main方法进入。但是在scala中提供了一个App类,通过继承可以实现不用显式的调用main方法就能运行。 App类中实现了main方法:

Prometheus/Loki+Alertmanager+Grafana监控告警

@toc 告警模式 1、Prometheus+Alertmanager 2、Loki+Alertmanager 除了上面提到的服务,我们可以补充主要服务如下图: 部署方式 Node exporter+Prometheus+Alertmanager:Helm Promtail+Loki:Helm Grafana:Helm 1、Node exporter+Prometheus+Alertmanager方式 1)安装 添加H…

基于ssm西安旅游管理系统论文

摘 要 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对西安旅游信息管理的提升&#x…