您现在的位置:e-works > 智造书屋 > 书籍列表 > 工程师突击:SAP ABAP实用程序开发攻略 > SAP屏幕事件的控制

第七章 SAP应用界面开发及ABAP报表设计

第二节 SAP屏幕事件的控制

    在进一步了解屏幕事件之前,我们先了解下PAI与PBO的概念。

    PAI:Process After Input.

    PBO:Process Before Output.

    顾名思义,两者都是屏幕流程处理控制机制,一个是在屏幕数据处理之前,一个是在处理完之后。屏幕的具体管控是由一系列的屏幕事件关键字来进行管控的。

7.2.1  INITIALIZATION事件

    该事件在屏幕未显示之前执行,对程序设置值及屏幕元素进行初始化赋值,如例7-16所示。

    例7-16  Initialization在Report程序中的使用。

    REPORT ZSCREEN_TEST11.

    PARAMETERS QUAL_DAY TYPE D DEFAULT SY-DATUM.

    INITIALIZATION.

    QUAL_DAY+6(2) = '01'.

    QUAL_DAY      = QUAL_DAY - 1.

    该程序输出时会对所定义元素赋值初始化,如图7-21所示。

 图7-21  屏幕元素的初始化赋值

图7-21  屏幕元素的初始化赋值

7.2.2  START-OF-SELECTION事件

    综合上例,屏幕初始化界面与上例一致,在单击执行按钮后触发该事件,如例7-17所示。

    例7-17  START-OF-SELECTION事件在Report程序中的使用。

    REPORT ZSCREEN_TEST11.

    PARAMETERS QUAL_DAY TYPE D DEFAULT SY-DATUM.

    INITIALIZATION.

    QUAL_DAY+6(2) = '01'.

    QUAL_DAY      = QUAL_DAY - 1.

    START-OF-SELECTION.

    WRITE: 'DATE:',QUAL_DAY.

    上例执行效果如图7-22所示。

 图7-22  单击执行按钮触发START-OF-SELECTION事件

图7-22  单击执行按钮触发START-OF-SELECTION事件

7.2.3  END-OF-SELECTION事件

    该事件应用于所有数据处理完成,即START-OF-SELECTION相关事件执行完成,但输出屏幕还未显示之前。在实际开发中,主要应用于一些执行结果的检验等。其输出数据叠加于同一输出屏幕中,如例7-18所示。

    例7-18  END-OF-SELECTION事件在Report程序中的使用。

    REPORT ZSCREEN_TEST12.

    PARAMETERS QUAL_DAY TYPE D DEFAULT SY-DATUM.

    INITIALIZATION.

    QUAL_DAY+6(2) = '01'.

    QUAL_DAY      = QUAL_DAY - 1.

    START-OF-SELECTION.

    WRITE: 'DATE:',QUAL_DAY.

    END-OF-SELECTION.

    IF QUAL_DAY <> SYST-DATUM.

    WRITE: 'Today:',SYST-DATUM.

    ENDIF.

    上例执行效果如图7-23所示。

 图7-23  END-OF-SELECTION事件输出值叠加于输出屏幕

图7-23  END-OF-SELECTION事件输出值叠加于输出屏幕

7.2.4  屏幕事件的中止

    ABAP中主要通过以下语法来实现屏幕事件的中止,具体使用如例7-19所示。

    1)EXIT:中止某一事件模块,如START-OF-SELECTION,但是不影响其他事件的执行。

    2)REJECT:功能与EXIT基本一致。

    例7-19  在Report执行模组中使用EXIT中止事件。

    REPORT ZSCREEN_TEST13.

    PARAMETERS QUAL_DAY TYPE D DEFAULT SY-DATUM.

    INITIALIZATION.

    QUAL_DAY+6(2) = '01'.

    QUAL_DAY      = QUAL_DAY - 1.

    START-OF-SELECTION.

    EXIT.          "本行使用EXIT或REJECT结果一致,本事件中止

    WRITE: 'DATE:',QUAL_DAY.

    END-OF-SELECTION.

    IF QUAL_DAY <> SYST-DATUM.

    WRITE: 'Today:',SYST-DATUM.

    ENDIF.

    上例中START-OF-SELECTION事件所对应数据不会输出,但是不会影响END-OF-SELECTION事件的执行,输出结果如图7-24所示。

 图7-24  START-OF-SELECTION事件中止

图7-24  START-OF-SELECTION事件中止

    3)STOP:强制中止所有事件,如例7-20将没有任何输出。

    例7-20  在Report执行模组中使用STOP中止所有事件。

    REPORT ZSCREEN_TEST14.

    PARAMETERS QUAL_DAY TYPE D DEFAULT SY-DATUM.

    INITIALIZATION.

    QUAL_DAY+6(2) = '01'.

    QUAL_DAY      = QUAL_DAY - 1.

    START-OF-SELECTION.

    STOP.                     "本程序所有事件不会执行,无输出

    WRITE: 'DATE:',QUAL_DAY.

    END-OF-SELECTION.

    IF QUAL_DAY <> SYST-DATUM.

    WRITE: 'Today:',SYST-DATUM.

    ENDIF.