当前位置:网站首页>ABAP 面试题:如何使用 ABAP 编程语言的 System CALL 接口,直接执行 ABAP 服务器所在操作系统的 shell 命令?
ABAP 面试题:如何使用 ABAP 编程语言的 System CALL 接口,直接执行 ABAP 服务器所在操作系统的 shell 命令?
2022-08-09 11:55:00 【汪子熙】
假设我们想查看安装了 ABAP 应用服务器的 Linux 系统某个文件目录下的明细,如果直接登录 Linux Shell,使用 `ls -l` 命令即可。
比如:`ls -l //bas/CGC5/src/krn/abap/runt`
其实我们可以使用 ABAP 提供的 CALL 关键字,直接在 ABAP 应用层,发起对操作系统 shell 命令行的调用。后者的执行结果,返回给 ABAP 层,这样 ABAP 应用开发人员就能在此基础上进行一些处理,开发一些工具。
我写了一个简单的 ABAP 报表来包装这个 CALL 关键字的调用:
REPORT zlinux.
PARAMETERS: command TYPE string LOWER CASE DEFAULT 'ls -l //bas/CGC5/src/krn/abap/runt'.
DATA: commtext(120) ,
itab(255) OCCURS 10 WITH HEADER LINE,
lv_folder TYPE string.
START-OF-SELECTION.
PERFORM init.
CALL 'SYSTEM' ID 'COMMAND' FIELD commtext ID 'TAB' FIELD itab[].
LOOP AT itab ASSIGNING FIELD-SYMBOL(<line>).
FIND REGEX '^.*\.c|^.*\.cpp|^.*\.h' IN <line>.
IF sy-subrc = 0.
WRITE: / <line> COLOR COL_NEGATIVE.
DATA(lv_line) = CONV char255( <line> ).
HIDE lv_line.
ELSE.
WRITE: / <line>.
ENDIF.
ENDLOOP.
AT LINE-SELECTION.
PERFORM display_source.
FORM display_source.
SPLIT lv_line AT space INTO TABLE DATA(lt_file).
DATA(index) = lines( lt_file ).
DATA(lv_file_name) = lv_folder && '/' && lt_file[ index ].
DATA(lv_op) = |cat { lv_file_name } |.
SUBMIT zlinux WITH command EQ lv_op.
ENDFORM.
FORM init.
commtext = command.
SPLIT commtext AT space INTO TABLE DATA(lt_table).
CHECK lines( lt_table ) = 3.
lv_folder = lt_table[ 3 ].
ENDFORM.
执行之后,可以指定待执行的 Linux 命令,比如 pwd,这是 Linux 里打印当前工作路径的命令行,即 Print Working Directory 的含义。
结果为 /usr/sap/AG3/DVEBMGS54/work
执行 `ps -aux`, 即可在 ABAP 里, 打印当前操作系统的进程明细:
关于 CALL 的语法,可以查看 SAP 官方帮助[文档](CALL, System Function Call - ABAP Keyword Documentation)。
CALL 关键字一般用于 SAP 系统内部的实现,不能够将其用于 SAP ABAP 应用开发中去。CALL 会调用系统函数 cfunc,可以为 cfunc 指定包含函数名的数据对象,这个数据对象必须是一个 Flat 的 Character like 类型。
该函数必须在sapactab.h文件中输入。修改一个函数或创建一个新函数需要重新编译和链接ABAP内核。因此需要能够访问 C 源代码文件。
边栏推荐
- API调用,API传参,面向对接开发,你真的会写接口文档吗?
- 我们真的需要DApp吗?App真的不能满足我们的幻想吗?
- 推荐一个免费50时长的AI算力平台
- Too much volume... Tencent was asked on the side that the memory was full, what would happen?
- Gumbel_Softmax 概要
- Fapi_StatusType Fapi_issueProgrammingCommand使用注意事项
- 2022 Niu Ke Duo School (6) M. Z-Game on grid
- 拍频造成的轻微震荡
- 程序员的专属浪漫——用3D Engine 5分钟实现烟花绽放效果
- Recommend a free 50-hour AI computing platform
猜你喜欢
腾讯欲成育碧最大股东/ 米哈游招NLP内容生成研究员/ AI发现四千余物种濒临灭绝...今日更多新鲜事在此...
智驾科技完成C1轮融资,此前2轮已融4.5亿元
HAproxy:负载均衡
Visual Studio 2017 ASP.NET Framework MVC 项目 MySQL 配置连接
matlab simulink的scope 示波器光标如何移动记录
Senior told me that the giant MySQL is through SSH connection
Reading and writing after separation, performance were up 100%
脱光衣服待着就能减肥,当真有这好事?
在北京参加UI设计培训到底怎么样?
软件测试——金融测试类面试题,看完直接去面试了
随机推荐
00后写个暑假作业,被监控成这笔样
苹果Meta都在冲的Pancake技术,中国VR团队YVR竟抢先交出产品答卷
MySQL中的锁
【概率论】一元概率分布的平均化
Django 无法链接mysql数据库
MongoDB-查询中$all的用法介绍
Too much volume... Tencent was asked on the side that the memory was full, what would happen?
元宇宙:下一代互联网启程(附元宇宙深度报告PDF)
matlab simulink的scope 示波器光标如何移动记录
全面了解什么是TPS、QPS以及两者的区别
IDEA close/open reference prompt Usages
Senior told me that the giant MySQL is through SSH connection
京东架构师呕心整理:jvm与性能调优有哪些核心技术知识点
HAproxy: load balancing
问题来了:4GB物理内存的机器上申请8G内存能成功吗?
ACM01 Backpack problem
Apexsqlrecover无法连接数据库
【小程序】低代码+小游戏=小游戏可视化开发
Byte Qiu Zhao confused me on both sides, and asked me under what circumstances would the SYN message be discarded?
【无标题】