分享

ABAP 多行文本编辑框实现方式

 一骑当千_30 2018-05-25

from:http:///Tutorials/ABAP/TextControl/Demo.htm

Text Edit control - Usage and Demo

As an ABAP developer, we all know that if we drop a field of type char and length 255 in to the conventional screen painter it will be displayed in a single line. It will not be good interface unless we provide a multi-line input field in the screen. This can be achieved by text editor control. 

The following is our attempt to explain how to implement the text editor control on classic dynpros. 

Text editor is displayed on screen using custom control. So we need a container for the custom control. And text editor control is implemented using class CL_GUI_TEXTEDIT. 

Our declaration part contains

  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.   
DATA: LINE_LENGTH TYPE I VALUE 254, EDITOR_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER, TEXT_EDITOR TYPE REF TO CL_GUI_TEXTEDIT, TEXT TYPE STRING.

 Then call the screen (can be any number) 

  1. START-OF-SELECTION.  
  2. CALL SCREEN '100'.   
START-OF-SELECTION. CALL SCREEN '100'.

 Go to screen 100 by double clicking on '100'.

Create a custom control on screen with name TEXTEDIT. 

 

Uncomment both PBO and PAI modules in flow logic screen 

  1.  PROCESS BEFORE OUTPUT.  
  2.  MODULE STATUS_0100.  
  3. *  
  4.  PROCESS AFTER INPUT.  
  5.  MODULE USER_COMMAND_0100.   
PROCESS BEFORE OUTPUT. MODULE STATUS_0100. * PROCESS AFTER INPUT. MODULE USER_COMMAND_0100.

 Define and implement both the modules in the main program itself. 

In PBO create object container EDITOR_CONTAINER. Then create text editor object by exporting the container EDITOR_CONTAINER. 

  1. CREATE OBJECT EDITOR_CONTAINER  
  2.  EXPORTING  
  3.    CONTAINER_NAME              = 'TEXTEDITOR'  
  4.  EXCEPTIONS  
  5.    CNTL_ERROR                  = 1  
  6.    CNTL_SYSTEM_ERROR           = 2  
  7.    CREATE_ERROR                = 3  
  8.    LIFETIME_ERROR              = 4  
  9.    LIFETIME_DYNPRO_DYNPRO_LINK = 5.  
  10.   
  11. REATE OBJECT TEXT_EDITOR  
  12.  EXPORTING  
  13.    PARENT           = EDITOR_CONTAINER  
  14.    WORDWRAP_MODE    = CL_GUI_TEXTEDIT=>WORDWRAP_AT_FIXED_POSITION  
  15.    WORDWRAP_POSITION          = LINE_LENGTH  
  16.    WORDWRAP_TO_LINEBREAK_MODE = CL_GUI_TEXTEDIT=>TRUE.   
  17. can hide the toolbar and as well as status bar for the text editor control.   
  18. CALL METHOD TEXT_EDITOR->SET_TOOLBAR_MODE  
  19.  EXPORTING  
  20.    TOOLBAR_MODE = CL_GUI_TEXTEDIT=>FALSE.  
  21.   
  22. ALL METHOD TEXT_EDITOR->SET_STATUSBAR_MODE  
  23.  EXPORTING  
  24.    STATUSBAR_MODE = CL_GUI_TEXTEDIT=>FALSE.   
CREATE OBJECT EDITOR_CONTAINER EXPORTING CONTAINER_NAME = 'TEXTEDITOR' EXCEPTIONS CNTL_ERROR = 1 CNTL_SYSTEM_ERROR = 2 CREATE_ERROR = 3 LIFETIME_ERROR = 4 LIFETIME_DYNPRO_DYNPRO_LINK = 5. CREATE OBJECT TEXT_EDITOR EXPORTING PARENT = EDITOR_CONTAINER WORDWRAP_MODE = CL_GUI_TEXTEDIT=>WORDWRAP_AT_FIXED_POSITION WORDWRAP_POSITION = LINE_LENGTH WORDWRAP_TO_LINEBREAK_MODE = CL_GUI_TEXTEDIT=>TRUE. *You can hide the toolbar and as well as status bar for the text editor control. CALL METHOD TEXT_EDITOR->SET_TOOLBAR_MODE EXPORTING TOOLBAR_MODE = CL_GUI_TEXTEDIT=>FALSE. CALL METHOD TEXT_EDITOR->SET_STATUSBAR_MODE EXPORTING STATUSBAR_MODE = CL_GUI_TEXTEDIT=>FALSE.

 Define and create a GUI Status in the PBO. 

  1. SET PF-STATUS 'STATUS_0100'.   
SET PF-STATUS 'STATUS_0100'.

 Very minimum set of tool bar buttons defined in this example 

 

In PAI of the screen 100, handle the save and other user commands. 

  1.    CASE SY-UCOMM.  
  2.     WHEN 'EXIT'.  
  3.       LEAVE PROGRAM.  
  4.     WHEN 'SAVE'.  
  5.       CALL METHOD TEXT_EDITOR->GET_TEXTSTREAM  
  6. *         EXPORTING  
  7. *             ONLY_WHEN_MODIFIED     = CL_GUI_TEXTEDIT=>TRUE  
  8.           IMPORTING  
  9.               TEXT                   = TEXT  
  10. *             IS_MODIFIED            =  
  11.           EXCEPTIONS  
  12.               ERROR_CNTL_CALL_METHOD = 1  
  13.               NOT_SUPPORTED_BY_GUI   = 2  
  14.               OTHERS                 = 3.  
  15.   
  16.       IF SY-SUBRC <> 0.  
  17.         MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO  
  18.                    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.  
  19.       ENDIF.  
  20.   
  21.       CALL METHOD CL_GUI_CFW=>FLUSH  
  22.         EXCEPTIONS  
  23.           CNTL_SYSTEM_ERROR = 1  
  24.           CNTL_ERROR        = 2  
  25.           OTHERS            = 3.  
  26.       MESSAGE TEXT TYPE 'I'.  
  27.   ENDCASE.   
CASE SY-UCOMM. WHEN 'EXIT'. LEAVE PROGRAM. WHEN 'SAVE'. CALL METHOD TEXT_EDITOR->GET_TEXTSTREAM * EXPORTING * ONLY_WHEN_MODIFIED = CL_GUI_TEXTEDIT=>TRUE IMPORTING TEXT = TEXT * IS_MODIFIED = EXCEPTIONS ERROR_CNTL_CALL_METHOD = 1 NOT_SUPPORTED_BY_GUI = 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. CALL METHOD CL_GUI_CFW=>FLUSH EXCEPTIONS CNTL_SYSTEM_ERROR = 1 CNTL_ERROR = 2 OTHERS = 3. MESSAGE TEXT TYPE 'I'. ENDCASE.

 To read the text that is typed in the editor we need to call the method GET_TEXTSTREAM of the editor instance. 

We are just displaying the text typed in the editor in an informative message; the same can be inserted / updated into a database table also. 

The complete coding of the executable program is given below.. 

  1. REPORT  ZTEXT_EDITOR.  
  2.   
  3. DATA: LINE_LENGTH      TYPE I VALUE 254,  
  4.       EDITOR_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,  
  5.       TEXT_EDITOR      TYPE REF TO CL_GUI_TEXTEDIT,  
  6.       TEXT             TYPE STRING.  
  7.   
  8. START-OF-SELECTION.  
  9.   CALL SCREEN '100'.  
  10.   
  11. **&---------------------------------------------------------------------*  
  12. **&      Module  STATUS_0100  OUTPUT  
  13. **&---------------------------------------------------------------------*  
  14. **       text  
  15. **----------------------------------------------------------------------*  
  16. MODULE STATUS_0100 OUTPUT.  
  17.   
  18.   SET PF-STATUS 'STATUS_0100'.  
  19.   
  20.   IF TEXT_EDITOR IS INITIAL.  
  21.   
  22.     CREATE OBJECT EDITOR_CONTAINER  
  23.       EXPORTING  
  24.         CONTAINER_NAME              = 'TEXTEDITOR'  
  25.       EXCEPTIONS  
  26.         CNTL_ERROR                  = 1  
  27.         CNTL_SYSTEM_ERROR           = 2  
  28.         CREATE_ERROR                = 3  
  29.         LIFETIME_ERROR              = 4  
  30.         LIFETIME_DYNPRO_DYNPRO_LINK = 5.  
  31.   
  32.     CREATE OBJECT TEXT_EDITOR  
  33.       EXPORTING  
  34.         PARENT                     = EDITOR_CONTAINER  
  35.         WORDWRAP_MODE              = CL_GUI_TEXTEDIT=>WORDWRAP_AT_FIXED_POSITION  
  36.         WORDWRAP_POSITION          = LINE_LENGTH  
  37.         WORDWRAP_TO_LINEBREAK_MODE = CL_GUI_TEXTEDIT=>TRUE.  
  38.   
  39.   
  40. *3)HIDE TOOLBAR AND STATUSBAR  
  41.   
  42.     CALL METHOD TEXT_EDITOR->SET_TOOLBAR_MODE  
  43.       EXPORTING  
  44.         TOOLBAR_MODE = CL_GUI_TEXTEDIT=>FALSE.  
  45.   
  46.     CALL METHOD TEXT_EDITOR->SET_STATUSBAR_MODE  
  47.       EXPORTING  
  48.         STATUSBAR_MODE = CL_GUI_TEXTEDIT=>FALSE.  
  49.   
  50.   ENDIF.  
  51. ENDMODULE.                 ' STATUS_0100  OUTPUT  
  52. *&---------------------------------------------------------------------*  
  53. *&      Module  USER_COMMAND_0100  INPUT  
  54. *&---------------------------------------------------------------------*  
  55. *       text  
  56. *----------------------------------------------------------------------*  
  57. MODULE USER_COMMAND_0100 INPUT.  
  58.   CASE SY-UCOMM.  
  59.     WHEN 'EXIT'.  
  60.       LEAVE PROGRAM.  
  61.     WHEN 'SAVE'.  
  62.       CALL METHOD TEXT_EDITOR->GET_TEXTSTREAM  
  63. *         EXPORTING  
  64. *             ONLY_WHEN_MODIFIED     = CL_GUI_TEXTEDIT=>TRUE  
  65.           IMPORTING  
  66.               TEXT                   = TEXT  
  67. *             IS_MODIFIED            =  
  68.           EXCEPTIONS  
  69.               ERROR_CNTL_CALL_METHOD = 1  
  70.               NOT_SUPPORTED_BY_GUI   = 2  
  71.               OTHERS                 = 3.  
  72.   
  73.       IF SY-SUBRC <> 0.  
  74.         MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO  
  75.                    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.  
  76.       ENDIF.  
  77.   
  78.       CALL METHOD CL_GUI_CFW=>FLUSH  
  79.         EXCEPTIONS  
  80.           CNTL_SYSTEM_ERROR = 1  
  81.           CNTL_ERROR        = 2  
  82.           OTHERS            = 3.  
  83.       MESSAGE TEXT TYPE 'I'.  
  84.   ENDCASE.  
  85. ENDMODULE.                 ' USER_COMMAND_0100  INPUT   
REPORT ZTEXT_EDITOR. DATA: LINE_LENGTH TYPE I VALUE 254, EDITOR_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER, TEXT_EDITOR TYPE REF TO CL_GUI_TEXTEDIT, TEXT TYPE STRING. START-OF-SELECTION. CALL SCREEN '100'. **&---------------------------------------------------------------------* **& Module STATUS_0100 OUTPUT **&---------------------------------------------------------------------* ** text **----------------------------------------------------------------------* MODULE STATUS_0100 OUTPUT. SET PF-STATUS 'STATUS_0100'. IF TEXT_EDITOR IS INITIAL. CREATE OBJECT EDITOR_CONTAINER EXPORTING CONTAINER_NAME = 'TEXTEDITOR' EXCEPTIONS CNTL_ERROR = 1 CNTL_SYSTEM_ERROR = 2 CREATE_ERROR = 3 LIFETIME_ERROR = 4 LIFETIME_DYNPRO_DYNPRO_LINK = 5. CREATE OBJECT TEXT_EDITOR EXPORTING PARENT = EDITOR_CONTAINER WORDWRAP_MODE = CL_GUI_TEXTEDIT=>WORDWRAP_AT_FIXED_POSITION WORDWRAP_POSITION = LINE_LENGTH WORDWRAP_TO_LINEBREAK_MODE = CL_GUI_TEXTEDIT=>TRUE. *3)HIDE TOOLBAR AND STATUSBAR CALL METHOD TEXT_EDITOR->SET_TOOLBAR_MODE EXPORTING TOOLBAR_MODE = CL_GUI_TEXTEDIT=>FALSE. CALL METHOD TEXT_EDITOR->SET_STATUSBAR_MODE EXPORTING STATUSBAR_MODE = CL_GUI_TEXTEDIT=>FALSE. ENDIF. ENDMODULE. ' STATUS_0100 OUTPUT *&---------------------------------------------------------------------* *& Module USER_COMMAND_0100 INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE USER_COMMAND_0100 INPUT. CASE SY-UCOMM. WHEN 'EXIT'. LEAVE PROGRAM. WHEN 'SAVE'. CALL METHOD TEXT_EDITOR->GET_TEXTSTREAM * EXPORTING * ONLY_WHEN_MODIFIED = CL_GUI_TEXTEDIT=>TRUE IMPORTING TEXT = TEXT * IS_MODIFIED = EXCEPTIONS ERROR_CNTL_CALL_METHOD = 1 NOT_SUPPORTED_BY_GUI = 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. CALL METHOD CL_GUI_CFW=>FLUSH EXCEPTIONS CNTL_SYSTEM_ERROR = 1 CNTL_ERROR = 2 OTHERS = 3. MESSAGE TEXT TYPE 'I'. ENDCASE. ENDMODULE. ' USER_COMMAND_0100 INPUT

 The final Screen shot of the editor: 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多