PDA

View Full Version : chain(e) und not %found



Iron
12-05-11, 10:21
Hallo zusammen,

nachdem ich bisher sehr viele nützliche Informationen aus diesem Forum ziehen konnte, habe ich mich nun auch angemeldet. Vorab schonmal vielen Dank für die bisherigen Informationen.

Nach 22 Jahren RPG I,II und III bin ich jezt auch dazu übergegangen neue Programme in ILE-Free zu schreiben (das zur Vorgeschichte).

Nun habe ich aber ein leichtes Verständnisproblem mit dem CHAIN-Befehl.

chain(e) %kds(X_RecKeys) DKSR;
//
select;
when not %found(DKS); // Satz nicht gefunden
Par_RtrnCode = 'N';
when %error; // Satz gelockt
Par_RtrnCode = 'L';
other; // Satz vorhanden + frei
Par_RtrnCode = ' ';
endsl;

Ist es richtig dass die Funktion "not %found" auch dann anspricht wenn der Satz gerade gelockt ist ? Im alten RPG gingen da zwei verschiedene Bezugszahlen an.

Um euch die Schreibarbeit abzunehmen habe ich die Statements wie folgt umgestellt:

chain(e) %kds(X_RecKeys) DKSR;

select;
when %status = 1218; // Satz gelockt
Par_RtrnCode = 'L';
when %error; // sonstiger Fehler
Par_RtrnCode = 'N';
other; // Satz vorhanden + frei
Par_RtrnCode = ' ';
endsl;

Ich gebe zu, den Statuscode habe ich mir aus einem Eintrag von Brigitta abgeschaut :) .

Meine Frage lautet nun: Bekomme ich so gelockte und nicht vorhandene Sätze getrennt ausgewiesen ? In der ersten Variante wurde immer ein "N" in das Feld Par_RtrnCode gestellt.

B.Hauser
12-05-11, 10:52
%FOUND und %ERROR/%STATUS entspricht den früheren Bezugszanlen, d.h. %Found = HO, %ERROR/%STATUS = NI.
Beide Built-In-Funktionen werden unabhängig voneinander versorgt.
Nicht gefunden ist KEIN Fehler.

Wenn Du den Source Code wie folgt änderst, erhälst Du alles:


If %status = 1218; // Satz gelockt
Par_RtrnCode = 'L';
ElseIf %error; // sonstiger Fehler
Par_RtnCode = 'E';
ElseIf Not %Found(File) //Nicht gefunden
Par_RtrnCode = 'N';
Else; // Satz vorhanden + frei
Par_RtrnCode = ' ';
endIf;

Birgitta

Iron
12-05-11, 10:59
Vielen Dank für die prompte Antwort