Guten Abend, und zwar geht es darum, dass meine Elseif Bedingung übersprungen wird, obwohl sie erfüllt ist. Es geht um die Programmierung im Web Dynpro.
Die lokale Struktur Ls_search_pruefung beinhaltet die Eingabe einer Prüfungs-ID vom Benutzer. Wenn eine Eingabe zwischen 1 und 4 stattfindet, werden die dazugehörigen Prüfungen dazu ausgegeben. Bis hierhin funktioniert alles soweit.
Wenn die gesuchte Prüfungs_id nicht vorhanden ist, soll er eine Fehlermeldung in der elseif anweisung erzeugen, jedoch wird diese übersprungen und eine Internal server error 500 ausgegeben.
SELECT * FROM z432_pruefungt INTO TABLE lt_pruefung.
IF ls_pruefung ne ls_search_pruefung.
LOOP AT lt_pruefung INTO ls_pruefung FROM 1 TO ls_search_pruefung-p_id.
ENDLOOP.
bei einem Internal Server Error wird in der Regel auch ein Dump geschrieben (Transaktion ST22), in dem die genaue Ausnahme und die Abbruchstelle zu finden sind.
Außerdem kann bei einer IF-Verzweigung (in ABAP) immer nur ein Zweig angesprochen werden und es gewinnt der erste Treffer. Ist eine Bedingung erfüllt, werden die anderen gar nicht erst durchlaufen.
Wenn die Bedingung im ELSEIF-Zweig zutrifft, trifft auch die IF-Bedingung zu (wenn ls_search_pruefung-p_id größer als ls_pruefung-p_id ist, dann ist auch ls_pruefung ungleich ls_search_pruefung).
Somit wird der ELSEIF-Zweig nie erreicht. Eventuell wäre hier eine andere Schachtelung mit zwei IF-Verzweigungen besser.
Wie genau sind "ls_search_pruefung-p_id" und "ls_pruefung-p_id" definiert?
CHAR, INT oder was ganz anderes?
Sind Konvertierungen ala ALPHA hinterlegt?
Wie wird "ls_pruefung" befüllt? Ich sehe nur ein SELECT auf eine Tabelle und nicht in die Struktur.
Ansonst stimmt natürlich auch Lukas's Einwand, dass die zweite IF-Bedingung durch die erste IF-Bedingung gar nicht angesprungen wird.
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.