PDA

View Full Version : data.getField("PART_NAME") read Dtaq



karl_schweiz
12-07-07, 13:32
Hallo
Kann jemand einem Anfänger helfen?

Habe ein Muster-PGM versucht nachzubauen welches ab eine DTAQ Werte einlesen soll. Der Zugriff auf die DTAQ funktioniert. Jedoch ergibt mir data.getField("PART_NAME") einen Fehler.

Ausgabe in Konsole:
com.ibm.as400.access.ExtendedIllegalArgumentExepti on: name (PART_NAME): Field was not found.


Source:
import java.io.*;
import java.util.*;
import java.net.*;
import com.ibm.as400.access.*;
public class READ_DTAQ {

public static void main(String args[])
{
System.out.println( " " );
{
try
{
AS400 as400 = new AS400("VBZAS400" );
CharacterFieldDescription partname =
new CharacterFieldDescription(new AS400Text(80, as400), "Part_Name");
RecordFormat dataFormat = new RecordFormat();
dataFormat.addFieldDescription(partname);
DataQueue dq = new DataQueue(as400, "/QSYS.LIB/TLSTUD.LIB/STUD_DQ.DTAQ");
boolean Continue = true;
System.out.println("*** Waiting for an entry for process ***");
DataQueueEntry DQData = dq.read(-1);
while (Continue)
{
Record data = dataFormat.getNewRecord(DQData.getData());
System.out.print((String) data.getField("PART_NAME") );
DQData = dq.read(-1);
}
}
catch (Exception e)
{
System.out.println("Data Queue operation failed");
System.out.println(e);
}
}
System.exit(0);
}
}

RobertPic
12-07-07, 17:40
Hallo

1.) Ich tippe auf die Groß- und Kleinschreibung "Part_Name" vs. "PART_NAME" ;)

2.) Wenn du keine RPG/Cobol Strukturen mit gepackten Feldern verarbeiten musst, sondern nur Stringdaten, dann verzichte lieber auf die Records.

Die Record's sind recht genau - wenn du einen langen String hast und ein Programm den zu kurz sendet, gibt es eine Exception..


Hier die String Variante:


DQData = dq.read(-1);
...
// DataQueue-Eintrag holen
String entry = DQData.getString();
In der Variable entry ist jetzt der gesamte Eintrag. Das Zeugs mit RecordFormat, CharacterFieldDescription und dataFormat.addField... kannst du dir dann sparen.

BTW: Ab V5R4 gibt es im Cobol die Möglichkeit Datenstrukturen als XML-Auszugeben (als langer String oder in das IFS). Auf der Javaseite kann ich mit Libs wie XStream die XML-Datei in einen Javabean mappen lassen.

Damit habe ich:
- weder Arbeit mit XML schreiben noch lesen/parsen
- im Gegensatz zu einer Struktur/Recordlösung kratzen mich (und die Folgefelder) Längenänderung/neue Felder überhaupt nicht

Das RPG so elegant XML schreiben kann, wird wohl noch ein Release brauchen..:D

/Robert

karl_schweiz
13-07-07, 15:24
Danke Robert
Die Schreibweise muss überall gleich sein, obwohl es im IBM-Manual auch so ist.
Jetzt funktioniert es.
Gruss Karl

RobertPic
13-07-07, 16:09
... obwohl es im IBM-Manual auch so ist....


Mir auch schon falscher Samplecode in der IBM Doku untergekommen. Das ist - gerade als Anfänger - recht ärgerlich.
(jetzt kosten mich solche Sachen nur ein lächeln)

/Robert