-
XML-INTO %HANDLER
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* **********
A ID 10P 0
A QTY 10P 0
A COST 7P 2
-
HI,
mal eine kleine Frage
Müsste der Aufruf der Prozedur nicht so aussehen ?
PHP-Code:
XML-INTO %HANDLER(partHandler ( ALLOK
:%XML('/SPM/3856330.XML') : OPTIONS);
gruß
michael
-
Hi,
sorry da war ich wohl falsch unterwegs.
Hier aber noch ein hilfreicher Link
XML-INTO: Output to Array Larger than 16 MB
-
Hast du schon probiert den die Handler-Proc genau so zu definieren wie in der Doku beschrieben?
Code:
D info DS
D attrName 20A VARYING
D haveAttr N
D attrValue 20A VARYING
* Prototype for procedure "myHandler" defining
* the communication-area parameter as being
* like data structure "info"
D myHandler PR 10I 0
D commArea LIKEDS(info)
D event 10I 0 VALUE
D string * VALUE
D stringLen 20I 0 VALUE
D exceptionId 10I 0 VALUE
lg Andreas
-
Hallo Gutmann,
kann es daran liegen, dass du oben DPARTHANDLER (also nur in Grossbuchstaben) geschrieben hast, unten dann aber partHandler verwendest?
MFG Zerberus
-
Danke für die bisherigen Ideen/Hilfen,
leider besteht das Problem immer noch.
@Andreas: Habe mir den Eintrag im Handbuch angeschaut, hat mir zwar geholfen zu verstehen, wie der Handler arbeitet und aufgerufen wird, aber leider ist der Code für einen XML-SAX Aufruf vorgesehen.
Für XML-Into muss der Parameter eigentlich nur aus drei Feldern bestehen (Link), demnach kann ich die CommArea beliebig definieren und jeden Wert oder Datenstruktur übergeben, solange in der Prozedur die gleichen Angaben gemacht werden.
@Zerberus: Habe es gerade mal getestet und alle Felder in der gleichen Groß-Kleinschreibweise wie bei partHandler gebracht, aber ohne Erfolg, weiterhin die gleichen Fehlermeldungen beim Umwandeln.
-
Das einzige was mir jetzt noch aufgefallen ist, war die Definition der Prozedur.
Häng mal den VALUE beim Prototyp und der Prozedur selbst mal dran, damit der Wert nicht als Referenz übergeben wird.
Code:
D PARTHANDLER PR 10I 0
D OK N
D PARTS LIKEREC(PARTREC) DIM(10)
D NUMRECS 10U 0 VALUE
-
Hi
Vielleicht hilft Dir dieser Link etwas. Ich vermute mal, die ganze Krux hängt am Prototype.
%Handling XML-INTO Problems | RPG
kf
-
... und sicherheitshalber noch einen CONST beim 2. Parameter
Code:
D PARTHANDLER PR 10I 0
D OK N
D PARTS LIKEREC(PARTREC) DIM(10) CONST
D NUMRECS 10U 0 VALUE
... sollte natürlich auch beim Procedure Interface angegeben werden!
Birgitta
-
Hallo,
tausend Dank, es klappt .
Warum ich kein VALUE mehr beim dritten Paramter stehen hatte, ist mir schleierhaft, aber mit gings noch immer nicht bzw. noch nicht.
Erst mit CONST beim zweiten Parameter hat es geklappt. Jetzt wird zwar noch immer die Geschichte wegen: "Datenstruktur PARTS ist für die Operation nicht zulässig" angemeckert, aber ich kann das Programm jetzt ohne Write-Anweisung in der Prozedur umwandeln und die Werte aus dem XML werden korrekt in PARTS(i) geschoben.
Für das Problem beim Write find ich sicher irgendnen Work-Around, von daher nochmal tausend Dank für die super schnelle Hilfe und allen noch einen schönen Tag
*EDIT:
Gerade über einen anderen Thread gestolpert, womit auch das Problem beim WRITE behoben wird (Link).
Ich muss lediglich bei beiden LIKEREC(PARTREC: *OUTPUT) eintragen und schon läuft alles wie geschmiert.
Similar Threads
-
By mom in forum IBM i Hauptforum
Antworten: 30
Letzter Beitrag: 22-01-07, 15:03
-
By vige1000 in forum NEWSboard Linux
Antworten: 4
Letzter Beitrag: 21-12-06, 11:56
-
By Weki in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 11-09-06, 13:31
-
By kuempi von stein in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 05-07-06, 08:50
-
By svchetan in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 16-02-05, 07:20
Tags for this Thread
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