Hallo Forum,

vielleicht könnt Ihr mir bei meinem Problem helfen:

Ich schreibe in einem RPGLE-Programm in eine Datei, die ich per SQL-Create-Befehl erzeugt habe. Den Weg über SQL bin ich gegangen, weil ich lange Feldnamen haben wollte, die sich mit den Tags in einem XML-Dokument decken, das ich im Programm verarbeite. Dabei schreibe ich eine Datenstruktur, die wie das Satzformat definiert ist und die ich per Pointerakrobatik über die Datenstruktur mit den XML-Daten lege. Hier mal die (vermeintlich) relevanten Zeilen aus dem Quelltext:

Code:
     FI3DGXARC  O    E             DISK

(...)

     D dsDataQ         DS                  LikeDS(DATATRNQRS) XML-DS definiert in Copyfile
     D dsDSARC         DS                  LikeRec(I3DGXARR:*OUTPUT)
     D                                     based(§DATARS)
     D §DATARS         S               *   INZ      

(...)
          xml-into dsDataQ
            %Xml($antwort :
              'doc=string +
               path=XML/DATA +
               trim=all +
               case=any +
               allowmissing=yes +
               allowextra=yes +
               countprefix=Anz_ +
              ');

(...)

         §DATARS = %Addr(dsDataQ.DATARS);
         write I3DGXARR dsDSARC;
Wenn das RPG-Programm den write-Befehl erreicht, bricht es ab und zwar so, dass ich den Abbruch weder mittels monitor-Gruppe, noch write(e) abfangen kann. Im RDi-Debugger sieht man nur, dass das Programm mit der Ausführung des write-Befehls endet.

Das Tollste ist, dass der Satz trotz des Abbruchs völlig korrekt in I3DGXARC geschrieben wird.

Beim interaktiven Aufrufen wird nur ein Fehler des aufrufenden Programms gemeldet, nämlich, dass der Aufruf fehlerhaft beendet wurde:

Fehlermeldung:
Code:
Der Aufruf an *LIBL/I3DGXDATA wurde fehlerhaft beendet (C G D F)
Ursache  . . . . : RPG-Prozedur I3DGXHOL in Programm I3DGXHOL hat bei 
  Anweisung 2367 Programm oder Prozedur *LIBL/I3DGXDATA aufgerufen; der Aufruf
  wurde fehlerhaft beendet. Ist der Name *N, handelte es sich bei dem Aufruf  
  um einen Bindeaufruf nach Prozedurzeiger.
dspjoblog:
Code:
Anwendungsfehler. CEE9901 nicht überwacht durch I3DGXHOL bei Anweisung 
  0000002367, Instruktion X'0000'.
Weitere Nachrichteninformationen:
Code:
Nachricht . . . :   Anwendungsfehler. CEE9901 nicht überwacht durch I3DGXHOL 
   bei Anweisung 0000002367, Instruktion X'0000'.                             
                                                                              
 Ursache  . . . . :  Die Anwendung wurde abnormal beendet, da eine Ausnahme   
   aufgetreten ist, die nicht behandelt wurde. Der Name des Programms, an das 
   die nicht behandelte Ausnahme gesendet wurde, ist I3DGXHOL I3DGXHOL        
   I3DGXHOL. Das Programm wurde bei der/den HLL-Anweisung/en mit der/den ...
Und das ist der SQL-Create-Befehl:

Code:
create table I3DGXARR (                  
                                                  
 NAME CHAR(128),                               
(... weitere CHAR-Felder ...)
Anz_BLAST INTEGER,
(... weitere INTEGER-Felder ...)
NR NUMERIC(7),    
AENTMST TIMESTAMP, 
AENDAT DATE
);
RENAME TABLE I3DGXARR TO SYSTEM NAME I3DGXARC;
Die Datei hat eine verhältnismäßig große Satzlänge, 5801 Bytes bei 114 Feldern, aber das sollte doch kein Problem sein. Kann es vielleicht mit den INTEGER-Feldern zusammenhängen?

Sonst: Wo kann ich weitere Informationen über den Programm-Abbruch finden?
Hat jemand eine Idee, wo der Fehler liegt?

Gruß und vielen Dank!
Markus