2010年10月29日 星期五

SAP-Dialog(Open the text editor when click the button in table control)

*********************************************************************
* 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,他必須是[許可使用標準表格維護工具維護]。

image

欄位如下圖。

image

對這個Table建立表格維護產生器(table maintenance generator)

做法請參考連結(開新視窗) -> 表格維護產生器

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

上面的步驟完成之後,開啟T-code: SM30,在[表格/檢視]填入剛剛自訂的Table名稱。

然後請點[維護]繼續。

image

Table維護的畫面如下(單階),是系統幫我們生成的畫面。

image

但我們希望每個row之後都加一個Button好讓使用者能輸入長文的payment term。

現在再回來T-code: SE11,開啟[表格維護產生器]如下圖。

image

出現的畫面如下。 

image

點[功能群組內文]按鈕,出現如下畫面。

image

點[主程式]按鈕。

雙擊畫面0001如下。

image

單擊[格式]按鈕。

加入button元件以及text field元件如下。 

image

button的屬性設定如下:  

image

text field的屬性設定如下:

image

Save & active。

回到[流程邏輯]。 

image

加入程式碼:

*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如下圖,點[更改]。

image 

出現如下畫面,單擊Button建立物件,如下圖。

image

出現如下畫面,建立物件ZTEST_ID。(剛剛出現在程式裡的物件)

image

打勾繼續,出現如下畫面。

到這裡先儲存起來image

image 

點[內文IDs]建立Text ID。

image

點[建立]按鈕如上圖,輸入內文ID: zts。 (剛剛在程式的部分出現很多次)

image

[v]打勾繼續,接著再存檔一次image

執行我們自己建立的Call SM30 表格維護T-code,出現如下畫面。

image

出現Button了,點[Maintext Text]按鈕會出現長文編輯器。

image

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

沒有留言:

張貼留言