*********************************************************************
* Goal : 讓表格維護器產生的交易裡能編輯長文。
* T-Code : SE11、SM30、SE75(Object & id)
* Description : 利用系統產生出來的程式以及畫面再做部分修改維護自訂Table。
* Source : saptechnical.com
* P.S : 此為我的練習,英文範本請參考上列網址。
*********************************************************************
=>建議:可先到文章末端看看實做出來的結果,大致的流程如下五步驟。
1.建立自訂Table。
2.表格維護產生器,系統產生一堆程式碼以及畫面。
3.再利用Screen Painter加上Button欄位。
4.有建立表格維護的Table可用SM30來做維護。
5.自建一支T-code來呼叫SM30(跳過第一個畫面)執行Table的維護。
T-code: SE11 建立一個Z打頭的Table,他必須是[許可使用標準表格維護工具維護]。
欄位如下圖。
對這個Table建立表格維護產生器(table maintenance generator)
做法請參考連結(開新視窗) -> 表格維護產生器 。
---------------------------------------------------------------------
上面的步驟完成之後,開啟T-code: SM30,在[表格/檢視]填入剛剛自訂的Table名稱。
然後請點[維護]繼續。
Table維護的畫面如下(單階),是系統幫我們生成的畫面。

但我們希望每個row之後都加一個Button好讓使用者能輸入長文的payment term。
現在再回來T-code: SE11,開啟[表格維護產生器]如下圖。
出現的畫面如下。
點[功能群組內文]按鈕,出現如下畫面。
點[主程式]按鈕。
雙擊畫面0001如下。
單擊[格式]按鈕。
加入button元件以及text field元件如下。
button的屬性設定如下:
text field的屬性設定如下:
Save & active。
回到[流程邏輯]。
加入程式碼:
*module to create text editor for payment term text MODULE text_editor. |
Module裡的程式碼:
*----------------------------------------------------------------------* ***INCLUDE LZEISRICEI01 . *----------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Module TEXT_EDITOR INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE text_editor INPUT. DATA g_aftnr LIKE thead-tdname. DATA g_vendor TYPE lifnr. DATA st_thead LIKE thead. DATA wa_lines TYPE tline. DATA it_lines TYPE TABLE OF tline. DATA g_tdname LIKE stxh-tdname. DATA g_lineno TYPE sy-index. DATA g_ok_code TYPE sy-ucomm. DATA g_lin_no. CLEAR : g_lineno, g_tdname, st_thead, it_lines, wa_lines, g_lin_no. REFRESH it_lines. g_ok_code = sy-ucomm. CLEAR sy-ucomm. IF g_ok_code EQ 'PTERM'. GET CURSOR LINE g_lineno. g_lineno = g_lineno + tctrl_zcontract-top_line - 1. READ TABLE extract INDEX g_lineno. g_vendor = extract+3(10). g_aftnr = extract+13(10). CONCATENATE g_vendor g_aftnr INTO g_tdname. PERFORM read_text. IF sy-subrc NE 0. PERFORM enter_st_head. PERFORM edit_text. ELSE. PERFORM edit_text. ENDIF. ENDIF. PERFORM create_text. ENDMODULE. " TEXT_EDITOR INPUT *&----------------------------------------------------------------* *& Form READ_TEXT *&----------------------------------------------------------------* FORM read_text . CALL FUNCTION 'READ_TEXT' "讀長文 EXPORTING * CLIENT = SY-MANDT id = 'ZTS' "自己建立的長文ID language = sy-langu name = g_tdname object = 'ZTEST_ID' "之後會建立這個物件 * ARCHIVE_HANDLE = 0 * LOCAL_CAT = ' ' IMPORTING header = st_thead TABLES lines = it_lines EXCEPTIONS id = 1 language = 2 name = 3 not_found = 4 object = 5 reference_check = 6 wrong_access_to_archive = 7 OTHERS = 8 . IF sy-subrc <> 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. ENDFORM. " READ_TEXT *&----------------------------------------------------------------* *& Form ENTER_ST_HEAD *&----------------------------------------------------------------* FORM enter_st_head . st_thead-tdobject = 'ZTEST_ID'. "我們之後會建立這個物件 st_thead-tdid = 'ZTS' . "自己建立的長文ID st_thead-tdspras = sy-langu. st_thead-tdlinesize = '072'. st_thead-tdtxtlines = '1'. ENDFORM. " ENTER_ST_HEAD *&---------------------------------------------------------------* *& Form EDIT_TEXT *&---------------------------------------------------------------* FORM edit_text . CALL FUNCTION 'EDIT_TEXT' "編輯長文 EXPORTING * DISPLAY = ' ' * EDITOR_TITLE = ' ' header = st_thead * PAGE = ' ' * WINDOW = ' ' * SAVE = 'X' * LINE_EDITOR = ' ' * CONTROL = ' ' * PROGRAM = ' ' * LOCAL_CAT = ' ' IMPORTING * FUNCTION = newheader = st_thead * RESULT = TABLES lines = it_lines EXCEPTIONS id = 1 language = 2 linesize = 3 name = 4 object = 5 textformat = 6 communication = 7 OTHERS = 8 . IF sy-subrc <> 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. ENDFORM. " EDIT_TEXT *&---------------------------------------------------------------* *& Form CREATE_TEXT *&---------------------------------------------------------------* FORM create_text . CALL FUNCTION 'CREATE_TEXT' EXPORTING fid = 'ZTS' "自己建立的長文ID flanguage = sy-langu fname = g_tdname fobject = 'ZTEST_ID' "我們之後會建立這個物件 save_direct = 'X' fformat = '*' TABLES flines = it_lines EXCEPTIONS no_init = 1 no_save = 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. ENDFORM. " CREATE_TEXT |
現在開啟T-code: SE75,選更改文字物件與IDs如下圖,點[更改]。
出現如下畫面,單擊Button建立物件,如下圖。
出現如下畫面,建立物件ZTEST_ID。(剛剛出現在程式裡的物件)
打勾繼續,出現如下畫面。
到這裡先儲存起來
。
點[內文IDs]建立Text ID。
點[建立]按鈕如上圖,輸入內文ID: zts。 (剛剛在程式的部分出現很多次)
[v]打勾繼續,接著再存檔一次
。
執行我們自己建立的Call SM30 表格維護T-code,出現如下畫面。
出現Button了,點[Maintext Text]按鈕會出現長文編輯器。

以上。^(+++++)^