SAP/ABAP 기초

(ABAP 기초) Long Text 사용

haramang 2021. 10. 21. 10:34

롱 텍스트

Text editor를 사용하여 유저의 인풋을 받고 STXH(STXD SAPscript text file header) 테이블에 저장한다. 따라서, 저장된 텍스트를 다시 불러올 수도 있다.

 

SE75에서 텍스트 오브젝트를 먼저 생성하자!

텍스트 오브젝트와 ID를 생성합시다.

 

 

프로그래밍 시작!!

※ 필요한 변수

DATAe_header     LIKE thead,
      text_tab     TYPE g_text_t,
      e_lines      TYPE tline OCCURS WITH HEADER LINE,
      e_line       LIKE LINE OF E_LINES,
      e_number(10TYPE n.

 

 

1.  스크린 페인터에서 스크린 생성 후,  컨테이너 지정 /

     컨테이너 및 그리드 생성

 

  CREATE OBJECT GO_CONTAINER_440

    EXPORTING

      container_name = 'TEXTEDIT'.

  ENDIF.

 

* Text grid가 생성되어 있다면, 초기화 시킨 후 다시 생성

* 초기화 시키지 않으면 기존에 입력된 데이터가 유지되기 때문.

  IF GO_GRID_TEXT IS NOT INITIAL.

    CALL METHOD GO_GRID_TEXT->FREE.

  ENDIF.

 

* Text grid 다시 생성

  CREATE OBJECT GO_GRID_TEXT

    EXPORTING

      PARENT          = GO_CONTAINER_440

      WORDWRAP_MODE    =

                        CL_GUI_TEXTEDIT=>WORDWRAP_AT_FIXED_POSITION

      WORDWRAP_POSITION  = 100

      WORDWRAP_TO_LINEBREAK_MODE = CL_GUI_TEXTEDIT=>TRUE.

 

* TEXT_TAB( 텍스트 저장 테이블 )에 있는 데이터를 STREAM 으로...?

  IF TEXT_TAB IS NOT INITIAL.

    CALL METHOD GO_GRID_TEXT->SET_SELECTED_TEXT_AS_STREAM

      EXPORTING

        SELECTED_TEXT = TEXT_TAB[].

  ENDIF.

 

** 조회모드

*  CALL METHOD GO_GRID2->SET_READONLY_MODE

*    EXPORTING

*      READONLY_MODE = 1.

 

* 수정모드

  CALL METHOD GO_GRID_TEXT->SET_READONLY_MODE

    EXPORTING

      READONLY_MODE = 0.

 

 

2.  입력받은 텍스트를 DB에 저장

  DATAls_text TYPE zted15_rate.

  CLEARe_linese_header.

  e_header-tdobject 'ZED15_RATE'.
  e_header-tdid     'Z01'.
  e_header-tdspras  sy-langu.

  PERFORM text_init.
  PERFORM get_text_from_editor.

 * STXH 테이블 저장할 수 있는 포멧으로 변경
  CALL FUNCTION 'CONVERT_STREAM_TO_ITF_TEXT'
    TABLES
      text_stream text_tab
      itf_text    e_lines.

* E_LINES 에 저장된 텍스트를 E_HEADER의 정보 기준으로 저장
  CALL FUNCTION 'SAVE_TEXT'
    EXPORTING
      header          e_header
      savemode_direct 'X'
    TABLES
      lines           e_lines.

 

FORM text_init .

* TDNAME 에 붙일 번호 채번 
  CALL FUNCTION 'NUMBER_GET_NEXT'
    EXPORTING
      nr_range_nr '01'
      object      'ZNED15_RAT'
    IMPORTING
      number      e_number.

* 채번 앞에 0 붙임.
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      input  e_number
    IMPORTING
      output e_number.

* TDNAME 만들기
  CONCATENATE e_header-tdobject e_header-tdid e_number
    INTO e_header-tdname.

* Initialize test work areas
  CALL FUNCTION 'INIT_TEXT'
    EXPORTING
      id       e_header-tdid
      language sy-langu
      name     e_header-tdname
      object   e_header-tdobject
    IMPORTING
      header   e_header
    TABLES
      lines    e_lines.

ENDFORM.

 

 

FORM get_text_from_editor .

  CLEARe_linestext_tab.


* Initialize test work areas
  CALL METHOD go_grid_text->get_text_as_stream
    IMPORTING
      text                   text_tab
    EXCEPTIONS
      error_dp               1
      error_cntl_call_method 2
      OTHERS                 3.

ENDFORM.

 

3.  텍스트 읽고 테이블에 저장

 

 

*   텍스트 오브젝트 할당
    e_header-tdobject 'ZED15_RATE'.
    e_header-tdid     'Z01'.
    e_header-tdspras  sy-langu.

 

*     평가 테이블에서 가져온 데이터로 Loop
      LOOP AT lt_rate INTO ls_rate.
        e_header-tdname ls_rate-tdname.  " TDNAME 가져오기 ( 텍스트 객체 이름 ) - 후기가 저장되어있는..

*       텍스트 읽어서, E_LINES 테이블에 저장
        CALL FUNCTION 'READ_TEXT'
          EXPORTING
            client   sy-mandt
            id       e_header-tdid
            language sy-langu
            name     e_header-tdname
            object   e_header-tdobject
          IMPORTING
            header   e_header
          TABLES
            lines    e_lines.

        gs_review-review    e_line-tdline.
        gs_review-bname     ls_rate-bname.
        gs_review-category  ls_rate-category.
        gs_review-food_name ls_rate-food_name.
        gs_review-rate      ls_rate-rate.
        gs_review-radat     ls_rate-radat.
        gs_review-ratim     ls_rate-ratim.

        LOOP AT E_LINES INTO E_LINE.
          CONCATENATE GS_REVIEW-REVIEW E_LINE-TDLINE ` ` INTO GS_REVIEW-REVIEW.
          CLEARE_LINE.
        ENDLOOP.

        APPEND gs_review TO gt_review.

*       변수 초기화
        CLEARgs_menugs_reviewe_linee_lines[]e_header-tdname.

      ENDLOOP.