天天看點

SAP應用界面開發:3)SELECTION-SCREEN對象(4)

      前面幾篇文章已經學習了ABAP中SELECTION-SCREEN的大部分對象,既然是大部分對象,那麼還遺留有小部分對象還未接觸,接下來我們将繼續學習。

     (1)SELECTION-SCREEN COMMONT fmt name.

      用于定義或者修改本地元素的注釋,包括PARAMETER、CHECKBOX BUTTON等。通過SELECTION-SCREEN COMMENT文法可以按Text Symbols設定的值對其屬性重新定義。

      [For Example]

   SELECTION-SCREEN BEGIN OF LINE.

    SELECTION-SCREEN COMMENT (12) TEXT-W03 FOR FIELD parm.

    SELECTION-SCREEN POSITION 14.

    PARAMETERS parm LIKE MARA-MATNR.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN SKIP 1.

     PARAMETERS:type AS CHECKBOX.

     SELECTION-SCREEN COMMENT (40) TEXT-W04 FOR FIELD type.

   Text-Symbols設定如下:

   程式運作界面如下:

   (2)SELECTION-SCREEN FUNCTION KEY n.

   該對象用于在工具欄上新增一個功能按鈕。該按鈕的定義儲存在系統結構體SSCRFIELDS中,n為一個整數序數最大至5。不要試圖讓它小于1或者大于5,它不接受這個範圍。也就是說工具欄按鈕最多可以放5個(whereby a value between 1 and 5 must be entered for n)。當n等于1時,其按鈕描述儲存在字段SSCRFIELDS-FUNCTXT_01中,其按鈕對象命名為

"FC01",儲存在字段SSCRFIELDS-UCOMM中,以下為示例代碼:

    [For Example]

    PARAMETERS para LIKE MARA-MATNR.

TABLES: SSCRFIELDS.

SELECTION-SCREEN FUNCTION KEY 1.

SELECTION-SCREEN FUNCTION KEY 2.

SELECTION-SCREEN FUNCTION KEY 5.

INITIALIZATION.  "初始公螢幕時,就給它們一些值吧,讓它們看起來更像是個按鈕,按鈕也需要有尊嚴的活着。

       MOVE 'Add BUTTON' TO SSCRFIELDS-FUNCTXT_01.

       MOVE 'Minus BUTTON' TO SSCRFIELDS-FUNCTXT_02.

       MOVE 'MODIFY BUTTON' TO SSCRFIELDS-FUNCTXT_05.

AT SELECTION-SCREEN.

      IF SSCRFIELDS-UCOMM = 'FC05'. "觸發 FC05工具欄按鈕,将要執行什麼操作

        CALL SELECTION-SCREEN 1234."調用程式中的子螢幕

      ENDIF.

    運作界面如下:

    以下代碼來自官方網站上面的例子:

   *官方菜單SELECTION-SCREEN FUNCTION KEY n (demo:http://help.sap.com/abapdocu_70/en/ABAPSELECTION-SCREEN_FUNCTIONKEY.htm)

TYPE-POOLS ICON. "Program Icon Library

TABLES SSCRFIELDS.

DATA functxt TYPE SMP_DYNTXT. "SMP_DYNTXT(菜單制作器:動态文本的程式接口)

PARAMETERS: p_carrid TYPE s_carr_id,

               p_cityfr TYPE s_from_cit.

SELECTION-SCREEN: FUNCTION KEY 1,

                     FUNCTION KEY 2.

   INITIALIZATION. "螢幕初始化

     functxt-icon_id   = icon_ws_plane.  "文本字段中的圖示(替換顯示,别名) 

     functxt-quickinfo = 'Preselected Carrier'.  "菜單制作器:資訊文本 (4.0),滑鼠移去過去顯示的資訊TIP

     functxt-icon_text = 'LH'.  "菜單制作器:圖示文本 (4.0),菜單名稱

     sscrfields-functxt_01 = functxt.

     functxt-icon_text = 'UA'.

     sscrfields-functxt_02 = functxt.

    CASE SSCRFIELDS-UCOMM.

      WHEN 'FC01'.

        p_carrid = 'LH'.

        p_cityfr = 'Frankfurt'.

      WHEN 'FC02'.

        p_carrid = 'UA'.

        p_cityfr = 'Chicago'.

   ENDCASE.

   運作界面如下:

   (3)SELECTION-SCREEN BEGIN OF TABBED BLOCK <block> FOR n LINES.

    定義頁籤或者其他類似于選擇頁切換的功能元件。具體文法如下:

   [Syntax]

   SELECTION-SCREEN: BEGIN OF TABBED BLOCK <sub_area> FOR n LINES,

                     [......]

                     END

OF BLOCK <sub_area>.

   其中 n代表高度,此高度為選擇控件的高度。

   例1:

   [Code]

   TABLES:MARA.

   *定義子螢幕100 SUBSCREEN

SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN.

     SELECTION-SCREEN BEGIN OF BLOCK blockA WITH FRAME TITLE TEXT-W01.

      SELECT-OPTIONS:mantra FOR MARA-MATNR NO INTERVALS.

      SELECTION-SCREEN SKIP 1.

      PARAMETERS: check01 AS CHECKBOX DEFAULT 'X'.

     SELECTION-SCREEN END OF BLOCK blockA.

SELECTION-SCREEN END OF SCREEN 100.

*定義子螢幕200 SUBSCREEN

SELECTION-SCREEN BEGIN OF SCREEN 200 AS SUBSCREEN.

    PARAMETERS: mantrb LIKE MARA-MATNR.

SELECTION-SCREEN END OF SCREEN 200.

   *選擇頁TAB功能,定義兩個TAB

SELECTION-SCREEN:

BEGIN OF TABBED BLOCK MyTab FOR 5 LINES,

     TAB (20) BUTTON1 USER-COMMAND PUSH1,  *(20)代表要顯示在TAB内容的長度,最大長度為79,不相信?你可以試下.哈哈

     TAB (20) BUTTON2 USER-COMMAND PUSH2,

END OF BLOCK MyTab.

INITIALIZATION.

    BUTTON1 = 'FirstTab'.

    BUTTON2 = 'SecondTab'.

    MyTab-PROG = SY-REPID. *指定調用的程式名

    MyTab-DYNNR = 100. *指定目前要顯示的螢幕

   AT SELECTION-SCREEN.

    CASE SY-UCOMM.

     WHEN 'PUSH1'.

        MyTab-DYNNR = 100.

        MyTab-ACTIVETAB = 'BUTTON1'.

     WHEN 'PUSH2'.

        MyTab-DYNNR = 200.

        MyTab-ACTIVETAB = 'BUTTON2'.

    ENDCASE.

    例2:

    [CODE] The Official Demo

    TABLES SSCRFIELDS.

* SUBSCREEN 100

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-010.

PARAMETERS: p1(10) TYPE c,

                 p2(10) TYPE c,

                 p3(10) TYPE c.

SELECTION-SCREEN END OF BLOCK b1.

* SUBSCREEN 200

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-020.

PARAMETERS: q1(10) TYPE c,

                  q2(10) TYPE c,

                  q3(10) TYPE c.

SELECTION-SCREEN END OF BLOCK b2.

* SUBSCREEN 300

SELECTION-SCREEN BEGIN OF SCREEN 300 AS SUBSCREEN.

SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-030.

PARAMETERS: r1(10) TYPE c,

                  r2(10) TYPE c,

                  r3(10) TYPE c.

SELECTION-SCREEN END OF BLOCK b3.

SELECTION-SCREEN END OF SCREEN 300.

* STANDARD SELECTION SCREEN

SELECTION-SCREEN: FUNCTION KEY 1, "工具欄按鈕

                     FUNCTION KEY 2.

   SELECTION-SCREEN: BEGIN OF TABBED BLOCK sub FOR 10 LINES,

                     END OF BLOCK sub.

   INITIALIZATION.

     sscrfields-functxt_01 = '@0D@'. "按鈕描述字段,圖示形貌

     sscrfields-functxt_02 = '@0E@'. "按鈕描述字段,圖示形貌

     sub-prog = SY-REPID. "必選項,倔強的孩子.

     sub-dynnr = 100.

    CASE SY-DYNNR. "目前顯示螢幕的名稱

     WHEN 100.

      IF SSCRFIELDS-UCOMM = 'FC01'. "觸發事件的TOOL BAR CONTROL

        sub-dynnr = 300.  "指定顯示哪個螢幕

      ELSEIF SSCRFIELDS-UCOMM = 'FC02'.

        sub-dynnr = 200.

      ENDIF.

    WHEN 200.

      IF SSCRFIELDS-UCOMM = 'FC01'.

        sub-dynnr = 100.

        sub-dynnr = 300.

    WHEN 300.

  ENDCASE.

  START-OF-SELECTION.

   WRITE: / 'P1:', p1,'Q1:', q1, 'R1:', r1,

          / 'P2:', p2,'Q2:', q2, 'R2:', r2,

          / 'P3:', p3,'Q3:', q3, 'R3:', r3.

  運作界面如下: