PDA

View Full Version : Dateifelder sind nach erfolgreichem CHAIN nicht gefüllt



harkne
19-11-13, 09:03
Hallo zusammen,

ich versteh es im Moment gerade nicht.

Ich habe eine Funktion
In den F-Bestimmungen habe ich die logische Datei EITBANKL01 definiert. Dies ist eine logische Datei der physischen Datei EITBANK
In den D-Bestimmungen habe ich EITBANK als externe Datenstruktur definiert.
Da ich bei beiden Definitionen keinen Prefix verwende heißen auch die Felder gleich.

Nun das Problem:

Wenn ich erfolgreich auf die EITBANKL01 zugegriffen habe mit CHAIN sind meine Felder nicht gefüllt ???? Weis da jemand warum ???

Ich hätte hier anbei gerne die Quelle gepostet aber selbst im PHP funktioniert es nicht richtig. Ich hoffe ihr kommt mit den Angaben klar.

Viele Grüße Harald

B.Hauser
19-11-13, 09:18
Wenn Du die Datei oder Datenstruktur lokal definierst, muss Du beim OpCode Chain (auch bei allen anderen Lese- und Schreib-Operationen) den Datensatz explizit in die Datenstruktur ausgeben.

Die Automatik, funktioniert nur unter dem RPG-Zyklus, dem Main-Procedures/Haupt-Programme unterliegen, nicht jedoch (Sub-)Procedures oder Funktionen.

Birgitta

Fuerchau
19-11-13, 09:44
Das ist definitiv falsch, dann würden Programme nach einem CVTRPGSRC ja nicht mehr funktionieren.
Auch bei ILERPG gilt, dass Namen insgesamt nur einmal definiert werden können!

Eine einfache DS (auch extern) enthält ausschließlich Namen, die ohne ihren DS-Namen angesprochen werden.
Einfache F-Bestimmungen generieren I/O-Bestimmungen mit den Namen der Dateifelder.
Korrespondieren die Namen zur DS ist das Feld immer noch eindeutig und somit auch der DS zugeordnet.
Deshalb kann ich den selben Namen nicht in 2 DS'n verwenden.

Hier kommt nun "qualified" zum Zuge.
Dadurch ändert sich der Feldname einer DS in den eindeutigen Namen "Strukturname.Feldname".
Der Bezug zwischen den I-Bestimmungen und der DS geht somit verloren, da nun die Namen unterschiedlich sind.

Dies kann ich nun durch Prefix('Strukturname.') in den F-Bestimmungen wieder aufheben und eine Zuordnung treffen.

Die Frage hier ist also, ob die E-DS als Qualified definiert ist oder nicht.

harkne
19-11-13, 09:47
Hm ???

Das Dateifeld heißt ID, das Datenstrukturfeld heißt auch ID. Jetzt mache ich einen CHAIN auf die Datei, der Satz wird gefunden und ID ist nicht gefüllt ???? So ist nämlich das Verhalten im Moment. Jetzt könnte es vielleicht noch Probleme bereiten dass die Datenstruktur die innerhalb der Funktion also nach Funktion (b) kommt definiert ist und die f Bestimmung in einer NOMAIN Funktion ganz oben steht ?

Fuerchau
19-11-13, 09:51
Das ist korrekt.
Globale Dateien verwenden globale Felder.
Lokale Felder, die zu globalen Feldern identisch benannt sind, überblenden die globalen Felder. Diese sind dann also nicht sichtbar.

B.Hauser
19-11-13, 09:55
Das ist definitiv falsch, dann würden Programme nach einem CVTRPGSRC ja nicht mehr funktionieren.
Auch bei ILERPG gilt, dass Namen insgesamt nur einmal definiert werden können!


Vielleicht solltest Du ab und zu mal die Antworten genau lesen, bevor Du dagegen schießst.
Dass das Ganze bei global definierten Dateien und Datenstrukturen funktioniert habe ich ja nie bestritten.

Ich habe von LOKAL (sprich innerhalb von Prozeduren) definierten Dateien und Datenstrukturen geredet.
Da der ursprüngliche Poster das Problem in einer Funktion hatte, lag der Schluss, dass lokale Definitionen verwendet wurden nahe.

harkne
19-11-13, 10:02
Jetzt aber mal bitte nicht streiten. Ich bedanke mich recht herzlich für beide Antworten die mir geholfen haben. Ich hatte total ausgeblendet dass meine Datenstruktur innerhalb der Funktion definiert ist und die Dateibestimmung außerhalb. Dass dann die internen Variablen Vorrang haben ist klar.