ABAP屏幕多行文本框使用(CL_GUI_TEXTEDIT) ABAPSAPABAP屏幕
  • 创建时间:2023-10-15 / 最新修改时间:2023-10-16 08:55:37
  • 13404
  • 1
转载请注明本文出处:http://limpire.cn/artifact/heap/sap/223.html


ABAP屏幕多行文本框使用(CL_GUI_TEXTEDIT)

ABAP自画屏幕只有普通当行文本控件,如果需要多行的文本框控件则需要添加CCtrl 客户自定义控件容器,然后把长文本控件注册进去.这跟OOALV很像.

实现步骤

大概步骤如下:

  1. 在屏幕中画出客户自定义控件容器.
  2. 程序中定义cl_gui_custom_container 引用变量,创建对象并通过构造器参数与自定义控件容器关联.
  3. 程序中定义cl_gui_textedit引用变量,创建对象并通过构造器参数指定父容器cl_gui_custom_container.
  4. 新建单列内表用于读写cl_gui_textedit.通过cl_gui_texteditset_text_as_r3tableset_text_as_r3table指定内表进行读写.

行动

画出用户自定义控件容器,并记住容器名字PARAM

image-20231015104207641

数据变量定义

程序头中编写以下代码片段:

REPORT zdm_rest_gui_test.
DATA long_text_container TYPE REF TO cl_gui_custom_container. "屏幕用户控件引用变量
DATA editor TYPE REF TO cl_gui_textedit. " 控件类引用

"定义单列内标用户长文本空间的读与写
DATA:init,
     m1(256)   TYPE c OCCURS 0,
     line(256) TYPE c.

PBO

在 PBO模块中写如下代码片段,主要是初始化对象和设置长文本默认值:

IF init IS INITIAL.
    init = 'X'.

    "创建自定义区域对象
    CREATE OBJECT long_text_container
      EXPORTING
        container_name = 'PARAM'. "对应的是画自定义容器时定义的容器名字
    " 创建长文本控件对象
    CREATE OBJECT editor
      EXPORTING
        parent                     = long_text_container "这只父容器,即使自定义容器
        wordwrap_mode              = cl_gui_textedit=>wordwrap_at_fixed_position
        wordwrap_position          = 256 "每行最大字符数量,超出自动换行
        wordwrap_to_linebreak_mode = cl_gui_textedit=>true.

    "设置长文本控件默认内容,
    APPEND '{' TO m1.
    APPEND '    "REPORTPARAM": {' TO m1.
    APPEND '        "VP_A": "20231001",' TO m1.
    APPEND '        "VP_B": "20231010"' TO m1.
    APPEND '    },' TO m1.
    APPEND '    "VARREPORTID": "1582617486826115074"' TO m1.
    APPEND '}' TO m1.

    "设置默认值到长文本控件
    CALL METHOD editor->set_text_as_r3table
      EXPORTING
        table = m1.

  ENDIF.

PAI

在PAI模块中有如下代码片段,主要用于读取长文本控件的内容.

  REFRESH m1.

  CALL METHOD editor->get_text_as_r3table "获取数据到内表中
    IMPORTING
      table = m1.

完整代码

REPORT zdm_rest_gui_test.

DATA long_text_container TYPE REF TO cl_gui_custom_container. "屏幕用户控件引用变量
DATA editor TYPE REF TO cl_gui_textedit. " 控件类引用

DATA:init,
     m1(256)   TYPE c OCCURS 0,
     line(256) TYPE c.

"界面字段
DATA: title(20)       TYPE c,
      java_class(50)  TYPE c,
      java_method(50) TYPE c,
      param           TYPE REF TO object,
      mark(50)        TYPE c,
      s_title         TYPE string,
      s_java_class    TYPE string,
      s_java_method   TYPE string,
      s_mark          TYPE string,
      param_data      TYPE REF TO Data.

START-OF-SELECTION.
  CALL SCREEN 0100.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'ZDMSTSTUS0100'.
  SET TITLEBAR 'ZDMTITLE0100'.

*& 长文本控件注册

  IF init IS INITIAL.
    init = 'X'.

    "创建自定义区域对象
    CREATE OBJECT long_text_container
      EXPORTING
        container_name = 'PARAM'.
    " 创建长文本控件对象
    CREATE OBJECT editor
      EXPORTING
        parent                     = long_text_container
        wordwrap_mode              = cl_gui_textedit=>wordwrap_at_fixed_position
        wordwrap_position          = 256
        wordwrap_to_linebreak_mode = cl_gui_textedit=>true.


    "设置json默认值
    APPEND '{' TO m1.
    APPEND '    "REPORTPARAM": {' TO m1.
    APPEND '        "VP_A": "20231001",' TO m1.
    APPEND '        "VP_B": "20231010"' TO m1.
    APPEND '    },' TO m1.
    APPEND '    "VARREPORTID": "1582617486826115074"' TO m1.
    APPEND '}' TO m1.



    "设置默认值到长文本控件
    CALL METHOD editor->set_text_as_r3table
      EXPORTING
        table = m1.
        
  ENDIF.
  
  "默认数据
  title = 'Rest报表测试'.
  java_class = 'VARIABLEH5REPORTSERVER'.
  java_method = 'H5'.


ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.

  data temp_p type string.

  REFRESH m1.

  CALL METHOD editor->get_text_as_r3table "获取数据”
    IMPORTING
      table = m1.

  CASE sy-ucomm.
    WHEN 'BTN1'.

      s_title = title .
      s_java_class = java_class .
      s_java_method = java_method .
      s_mark = mark .

      CLEAR param_data.
      PERFORM table2String USING m1 changing temp_p.

      /ui2/cl_json=>deserialize(
        EXPORTING
           json             = temp_p
        CHANGING
          data             = param_data
      ).

      zdm_rest_exec=>send(
        EXPORTING
          title       = s_title
          java_class  = s_java_class
          java_method = s_java_method
          param_tab   = param_data
          crete_by    = `Test`
          mark        = s_mark
      ).

    WHEN 'BTNFM'.
      zdm_rest_exec=>open(
         EXPORTING
           url = `http://xxxxxx:8083/manager/dataintegrationlist`
           param = `数据集成管理`
       ).
    WHEN 'BTNRPM'.
      zdm_rest_exec=>open(
        EXPORTING
          url = `http://xxxxxxx:8083/manager/varReportListView`
          param = `报表配置管理`
      ).

    WHEN 'BACK' .
      LEAVE TO SCREEN 0.
    WHEN 'CANCEL' .
      LEAVE PROGRAM.
    WHEN 'EXIT' .
      LEAVE PROGRAM.
    WHEN OTHERS.
  ENDCASE.

ENDMODULE.


FORM table2String USING t like m1 CHANGING rtv TYPE string.
  DATA line(256) TYPE c.
  DATA r TYPE string.
  IF t IS NOT INITIAL.
    LOOP AT t INTO line.
      r = | { r } { cl_abap_char_utilities=>cr_lf }  { line } |.
    ENDLOOP.
  ENDIF.
  rtv = r.
ENDFORM.

最终效果:

image-20231015110435825

PS : 关于何为屏幕 PBO 和 PAI.

我们可以理解为PBO 和 PAI 都是屏幕程序中生命周期的一个回调模块.

PBO 在显示屏幕前回调.

PAI 在响应任何功能键时回调.就是所谓的user_command_0100


请说:

昵称 Email

评论:

2024-08-04 11:24:41

学习了

大火来临

***@123.com

吃不起海鲜就买海鲜味的酱油

回车换行很爽,代表着一个段落或者一个小结的完成,打印出来之后就是一个可触摸的成品.围着这种意境,一起来技术性打酱油.

文章列表
分类目录
友情链接