SAP应用界面开发:3)SELECTION-SCREEN 对象(2)

接上一篇,我们继续讲解SELECTION-SCREEN的的语法。
       (4)SELECTION-SCREEN INCLUDE(调用已经存在的屏幕元素)
        
参照某一个已经定义的屏幕元素来创建,如下代码:
    CALL SCREEN 1234.
    *PARAMETERS MATNR LIKE MARA-MATNR.
    *CALL SELECTION-SCREEN 1234.  "调用子窗体

    SELECTION-SCREEN BEGIN OF SCREEN 1111.
      SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE TEXT-W01.
        SELECT-OPTIONS SELO FOR SY-REPID.
        SELECTION-SCREEN ULINE. "换行线
        PARAMETERS PARO.
      SELECTION-SCREEN END OF BLOCK block1.
    SELECTION-SCREEN END OF SCREEN 1111.

    SELECTION-SCREEN BEGIN OF SCREEN 1234.
      SELECTION-SCREEN INCLUDE BLOCKS block1.
    SELECTION-SCREEN END OF SCREEN 1234.
    
程序运行界面如下:
    
     (5)SELECTION-SCREEN ULINE
      
划出横线,必须用在BLOCK中才能生效。
     (6)SELECTION-SCREEN SKIP n
      
在BLOCK中产生换行。
     (7)SELECTION-SCREEN POSITION pos
      
在BLOCK中产生空格。
     (8)SELECTION-SCREEN BEGIN OF LINE.
         ......
         SELECTION-SCREEN END OF LINE.
     
 将所生成的屏幕元素控制在一行。
     (9)AT SELECTION-SCREEN
      
是PAI处理,选择屏幕显示之后,用来响应回车,F8,F1,F4等事件。
      (1)选择屏幕事件,此处声明的变量是局部变量。
      (2)check sy-ucomm 判断用户命令。
      (3)在这个事件响应中,可以对屏幕字段进行有效性检验等,但无法修改选择屏幕。
      分为以下几个方面:
      ... ON <field>:
该语法用于控制屏幕元素输入时的遇错处理,检查具体输入字段(SELECTION-OPTIONS或PARAMETERS)是否完整或正确,若输入有错或不满足条件,其它屏幕元素会变成灰色,不接受输入直到该字段输入正确为止。
      ...ON VALUE-REQUEST FOR <field low/high>:SELECT-OPTIONS按选择帮助<F4>键时触发该事件。
      ...ON HELP-REQUEST FOR <field low/high>:SELECTION-OPTIONS按选择帮助<F1>键时键发该事件。
      ...ON RADIOBUTTON GROUP <radio>:单选按钮事件,必须进行整体输入检查。
      ...ON BLOCK <block>:框架的触发事件(控制框架中的屏幕元素值的输入)。
      ...OUTPUT:用于屏幕输出时的各屏幕元素值的管控(PBO处理,在选择屏幕显示之前就被调用;响应屏幕上的事件,用户回车或F8后也被调用;通过modify screen可以修改选择屏幕字段)。
      ...ON EXIT-COMMAND:用于响应"BACK","CANCEL","EXIT"等事件。
      [For Example]
      SELECT-OPTIONS SEL0 FOR SY-TVAR0.
      SELECTION-SCREEN BEGIN OF BLOCK BL0.
       SELECT-OPTIONS SEL1 FOR SY-TVAR1.
        SELECTION-SCREEN BEGIN OF BLOCK BL1.
         PARAMETERS P1 RADIOBUTTON GROUP RAD1.
         PARAMETERS P2 RADIOBUTTON GROUP RAD1.

         SELECTION-SCREEN BEGIN OF BLOCK BL2.
          PARAMETERS P3.
         SELECTION-SCREEN END OF BLOCK BL2.
        SELECT-OPTIONS SEL2 FOR SY-TVAR2.
       SELECTION-SCREEN END OF BLOCK BL1.
      SELECTION-SCREEN END OF BLOCK BL0.

      AT SELECTION-SCREEN ON SEL1.
      AT SELECTION-SCREEN ON RADIOBUTTON GROUP RAD1.
      AT SELECTION-SCREEN ON P3.
      AT SELECTION-SCREEN ON BLOCK BL1.
      AT SELECTION-SCREEN ON BLOCK BL2.

  在ABAP中在屏幕上创建按钮,你需要在SELECTION-SCREEN对象中加入PUSHBUTTON参数,语法如下:
     [Syntax]
     
SELECTION-SCREEN PUSHBUTTON [/] <pos(len)> <name> USER-COMMAND <ucom> [MODIF ID <key>]
    
 <pos(len)>:PUSHBUTTON按钮在屏幕生成的位置与长度。
     <name>:PUSHBUTTON按钮的名称,给按钮赋值时要用到名字。
     <ucom>:必须指定的字符代码,当用户在选择屏幕上触发按钮时,<ucom>被输入到词典对象字段:SSCRFIELDS-UCOMM中,需要注意的是,必须显式使用语句TABLES引用SSCRFIELDS。否则将会报如下错误:
      
      [For Example]
   TABLES SSCRFIELDS."引用词典对象
   INCLUDE:<icon>.  "按钮中加入图标必须调用该类型库,图标请参考T-CODE:ICON
   SELECTION-SCREEN PUSHBUTTON /1(20) PUBU1 USER-COMMAND ABCD.
     SELECTION-SCREEN SKIP."换行
   SELECTION-SCREEN PUSHBUTTON /10(25) PUBU2 USER-COMMAND ABCE. "位置从10开始

   AT SELECTION-SCREEN OUTPUT.
     MOVE 'CALL NEXT SCREEN' TO PUBU1. "给PUBU1按钮赋值描述
  
  *INITIALIZATION. "屏幕初始化
     * PUBU1 = 'First PUSHBUTTON'.

  
   WRITE ICON_OKAY AS ICON TO PUBU2. "给PUBU2按钮添加图标,并且在给按钮赋值之前,否则将会把文字替换。
   *MOVE 'THE SECOND BUTTON' TO PUBU2.
   CONCATENATE PUBU2 'My Second Button' INTO PUBU2 SEPARATED BY SPACE. "给第二个按钮添加赋值描述

   AT SELECTION-SCREEN.
    IF SSCRFIELDS-UCOMM = 'ABCD'.
      CALL SELECTION-SCREEN 1234.  "调用程序中的另一个窗体
    ENDIF.
   以上代码运行界面如下:
     
    点击"CALL NEXT SCREEN"按钮调用下一个屏幕,如下: