본문 바로가기
ERP-SAP/ABAP

<ABAP> Text Edit 만들기, 저장하기, 읽어오기

by 행복한워니의 기록 2012. 10. 19.
728x90
반응형

  아래와 같이 cc_9000 이라는 Custom container 를 만들었다.

 여기다 text Edit 를 붙일 것이다.

 

 

 

PROCESS BEFORE OUTPUT.
 MODULE STATUS_0200.  <-이 안에 넣었다.
*
PROCESS AFTER INPUT.
  MODULE exit_rtn AT EXIT-COMMAND.
  module user_command_0200.

 

 

------------------------------------------------------

 

  module STATUS_0200 output.

  REFRESH  fcode.  CLEAR fcode.
*   if ( gv_not_change = 'X' ).
*    APPEND 'ZNETPR' TO fcode.
*  endif.

  SET PF-STATUS '0200'  EXCLUDING fcode.
  SET TITLEBAR '0200'.
IF lcl_container2 IS INITIAL.
 PERFORM SET_GRID_EDIT.   <-- 여기로 따라가면.
ENDIF.

 

------------------------------------------------------------------------------------------------

 

  *&---------------------------------------------------------------------*
*&      Form  SET_GRID_EDIT
*&---------------------------------------------------------------------*

FORM set_grid_edit .
  DATA ls_text_tab TYPE string,   <-editing diplay시 쓰려고 선언한 부분 
         lt_text_tab LIKE TABLE OF ls_text_tab,
         ls_string   TYPE string.
*----------------------------------------------------------------------*
* Custom Container Object 생성
*----------------------------------------------------------------------*

생성전에 Global로 아래와 같은 변수들을 선언했다. 꼭 참고해라.

(         lcl_container2        TYPE REF TO cl_gui_custom_container, 참고)

 


( *{ TEXTEDIT Control 선언 참고!!!!
DATA: rc_gui_textedit TYPE REF TO cl_gui_textedit.
*} TEXTEDIT Control
)


CONSTANTS: gc_line_length TYPE i VALUE 75.

TYPES: BEGIN OF ty_line,
line(gc_line_length) TYPE c,
END OF ty_line.

*& LongText
DATA:
gt_lines TYPE TABLE OF ty_line ,
gs_lines LIKE LINE OF gt_lines,
gt_ltxt TYPE TABLE OF tline WITH HEADER LINE,
gt_tline TYPE TABLE OF tdline,
g_end_pos TYPE i,
g_loaded TYPE c.

-----------------------------------------------------선언부 끝------

 


  CREATE OBJECT lcl_container2
    EXPORTING
*       parent                      =
      container_name              'CC_9000'
*       style                       =
*       lifetime                    = lifetime_default
*       repid                       =
*       dynnr                       =
*       no_autodef_progid_dynnr     =
    EXCEPTIONS
      cntl_error                  1
      cntl_system_error           2
      create_error                3
      lifetime_error              4
      lifetime_dynpro_dynpro_link 5
      OTHERS                      6.

 

 

 


  IF rc_gui_textedit  IS INITIAL.
    CREATE OBJECT rc_gui_textedit
      EXPORTING
*       max_number_chars       =
*       style                  = 0
        wordwrap_mode          =
        cl_gui_textedit=>wordwrap_at_fixed_position
*       wordwrap_position      = -1
        wordwrap_position      gc_line_length
        wordwrap_to_linebreak_mode cl_gui_textedit=>true
*       filedrop_mode          = dropfile_event_off
        parent                 lcl_container2
*      lifetime               =
*      name                   =
     EXCEPTIONS
       error_cntl_create      1
       error_cntl_init        2
       error_cntl_link        3
       error_dp_create        4
       gui_type_not_supported 5
       OTHERS                 6.
  ENDIF.

  CALL METHOD rc_gui_textedit->set_toolbar_mode
    EXPORTINGtoolbar_mode   rc_gui_textedit->false.

  CALL METHOD rc_gui_textedit->set_statusbar_mode
    EXPORTINGstatusbar_mode rc_gui_textedit->false.

-아래 부분은 255바이트로 내가 export 할 text를 담아둔 것인데

에디터는 길이가 75로 선언해 놨기 때문에 70길이로 잘라서 itab 에 담는 부분이다.

그래서 에디터 안에서 display 되도록 만든것이다.

 


  ls_string gs_expdat-z_text

  CALL FUNCTION 'SOTR_SERV_STRING_TO_TABLE'   <- 이 펑션이 해당 길이로 잘라줌
    EXPORTING
      text                ls_string
      flag_no_line_breaks 'X'
      line_length         70
*     LANGU               = SY-LANGU
    TABLES
      text_tab            lt_text_tab.


  LOOP AT lt_text_tab INTO ls_text_tab.
    APPEND ls_text_tab TO gt_lines.
  ENDLOOP.
*APPEND gs_expdat-z_text TO GT_LINES.

  CALL METHOD rc_gui_textedit->set_text_as_r3table   <- display 해줌
    EXPORTING
      table gt_lines.     

  IF sy-subrc <> 0.

  ENDIF.

*    call method rc_gui_textedit->set_readonly_mode
*      exporting: readonly_mode = rc_gui_textedit->true.

*  call method rc_gui_textedit->delete_text.
*  call method cl_gui_cfw=>flush.


ENDFORM.                    " SET_GRID_EDIT

 

 

 

-----------------------------------------------------------------------------------------------------

 

이렇게만 하더라도 화면에 text edit 창이 떴을 것이다.

그럼 첫 화면에서 보인 저장버튼 이벤트를 따라가보자.

 

 

    CASE gv_save_code.   유저 커맨드 부분에 아래와 같이 save_text를 만들었다.
    WHEN 'BACK' OR 'EXIT'.    "CANC

*..저장.
    WHEN 'SAVE'.    " OR 'EXEC'.

    when 'SAVE_TEXT'.

  CALL METHOD rc_gui_textedit->get_text_as_r3table  <- 작성된 화면을 읽어들임
    IMPORTING
      table  gt_lines
    EXCEPTIONS
      OTHERS 1.

  CALL METHOD cl_gui_cfw=>flush
    EXCEPTIONS
      OTHERS 1.
      LOOP AT gt_lines INTO gs_lines.
        CONCATENATE ls_txtall gs_lines INTO ls_txtall.
      ENDLOOP.
      gs_expdat-z_text ls_txtall.  <-- 다시 export 하거나 저장할 필드에 넣어줌.
    perform save_req_text.

 

 

 

  *&---------------------------------------------------------------------*
*&      Form  SAVE_REQ_TEXT
*&---------------------------------------------------------------------*
FORM save_req_text .
  LOOP AT gt_logdat INTO gs_logdat.   <-- 업데이트 해줌.
    UPDATE zcoht601 SET  z_cftext gs_expdat-z_text
                    WHERE zqtnr gs_logdat-zqtnr
                      AND zitnr gs_logdat-zitnr
                      AND zvsnr gs_logdat-zvsnr.
  ENDLOOP.

  IF sy-subrc 0.
    COMMIT WORK.
    MESSAGE s001 WITH text-s09.
  ELSE.
    ROLLBACK WORK.
    MESSAGE e001 WITH text-e10 DISPLAY LIKE 'S'.
  ENDIF.

ENDFORM.                    " SAVE_REQ_TEXT

 

 

 

e-abap 에서 어느 정리 잘하시고 똑똑한 개발자분 께서 소스 정리한 파일도 첨부로 올려놓겠다.

문제가 되면 삭제 요청하면 삭제해 드리리다..

 

Textedit_sample.xls

 

 

728x90
반응형