Gutmann
06-06-12, 07:37
Hi *ALL,
</O:p
ich fall mal mit der Tür ins Haus.<O:p</O:p
<O:p</O:p
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.<O:p</O:p
Dank ausgiebiger Nutzung dieses Forums und des IBM Handbuchs, ist es mir inzwischen gelungen, eine XML-Datenstruktur mit nur einem Element auszulesen.<O:p</O:p
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 (http://publib.boulder.ibm.com/infocenter/iadthelp/v7r0/index.jsp?topic=/com.ibm.etools.iseries.langref.doc/c0925086821.htm)(unterstes Beispiel: "Parsing an unknown number of XML Elements ...) abgetippt und meine XML-File nach dem gleichen Schema aufgebaut.<O:p</O:p
<O:p</O:p
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."<O:p</O:p
2. "RNF7701 Datenstruktur PARTS ist für die Operation nicht zulässig."<O:p</O:p
<O:p</O:p
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.<O:p</O:p
<O:p</O:p
Hier noch mein Code. Vielen Dank schonmal im Voraus für eure Hilfe.:)
<O:p</O:p
</O:p
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 <O:p</O:p
Die physische Datei (Name TEST04P) sieht so aus:
A R PARTREC
A* **********
A ID 10P 0
A QTY 10P 0
A COST 7P 2
</O:p
ich fall mal mit der Tür ins Haus.<O:p</O:p
<O:p</O:p
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.<O:p</O:p
Dank ausgiebiger Nutzung dieses Forums und des IBM Handbuchs, ist es mir inzwischen gelungen, eine XML-Datenstruktur mit nur einem Element auszulesen.<O:p</O:p
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 (http://publib.boulder.ibm.com/infocenter/iadthelp/v7r0/index.jsp?topic=/com.ibm.etools.iseries.langref.doc/c0925086821.htm)(unterstes Beispiel: "Parsing an unknown number of XML Elements ...) abgetippt und meine XML-File nach dem gleichen Schema aufgebaut.<O:p</O:p
<O:p</O:p
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."<O:p</O:p
2. "RNF7701 Datenstruktur PARTS ist für die Operation nicht zulässig."<O:p</O:p
<O:p</O:p
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.<O:p</O:p
<O:p</O:p
Hier noch mein Code. Vielen Dank schonmal im Voraus für eure Hilfe.:)
<O:p</O:p
</O:p
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 <O:p</O:p
Die physische Datei (Name TEST04P) sieht so aus:
A R PARTREC
A* **********
A ID 10P 0
A QTY 10P 0
A COST 7P 2