Expertenfrage - Seltsames Dynproverhalten

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
11 Beiträge • Seite 1 von 1
11 Beiträge Seite 1 von 1

Expertenfrage - Seltsames Dynproverhalten

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
Hallo allerseits,

ich habe hier ein sehr kurzes Programm, über das ich mir eine Zeit lang den Kopf zerbrochen habe. Aber wie heißt es so schön - aus Fehlern lernt man ja.

Daher meine Fragen:

Aufwärmfrage: Warum verhält sich das Programm anders wenn man auf die Checkbox drückt als wenn man auf F8 drückt?

Sobald man diese Frage beantworten kann: Warum löst das Drücken auf die Checkbox überhaupt einen Effekt aus?

Code: Alles auswählen.

REPORT.

SELECTION-SCREEN BEGIN OF SCREEN 100.
PARAMETERS: cb AS CHECKBOX USER-COMMAND onli.
SELECTION-SCREEN END OF SCREEN 100.

START-OF-SELECTION.
  CALL SELECTION-SCREEN 100.
  WRITE:/ 'Hallo'.
( Release ECC 6.0 )
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

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


Re: Expertenfrage - Seltsames Dynproverhalten

Beitrag von current_user (ForumUser / 6 / 0 / 1 ) »
Hallo black_adept,

das Drücken der F8-Taste löst ein Standardereignis aus, durch welches das Programm nach dem Selektionsbild fortgesetzt wird (und nach Ablauf endet).
Der Funktionscode ist 'CRET'.
Bei selbstdefinierten Funktionen, wie in deinem Fall ('ONLI') wird das Selektionsbild nach der Abarbeitung erneut aufgerufen. Das ist kein Fehlverhalten, sondern anscheinend beabsichtigt (Implementierung Laufzeit).

Das erneute Ausführen kann man aber durch die Behandlung im Ereignis "AT SELECTION-SCREEN" verhindern.

Code: Alles auswählen.

TABLES sscrfields.

SELECTION-SCREEN BEGIN OF SCREEN 100.
PARAMETERS: cb AS CHECKBOX USER-COMMAND onli.
SELECTION-SCREEN END OF SCREEN 100.

AT SELECTION-SCREEN.
  IF sscrfields-ucomm = 'ONLI'.
  "Mache irgendwas
    sscrfields-ucomm = 'CRET'.
  ENDIF.

START-OF-SELECTION.
  CALL SELECTION-SCREEN 100.
  WRITE:/ 'Hallo'.
Zur zweiten Frage: Durch das Schlüsselwort "USER-COMMAND" :)
Oder meinst du, wie die Bearbeitung unter der Haube aussieht?

Re: Expertenfrage - Seltsames Dynproverhalten

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
Hallo current_user,

die Aufwärmfrage hast du ja direkt erkannt. (CRET)

Allerdings ist deine Erklärung nicht korrekt.
Du schreibst, dass das Selektionsbild bei selbst definierten Usercommands nach der Abarbeitung erneut aufgerufen wird. Das ist in diesem Programm aber nicht der Fall - es wird bei Druck auf die Checkbox der Zeitpunkt "START-OF-SELECTION" angesprungen und in die Listausgabe verzweigt, genauso als wenn ich F8 gedrückt hätte.
Aber beim Verlassen der Listausgabe unterscheidet sich der Programmablauf, je nachdem ob ich über F8 oder über die Checkbox hier hingelangt bin.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Expertenfrage - Seltsames Dynproverhalten

Beitrag von current_user (ForumUser / 6 / 0 / 1 ) »
Ja, genau dieses Verhalten meine ich damit.
Die Listenausgabe unterbricht den Ablauf des Programmes (bzw. stellt das Ende des Programmablaufs dar).
Nachdem du auf 'Zurück' gedrückt hast wird das Programm nach dem Start durch 'F8' beendet aber beim Start durch das Klicken der Checkbox wird die Ausführung wiederholt.
Darin sehe ich den Unterschied.

Achso, das Ereignis "START-OF-SELECTION" wird bereits vor der Ausgabe des Selektionsbildes ausgelöst.
Nach dem Klick auf die Checkbox kommt die Ausgabe von 'Hallo' und dann der Neustart des Programms.
Kannst du mir jetzt zustimmen? :wink:

Re: Expertenfrage - Seltsames Dynproverhalten

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
Hallo current_user,

du hast in einigen Dingen ja durchaus recht. Aber die volle Gemeinheit des Beispielprogramms entgeht dir noch immer.

Der Knackpunkt ist nämlich die 2. Frage.

Wenn du den Usercommand "ONLI" durch "CRET" austauscht, verhält sich das Programm genau wie ich es erwarten würde.
Wenn du den Usercommand "ONLI" durch "HUGO" austauscht, verhält sich das Programm genau wie ich es erwarten würde - aber anders als die Version mit "CRET".

Was begründet den Unterschied zwischen "CRET" und "HUGO"?


Und wenn du das beantwortet hast musst du darüber nachdenken wie sich "ONLI" verhalten sollte und wie es sich dann tatsächlich verhält.
Und damit kommst du dann zu der 2. Frage im Originalposting.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Expertenfrage - Seltsames Dynproverhalten

Beitrag von current_user (ForumUser / 6 / 0 / 1 ) »
Der Ausschnitt aus dem Coding der Ereignisbehandlung sollte die Frage eigentlich beantworten.
Es ist also egal, ob der Funktionscode 'EGON', 'MIMMI' oder anders lautet (bis auf reservierte Namen). Hauptsache nicht 'CRET', da dadurch die Programmausführung beendet wird.
Komm ich der Sache näher?

Code: Alles auswählen.

WHEN 'CRET'.             " Zurück von CALL SEL-SCREEN
      CLEAR: SY-UCOMM.
      CLEAR: <SSCRFIELDS>-UCOMM.
      SET SCREEN 0.
      LEAVE SCREEN.
    when 'INTV'.
*       set screen 100. leave screen.
    WHEN 'CXSP'.             " Complex Search Pattern
      PERFORM COMPLEX_SP(RSDBSPMC).
        CLEAR: SY-UCOMM.
        CLEAR: <SSCRFIELDS>-UCOMM.
    WHEN OTHERS.
      IF <SSCRFIELDS>-UCOMM(1) = '%' and not
         <SSCRFIELDS>-UCOMM(2) = '%_'  and
         <sscrfields>-ucomm+4(4) is initial.
        PERFORM MULTIPLE_SELECTIONS USING CURRENT_SCREEN-PROGRAM.
        CLEAR: SY-UCOMM.
        CLEAR: <SSCRFIELDS>-UCOMM.
      ELSE.
        READ TABLE CURRENT_SCREEN-TABS
             WITH KEY FCODE = <SSCRFIELDS>-UCOMM
             BINARY SEARCH INTO L_TABS.
         IF SY-SUBRC EQ 0.
           PERFORM SUPPLY_TAB_INFO USING L_TABS.
         ENDIF.
      ENDIF.

Re: Expertenfrage - Seltsames Dynproverhalten

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
Hi current_user,

ja - du kommst näher. Da du den Codeausschnitt gepostet hast sieht man dass du genau genommen jetzt bei der 2. Frage angekommen bist.

Warum führt das Drücken der Checkbox (wie bei Usercommand CRET) auf die Listausgabe und nicht wie bei "HUGO" zurück auf den Selektionsschirm?


Und um es ganz gemein zu machen.
Füge mal in das Programm die beiden folgenden Codingzeilen ein.

Code: Alles auswählen.

LOAD-OF-PROGRAM.
  BREAK-POINT.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Expertenfrage - Seltsames Dynproverhalten

Beitrag von current_user (ForumUser / 6 / 0 / 1 ) »
Hi black_adept,

ich wusste gar nicht, das 'ONLI' auch reserviert und damit behandelt wird.
Aber so richtig weiter, weiß ich jetzt auch nicht mehr. ^^

Hier der Punkt an dem die Verarbeitung startet:

Code: Alles auswählen.

* Wird am Ende der Selektionsbildverarbeitung gerufen,
* wenn SY-UCOMM = 'ONLI' oder SY-UCOMM = 'PRIN'.
* Aufruf aus %_OK_CODE_1000 (<REPINI>)
FORM %_START_REPORT USING P_SUBTY LIKE SY-SUBTY.
Hast du oder jemand anderes n heißenTipp?
So langsam zerbricht auch mein Kopf. :D

Re: Expertenfrage - Seltsames Dynproverhalten

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
Hallo current_user,

du hast es doch eigentlich schon rausgefunden.

Einerseits ist ONLI nicht im GUI-Status vorhanden - und sollte somit eigentlich gar nichts auslösen - insbesondere keinen Rücksprung aus dem Dynpro in die Folgeverarbeitung
Aber wie du ja grade eben gepostet hast wird ONLI eben doch ausgewertet. Und zwar wird im generierten Screen 100 die von dir bemerkte Routine %_OK_CODE_1000 gerufen. Und dort ist der Ok-Code "ONLI" hart verdrahtet und sorgt irgendwie dafür, dass nach dem Ende des Programms wieder auf den (Standard 1000er)Selektionsscreen zurückgesprungen wird, indem der Report neu gestartet wird und die Screenwerte vom letzten Lauf wieder eingetragen werden.

Und genau das passiert hier auch.
Die Lösung ist also dass die "hart verdrahtete Auswertung des OK-Code ONLI" für das unerwartete Verhalten sorgt.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Expertenfrage - Seltsames Dynproverhalten

Beitrag von a-dead-trousers (Top Expert / 4399 / 223 / 1182 ) »
Leider hab ich das zu spät gelesen, sonst hätt ich die Frage sofort beantworten können:
ONLI ist in früheren Zeiten und CRET wird heutzutage im Standard-GUI-Status von Selektionsbildern verwendet.
Aus Gründen der Kompatibilität sind daher beide Funktionscodes in den reportunabhängigen System-Codings fest verdrahtet.

Hatte früher schon mal ein Problem mit den unterschiedlichen Funktionscodes: Auf einmal wars nicht mehr ONLI :shock:

In älteren Report stolpere ich noch hin und wieder auf den alten Functionscode.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Expertenfrage - Seltsames Dynproverhalten

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
So ganz stimmt das nicht.

ONLI scheint weiterhin der Funktionscode für den Standardselektionsbildschirm, der nicht durch "Call Selection-screen" gerufen wird, während "CRET" wohl für die durch "Call Selection-screen" gerufenen Screens benutzt wird.

ECC 6.0

Code: Alles auswählen.

REPORT.

PARAMETERS: x.

AT SELECTION-SCREEN.
  MESSAGE sy-ucomm TYPE 'I'.

START-OF-SELECTION.
  CALL SELECTION-SCREEN 1000.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Seite 1 von 1

Vergleichbare Themen

6
Antw.
4967
Views
Expertenfrage: Tabelle für Klassen
von ralf.wenzel » 29.10.2013 10:53 • Verfasst in ABAP® Core
16
Antw.
7594
Views
Seltsames Verhalten Tabelle EINA
von km216 » 19.08.2011 09:59 • Verfasst in ABAP® für Anfänger
3
Antw.
1544
Views

Aktuelle Forenbeiträge

Regex in where
vor 6 Stunden von tar 8 / 189
Daten an Tabelle binden
Gestern von Bright4.5 3 / 1489

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

Regex in where
vor 6 Stunden von tar 8 / 189
Daten an Tabelle binden
Gestern von Bright4.5 3 / 1489

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
letzen Monat von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9822