二维码

ABAP中长文本处理的应用实例

Twilight发表于 2015-01-08 17:25Twilight 最后回复于 2015-01-08 17:25 [复制链接] 7033 0

我们在Dialog中绘制input/output输入输出框时,允许定义char最大长度是255,都显示在一行中,这种方法用户体验比较差。我们可以通过长文本的方法来满足客户的需求。
长文本在SAP的运用主要体现在一些notes的记录,或者一些比较长的文本的存取,比如工作流的审批意见,采购申请和采购订单的附加说明等等

1、se38创建可执行程序
  1. DATA: line_length      TYPE i VALUE 254,
  2.        editor_container TYPE REF TO cl_gui_custom_container,
  3.        text_editor      TYPE REF TO cl_gui_textedit,
  4.        text             TYPE string.

  5. START-OF-SELECTION.
  6.   CALL SCREEN '100'.

  7. **&---------------------------------------------------------------------*
  8. **&      Module  STATUS_0100  OUTPUT
  9. **&---------------------------------------------------------------------*
  10. **       text
  11. **----------------------------------------------------------------------*
  12. MODULE status_0100 OUTPUT.

  13.   SET PF-STATUS 'STATUS_0100'.

  14.   IF text_editor IS INITIAL.

  15.     CREATE OBJECT editor_container
  16.       EXPORTING
  17.         container_name              = 'TEXTEDITOR'
  18.       EXCEPTIONS
  19.         cntl_error                  = 1
  20.         cntl_system_error           = 2
  21.         create_error                = 3
  22.         lifetime_error              = 4
  23.         lifetime_dynpro_dynpro_link = 5.

  24.     CREATE OBJECT text_editor
  25.       EXPORTING
  26.         parent                     = editor_container
  27.         wordwrap_mode              = cl_gui_textedit=>wordwrap_at_fixed_position
  28.         wordwrap_position          = line_length
  29.         wordwrap_to_linebreak_mode = cl_gui_textedit=>true.


  30. *3)HIDE TOOLBAR AND STATUSBAR 隐藏工具栏按钮

  31.     CALL METHOD text_editor->set_toolbar_mode
  32.       EXPORTING
  33.         toolbar_mode = cl_gui_textedit=>false.

  34.     CALL METHOD text_editor->set_statusbar_mode
  35.       EXPORTING
  36.         statusbar_mode = cl_gui_textedit=>false.

  37.   ENDIF.
  38. ENDMODULE.                 " STATUS_0100  OUTPUT
  39. *&---------------------------------------------------------------------*
  40. *&      Module  USER_COMMAND_0100  INPUT
  41. *&---------------------------------------------------------------------*
  42. *       text
  43. *----------------------------------------------------------------------*
  44. MODULE user_command_0100 INPUT.
  45.   CASE sy-ucomm.
  46.     WHEN 'EXIT'.
  47.       LEAVE PROGRAM.
  48.     WHEN 'SAVE'.
  49.       CALL METHOD text_editor->get_textstream
  50. *         EXPORTING
  51. *             ONLY_WHEN_MODIFIED     = CL_GUI_TEXTEDIT=>TRUE
  52.           IMPORTING
  53.               text                   = text
  54. *             IS_MODIFIED            =
  55.           EXCEPTIONS
  56.               error_cntl_call_method = 1
  57.               not_supported_by_gui   = 2
  58.               OTHERS                 = 3.

  59.       IF sy-subrc <> 0.
  60.         MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  61.                    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  62.       ENDIF.

  63.       CALL METHOD cl_gui_cfw=>flush
  64.         EXCEPTIONS
  65.           cntl_system_error = 1
  66.           cntl_error        = 2
  67.           OTHERS            = 3.
  68.       MESSAGE text TYPE 'I'.
  69.   ENDCASE.
  70. ENDMODULE.                 " USER_COMMAND_0100  INPUT
复制代码

2、创建标准SCREEN '100',定义ok_code
Text Edit control 1.jpg
layout->绘制customer container区域,并命名TEXTEDITOR
3、定义工具栏,创建save保存按钮、exit退出按钮
4、执行程序,查看效果
Text Edit control 2.jpg
点击保存
Text Edit control 3.jpg
我们会发现,我们每按一些回车,那么就会出现## 这个字符,它是CL_ABAP_CHAR_UTILITIES=>CR_LF产生的回车符,不同于们手工输入普通的字符##

PS:长文本中常用的函数
回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表