-
Triggerbuffer und NullBytes
Hallo zusammen,
ich habe eine Frage zum Trigger-Buffer der unter QSYSINC/QRPGLESRC/TRGBUF definiert ist. Wir verwenden Datumsfelder, die nullfähig sind. Bisher mußte ich das Nullbyte eines Datumsfeldes im Neusatz auf '0' setzen, wenn ein Wert zugewiesen wurde(Die Nullbyte-Felder waren im Triggerbuffer einzeln definiert). Wie wird nun in der o.a. Datenstruktur das Nullbyte eines Feldes auf '0' gesetzt? Ist das überhaupt möglich?
Viele Grüße
Norbi
-
Probier mal mit EVAL %NULLIND(Feld) = *ON, siehe hier.
-
Im Trigger-Buffer ist sowohl das Offset als auch die Länge für die NULL Byte Map hinterlegt.
In dieser NULL Byte Map ist für jedes Feld 1 Byte vorgesehen, das entweder auf '0' = Kein NULL-Wert oder '1' = NULL-Wert steht.
Um einen NULL-Wert im Trigger zu setzten, muss das entsprechende Byte von '0' auf '1' gesetzt werden. (bzw. sofern Du einen Wert in ein Feld eintragen willst und das NULL Byte Flag auf '1' steht, muss es zunächst auf '0' gesetzt werden.
Beachte, dass wenn Du den gleichen Datensatz ändern willst, beim Registrieren des Triggers (ADDPFTRG) die Option ALWREPCHG auf *YES gesetzt werden muss.
Birgitta
-
Hallo Brigitta,
das habe ich ja verstanden, aber wie spreche ich das NullbyteFeld eines Feldes an? Eval %Nullind(Neu_Datum) = *on kann doch nicht richtig sein.
Norbi
-
Die RPG Built-In-Function %NULLIND kann nur verwendet werden um einen NULL-Wert in einem Datensatz einer Datei, die in den F-Bestimmungen definiert wurde zu setzen.
Zum Setzen eines NULL-Wertes in einem Datensatz in einem Trigger-Programm kann dieser Wert nicht verwendet werden.
Im Trigger-Programm muss die NULL-Byte-Map direkt geändert werden.
Durch den Offset weißt Du ja wo die NULL-Byte-Map steht und wie lange sie ist.
Über diese NULL-Byte-Map legst Du eine Feldgruppe mit 1-stelligen alphanumerischen Elementen. Jetzt musst Du nur noch die Position / Nr. des Feldes im Datensatz wissen und das entsprechende Feldgruppen-Element zu ändern (wenn also Dein Datums-Feld das 3. Feld ist, musst Du das 3. Element ändern).
So in etwa kann das Ganze aussehen (nicht getestet!)
Code:
*Prototypen und Copy Strecken
/COPY QPROLESRC,MyTrgPgm
/COPY QSYSINC/QRPGLESRC,TrgBuf
D DSTrgBuff DS Qualified based(DummyPtr)
D Fix likeDS(QDBTB)
D Vary 65000A
* Procedure Interface
D MyTrgPgm PI
D ParTrgBuf LikeDS(DSTrgBuff)
D ParTrgLen 10I 0 Const
***********************************************
D NeuerSatz E DS ExtName(MyFile) Qualified
D based(PtrNeuerSatz)
D NullByteNeu DS Qualified based(PtrNullByteNeu)
D ArrInd 1A Dim(32767)
***********************************************
/Free
PtrNeuerSatz = %Addr(ParTrgBuf) + ParTrgBuf.Fix.QDBNRO;
PtrNullByteNeu = %Addr(ParTrgBuf) + ParTrgBuf.Fix.QDBNRNBM;
NeuerSatz.MyField = 'Was auch immer';
NullByteNeu.ArrInd(3) = '1';
Return;
/End-Free
Birgitta
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks