Code: Alles auswählen.
LOOP AT SCREEN.
IF screen-name = 'P_DEV' OR screen-name = 'P_DIALOG'.
screen-input = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
Folgende Benutzer bedankten sich beim Autor ralf.wenzel für den Beitrag:
dkast
1. Frage Top dankeralf.wenzel hat geschrieben:1. Du führst den LOOP AT SCREEN wahrscheinlich zum Zeitpunkt INITIALIZATION aus, richtig wäre AT SELEKTION-SCREEN OUTPUT. Ersterer wird nur einmal ausgeführt, Letzterer zu jedem PAI.
2. Zu welchem Reporting-Zeitpunkt wirfst du die MESSAGE?
Ralf
Schöner wäre screen-input = '0', da es sich beim Feld screen-input um ein Characterfeld handelt. So hast Du eine Datentypkonvertierung drin, die bei einer Konstanten nicht sein muss.screen-input = 0.
Ich mache es noch anders - ich definiere mir die Konstanten ON / OFF. Die Welt ist bunt.DeathAndPain hat geschrieben:Schöner wäre screen-input = '0', da es sich beim Feld screen-input um ein Characterfeld handelt. So hast Du eine Datentypkonvertierung drin, die bei einer Konstanten nicht sein muss.screen-input = 0.
Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
Daniel
*autsch* Wenn ich ABAP_TRUE und ABAP_FALSE verwende, teile ich dem Leser gleich mit "es geht nicht um das X als X, sondern ja/nein". Es gibt also zwei definierte Zustände (eigentlich sogar drei, ich gehöre zu denen, die ABAP_UNDEFINED explizit verwenden), das hilft durchaus beim Verstehen.DeathAndPain hat geschrieben:... schreibe daher auch 'X' anstelle von abap_true. Ist kürzer und (mindestens) ebenso gut lesbar.
Der Fall, bei dem es in ABAP bei einem Literal 'X' um das X gegangen wäre, ist mir noch nicht untergekommen. Von daher behaupte ich, das weiß auch so jeder, der halbwegs ABAP kann, was damit gemeint ist.*autsch* Wenn ich ABAP_TRUE und ABAP_FALSE verwende, teile ich dem Leser gleich mit "es geht nicht um das X als X
Das ist viel eher etwas, was für den Leser verwirrend ist, denn ABAP_UNDEFINED kennt kein Schwein, und bei den üblichen Objekten, bei denen 'X' oder SPACE zum Einsatz kommen (Checkboxen, Radiobuttons, generell alles, was vom Typ BOOLEAN_FLG ist), gibt es den Wert ABAP_UNDEFINED nicht.Es gibt also zwei definierte Zustände (eigentlich sogar drei, ich gehöre zu denen, die ABAP_UNDEFINED explizit verwenden), das hilft durchaus beim Verstehen.
Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
Daniel
Das Problem von Literalen ist, dass sie eben keine Semantik haben (ogottogott, ich hoffe, dass ich da die richtigen Fremdworte durcheinander geworfen habe...).DeathAndPain hat geschrieben:Der Fall, bei dem es in ABAP bei einem Literal 'X' um das X gegangen wäre, ist mir noch nicht untergekommen. Von daher behaupte ich, das weiß auch so jeder, der halbwegs ABAP kann, was damit gemeint ist.*autsch* Wenn ich ABAP_TRUE und ABAP_FALSE verwende, teile ich dem Leser gleich mit "es geht nicht um das X als X
Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
ralf.wenzel
so weit würde ich nicht gehen... unüblich vielleicht...DeathAndPain hat geschrieben:Das ist viel eher etwas, was für den Leser verwirrend ist, denn ABAP_UNDEFINED kennt kein Schwein,
Es ist sogar noch schlimmer. Bei BOOLEAN_FLG hast du Recht.DeathAndPain hat geschrieben:und bei den üblichen Objekten, bei denen 'X' oder SPACE zum Einsatz kommen (Checkboxen, Radiobuttons, generell alles, was vom Typ BOOLEAN_FLG ist), gibt es den Wert ABAP_UNDEFINED nicht.
Na ja, also nach 'X' suche ich eigentlich nie. Und wie oft suchst Du in einem Programmcode nach "abap_true"?ewx hat geschrieben:Das Problem von Literalen ist, dass sie eben keine Semantik haben (ogottogott, ich hoffe, dass ich da die richtigen Fremdworte durcheinander geworfen habe...).
Wenn du nach "'X'" suchst, dann findest du eben nicht nur Codestellen, bei denen TRUE gemeint ist, sondern es gibt auch
- Message-Type X => Abbruch
- Vertriebsbelegtyp X => Handling Unit
Und sicherlich noch mehr, wenn man ein bisschen sucht.
Das ist bei "X" sicherlich nicht so "schlimm" wie bei anderen Literalen, kann aber auch zur Falle werden.
Code: Alles auswählen.
MESSAGE ID 'SAPABDEMOS' TYPE abap_true NUMBER '014'.
Deswegen arbeite ich damit auch nicht (und auch niemand, den ich kenne). Stattdessen halt BOOLEAN_FLG (oder auch BOOLE_D, dem Datenelement zur Domäne BOOLE). Die halten sich an die in ABAP üblichen Konventionen.Es ist sogar noch schlimmer. Bei BOOLEAN_FLG hast du Recht.
Die sehe ich aber heute das erste Mal... :]
BOOLEAN ist nämlich folgendermaßen definiert (screenshot)
und das macht es noch verwirrender...
Es geht ja nicht ums Suchen, sondern darum, dass deutlich ist, um was es sich bei dem X handelt.DeathAndPain hat geschrieben: Na ja, also nach 'X' suche ich eigentlich nie. Und wie oft suchst Du in einem Programmcode nach "abap_true"?
Code: Alles auswählen.
PERFORM check_status USING 'X' ls_data-objnr.
Bin dabeiDeathAndPain hat geschrieben: Aber den Spaß müsste man sich eigentlich mal machen und bei einem letalen Fehler so eine Nachricht einbauen:
Und es dann irgendwie so deichseln, dass Ralf die Codestelle findet.Code: Alles auswählen.
MESSAGE ID 'SAPABDEMOS' TYPE abap_true NUMBER '014'.
Das werde ich mir dann auch dringend angewöhnen. Und sei es nur für den Fall, dass wir uns mal kennen lernen sollten und du nicht nachträglich als Lügner dastehst...DeathAndPain hat geschrieben:Deswegen arbeite ich damit auch nicht (und auch niemand, den ich kenne). Stattdessen halt BOOLEAN_FLG (oder auch BOOLE_D, dem Datenelement zur Domäne BOOLE). Die halten sich an die in ABAP üblichen Konventionen.Es ist sogar noch schlimmer. Bei BOOLEAN_FLG hast du Recht.
Die sehe ich aber heute das erste Mal... :]
BOOLEAN ist nämlich folgendermaßen definiert (screenshot)
und das macht es noch verwirrender...
...mit dynamischem Aufruf...ralf.wenzel hat geschrieben:Klar, versteckt das MESSAGE doch noch in einem Makro....