Dynpro Button ausgrauen


Getting started ... Alles für einen gelungenen Start.

Moderatoren: Jan, Steff

Dynpro Button ausgrauen

Beitragvon Abaphalbsocke » 11.06.2018, 11:05

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.
Abaphalbsocke
ForumUser
 
Beiträge: 42
Registriert: 27.04.2018, 14:57
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

Re: Dynpro Button ausgrauen

Beitragvon DeathAndPain » 11.06.2018, 11:26

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).
DeathAndPain
Expert
 
Beiträge: 775
Registriert: 05.05.2006, 10:14
Dank erhalten: 173 mal
Ich bin: Entwickler/in

Re: Dynpro Button ausgrauen

Beitragvon Abaphalbsocke » 11.06.2018, 12:05

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... :?
Abaphalbsocke
ForumUser
 
Beiträge: 42
Registriert: 27.04.2018, 14:57
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: Dynpro Button ausgrauen

Beitragvon ralf.wenzel » 11.06.2018, 14:01

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
ralf.wenzel
Top Expert
 
Beiträge: 3150
Registriert: 18.09.2004, 13:03
Wohnort: Hamburg
Dank erhalten: 178 mal
Ich bin: Freiberufler/in

Re: Dynpro Button ausgrauen

Beitragvon black_adept » 11.06.2018, 14:29

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
black_adept
Top Expert
 
Beiträge: 3074
Registriert: 08.01.2003, 13:33
Wohnort: Lehrte ( bei Hannover )
Dank erhalten: 522 mal
Ich bin: Freiberufler/in

Re: Dynpro Button ausgrauen

Beitragvon Abaphalbsocke » 11.06.2018, 15:27

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.
Abaphalbsocke
ForumUser
 
Beiträge: 42
Registriert: 27.04.2018, 14:57
Dank erhalten: 0 mal
Ich bin: Entwickler/in


Zurück zu ABAP® für Anfänger

  Aktuelle Beiträge   
SQL Insert in ABAP
vor 6 Stunden von nickname8 1 Antw.
Fragen zu ALV Grids
vor 6 Stunden von nickname8 1 Antw.
iSSHA-1 Hashwerte generieren
vor 9 Stunden von derber 0 Antw.
Web-Dynpro Verständnisproblem bei Navigation
vor 15 Stunden von Bubbleboy 0 Antw.
Checkboxen dynamisch erstellen
vor 7 Stunden von ewx 5 Antw.

  Ähnliche Beiträge beta
Button auf Dynpro auskraulen?
20.05.2011, 08:46 von Zubasa 3 Antw.
Dynpro / Button Transporteintrag schreiben
20.01.2016, 11:47 von a-dead-trousers 15 Antw.
Per Button klick ein symbol in den Button einfügen
08.08.2011, 07:30 von a-dead-trousers 5 Antw.
Feld aus Dynpro A an Dynpro B übergeben
06.03.2008, 20:14 von SAPAlex 4 Antw.
Button in ALV hinzufügen
19.02.2006, 18:13 von babap 11 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder

cron