Code: Alles auswählen.
WHILE gv_pause_until > sy-uzeit.
LOOP AT SCREEN. "SCREEN is the table generated at runtime.
IF screen-name = 'ABBAUEN'."Field name on the screen.
screen-input = 0. "It disables the button on the screen
MODIFY SCREEN.
CLEAR screen.
ENDIF.
ENDLOOP.
ENDWHILE.
DeathAndPain hat geschrieben:Das was Du da willst funktioniert prinzipbedingt nicht, da SAP kein Echtzeitsystem ist, sondern aktionsgesteuert. Wenn das Dynpro aufgerufen wird, dann wird sein PBO-Block durchlaufen, und dabei kannst Du dann mit solch LOOP-Schleife den Knopf grausteuern. Aber erst, nachdem alle PBO-Module verarbeitet sind, wird das Dynpro überhaupt angezeigt! Dann kannst Du erst wieder was machen, wenn der Benutzer eine Eingabe getätigt hat. Dabei wird dann der PAI-Block durchlaufen, und wenn das aktuelle Dynpro auch das Folgedynpro ist, dann wieder dessen PAI-Block. Du kannst die Grausteuerung also zwar von mir aus nach der Systemzeit setzen, aber nur auf Benutzereingaben hin verändern.
Bezogen auf Deinen Code bedeutet das, dass Deine LOOP-Schleife funktioniert (wenngleich sie IMHO schrecklich programmiert ist), sofern sie sich in einem PBO-Modul des betreffenden Dynpros befindet. Die sie umgebende WHILE-Schleife hingegen macht keinen Sinn.
Tatsächlich "wartest" Du mit dieser WHILE-Schleife nur, bis der Zeitpunkt gv_pause_until erreicht ist. Sofern dies Dein Zweck war, hast Du hierfür auch eine furchtbare Umsetzung gewählt, denn auf diese Weise blockierst Du während des Wartens nicht nur einen SAP-Prozess, sondern erzeugst auch 100% sinnlose Rechenlast auf einem Prozessorkern! Solche Warteschleifen waren zu C64-Zeiten üblich; heute aber sollte man Wartefunktionen aufrufen, die keine Rechenlast erzeugen. In SAP stehen Dir hierfür der ABAP-Befehl WAIT UP TO sowie der Funktionsbaustein RZL_SLEEP zur Verfügung (mit unterschiedlichen Vor- und Nachteilen, weswegen es keine universelle Antwort gibt, welche der beiden Lösungen besser ist. In vielen Fällen sind sie gleich gut geeignet).
Wie fit bist du denn?Abaphalbsocke hat geschrieben:gibt es vlt noch andere möglichkeiten irgendwie das ziel zu erreichen? Oder kann ich die "wartezeit" bis die sekunde um ist anzeigen lassen oder einen hinweis darauf geben? irgendwas?
ich denke ich probiere mal den cl_gui_timer aus. Wenn ich damit nicht klarkomme frage ich nochmal, danke dir! Wenn ich das hinbekomme werde ich den Beitrag als gelöst kennzeichnen.black_adept hat geschrieben:Wie fit bist du denn?Abaphalbsocke hat geschrieben:gibt es vlt noch andere möglichkeiten irgendwie das ziel zu erreichen? Oder kann ich die "wartezeit" bis die sekunde um ist anzeigen lassen oder einen hinweis darauf geben? irgendwas?Und es gibt wahrscheinlich noch viele andere Wege die nach Rom führen - aber keiner ist trivial.....
- Mit cl_gui_timer ( der aber nur sekundengenau und nicht noch genauer ) einen Event auslösen und dort dann mittels CL_GUI_CFW=>SET_NEW_OK_CODE einen PAI und danach dann halt einen PBO triggern, wo der Button wieder eingabebereit wierd.
- Du arbeitest statt eines "Normalen" Buttons mit einem Fake, der nur so aussieht wie eine Drucktaste in Wirklichkeit aber ein HTML-Control ist. In einer HTML-Seite kannst du nun einen (recht genauen) Timer mittels JavaScript implementieren und nach Ablauf der Schonfrist diesen auf eingabebereit stellen bzw. dann erst zulassen, dass ein Klick hierauf an die Gui und dann an das ABAP weitergeleitet wird.
- Du bauste einen Dockingcontainer an dein Programm und erzeugst wie in 2. eine HTML-Seite und lässt dort den von dir angefragten Balken mit der Restwartezeit ablaufen.