Ich hatte in meiner Zeit als Berater immer wieder die Diskussion mit Kunden, warum manche Meldungen immer weggeklickt werden müssen. Dabei ist schon mal sinnvoll, wenn Meldungen nicht einfach unten in der Statusleiste versauern und vielleicht vom User gar nicht wahrgenommen werden. Das Gegenargument war häufig, dass das Anklicken des Fensters einen Mehraufwand für die Nutzer bedeuten würde (Kleine Anekdote am Rande: Ich musste mal ein Dialogprogramm entwickeln, wo in einem Schritt eine Handling Unit gebildet, diese über die VLMOVE in einen WM-geführten Lagerort umgebucht und anschließend ein WM-Transportauftrag zur Einlagerung angelegt werden sollte. Da so viele Dinge in der Transaktion passierten, hatte ich alle Meldungen gesammelt und am Ende gesammelt in einem Popup angezeigt. Jemand im Lager hat sich über den Mehraufwand [Wegklicken des Popups] beschwert und auf Sekundenbasis hochgerechnet, wieviele Manntage Mehraufwand für das Unternehmen im Jahr bedeutete. Sagen mir mal so: das Ausrechnen war wahrscheinlich unterm Strich aufwändiger als das Klicken selber…). Wie auch immer: Ein Kunde hatte mal die Idee, wie es denn wäre, wenn ein Popup nach einer bestimmten Zeit (z.B. drei Sekunden) von selber verschwände. Mein erster Impuls war zu sagen, dass das nicht geht, denn nach dem PBO wartet das System auf eine Nutzeraktion. Und so lange keine Aktion, wird auch das PAI nicht verarbeitet und das Fenster kann nicht verschwinden. Aber am Ende hat es mir dann doch keine Ruhe gelassen und ich habe etwas recherchiert und es gibt tatsächlich einen Funktionsbaustein, der ein Ereignis aus zu lösen vermag. Mit dem Funktionsbaustein ‘SAPGUI_SET_FUNCTIONCODE’ kann man Funktionscodes im PBO auslösen. Dabei ist das “=” der Default-Funktionscode.
CALL FUNCTION 'SAPGUI_SET_FUNCTIONCODE'
EXPORTING
FUNCTIONCODE = '='
EXCEPTIONS
FUNCTION_NOT_SUPPORTED = 1
OTHERS = 2 .
Da nicht alle Front-End-Plattformen diese Funktion unterstützen, sollte man zur Sicherheit prüfen, ob eine Ausnahme stattgefunden hat. Im SAP GUI funktioniert das einwandfrei, im ITSmobile habe ich das (leider) nicht ans Laufen gebracht. Anbei mal ein einfaches Anwendungsbeispiel. Dieses Programm ruft den Screen 100 auf, der als Popup definiert ist. Im PBO löst es sofort ein Ereignis aus und im PAI wird drei Sekunden gewartet, bis der Screen 200 aufgerufen wird.
*---------------------------------------------------------------------*
* Report ZMM_TEST_LZF
*
*---------------------------------------------------------------------*
*
*
*---------------------------------------------------------------------*
REPORT ZMM_TEST_LZF.
call screen 0100 starting at 10 10.
*---------------------------------------------------------------------*
* Module USER_COMMAND_0100 INPUT
*---------------------------------------------------------------------*
* PAI-Module des Popup-Bildschirms
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
WAIT UP TO 3 SECONDS.
call SCREEN 0200.
ENDMODULE. " USER_COMMAND_0100 INPUT
*---------------------------------------------------------------------*
* Module USER_COMMAND_0200 INPUT
*---------------------------------------------------------------------*
* PAI-Module des Folge-Bildschirms
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0200 INPUT.
LEAVE PROGRAM.
ENDMODULE. " USER_COMMAND_0200 INPUT
*---------------------------------------------------------------------*
* Module STATUS_0100 OUTPUT
*---------------------------------------------------------------------*
* PBO-Module des Popup
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
CALL FUNCTION 'SAPGUI_SET_FUNCTIONCODE'
EXPORTING
FUNCTIONCODE = '='
EXCEPTIONS
FUNCTION_NOT_SUPPORTED = 1
OTHERS = 2 .
IF SY-SUBRC NE 0.
* Implement suitable error handling here
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
Nach Aufruf des Programms erscheint ein Popup-Fenster:
Dieses verschwindet nach drei Sekunden und das Folgedynpro wird angezeigt…
Leave a Reply