[Rant] Unzulänglichkeit des LINE_EXISTS()

Getting started ... Alles für einen gelungenen Start.
22 Beiträge • Vorherige Seite 2 von 2 (current)
22 Beiträge Vorherige Seite 2 von 2 (current)

Re: [Rant] Unzulänglichkeit des LINE_EXISTS()

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
Gerade bei so langen Anweisungen (die eigentlich aus mehreren atomaren bestehen) möchte ich gern wissen, WELCHER Fehler genau auftritt. Da hilft mir ein sy-subrc genau gar nicht weiter, sondern eine Ausnahme, die mir dediziert den Fehler nennt, der aufgetreten ist und die Daten enthält, mit denen der Fehler aufgetreten ist.


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

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


Re: [Rant] Unzulänglichkeit des LINE_EXISTS()

Beitrag von DeathAndPain (Top Expert / 1799 / 214 / 396 ) »
adt hat geschrieben:Wie du schon angedeutet hast, hat der "getrennte" Ansatz den SAP hier verfolgt, auch sein Gutes: So weiß man dank der Exception wenigstens welcher der beiden Ausdrücke fehlgeschlagen ist.
Wenn diese Frage für mich interessant ist, dann werde ich anders coden. Die Exception ist dann auch nur bedingt hilfreich, denn geh noch einen Schritt weiter und baue gleich zwei innere Tabellenabfragen ein, dann stehste bei einem CX_SY_ITAB_LINE_NOT_FOUND wieder da und weißt nicht, welche fehlgeschlagen ist. Von daher ist das der falsche Ansatz. Wenn diese Information für mich wichtig ist, dann steht es mir frei, in mehreren Schritten zu coden (etwa mit einem eingeschobenen ASSIGN über den inneren Teil, der dann nach Prüfung des SY-SUBRC im LINE_EXISTS verwendet wird). Wenn ich aber alles in einen LINE_EXISTS schreibe, dann sage ich damit deutlich aus, dass nur ich wissen will, ob es so eine Zeile gibt oder nicht und weitergehende Informationen (hier: zum Grund) nicht benötige. Dies zu kritisieren ist wie die Existenz des Zusatzes TRANSPORTING NO FIELDS zu kritisieren, mit dem der Programmierer auch nicht bestreitet, dass es (möglicherweise) einen Zeileninhalt gibt, aber deutlich macht, dass dieser für ihn nicht interessant ist (und er sich daher die Workarea sparen möchte).
Ralf hat geschrieben:Gerade bei so langen Anweisungen (die eigentlich aus mehreren atomaren bestehen) möchte ich gern wissen, WELCHER Fehler genau auftritt.
@adt: Da siehst Du, wohin diese Philosophie führt. Im Kopf von Ralf ist jede nicht existierende Tabellenzeile bereits ein "Fehler". Dabei macht doch gerade die Verwendung der Funktion LINE_EXISTS deutlich, dass das Nichtvorhandensein einer Tabellenzeile mit den angegebenen Kriterien ein durchaus erwarteter und normaler Fall ist, den man nur halt wissen möchte, um adäquat darauf zu reagieren. Dass - sogar innerhalb des LINE_EXISTS, der diese Frage ja ausdrücklich aufwirft - andere nicht gefundene Tabellenzeilen zu einer Ausnahme führen, die unbehandelt sogar zu einem kompletten Programmabbruch führt, führt in Köpfen wie dem Ralfs zu der Wahrnehmung, dass es sich bei solchen immer um "Fehler" handeln müsse.

Wenn ich eine Tabellenzeile einem Feld oder Feldsymbol zuweise und es diese Tabellenzeile nicht gibt, dann kann die Zuweisung nicht ausgeführt werden, und es handelt sich in der Tat um einen Fehler, der zu Recht eine Exception wirft. Wenn ich aber mit einer besonders für diesen Zweck geschaffenen Funktion prüfe, ob es eine Tabellenzeile gibt, dann ist es kein Fehler, wenn es sie nicht gibt, und es ist blöd und inkonsequent, wenn das dann unter bestimmten Umständen trotzdem wegen Nichtexistenz dumpt.

Re: [Rant] Unzulänglichkeit des LINE_EXISTS()

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
DeathAndPain hat geschrieben:Wenn diese Frage für mich interessant ist, dann werde ich anders coden.


Das musst du nicht und das wäre auch von hinten herum aufgerollt.
DeathAndPain hat geschrieben:Die Exception ist dann auch nur bedingt hilfreich, denn geh noch einen Schritt weiter und baue gleich zwei innere Tabellenabfragen ein, dann stehste bei einem CX_SY_ITAB_LINE_NOT_FOUND wieder da und weißt nicht, welche fehlgeschlagen ist.


Das ist definitiv falsch, du musst in eine solche Exception mal reingucken und du wirst dich wundern, was da alles drinsteht. Du scheinst mit Ausnahmen nicht viel Erfahrung zu haben. Ich baue hier ganze Logfiles nur aus den Informationen, die in Ausnahmen stehen.
DeathAndPain hat geschrieben:Wenn ich aber alles in einen LINE_EXISTS schreibe, dann sage ich damit deutlich aus, dass nur ich wissen will, ob es so eine Zeile gibt
Eine Zeile zu einer Bedingung, die nicht existiert. In einem solchen Umfeld ist das Fehlen einer Bedingung sehr wohl eine Ausnahme, die zu melden ist. Alles andere würde ich für einen Implementierungsfehler halten. Weil damit, dass die Bedingung für einen Vergleich nicht existiert, rechnet man offensichtlich nicht, wenn man einen Vergleich macht.
DeathAndPain hat geschrieben:@adt: Da siehst Du, wohin diese Philosophie führt. Im Kopf von Ralf ist jede nicht existierende Tabellenzeile bereits ein "Fehler".
Erstens ist es kein Fehler (im Sinne von falsch), sondern eine Ausnahme (unerwarteter Zustand), das ist etwas ganz anderes (das spreche ich deiner geringen Erfahrung mit Ausnahmen zu), und da du das gern falsch verstehst, müssen wir uns wohl sehr genau ausdrücken. Ja, wenn ich eine Prüfung habe, deren Bedingung gar nicht existiert, dann ist das eine Ausnahme. Definitiv.

Wenn ich aus einer Tabelle selektiere und keine Treffer habe, geht der sy-subrc auch auf 4, weil eine leere Lösungsmenge nicht erwartet wird. Und wenn die Voraussetzung für einen Vergleich gar nicht existent ist, dann ist das auch ein unerwarteter Zustand. So wie wenn ich in ein Auto steigen will, das inzwischen gestohlen wurde.
DeathAndPain hat geschrieben:Dabei macht doch gerade die Verwendung der Funktion LINE_EXISTS deutlich, dass das Nichtvorhandensein einer Tabellenzeile mit den angegebenen Kriterien ein durchaus erwarteter und normaler Fall ist
Du verstehst das nicht zu trennen - die Ausnahme wird nicht geworfen, wenn keine (den Kriterien entsprechende) Zeile vorhanden ist, sondern wenn die Vergleichsbedingung fehlt. Das Problem ist nicht, dass es keine den Bedingungen entsprechende Zeile in BUFFER_DLL_ROLE_ASSIGNMENTS gibt, sondern dass die Bedingung in BUFFER_UNAME nicht existiert. Und das sind zwei voneinander völlig verschiedene Dinge.


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

Re: [Rant] Unzulänglichkeit des LINE_EXISTS()

Beitrag von DeathAndPain (Top Expert / 1799 / 214 / 396 ) »
Ralf hat geschrieben:
DeathAndPain hat geschrieben:Die Exception ist dann auch nur bedingt hilfreich, denn geh noch einen Schritt weiter und baue gleich zwei innere Tabellenabfragen ein, dann stehste bei einem CX_SY_ITAB_LINE_NOT_FOUND wieder da und weißt nicht, welche fehlgeschlagen ist.
Das ist definitiv falsch, du musst in eine solche Exception mal reingucken und du wirst dich wundern, was da alles drinsteht.
Das ist aber im Rahmen eines einfachen CATCH nicht so ohne weiteres möglich. Dafür müsste ich richtig Aufwand treiben und einen Ausnahmencontainer definieren, in dem ich mir dann die Ausnahme geben lasse, um deren Details zu analysieren. Am Ende entsteht dann so ein aufgeblähter OO-Code, den keiner mehr versteht. Und wozu? Um mir einen vorausgehenden ASSIGN zu sparen, also eine einzige, gut lesbare Programmzeile (plus nachfolgenden IF), die die Unterbedingung auflösen und die ganze Sache damit wesentlich kürzer und besser lesbar (und nebenbei auch schneller) machen würde! Was Du hier postulierst, ist OO von seiner schlechtesten Seite.
Ralf hat geschrieben:Eine Zeile zu einer Bedingung, die nicht existiert. In einem solchen Umfeld ist das Fehlen einer Bedingung sehr wohl eine Ausnahme, die zu melden ist.
Das meinte ich im Ursprungstext dieses Threads mit "Ich weiß, man kann das sprachenlogisch begründen". Aus meiner Sicht ist der Knackpunkt in Deiner Aussage aber das Wort "Umfeld". Das "Umfeld" ist die LINE_EXISTS-Funktion, und die nicht existierende "Bedingung" ist eine Tabellenzeile. Wenn aber innerhalb einer LINE_EXISTS-Funktion eine Tabellenzeile nicht existiert, dann weiß ich, welche Reaktion ich darauf haben möchte, und es ist keine Ausnahme!

Wie Du hier argumentierst, ist streng akademisch-theoretisch unter Vernachlässigung praktischer Verwendbarkeitsaspekte.
Zuletzt geändert von DeathAndPain am 25.06.2018 11:47, insgesamt 1-mal geändert.

Re: [Rant] Unzulänglichkeit des LINE_EXISTS()

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
DeathAndPain hat geschrieben:Wie Du hier argumentierst, ist streng akademisch-theoretisch unter Vernachlässigung praktischer Verwendbarkeitsaspekte.
Ich verweise auf mein Beispiel: Es reicht mir nicht, wenn nur der vordere Ausdruck richtig ist, ich möchte auch im "inneren" Ausdruck gemeldet bekommen, wenn dieser falsch ist. Und zwar so detailliert, dass ich die Fehler unterscheiden kann.

Das ist nicht theoretisch-akademisch, sondern praktischer Alltag.


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

Re: [Rant] Unzulänglichkeit des LINE_EXISTS()

Beitrag von DeathAndPain (Top Expert / 1799 / 214 / 396 ) »
Genau da sind wir unterschiedlicher Auffassung.

Re: [Rant] Unzulänglichkeit des LINE_EXISTS()

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
Ja, weil "irgendwas ist kaputt" für mich einfach kein Kriterium ist.


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

Vergleichbare Themen

3
Antw.
2667
Views
exists Befehl
von bohne » 11.12.2006 09:55 • Verfasst in ABAP® für Anfänger
4
Antw.
6781
Views
Select .. where exists
von Bzzt » 04.12.2006 11:17 • Verfasst in ABAP® für Anfänger
2
Antw.
14842
Views
WRITE und NEW-LINE
von dyv » 08.09.2014 14:34 • Verfasst in ABAP® für Anfänger
1
Antw.
1536
Views
modify line mit icon
von manuk » 09.11.2005 08:35 • Verfasst in Dialogprogrammierung
3
Antw.
3765
Views
Hide und At Line Selection
von le_fuka » 10.08.2012 09:10 • Verfasst in ABAP® für Anfänger

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.