Dynpro Button ausgrauen

Getting started ... Alles für einen gelungenen Start.
6 Beiträge • Seite 1 von 1
6 Beiträge Seite 1 von 1

Dynpro Button ausgrauen

Beitrag von Abaphalbsocke (ForumUser / 42 / 18 / 0 ) »
Moin,


Ich möchte einen Button im Dynpro ausgrauen solange eine bestimmte kondition NICHT eintrifft.
Die paar ähnlichen beiträge die es schon gibt, sind leider so wenig aussagend und andere Fundorte im netz lassen mich das auch nicht verstehen.

Einige bestimmte leute wissen vlt schon worum es geht. Solange sy-uzeit nicht größer ist als eine andere Variable mit einer dynamisch gespeicherten Uhrzeit(auf die wird nach jedem buttondruck eine Sekunde raufgerechnet) soll dieser Button ausgergraut werden und nach überholen der sy-uzeit wieder klickbar sein.

Mein Code Snippet funktioniert nicht:

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.

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Dynpro Button ausgrauen

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
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).

Re: Dynpro Button ausgrauen

Beitrag von Abaphalbsocke (ForumUser / 42 / 18 / 0 ) »
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).

alles furchtbar und schlechte gecoded, natürlich. ich war ja noch am aufbauen und hätte es danach aufgeräumt.

ich habe aber mal gesehen wie zb bestimmte eingabefelder ausgrauen wenn der user auf ein anderes bestimmtes eingabefeld geklickt hat.. hm, warscheinlich war das n select options oder sowas..
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?
Weil "Das was Du da willst funktioniert prinzipbedingt" ist schon ein richtiger dämpfer... :?

Re: Dynpro Button ausgrauen

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
Wie schon geschrieben: Sowas geht nach einer Benutzeraktion, die einen PAI/PBO-Durchlauf erzeugen. "Einfach so" geht es leider nicht oder nur mit viel Krückerei.


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Dynpro Button ausgrauen

Beitrag von black_adept (Top Expert / 3943 / 105 / 886 ) »
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?
Wie fit bist du denn?
  • 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.
Und es gibt wahrscheinlich noch viele andere Wege die nach Rom führen - aber keiner ist trivial.....
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Dynpro Button ausgrauen

Beitrag von Abaphalbsocke (ForumUser / 42 / 18 / 0 ) »
black_adept hat geschrieben:
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?
Wie fit bist du denn?
  • 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.
Und es gibt wahrscheinlich noch viele andere Wege die nach Rom führen - aber keiner ist trivial.....
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.

Seite 1 von 1

Vergleichbare Themen

2
Antw.
9492
Views
Buttons auf Dynpro ausgrauen
von tuerkyilmaz » 09.05.2007 09:40 • Verfasst in Dialogprogrammierung
1
Antw.
1070
Views
Web - Dynpro Button
von Rabea1103 » 08.02.2021 09:02 • Verfasst in Web-Dynpro, BSP + BHTML
3
Antw.
1601
Views
Button auf Dynpro auskraulen?
von Zubasa » 19.05.2011 17:30 • Verfasst in ABAP® für Anfänger
2
Antw.
4173
Views
F8-Button auf Selektionsbild (Dynpro 1000)
von Mrs. Hilflos » 15.12.2006 12:32 • Verfasst in ABAP® Core
15
Antw.
3976
Views
Dynpro / Button Transporteintrag schreiben
von Trulchen » 14.01.2016 13:59 • Verfasst in ABAP® für Anfänger

Aktuelle Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 107
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 140