PDA

View Full Version : Trigger nach Wechsel auf V5R2M0



Marimari1009
10-11-03, 10:36
Hallo zusammen,

ich habe zu Vorberreitung des Releasewechsels meine Trigger-Programme (RPG/400 kein ILE) dahingehend angepaßt, daß die Extraction der Daten für alten und neuen Satz über Offset und Länge stattfindet und nicht mehr über festdefinierte Bereiche (OLDERC NEWREC).
Das hat aber nicht ausgereicht, da sich auch die Parameterlänge in V5R2M0 geändert hat. Bei den entsprechenden SUBST-Operationen laufe ich auf mit Fehler RPG0100 (Wert liegt außerhalb des Gultigen Bereichs für die Zeichenfolgeoperation), weil Offset und Länge eine Posisiotn ergeben, die außerhalb des definierten PARM1 liegt; z.B. bisherige Länge 598, neue Länge 640, bisher 708 neu 800, bisher 420 neu 448.
Da ich nicht alle Programme nach ILE umstellen will (kann), meine Frage, ob es hier eine Formel zur Berechnung der richtigen Pufferlänge gibt.

Vielen Dank im Voraus

Klaus Hardy

Fuerchau
10-11-03, 12:09
Das Umstellen auf ILE geht relativ einfach mittels RTVRPGSRC.

Was die Länge der Bereiche angeht, so kann man über die Zukunft nichts sagen.
Einzig die Offset-Angabe wird immer an der gleichen Stelle stehen.

Da RPG-Strukturen auf eine maximale Länge von 9999 Zeichen beschränkt ist, wirst du ein Problem haben, wenn deine Sätze mal sehr lang werden.

Du kannst den Bereich in RPG unbedenklich mit 9999 definieren, da er ja als Parameter übergeben wird.

Tipp:

Über ILE-RPG laufen Trigger schneller (wenn LR anbleibt), da ich die Puffer nicht extrahieren muss sondern über Pointer und Pointer-Arithmetik und einer bzw. zwei BASED-Struktur/en direkt auf die Puffer zugreifen kann.

Marimari1009
10-11-03, 12:35
Herzlichen Dank,

Das hat mir sehr geholfen.

Da die Modifikationen in allen Trigger-Quellen ungefähr die gleichen sein werden und ich darüberhinaus kein Freund bin von Maßnahmen wie: "nehmen wir mal Länge 9999, wird schon reichen", überlege ich tatsächlich, alles auf ILE umzustellen.

Wenn es hierzu vielleicht irgendwo einen kleinen Quellauszug, besonders bezüglich der variablen Längendefinition von PARM1 geben würde ? :D

mfg
Klaus Hardy

B.Hauser
10-11-03, 14:06
Hallo Klaus,

vielleicht hilft Dir das folgende Beispiel weiter.
Die Datenstruktur für Parameter 1 ist in der Bibliothek QSYSINC, Datei QRPGLESRC, Teil-Datei TrgBuf vorhanden:

Beispiel


*Defintition Parameter
/COPY QSYSINC/QRPGLESRC,TrgBuf
D trigBufLen s 10i 0

* Externe Datenstrukturen für Satz alt/neu
D newRecord e ds extname(FILEA) prefix(NEW_)
D based(pNewRecord)
D oldRecord e ds extname(FILEA) prefix(OLD_)
D based(pOldRecord)
*----------------------------------------------------------------------------
C *entry plist
C parm QDBTB
C parm trigbuflen

* 1. Neuer Satz : Pointer Triggerbuffer + Offset Beginn Neuer Satz
* 2. Alter Satz : Pointer Triggerbuffer + Offset Beginn Alter Satz
C eval pNewRecord = %addr(QDBTB) + QDBNRO
C eval pOldRecord = %addr(QDBTB) + QDBORO

* Verarbeitung

C Return


Birgitta

Marimari1009
10-11-03, 14:12
Genau das habe ich gesucht.

vielen Dank, Birgitta.

Ich denke, jetzt komme ich allein zurecht und das Thema ist (erstmal) geschlossen.

Nochmal ein Dankeschön an alle Beteiligten.

Klaus Hardy