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'
EXPORTING
salesdocument = salesdocument
* order_header_in = order_header_in
order_header_inx = order_header_inx
logic_switch = logic_switch
TABLES
return = return
order_item_in = order_item_in
order_item_inx = order_item_inx
schedule_lines = schedule_lines
schedule_linesx = schedule_linesx
extensionin = 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'
EXPORTING
wait = 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_system
EXPORTING
salesdocument = lv_salesdocument
* order_header_in = ls_order_header_in
order_header_inx = ls_order_header_inx
logic_switch = ls_logic_switch
IMPORTING
e_result = ls_result
TABLES
return = lt_so_return
order_item_in = lt_order_item_in
order_item_inx = lt_order_item_inx
schedule_lines = lt_schedule_lines
schedule_linesx = lt_schedule_linesx
extensionin = lt_extensionin.
ENDFORM.
"--------------------@斌将军-------------------

2.5、关于通讯类型Unicode

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

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

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

定期更文,欢迎关注

 
 
此页面的语言为挪威语
 
翻译为中文(简体)
 
 
 
 
  • 中文(简体)
  • 中文(繁体)
  • 丹麦语
  • 乌克兰语
  • 乌尔都语
  • 亚美尼亚语
  • 俄语
  • 保加利亚语
  • 克罗地亚语
  • 冰岛语
  • 加泰罗尼亚语
  • 匈牙利语
  • 卡纳达语
  • 印地语
  • 印尼语
  • 古吉拉特语
  • 哈萨克语
  • 土耳其语
  • 威尔士语
  • 孟加拉语
  • 尼泊尔语
  • 布尔语(南非荷兰语)
  • 希伯来语
  • 希腊语
  • 库尔德语
  • 德语
  • 意大利语
  • 拉脱维亚语
  • 挪威语
  • 捷克语
  • 斯洛伐克语
  • 斯洛文尼亚语
  • 旁遮普语
  • 日语
  • 普什图语
  • 毛利语
  • 法语
  • 波兰语
  • 波斯语
  • 泰卢固语
  • 泰米尔语
  • 泰语
  • 海地克里奥尔语
  • 爱沙尼亚语
  • 瑞典语
  • 立陶宛语
  • 缅甸语
  • 罗马尼亚语
  • 老挝语
  • 芬兰语
  • 英语
  • 荷兰语
  • 萨摩亚语
  • 葡萄牙语
  • 西班牙语
  • 越南语
  • 阿塞拜疆语
  • 阿姆哈拉语
  • 阿尔巴尼亚语
  • 阿拉伯语
  • 韩语
  • 马尔加什语
  • 马拉地语
  • 马拉雅拉姆语
  • 马来语
  • 马耳他语
  • 高棉语
 
随时将挪威语翻译为中文(简体)PRO
一律不翻译挪威语
一律不翻译i.cnblogs.com

使用RFC跳过权限校验的方法的更多相关文章

  1. 基于SpringSecurity的@PreAuthorize实现自定义权限校验方法

    一.前言 在我们一般的web系统中必不可少的就是权限的配置,也有经典的RBAC权限模型,是基于角色的权限控制.这是目前最常被开发者使用也是相对易用.通用权限模型.当然SpringSecurity已经实 ...

  2. Spring AOP 实现功能权限校验功能

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] 使用拦截器实现未登录时跳转到登录界面的功能 1 拦截器SecurityInterceptor 2spring-mvcxml拦 ...

  3. Shiro 权限校验不通过时,区分GET和POST请求正确响应对应的方式

    引入:https://blog.csdn.net/catoop/article/details/69210140 本文基于Shiro权限注解方式来控制Controller方法是否能够访问. 例如使用到 ...

  4. fastDFS shiro权限校验 redis FreeMark页面静态化

    FastDFS是一个轻量级分布式文件系统,   使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传.下载等服务   FastDFS服务端有两个角色:跟踪器(tracker)和存储节点( ...

  5. Vuejs实战项目四:权限校验

    路由跳转参考文档:https://router.vuejs.org/zh/guide/advanced/navigation-guards.html 在/src下创建permission.js进行权限 ...

  6. 【SpringBoot技术专题】「权限校验专区」Shiro整合JWT授权和认证实现

    本章介绍一下常用的认证框架Shiro结合springboot以及集合jwt快速带您开发完成一个认证框架机制. Maven配置依赖 <dependency> <groupId>o ...

  7. SpringSecurity+Token实现权限校验

    1.Spring Security简介 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下文中配 ...

  8. 基于Spring Aop实现类似shiro的简单权限校验功能

    在我们的web开发过程中,经常需要用到功能权限校验,验证用户是否有某个角色或者权限,目前有很多框架,如Shiro Shiro有基于自定义登录界面的版本,也有基于CAS登录的版本,目前我们的系统是基于C ...

  9. Android 跳转权限设置界面的终极方案

    转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/10338377.html 有时候APP需要获取某些权限,要让用户手动打开,那么问题来了,若是直接提醒用户出 ...

  10. SpringCloud(8)---zuul权限校验、接口限流

    zuul权限校验.接口限流 一.权限校验搭建 正常项目开发时,权限校验可以考虑JWT和springSecurity结合进行权限校验,这个后期会总结,这里做个基于ZuulFilter过滤器进行一个简单的 ...

随机推荐

  1. Kafka与RabbitMQ

    一.什么是kafka,什么是rabbit   Kafka是由Scala语言开发的一种分布式流处理框架,主要用于处理活跃的流式数据,以及大数据量的数据处理.它采用发布-订阅模型,支持消息的批量处理,数据 ...

  2. Asp-Net-Core开发笔记:快速在已有项目中引入EFCore

    前言 很多项目一开始选型的时候没有选择EFCore,不过EFCore确实好用,也许由于种种原因后面还是需要用到,这时候引入EFCore也很方便. 本文以 StarBlog 为例,StarBlog 目前 ...

  3. Python+Softmax+MNIST

    # -*- coding: utf-8 -*- """ 用神经网络搭建的softmax线性分离器 Softmax是用于分类过程,用来实现多分类的,简单来说,它把一些输出的 ...

  4. JDK、JRE、JVM三者介绍

    概念 JDK: Java Development Kit,java开发者工具. JRE: Java Runtime Enviroment,java运行时环境. JVM: Java Virtual Ma ...

  5. CF1401C

    题目简化和分析: 交换数组使其变为升序,满足交互的两数 \(a_i\) 与 \(a_j\),$ \min{a_i(1\le i\le n)}|\gcd(a_i,a_j)$ . 简单思维题,Div.2 ...

  6. Java 深度优先搜索 and 广度优先搜索的算法原理和代码展示

    111. 二叉树的最小深度 题目:给定一个二叉树,找出其最小深度.最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明:叶子节点是指没有子节点的节点. 方法1:深度优先搜索 原理:深度优先搜 ...

  7. Android Studio里导入制作好的图片后,直接报错,图片名下方出现红色波浪线

    症状:Android Studio里导入制作好的图片后,直接报错,图片名下方出现红色波浪线. 比如:bk_Image_BackGround,报红 解决办法:如:bk_Image_BackGround, ...

  8. CSS必学:元素之间的空白与行内块的幽灵空白问题

    作者:WangMin 格言:努力做好自己喜欢的每一件事 CSDN原创文章 博客地址 WangMin 我们在开发的过程中,难免会出现一些难以预料的问题.那么其中,CSS空白现象就是非常常见的问题之一.虽 ...

  9. PostgreSQL 序列(Sequence)

    基本操作 --新增序列 CREATE SEQUENCE xxx_id_seq INCREMENT 1 -- 一次加多少 MINVALUE 1 -- 最小值 START 1 --从多少开始 CACHE ...

  10. 教你使用逻辑公式和恒等式等价改写SQL

    今天同事给我一条2秒的SQL看看能不能优化. 原始SQL: SELECT pk_dept FROM aaaa WHERE 1 = 1 AND ((pk_group = '0001A1100000000 ...