ABAP长文本框屏幕增强(交货单行)

说明:和上一篇帖子(ABAP 交货单行项目屏幕增强_weixin_49689040的博客-CSDN博客)是一起的,在其基础之上增加长文本框。

一、在屏幕创建容器

容器名称:CON_9001 

二、定义容器及其他变量

DATA : custom_container1 TYPE REF TO cl_gui_custom_container,
       editor1           TYPE REF TO cl_gui_textedit,
       lines             TYPE STANDARD TABLE OF tline,
       header            TYPE thead,
       texttable         TYPE TABLE OF textline.

在PBO初始化模块添加代码

* 创建容器
    create object custom_container1
      exporting
        container_name              = 'CONTAINER_9001' "容器(表控件)名
      exceptions
        cntl_error                  = 1
        cntl_system_error           = 2
        create_error                = 3
        lifetime_error              = 4
        lifetime_dynpro_dynpro_link = 5
        others                      = 6.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE 'I'
    NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
  CREATE OBJECT editor1
    EXPORTING
      wordwrap_mode              = cl_gui_textedit=>wordwrap_at_fixed_position
      wordwrap_to_linebreak_mode = cl_gui_textedit=>true
      parent                     = custom_container1
    EXCEPTIONS
      error_cntl_create          = 1
      error_cntl_init            = 2
      error_cntl_link            = 3
      error_dp_create            = 4
      gui_type_not_supported     = 5
      OTHERS                     = 6.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE 'I'
    NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
* 去掉状态栏
  CALL METHOD editor1->set_statusbar_mode
    EXPORTING
      statusbar_mode = cl_gui_textedit=>false.
* 去掉工具栏
  CALL METHOD editor1->set_toolbar_mode
    EXPORTING
      toolbar_mode = cl_gui_textedit=>false.
* 文本框不可编辑
  IF gv_trtyp EQ 'A'."显示
    CALL METHOD editor1->set_readonly_mode
      EXPORTING
        readonly_mode          = '1'
      EXCEPTIONS
        error_cntl_call_method = 1
        invalid_parameter      = 2
        OTHERS                 = 3.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid
      TYPE sy-msgty NUMBER sy-msgno
      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
  ENDIF .

这时长文本框已经出来了,但是不能存表啥的,我们需要在进一步处理

 三、SE75创建文本对象

 之后保存

由于是在屏幕增强中写的,创建完文本对象后,我们要在PBO的时候读取文本对象,写入屏幕中,在PAI的时候创建位版本对象,保存数据

四、在PBO INIT_DATA初始化模块添加读取文本对象,放置屏幕的逻辑

* 读取文本对象的文本
  CALL FUNCTION 'READ_TEXT'
    EXPORTING
      id                      = 'ZT01'"header-tdid
      language                = '1'"header-tdspras
      name                    = '123123123'"header-tdname
      object                  = 'ZSD001_TXT'"header-tdobject
    TABLES
      lines                   = lines
    EXCEPTIONS
      id                      = 1
      language                = 2
      name                    = 3
      not_found               = 4
      object                  = 5
      reference_check         = 6
      wrong_access_to_archive = 7
      OTHERS                  = 8.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
* 转换文本流
  CALL FUNCTION 'CONVERT_ITF_TO_STREAM_TEXT'
    EXPORTING
      language    = sy-langu
    TABLES
      itf_text    = lines
      text_stream = texttable.
* 将取到的文本写入画面的文本框中
  CALL METHOD editor1->set_text_as_stream
    EXPORTING
      text            = texttable
    EXCEPTIONS
      error_dp        = 1
      error_dp_create = 2
      OTHERS          = 3.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

五、在PAI SAVE_READTXT模块添加保存文本对象的逻辑

MODULE save_readtxt INPUT.
  FIELD-SYMBOLS <fs> TYPE REF TO cl_gui_textedit.
  FIELD-SYMBOLS <fs2>  ##NEEDED
                 TYPE i.
  DATA : lt_table  TYPE STANDARD TABLE OF tdline,
         l_modi    TYPE i,
         lt_tlines TYPE TABLE OF tline,
         ls_tlines TYPE tline,
         l_thead   TYPE thead.
  ASSIGN ('EDITOR1') TO <fs>.
  header-tdobject = 'ZSD001_TXT'. "文本对象
  header-tdname = '123123123'."文本名
  header-tdid = 'ZT01'. "文本ID
  header-tdspras = 1. "语言
* 获取长文本输入框的内容
  CALL METHOD <fs>->get_text_as_r3table
    IMPORTING
      table                  = lt_table
      is_modified            = l_modi
    EXCEPTIONS
      error_dp               = 1
      error_cntl_call_method = 2
      error_dp_create        = 3
      OTHERS                 = 4.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ELSEIF l_modi = 1.
    LOOP AT lt_table INTO ls_tlines-tdline.
      APPEND ls_tlines TO  lt_tlines.
    ENDLOOP.
    l_thead-tdid = 'ZT01'.
    l_thead-tdspras = '1'.
    l_thead-tdname = '123123123'.
    l_thead-tdobject = 'ZSD001_TXT' .
* 调用方法创建保存文本对象
    CALL FUNCTION 'CREATE_TEXT'
      EXPORTING
        fid       = l_thead-tdid
        flanguage = l_thead-tdspras
        fname     = l_thead-tdname
        fobject   = l_thead-tdobject
      TABLES
        flines    = lt_tlines
      EXCEPTIONS
        no_init   = 1
        no_save   = 2
        OTHERS    = 3.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
  ENDIF.
ENDMODULE.

 完成代码(和正常字段增强一起)

屏幕

 包含文件:LZFG_VL01N_ITEMO01

*----------------------------------------------------------------------*
***INCLUDE LZFG_VL01N_ITEMO01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module INTI_DATA OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE init_data OUTPUT.

  IF gv_trtyp EQ 'A'."显示
    LOOP AT  SCREEN .
      screen-input = 0 .
      MODIFY SCREEN .
    ENDLOOP.
  ELSEIF gv_trtyp EQ 'V' OR gv_trtyp EQ 'H'.
    LOOP AT  SCREEN .
      screen-input = 1 .
      MODIFY SCREEN .
    ENDLOOP.
  ENDIF.


* 创建容器
  CREATE OBJECT custom_container1
    EXPORTING
      container_name              = 'CON_9001' "容器(表控件)名
    EXCEPTIONS
      cntl_error                  = 1
      cntl_system_error           = 2
      create_error                = 3
      lifetime_error              = 4
      lifetime_dynpro_dynpro_link = 5
      OTHERS                      = 6.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE 'I'
    NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
  CREATE OBJECT editor1
    EXPORTING
      wordwrap_mode              = cl_gui_textedit=>wordwrap_at_fixed_position
      wordwrap_to_linebreak_mode = cl_gui_textedit=>true
      parent                     = custom_container1
    EXCEPTIONS
      error_cntl_create          = 1
      error_cntl_init            = 2
      error_cntl_link            = 3
      error_dp_create            = 4
      gui_type_not_supported     = 5
      OTHERS                     = 6.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE 'I'
    NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

* 去掉状态栏
  CALL METHOD editor1->set_statusbar_mode
    EXPORTING
      statusbar_mode = cl_gui_textedit=>false.
* 去掉工具栏
  CALL METHOD editor1->set_toolbar_mode
    EXPORTING
      toolbar_mode = cl_gui_textedit=>false.
* 文本框不可编辑
  IF gv_trtyp EQ 'A'."显示
    CALL METHOD editor1->set_readonly_mode
      EXPORTING
        readonly_mode          = '1'
      EXCEPTIONS
        error_cntl_call_method = 1
        invalid_parameter      = 2
        OTHERS                 = 3.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid
      TYPE sy-msgty NUMBER sy-msgno
      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
  ENDIF .

* 读取文本对象的文本
  CALL FUNCTION 'READ_TEXT'
    EXPORTING
      id                      = 'ZT01'"header-tdid
      language                = '1'"header-tdspras
      name                    = '123123123'"header-tdname
      object                  = 'ZSD001_TXT'"header-tdobject
    TABLES
      lines                   = lines
    EXCEPTIONS
      id                      = 1
      language                = 2
      name                    = 3
      not_found               = 4
      object                  = 5
      reference_check         = 6
      wrong_access_to_archive = 7
      OTHERS                  = 8.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
* 转换文本流
  CALL FUNCTION 'CONVERT_ITF_TO_STREAM_TEXT'
    EXPORTING
      language    = sy-langu
    TABLES
      itf_text    = lines
      text_stream = texttable.
* 将取到的文本写入画面的文本框中
  CALL METHOD editor1->set_text_as_stream
    EXPORTING
      text            = texttable
    EXCEPTIONS
      error_dp        = 1
      error_dp_create = 2
      OTHERS          = 3.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.


ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  SAVE_READTXT  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE save_readtxt INPUT.

  FIELD-SYMBOLS <fs> TYPE REF TO cl_gui_textedit.
  FIELD-SYMBOLS <fs2>  ##NEEDED
                 TYPE i.
  DATA : lt_table  TYPE STANDARD TABLE OF tdline,
         l_modi    TYPE i,
         lt_tlines TYPE TABLE OF tline,
         ls_tlines TYPE tline,
         l_thead   TYPE thead.
  ASSIGN ('EDITOR1') TO <fs>.
  header-tdobject = 'ZSD001_TXT'. "文本对象
  header-tdname = '123123123'."文本名
  header-tdid = 'ZT01'. "文本ID
  header-tdspras = 1. "语言
* 获取长文本输入框的内容
  CALL METHOD <fs>->get_text_as_r3table
    IMPORTING
      table                  = lt_table
      is_modified            = l_modi
    EXCEPTIONS
      error_dp               = 1
      error_cntl_call_method = 2
      error_dp_create        = 3
      OTHERS                 = 4.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ELSEIF l_modi = 1.
    LOOP AT lt_table INTO ls_tlines-tdline.
      APPEND ls_tlines TO  lt_tlines.
    ENDLOOP.
    l_thead-tdid = 'ZT01'.
    l_thead-tdspras = '1'.
    l_thead-tdname = '123123123'.
    l_thead-tdobject = 'ZSD001_TXT' .
* 调用方法创建保存文本对象
    CALL FUNCTION 'CREATE_TEXT'
      EXPORTING
        fid       = l_thead-tdid
        flanguage = l_thead-tdspras
        fname     = l_thead-tdname
        fobject   = l_thead-tdobject
      TABLES
        flines    = lt_tlines
      EXCEPTIONS
        no_init   = 1
        no_save   = 2
        OTHERS    = 3.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
  ENDIF.

ENDMODULE.

包含文件:LZFG_VL01N_ITEMTOP

FUNCTION-POOL zfg_vl01n_item.               "MESSAGE-ID ..

* INCLUDE LZFG_VL01N_ITEMD...                " Local class definition
* INCLUDE LZFG_VL01N_ITEMD...                " Local class definition
DATA:gs_info_tab TYPE lips.
DATA:gv_trtyp TYPE trtyp.
TABLES :lips.

DATA : custom_container1 TYPE REF TO cl_gui_custom_container,
       editor1           TYPE REF TO cl_gui_textedit,
       lines             TYPE STANDARD TABLE OF tline,
       header            TYPE thead,
       texttable         TYPE TABLE OF textline.

包含文件 : LZFG_VL01N_ITEMUXX(创建完函数模块自动生成)

*****************************************************************
*   THIS FILE IS GENERATED BY THE FUNCTION LIBRARY.             *
*   NEVER CHANGE IT MANUALLY, PLEASE!                           *
*****************************************************************
INCLUDE LZFG_VL01N_ITEMU01.
                    "ZSD_FM_TRANS_ITEM_TO_SCREEN
INCLUDE LZFG_VL01N_ITEMU02.
                    "ZFM_GET_DATA_FROM_SCREEN

 SE19->ZSD_SHP_TAB_CUST_ITEM

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ABAP 自定义屏幕中添加文本框,可以使用屏幕元素 'TEXTEDIT'。以下是添加文本框的步骤: 1. 打开 ABAP 事务码 SE51,创建或打开你的屏幕集(Screen Set)。 2. 在屏幕集中打开你想要添加文本框屏幕。 3. 在屏幕上选择一个合适的位置,然后添加一个元素类型为 'TEXTEDIT' 的屏幕元素。 4. 给该屏幕元素指定一个唯一的名称(例如,'TEXTBOX')和其他相关属性,如度、行数等。 5. 在 ABAP 程序中,通过逻辑处理模块(PROCESS ON VALUE-REQUEST 或 PROCESS BEFORE OUTPUT)将文本框屏幕字段关联起来。 6. 在逻辑处理模块中,使用函数模块 'RS_EDIT_TEXT' 来处理文本框的输入和输出。 下面是一个简单的示例代码: 1. 在屏幕集中创建一个屏幕并添加文本框: ```abap PROCESS BEFORE OUTPUT. MODULE status_0100. MODULE status_0100 OUTPUT. SET PF-STATUS 'STATUS_0100'. SET TITLEBAR 'TITLE_0100'. SET SCREEN 100. MODULE text_0100 OUTPUT. SET PF-STATUS 'STATUS_0100'. SET TITLEBAR 'TITLE_0100'. SET SCREEN 100. LOOP AT lt_data INTO ls_data. WRITE: / ls_data-field1, ls_data-field2. ENDLOOP. TEXTEDIT TEXTBOX FOR 10 LINES 60. ENDMODULE. ENDMODULE. ``` 2. 在 ABAP 程序中处理文本框的输入和输出: ```abap PROCESS ON VALUE-REQUEST. MODULE handle_value_request. MODULE handle_value_request INPUT. DATA: lv_text TYPE string. CALL FUNCTION 'RS_EDIT_TEXT' EXPORTING textname = 'TEXTBOX' default_text = lv_text titlebar = 'Enter Text' IMPORTING edited_text = lv_text EXCEPTIONS cancelled = 1 OTHERS = 2. IF sy-subrc = 0. " 处理编辑后的文本框内容 ENDIF. ENDMODULE. ``` 在这个示例中,我们在屏幕中添加了一个名为 'TEXTBOX' 的文本框。然后,在 ABAP 程序的逻辑处理模块中,我们使用函数模块 'RS_EDIT_TEXT' 来处理文本框的输入和输出。 请根据你的具体需求和屏幕设计进行调整和扩展。希望这个示例能帮助你在自定义屏幕中添加文本框。如有需要,请提供更多的上下文信息以获取更具体的代码示例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值