View Full Version : HILFE Trigger unter V5R2
Günter Majewski
02-01-03, 08:59
Hallo, ich habe ein grosses Problem. Wir haben am Jahresende die Maschine von 170 auf 270 und das OS/400 von V4R3 auf V5R2 gewechselt.
So wie ich das sehe, stimmt der buffer nicht mehr überein. Die Stellen 1 - 96 scheinen unverändert, dann kommen die Daten mit altem Inhalt, dann je Dateifeld eine Stelle (Null).
Jetzt sollte eigentlich der Inhalt des neuen Satzes kommen. Bei mir kommen jetzt aber erst einmal ein paar Blanks (15 oder auch 12 Stellen, je nach Datei) und dann erst die Daten des neuen Satzes. Ich habe im Internet in den Redbooks nachgeschaut, finde dort aber nur den Buffer von V5R1, der eigentlich so wie bei V4R3 aussieht und somit OK sein müsste.
Wer weiss Rat??
Viele Grüsse
Günter
Claudia Lange
02-01-03, 11:36
Hallo Günter,
der Aufbau des Triggers hat sich tatsächlich geändert! Wir hatten das gleiche Problem und zu diesem Zeitpunkt (Sommer 2002) stimmte die Dokumentation nicht! Ich fand den Aufbau im internet nicht auf die Schnelle, kann ihn aber per e-mail verschicken?
Gruß
Claudia Lange
Günter Majewski
02-01-03, 11:59
per eMail wäre sehr nett.
Vielen Dank und viele Grüsse
Günter
mailto:guenter.majewski@thonet.de
Im Internet:
http://publib.boulder.ibm.com/iseries/v5r2/ic2929/index.htm?info/dbp/rbafomstrzahftra .htm (http://publib.boulder.ibm.com/iseries/v5r2/ic2929/index.htm?info/dbp/rbafomstrzahftra.htm)
bzw. ein Beispiel
http://publib.boulder.ibm.com/iseries/v5r2/ic2929/index.htm?info/dbp/rbafomst416.htm
bzw. hier die Buffer-Beschreibung:
http://publib.boulder.ibm.com/iseries/v5r2/ic2929/index.htm?info/dbp/rbafomst420.htm
[Dieser Beitrag wurde von Gerlitz am 02. Januar 2003 editiert.]
Sven Schneider
02-01-03, 18:20
Hallo,
bei sauberer Programmierung der Triggerprogramme sollte auch der Umstieg auf V5R2 keine Probleme bereiten.
Generell sollte der variable Bereich von API-Feldern niemals direkt angesprochen werden.
Das betrifft auch die Felder welche als "reserved" gekennzeichnet sind.
Dafür gibt es ja die Offset/Längen-Felder bis Pos 96 Dec.
siehe auch : http://publib.boulder.ibm.com/iseries/v5r2/ic2929/index.htm?info/apis/concept.htm
mfg
Sven
Günter Majewski
03-01-03, 09:27
Hallo,
vielen Dank an alle für die Mühe und die Infos.
Es ist tatsächlich so, dass der neue Satzteil nicht mehr direkt hinter dem alten Satzteil beginnt und zwischen dem "origanl record" und dem "new record" Leerstellen eingefügt wurden. Die Pointer stimmen natürlich.
Ein guter Anlass die Programme zu überarbeiten und auf die Pointeradressierung um zu stellen.
Vielen Dank und viele Grüsse
Günter
Günter Majewski
07-01-03, 14:52
Hi nochmals,
habe jetzt die Triggerprogramme auf die Pointeradressierung umgestellt und es klappt hervorprächtig.
Anzumerken wär noch, dass das Beispiel der IBM unter: http://publib.boulder.ibm.com/iseries/v5r2/ic2929/index.htm?info/dbp/rbafomst416.htm
nach meinen Erfahrungen falsch sein müsste, da der Bereich des neuen Satzes nicht direkt hinter dem alten anfängt.
Vielen Dank nochmals
Günter Majewski
Detlev Kramer
21-01-03, 13:37
Hi,
könnte mir jemand ein Beispiel mailen (detlev_kramer@schleicher-schuell.de) vom:
- Trigger Buffer V5R1 (D-Zeilen, ILE RPG)
- wie mann das mit der Pointeradressierung macht.
Vielen Dank und Gruß
Detlev
Detlev Kramer
22-01-03, 08:43
Hallo,
ich habe in kurzer Zeit 3 Mail's erhalten, die (alle ein wenig anders) mir sehr geholfen haben. Danke !
Hier für alle, die evtl. noch nach mir eine Lösung suchen, die "Pointer-Version" (von Birgitta):
* Definiert den fixen Teil des Trigger Buffers = Parameter 1
* Datenstruktur QDBTB
/COPY QSYSINC/QRPGLESRC,TrgBuf
* Länge des Buffers
D trigBufLen s 10i
D newRecord e ds extname(FILEA)
prefix(NEW_)
based(pNewRecord)
D oldRecord e ds extname(FILEA)
prefix(OLD_)
based(pOldRecord)
* Definieren Eingangs-Parameter
C *entry plist
C parm QDBTB (Trigger Buffer)
C parm trigbuflen
* Einlesen des alten und neuen Satzes in die Externen Datenstrukturen
* 1. Neuer Satz : Pointer Triggerbuffer + Offset Beginn Neuer Satz
* 2. Alter Satz : Pointer Triggerbuffer + Offset Beginn Alter Satz
C eval pNewRecord =
%addr(QDBTB) + QDBNRO (Neuer Satz)
C eval pOldRecord =
%addr(QDBTB) + QDBORO (Alter Satz)
MfG
Detlev