Hi *ALL,

ich fall mal mit der Tür ins Haus.


Ich versuche seit einigen Tagen ein kleines Testprogramm mit Free-RPG zu schreiben, dass XML-Dateien ausliest und die Daten auf unserer i-Series verarbeitet.
Dank ausgiebiger Nutzung dieses Forums und des IBM Handbuchs, ist es mir inzwischen gelungen, eine XML-Datenstruktur mit nur einem Element auszulesen.
Jetzt scheitere ich jedoch am Auslesen eines komplexeren XML-Files. Damit ich Fehler meinerseits (XML-Dokument bzw. eigene Felddefintionen) vermeide, habe ich erstmal den Beispielcode (unterstes Beispiel: "Parsing an unknown number of XML Elements ...) abgetippt und meine XML-File nach dem gleichen Schema aufgebaut.


Das Problem ist jetzt, obwohl der Code fast 1:1 mit dem IBM Beispielcode übereinstimmt (anderer Path, logOutputError weggelassen und Groß-Kleinschreibung ignoriert), erhalte ich immer beim Umwandeln die folgenden Fehlermeldungen: 1. "RNF5352 Der Prototyp PARTHANDLER, der von %HANDLER für XML-INTO angegeben wurde, ist keine gültige XML-INTO-Prozedur."
2. "RNF7701 Datenstruktur PARTS ist für die Operation nicht zulässig."


Auch ein Kollege, der bereits seit einigen Jahren RPG programmiert (ich erst seit ca. 6 Monaten), wird nicht mehr schlau daraus und ist am Ende mit seinem Latein.


Hier noch mein Code. Vielen Dank schonmal im Voraus für eure Hilfe.



Code:
FTEST04P   UF A E             DISK            
F*                                            
D OPTIONS         S            100A                           
D ALLOK           S               N                           
D                                                             
D PARTHANDLER     PR            10I 0                         
D   OK                            N                           
D   PARTS                             LIKEREC(PARTREC) DIM(10)
D   NUMRECS                     10U 0                         
/free                                                       
OPTIONS = 'PATH=PARTS/PART CASE=ANY DOC=FILE';         
ALLOK = *ON;                                           
 
XML-INTO %HANDLER(partHandler : ALLOK)                 
                  %XML('/SPM/3856330.XML' : OPTIONS);
 
IF NOT ALLOK;                                          
 
ENDIF;                                                 
 
/end-free       
 
C                   SETON                                        LR
 
PpartHandler      B                                           
D                 PI            10I 0                         
DOK                              1N                           
DPARTS                                LIKEREC(PARTREC) DIM(10)
DNUMRECS                        10U 0                         
DI                S             10I 0                         
DXMLRECNUM        S             10I 0 STATIC INZ(0)           
D*                                                            
/FREE                                                        
FOR I = 1 TO NUMRECS;                                     
  XMLRECNUM = XMLRECNUM + 1;                          
  WRITE(E) PARTREC PARTS(I);                          
 
  IF %ERROR;                                          
     OK = *OFF;                                       
  ENDIF;                                              
ENDFOR;                                                   
RETURN 0 ;                                               
/END-FREE                                                    
PpartHandler      E                                           


Die physische Datei (Name TEST04P) sieht so aus:

Code:
A          R PARTREC
Code:
A*         **********           
A            ID              10P 0
A            QTY           10P 0
A            COST           7P 2