当前位置:网站首页>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 源代码文件。
边栏推荐
猜你喜欢
![[Interview high-frequency questions] Linked list high-frequency questions that can be gradually optimized](/img/a4/97ce319e08dee8171de76beffe1d7b.png)
[Interview high-frequency questions] Linked list high-frequency questions that can be gradually optimized

matlab simulink的scope 示波器光标如何移动记录

Win10调整磁盘存储空间详解

JS 封装节流(后期优化)

国产抗新冠口服药每瓶不超300元/ 我国IPv6网络全面建成/ 谷歌入局折叠屏手机...今日更多新鲜事在此...

学长告诉我,大厂MySQL都是通过SSH连接的

【Adobe Premiere Pro 2020】pr2020安装和基本操作【PR安装、新建项目流程、导入及管理素材项目文件、添加标记、创建出入点剪辑视频、快速剪接及自动音乐卡点的方法

00后写个暑假作业,被监控成这笔样

微信一面:一致性哈希是什么,使用场景,解决了什么问题?

Blocking, non-blocking, multiplexing, synchronous, asynchronous, BIO, NIO, AIO all in one pot
随机推荐
【Basic model】Transformer-实现中英翻译
PM2之配置文件
非科班AI小哥火了:他没有ML学位,却拿到DeepMind的offer
Apexsqlrecover无法连接数据库
2022牛客多校(六)M. Z-Game on grid
Modify the VOT2018.json file and remove the color in the image path
【概率论】一元概率分布的平均化
ThreadLocal的简单理解
湖南进芯电子替代TIC2000的可能性
拍频造成的轻微震荡
API调用,API传参,面向对接开发,你真的会写接口文档吗?
【概率论】正态分布的由来——从大一同学的视角出发
Django cannot link mysql database
标准C语言学习总结14
修改VOT2018.json文件,去掉图片路径中的color
【面试高频题】可逐步优化的链表高频题
2022 全球 AI 模型周报
Redis高可用部署
Semaphore SIGCHLD use, how to make the parent that the child performs over, how to make the distinction between multiple child processes. The end
Programmer's Exclusive Romance - Use 3D Engine to Realize Fireworks in 5 Minutes