SAP GUI 是 SAP 的通用客户端,用于访问 SAP 应用程序中提供的开发和业务功能,例如 SAP ERP、SAP Business Suite(SAP CRM、SAP SCM 和 SAP PLM)、SAP Business Intelligence 等。 SAP GUI 既是 SAP 应用的开发环境,也是运行环境。它从 SAP 服务器获取信息,例如在其窗口中需要显示的信息,在何时,何处,以及以什么样的方式来显示。
本文给大家分享笔者使用 SAP GUI 进行开发这些年来,积累的一些实用技巧。
使用 SAP GUI 绘制图形
国内 80 后上的编程课应该都学过Logo这门编程语言:
Logo 语言是一门专门设计用来进行编程教学的语言,于 1967 年由 Wally Feurzeig, Seymour Papert和Cynthia Solomon发明。
下图是用 Logo 语言画出来的图案。
同样,在 SAP GUI 里内发现有一个非常古老的 ABAP 包,最后一次修改已经是 22 年前的 1995 年了。这比 SAP 成都研究院很多新同事的年龄都要大。
这个包提供了一个 HPGL 接口。Hewlett-Packard Graphics Language,简称为 HPGL,是一种打印机控制语言,由Hewlett-Packard设计。
下面是我用 ABAP 代码写的一个 HPGL 控制台,可以调用函数 GRAPH_HPGL,像小时候使用Logo 语言那样在屏幕上作图。
REPORT z. DATA: go_text_edit TYPE REF TO cl_gui_textedit, go_cust_container TYPE REF TO cl_gui_custom_container, ok_code TYPE sy-ucomm. DATA lt_text(256) TYPE c OCCURS 0. DATA: BEGIN OF lt_hpgl OCCURS 1, entry(128), END OF lt_hpgl. CALL SCREEN 0101. MODULE status_0101 OUTPUT. SET PF-STATUS 'JERRY_CONSOLE'. SET TITLEBAR 'JERRY_TITLEBAR'. IF go_cust_container IS INITIAL. go_cust_container = NEW #( container_name = 'CUSTOM_CONTROL' ). CREATE OBJECT go_text_edit EXPORTING parent = go_cust_container wordwrap_mode = cl_gui_textedit=>wordwrap_at_fixed_position wordwrap_to_linebreak_mode = cl_gui_textedit=>false. ENDIF. ENDMODULE. MODULE user_command_0101 INPUT. ok_code = sy-ucomm. CASE ok_code. WHEN 'BACK' OR 'QUIT' OR 'EXIT'. LEAVE TO SCREEN 0. WHEN 'EXECUTE'. CLEAR: lt_text, lt_hpgl[]. go_text_edit->get_text_as_r3table( IMPORTING table = lt_text ). LOOP AT lt_text ASSIGNING FIELD-SYMBOL(<text>). APPEND INITIAL LINE TO lt_hpgl ASSIGNING FIELD-SYMBOL(<hpgl>). <hpgl>-entry = <text>. ENDLOOP. CALL FUNCTION 'GRAPH_HPGL' TABLES data = lt_hpgl. WHEN OTHERS. ENDCASE. ENDMODULE.
Screen 101 的 PBO 和 PAI 模块:
Screen 101 的界面布局,需要手工创建一个名为 CUSTOM_CONTROL
的控件。
屏幕状态:
执行这个 report,点击 Load Local file,从本地加载 Doraemon.txt 文件,内容可以从我的github下载:
执行之后,位于本地安装目录下的 gnhpx.exe 文件会根据 txt 里的指令进行图形渲染:
C:\Program Files (x86)\SAP\FrontEnd\SAPgui\gnhpx.exe
如果一切正常工作,可以看到一只渲染好的机器猫(哆啦A梦)。
关于 HPGL 的语法手册,可以在这个网站上查阅:
http://www.isoplotec.co.jp/HPGL/eHPGL.htm
如何通过一个 SAP GUI 屏幕反查这个屏幕对应的事务码
假设我通过某种跳转方式打开了下图这个 SAP GUI的屏幕,但我想搞清楚用哪一个事务码可以直接到达这个屏幕,而不通过繁琐的点击,应该怎么做?
步骤1,点击 Order 字段,按 F1 打开帮助界面,
点上图的图标显示技术信息,得到了实现这个屏幕的程序名称:SAPLCOCU:
双击程序名,进入程序实现,再点击这个图标:
从而打开了这个程序所属的 function group COCU,其对应的 ABAP 包为 CO:
在这个 package CO 里,终于找到了我想要知道的事务码名称:CO01/02/03, 用于操作S/4HANA 里的 production order 即生产订单。