当前位置:网站首页>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 源代码文件。
边栏推荐
猜你喜欢
LeetCode热题(11.合并两个有序链表)
win10 outlook邮件设置
听声辨物,这是AI视觉该干的???|ECCV 2022
阻塞、非阻塞、多路复用、同步、异步、BIO、NIO、AIO 一锅端
Here comes the question: Can I successfully apply for 8G memory on a machine with 4GB physical memory?
【面试高频题】可逐步优化的链表高频题
国产抗新冠口服药每瓶不超300元/ 我国IPv6网络全面建成/ 谷歌入局折叠屏手机...今日更多新鲜事在此...
900页数学论文证明旋转的黑洞不会爆炸,丘成桐:30多年来广义相对论首次重大突破...
F280049库函数API编程、直接寄存器控制编程和混合编程方法
程序员的专属浪漫——用3D Engine 5分钟实现烟花绽放效果
随机推荐
JD.com architects tidy up: what are the core technical knowledge points of jvm and performance tuning
【无标题】
金融业“限薪令”出台/ 软银出售过半阿里持仓/ DeepMind新实验室成立... 今日更多新鲜事在此...
索引index
Summary of learning stages (knapsack problem)
Semaphore SIGCHLD use, how to make the parent that the child performs over, how to make the distinction between multiple child processes. The end
在北极都可以穿短袖了,温度飙升至32.5℃
太卷了... 腾讯一面被问到内存满了,会发生什么?
JS 封装节流(后期优化)
【Data augmentation in NLP】——1
BeanFacroty和FactoryBean到底是什么?AppliacationContext它又是什么?
读写分离后,性能居然提升100%了呀
redis库没法引入
元宇宙:下一代互联网启程(附元宇宙深度报告PDF)
程序员的专属浪漫——用3D Engine 5分钟实现烟花绽放效果
听声辨物,这是AI视觉该干的???|ECCV 2022
shell脚本------函数的格式,传参,变量,递归,数组
We really need DApp?Really can't meet our fantasy App?
go基础之web获取参数
"Digital Economy Panorama White Paper" Special Analysis of Banking Industry Intelligent Marketing Application Released