아래와 같이 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
EXPORTING: toolbar_mode = rc_gui_textedit->false.
CALL METHOD rc_gui_textedit->set_statusbar_mode
EXPORTING: statusbar_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 에서 어느 정리 잘하시고 똑똑한 개발자분 께서 소스 정리한 파일도 첨부로 올려놓겠다.
문제가 되면 삭제 요청하면 삭제해 드리리다..
'ERP-SAP > ABAP' 카테고리의 다른 글
<ABAP> Selection Screen 에 Sign , Option 같이 주기. (0) | 2012.12.21 |
---|---|
<ABAP> Source 찾기, 특정 문자 개발코드에서 찾기, Source 코드 찾기 (0) | 2012.11.14 |
<ABAP> 동적 where 조건문 연습하기 (0) | 2012.09.18 |
<ABAP> Native sql 프로시져 호출 및 db insert(RFC) (0) | 2012.09.11 |
<ABAP> 프로그램 강제 수정 프로그램. (0) | 2012.09.05 |