PDA

View Full Version : XML - Tabellen in Tabellen *RNF5343 Feldgruppe LINE hat zu viele übergangene Indizes.



fdh
02-12-19, 08:04
Hallo,


Ich habe im XML Tabellen in Tabellen
Innerhalb mehrere Artikel <Line> und es gibt jeweils mehrere Optionen dazu <Opt>.


Ich habe brav und fleißig die Datenstrukturen definiert.


Leider bekomme ich Umwandlungsfehler.
Z.B. wenn ich den Index zum Auslesen definieren will.
*RNF5343 30 120 007900 Feldgruppe LINE hat zu viele übergangene Indizes.
LocInd = Orders.Head.Cnt_Line;
LocInd2 = Orders.Head.Cnt_Nad;
LocInd3 = Orders.Head.Line.Cnt_Opt;




0001.00 ctl-opt dftactgrp(*no);
0002.00 dcl-f order02pf usage(*output);
0003.00 dcl-f order03pf usage(*output);
0004.00 // Root .................................................. ......
0005.00 dcl-ds Orders qualified;
0006.00 Head likeds(Head);
0007.00 end-ds;
0008.00 // Template Head.............................................. ..
0009.00 dcl-ds Head template qualified;
0010.00 VersionNumber likeds(VersionNumber);
0011.00 TechnicalReceiver char(20);
0012.00 TechnicalSender char(20);
0013.00 OrderNumber char(20);
0014.00 Nad likeds(Nad) dim(04);
0015.00 Cnt_Nad int(10);
0016.00 Line likeds(Line) dim(10);
0017.00 Cnt_Line int(10);
0018.00 end-ds;
0019.00 dcl-ds VersionNumber template qualified;
0020.00 VersionName char(20);
0021.00 VersionNo char(20);
0022.00 end-ds;
0023.00 // Template Nad............................................... ..
0024.00 dcl-ds Nad template qualified;
0025.00 FlagOfParty char(02);
0026.00 AdressGLN char(20);
0027.00 end-ds;
0028.00 // Template Line.............................................. ..
0029.00 dcl-ds Line template qualified;
0030.00 LineItemNumber char(03);
0031.00 ProductNumber char(10);
0032.00 Opt likeds(Opt) dim(10);
0033.00 Cnt_Opt int(10);
0034.00 end-ds;
0035.00 // Template Opt............................................... ..
0036.00 dcl-ds Opt template qualified;
0037.00 FeatureLineNumber char(01);
0038.00 FeatureNumber char(01);
0039.00 FeatureDescription char(20);
0040.00 OptionNumber char(01);
0041.00 OptionDescription char(20);
0042.00 end-ds;


*RNF5343 30 120 007900 Feldgruppe LINE hat zu viele übergangene Indizes.

Grüsse F D H Franco

B.Hauser
02-12-19, 09:24
Du solltest Deine Referenz-Datenstrukturen anders benennen als die endgültigen Felder, die mit LIKEDS auf die Referenz-Struktur verweisen. Könnte zu Problemen führen.

Außerdem wenn ich mir die Fehlermeldung anschaue, scheint das kein Problem von der Definition, sondern der Verarbeitung zu sein, also was ist in Zeile 79?

Birgitta

Rainer Ross
02-12-19, 09:45
Hallo Franco,

Das Element Cnt_Opt erreichst Du über folgendes Statement, da es sich innerhalb der Schleife Line befindet



for LocInd = 1 to Orders.Head.Cnt_Line; // Loop Produkte
ItemNumber = Orders.Head.Line(LocInd).LineItemNumber;
ProductNumber = Orders.Head.Line(LocInd).ProductNumber;
for LocInd3 = 1 to Orders.Head.Line(LocInd).Cnt_Opt;
FeatureDescription =
Orders.Head.Line(LocInd).Opt(LocInd3).FeatureDescr iption;
endfor;
endfor;

Habt Ihr Interesse coole Webanwendungen auf IBM i zu programmieren?
- Responsive Webdesign für PC, iPad und Smartphone
http://www.myhofi.com/dev/html/DataViewResponsive.html
- Stammdaten verwalten http://www.myhofi.com/tms/HTML/MySubfileApp04.html
- Projektverwaltung mit Gantt http://www.myhofi.com/tms/HTML/MyGantt.html
- schnelle Volltextsuche http://www.myhofi.com/music/html/musicsearch.html

Hier gibts die Workshops https://www.toolmaker.de/schulungen/

Herzliche Grüße
Rainer Ross It-Beratung

fdh
02-12-19, 10:03
Du solltest Deine Referenz-Datenstrukturen anders benennen als die endgültigen Felder, die mit LIKEDS auf die Referenz-Struktur verweisen. Könnte zu Problemen führen.

Außerdem wenn ich mir die Fehlermeldung anschaue, scheint das kein Problem von der Definition, sondern der Verarbeitung zu sein, also was ist in Zeile 79?

Birgitta

Hallo Birgitta,

0079.00 LocInd3 = Orders.Head.Line.Cnt_Opt;

Die Index definition mag der Compiler nicht.

Gruß Franco

fdh
02-12-19, 10:07
Hallo Rainer,

Danke.
Der Compiler nervt aber schon bei der Definition des Index.
0079.00 LocInd3 = Orders.Head.Line.Cnt_Opt;
Habe auch Birgitta schon gefragt ....

Gruß Franco

Rainer Ross
02-12-19, 10:35
Hallo Franco,

so sollte es gehen


ctl-opt dftactgrp(*no);
//------------------------------------------------------------------//
// //
// Parsen XML-DATEN - CCSID DER XML-DATEI MUSS 1208 SEIN //
// //
//----------------- //
// R.Ross 11.2019 * //
//------------------------------------------------------------------//
// XML-Array - Root //
//------------------------------------------------------------------//

dcl-ds Orders qualified;
Head likeds(Head);
end-ds;

//------------------------------------------------------------------//
// Template Head //
//------------------------------------------------------------------//

dcl-ds Head template qualified;
VersionNumber likeds(VersionNumber);
TechnicalReceiver char(20);
TechnicalSender char(20);
OrderNumber char(20);
Nad likeds(Nad) dim(04);
Cnt_Nad int(10);
Line likeds(Line) dim(05);
Cnt_Line int(10);
end-ds;

dcl-ds VersionNumber template qualified;
VersionName char(20);
VersionNo char(20);
end-ds;

//------------------------------------------------------------------//
// Template Nad //
//------------------------------------------------------------------//

dcl-ds Nad template qualified;
FlagOfParty char(02);
AdressGLN char(20);
end-ds;

//------------------------------------------------------------------//
// Template Line - Enthält die Produkte //
//------------------------------------------------------------------//

dcl-ds Line template qualified;
LineItemNumber char(03);
ProductNumber char(10);
Opt likeds(Opt) dim(100);
Cnt_Opt int(10);
end-ds;

//------------------------------------------------------------------//
// Template Options //
//------------------------------------------------------------------//

dcl-ds Opt template qualified;
FeatureLineNumber char(01);
FeatureNumber char(01);
FeatureDescription char(20);
OptionNumber char(01);
OptionDescription char(20);
end-ds;

//------------------------------------------------------------------//
// Processing //
//------------------------------------------------------------------//

main();

*inlr = *on;
//------------------------------------------------------------------//
// Main //
//------------------------------------------------------------------//
dcl-proc Main;

dcl-s LocOptions varchar(128); // XML-Options
dcl-s LocFile varchar(128); // File

dcl-s LocInd uns(10); // Index
dcl-s LocInd2 uns(10); // Index
dcl-s ItemNumber like(Line.LineItemNumber);
dcl-s ProductNumber like(Line.ProductNumber);
dcl-s FeatureDescription like(Opt.FeatureDescription);

LocFile = '/Home/Import/xml/20191031_221735_1TJW5S_2.xml';

LocOptions = 'doc=file case=any allowextra=yes +
countprefix=cnt_ datasubf=data';

clear Orders; // Init XML-Struktur

xml-into Orders %xml(LocFile:LocOptions);

for LocInd = 1 to Orders.Head.Cnt_Line; // Loop Produkte
ItemNumber = Orders.Head.Line(LocInd).LineItemNumber;
ProductNumber = Orders.Head.Line(LocInd).ProductNumber;
for LocInd2 = 1 to Orders.Head.Line(LocInd).Cnt_Opt;
FeatureDescription =
Orders.Head.Line(LocInd).Opt(LocInd2).FeatureDescr iption;
endfor;
endfor;

end-proc;
//------------------------------------------------------------------//

fdh
02-12-19, 13:32
Danke. Jetzt Läuft es. Franco