SAP实现文本框多行输入(类cl_gui_textedit)

先看效果,在输入框先来一段《赤壁赋》

然后点击 '保存输出'按钮,就能把输入内容从表里读取并输出来

源代码:

java 复制代码
*&---------------------------------------------------------------------*
*& Report ZCYCLE060
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zcycle060.

DATA: ok_code TYPE sy-ucomm.

CONSTANTS: gc_text_line_length TYPE i VALUE 72.
TYPES: text_table_type(gc_text_line_length) TYPE c OCCURS 0.
DATA: gv_splitter TYPE REF TO cl_gui_easy_splitter_container.
DATA: gv_custom_container TYPE REF TO cl_gui_custom_container.
DATA: gv_text_editor TYPE REF TO cl_gui_textedit.
DATA: lt_text_table                         TYPE text_table_type,
      ls_text_table_wa(gc_text_line_length) TYPE c,
      gv_xthead_updkz                       TYPE i.
CALL SCREEN 100.

MODULE splitter_control_vorbereiten OUTPUT.

  IF gv_splitter IS INITIAL.
    CREATE OBJECT gv_custom_container
      EXPORTING
        container_name = 'SPLITTER_CONTAINER'.

    CREATE OBJECT gv_splitter
      EXPORTING
        parent        = gv_custom_container
        orientation   = 1    "方向: 0 = 垂直 , 1 = 水平
        sash_position = 39.

  ENDIF.

  IF gv_text_editor IS INITIAL.
    CREATE OBJECT gv_text_editor
      EXPORTING
        parent                     = gv_splitter->bottom_right_container
*       wordwrap_mode              = cl_gui_textedit=>wordwrap_at_windowborder
        wordwrap_to_linebreak_mode = cl_gui_textedit=>false
        "wordwrap_to_linebreak_mode = cl_gui_textedit=>true
      EXCEPTIONS
        error_cntl_create          = 1
        error_cntl_init            = 2
        error_cntl_link            = 3
        error_dp_create            = 4
        gui_type_not_supported     = 5.
    "CALL METHOD gv_text_editor->set_readonly_mode EXPORTING readonly_mode = cl_gui_textedit=>true. "输入框只读模式开启
    CALL METHOD gv_text_editor->set_readonly_mode EXPORTING readonly_mode = cl_gui_textedit=>false. "输入框只读模式关闭
  ENDIF.




ENDMODULE.                 " SPLITTER_CONTROL_VORBEREITEN  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'ZCYCLE'.

*  SET TITLEBAR 'xxx'.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  EXIT  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE exit INPUT.
  LEAVE TO SCREEN 0.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  DATA t_tdline1 TYPE TABLE OF standard .
* Texttabelle aus Control abholen
  CASE ok_code.
    WHEN 'ZSAVE'.
      CALL METHOD gv_text_editor->get_text_as_stream "取屏幕上输入的文本存到 lt_text_table
        IMPORTING
          text                   = lt_text_table
          is_modified            = gv_xthead_updkz
        EXCEPTIONS
          error_dp               = 1
          error_cntl_call_method = 2
          OTHERS                 = 3.
      IF sy-subrc = 0.
        cl_demo_output=>write( lt_text_table[] ). "定义哪些东西需要输出,可以是表,也可以是字段
        cl_demo_output=>display( ).               "一次性把 write进来的元素 输出
      ENDIF.

*      CALL METHOD gv_text_editor->get_text_as_r3table
*        IMPORTING
*          table = t_tdline1.
*      IF sy-subrc = 0.
*
*      ENDIF.
  ENDCASE.
ENDMODULE.

100屏幕设计


去SE80输入函数组 SLVC_FULLSCREEN 拉取标准ALV图标过来

做一丢丢改造

这里主要是用于程序退出功能

到这里就完成了。
程序会把屏幕上输入的文字传到内表 lt_text_table 里去

所以就是获取到屏幕上输入的文本框内容了,如果要做其它功能,就可以往下继续做了

相关推荐
小兵张健6 小时前
价值1000的 AI 工作流:Codex 通用前端协作模式
前端·aigc·ai编程
sunny_6 小时前
面试踩大坑!同一段 Node.js 代码,CJS 和 ESM 的执行顺序居然是反的?!99% 的人都答错了
前端·面试·node.js
拉不动的猪6 小时前
移动端调试工具VConsole初始化时的加载阻塞问题
前端·javascript·微信小程序
数据组小组8 小时前
免费数据库管理工具深度横评:NineData 社区版、Bytebase 社区版、Archery,2026 年开发者该选哪个?
数据库·测试·数据库管理工具·数据复制·迁移工具·ninedata社区版·naivicat平替
ayqy贾杰8 小时前
Agent First Engineering
前端·vue.js·面试
IT_陈寒8 小时前
SpringBoot实战:5个让你的API性能翻倍的隐藏技巧
前端·人工智能·后端
iceiceiceice9 小时前
iOS PDF阅读器段评实现:如何从 PDFSelection 精准还原一个自然段
前端·人工智能·ios
大金乄9 小时前
封装一个vue2的elementUI 表格组件(包含表格编辑以及多级表头)
前端·javascript
葡萄城技术团队10 小时前
【性能优化篇】面对万行数据也不卡顿?揭秘协同服务器的“片段机制 (Fragments)”
前端
程序员阿峰10 小时前
2026前端必备:TensorFlow.js,浏览器里的AI引擎,不写Python也能玩转智能
前端