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
Bookmarks