-
COBOL und komplexe XML erstellen
Guten Morgen,
ich stehe vor folgendem Problem, dass ich aus unserem Kernsystem mittels COBOL(oder ev. auch SQL) ziemlich komplexe XML erzeugen soil, welchen dann von unserem neuen Druckoutputmanagement abgeholt und verarbeitet werden.
Mal ein paar Eckdaten:
AS/400 Power 7 R7.1 mit wahrscheinlich aktuellstem PTF-Stand
COBOL-Applikation aus den frühen 1990ern, mit DDS, Green Screen und PRTF's aber auch noch schon abgelösten AS400 DOC's.
Ca. 100 unterschiedliche Ausgabeformate mit den verschiedensten Ausprägungen.
Derzeit wird für die Printfiles eine Datei erzeugt, welche ungefähr folgendes aussehen hat:
n-dmsvlue mit folgendem aufbau:
dmsvlue dmsFeldname länge d. feldes Inhalt
n-kopf-zeilen mit folgendem aufbau:
kopf kopffeldnmae länge d. feldes inhalt
wobei die erste kopfzeile den Fldswt ohne längenangeben enthält, wo je nach befüllung verschiedene varianten des dokuments erzeugt werden.
n-positionszeilen mit folgendem aufbau:
Position positionfeldnmae länge d. feldes inhalt
wobei für die erste zeile das selbe wie für die kopfzeilen gilt.
n-xxx-zeilen mit folgendem aufbau:
xxx xxx feldnmae länge d. feldes inhalt
wobei für die erste zeile das selbe wie für die kopfzeilen gilt.
n-xxx-zeilen mit folgendem aufbau:
xxx xxx feldnmae länge d. feldes inhalt
wobei für die erste zeile das selbe wie für die kopfzeilen gilt.
usw. bis zu den Fusszeilen des Dokuments.
Diese wird dann an unser derzeitiges Druckoutputmanagement gesendet, wo der Druck und die Archivierung im DMS passiert. Und dieser Teil soll abgelöst werden durch Erzeugung eines XML-Files, welches dann an das neuen System gesendet wird.
Zu mir:
Programmierer seit 1990 auf der AS/400, vor allem in COBOL, wobei ich in den letzten Jahren auch schon des öfteren mit embedded SQL gearbeitet habe, wo ich sicher bin das noch genug Potential zu entdecken wäre.
Eigentlich auch recht gute SQL-Kenntnisse was schnelle Auswertungen auf dem Green Screen betrifft.
Aber mit UDF's und Stored Procedures habe ich schon noch meine Problem, wobei hier mein Unternehmen bereit wäre, Geld für Schulungen in die Hand zu nehmen.
Da bei uns die personelle Situation nicht sehr rosig ist, hoffe ich auf eure Hilfe bzw. Unterstützung und wäre über Vorschläge oder eventuell auch Lösungsansätze dankbar.
Schöne Grüße aus Wien
Andreas
Andreas
Ein AS/400 Dinosaurier since 1989
-
Hallo Niko1964 ( sehr sympatisches Baujahr )
bis jetzt kann ich noch keine konkrete Aufgabe/Problem lesen
Ok, recht komplexe XML ...
OK, Eure Printerfile sind etwas 'seltsam' und erinnern mich an ein SW Haus in Northeim!
OK, Du kannst Cobol und ein wenig SQL
aber was mußt du den nun genau machen?
Robi
-
Hallo Robi,
aus dem Output, der eh nicht mehr als Spool sonder als Datei gespeichert ist, muss ich nun ein XML generieren, dass obige Strucktur puls ein paar globaler variablen am Anfang hat.
Andreas
ach ja und mit ein wenig SQL habe ich vielleicht ein wenig untertrieben
Andreas
Ein AS/400 Dinosaurier since 1989
-
Nun, eine XML-Struktur kann ich da nun auch nicht erkennen.
Wenn du nun einen Output in eine Datei machst, kannst du mit COBOL-Mitteln die Daten zusammenstricken:
string
"" delimited by size
Variable delimited by space <== Size geht hier ja auch
"" delimited by size
into Ziel
write myfile from ziel
Und schreibst das Ganze in eine PF.
Anschließend gibst du das mit CPYTOSTMF ins IFS als XML aus.
Wo ist das Problem?
-
Ich sag ja, der Editor ist sch....
Zwischen die Anführungsstriche gehört:
" < Knoten >"
" < / Knoten >"
-
Zitat von Fuerchau
Ich sag ja, der Editor ist sch....
Deshalb nutze ich meistens für Code, SQL, ...
PHP-Code einfügen
-
Zitat von Fuerchau
Nun, eine XML-Struktur kann ich da nun auch nicht erkennen.
Aus obiger Struktur soll ich ja das XML erzeugen das ungefähr so aussieht(xml-Strucktur entspricht den oben angegebnen Feldern, stammt aus einer unserer anderen Anwendungen(mircosoft)):
PHP-Code:
<?xml version="1.0" encoding="ISO-8859-1" ?> <job> <header> <owner>infovision</owner> <formname>DasFormat</formname> <print> <queue>DieOutqueue</queue> <lade>262</lade> </print> <displayname>DaswahreFormat</displayname> <umgebung>test</umgebung> <reporttag>xxxxxxx</reporttag> </header> <content> <genCI> <logopos>l</logopos> <fusszeile/> </genCI> <global> <mandant>MandNr</mandant> <v_typ>Art</v_typ> <v_firmenname>Firmenname</v_firmenname> <v_lg>Leasinggeber</v_lg> <v_ln>Leasingnehmer</v_ln> <v_lgk>LG</v_lgk> <v_lnk>LN</v_lnk> <v_lok>LO</v_lok> <v_rw>0</v_rw> <v_zi>Monat</v_zi> <v_zik>Monatlich</v_zik> <v_oplease>0</v_oplease> <waehrung>EUR</waehrung> <!--<konkludent>!--> <!--<einschreiben/>!--> </global> <rechnungskopf> <nr>4444444444</nr> <uid>ATU55555</uid> </rechnungskopf> <absender>1043 Wien, Postfach 100</absender> <empfaenger> <zeile>Firma</zeile> <zeile>EmpfName</zeile> <zeile>Strasse</zeile> <zeile>Ort</zeile> <zeile>Land</zeile> </empfaenger> <kontakt> <text>Text1</text> <adresse>Strasse</adresse> <fn>FN:1234567890</fn> <uid>ATU12345678</uid> <dvr>DVR: 1234567</dvr> <plz>postleitzahl</plz> <ort>Ort</ort> <lkz>Land</lkz> <name>Fr. Musterfrau Klara</name> <tel>08 123 456</tel> <fax>08 123 465 78</fax> <email>klara.musterman@firma.at</email> <www>www.wasauchimmer.com</www> </kontakt> <datum>tt.mm.jjjj</datum> <vorfin_guthzins> <belegnr>1234567890</belegnr> <objekt>Das Ding lt Beschreibung</objekt> <bisdat1>31.01.15</bisdat1> <vorfinzinssatz>33,44</vorfinzinssatz> <lieferant> <name1>Name1 von Lieferanten</name1> <name2>Name2 vom Lieferanten</name2> </lieferant> <vorfin_vormonat><!--var2!--> <zeile> <buchdatum>21.21.15</buchdatum> <extbelegnr>777888999</extbelegnr> <beschr>Beschreibung</beschr> <geb>99,99</geb> <von>1.12.14</von> <bis>31.12.14</bis> <tage>31</tage> <zinsen>44,44</zinsen> </zeile><zeile> <buchdatum>21.21.15</buchdatum> <extbelegnr>777888999</extbelegnr> <beschr>Beschreibung</beschr> <geb>99,99</geb> <von>1.12.14</von> <bis>31.12.14</bis> <tage>31</tage> <zinsen>44,44</zinsen> </zeile> <zeile> <buchdatum>21.21.15</buchdatum> <extbelegnr>777888999</extbelegnr> <beschr>Beschreibung</beschr> <geb>99,99</geb> <von>1.12.14</von> <bis>31.12.14</bis> <tage>31</tage> <zinsen>44,44</zinsen> </zeile> <enddatum_vormonat>31.12.14</enddatum_vormonat> </vorfin_vormonat> <anzl_teilrechnung><!--var3!--> <zeile> <buchdatum>21.21.15</buchdatum> <extbelegnr>777888999</extbelegnr> <beschr>Beschreibung</beschr> <geb>99,99</geb> <von>1.12.14</von> <bis>31.12.14</bis> <tage>31</tage> <zinsen>44,44</zinsen> </zeile> <teil_restbetrag>55,11</teil_restbetrag> <enddatum_vormonat>31.12.14</enddatum_vormonat><!--var4!--> </anzl_teilrechnung> <keine_vorfizi><!--var5!!--> <zeile> <buchdatum>21.21.15</buchdatum> <extbelegnr>777888999</extbelegnr> <beschr>Beschreibung</beschr> <geb>99,99</geb> <von>1.12.14</von> <bis>31.12.14</bis> <tage>31</tage> <zinsen>44,44</zinsen> </zeile> </keine_vorfizi> <guth_zins><!--var6!--> <abrechdatum>01.01.15</abrechdatum> <zinsguth>0,0123</zinsguth> <zeile> <buchdatum>21.21.15</buchdatum> <extbelegnr>777888999</extbelegnr> <beschr>Beschreibung</beschr> <geb>99,99</geb> <von>1.12.14</von> <bis>31.12.14</bis> <tage>31</tage> <zinsen>44,44</zinsen> </zeile> <gesamt_guthzins>0,99</gesamt_guthzins> </guth_zins> <gesamt_vorfizi>9999,99</gesamt_vorfizi> <ustsatz>20</ustsatz> <ustbetrag>222,22</ustbetrag> <gesamtsum>13333,33</gesamtsum><!--var8!--> <prenote><!--Knoten nicht schicken wenn Zahlschein!--> <var>var1</var> <betrag1>93,76</betrag1> <amdatum>01.01.2014</amdatum> <mandatsreferenz>abcdefghirk</mandatsreferenz> <cid>xxxxxxxxxxxxxxxx</cid> <iban> xxxx xxxx xxxx xxxx</iban> <bic>xxxxxxxxxx</bic> <betrag2>93,76</betrag2> <abdatum>02.01.2013</abdatum> <modeofpayment>monatlich</modeofpayment> </prenote> </vorfin_guthzins> </content> </job>
Last edited by nico1964; 28-01-15 at 12:31.
Grund: verlor die Formatierung
Andreas
Ein AS/400 Dinosaurier since 1989
-
Ich für meinen Teil kann meine Antwort von
HIER
nur bestätigen.
Das ist ein beigehen. Es ist einfacher als du denkst!
So wie ich das z.Zt. beurteile würd ich sagen, schreib die Daten weiter in 'Printerfile' Form in eine PF.
Dann brauchst du einen Batchjob, der entweder alle paar Sekunden nachsieht ob's was neues gibt, das auch fertig ist, oder via DATAQ den 'mach was' Befehl bekommt (letzteres würde ich bevorzugen)
Der Batch-Job liest die 'Datei' (etwas abgewandelte, ehemalige Prtf-Datei) und baut das XML
Robi
Das Notwendige steht über dem technisch machbaren.
(klingt komisch, funktioniert aber!)
-
Wie immer führen viele Wege zur Lösung.
Wie ich oben schon sagte (bevor man ein 2. Pgm bemüht):
Die ganze XML lässt sich mit simplen String-Befehlen direkt in eine PF ausgeben, die dann per CPYxxxSTMF ins IFS kopiert werden kann.
Die Anzahl der Leerzeichen vor und nach den "<" und ">" spielt keine Rolle.
-
@Baldur
Das muß dann aber in jedem Pgm gemacht werden,
meine verion erfordert (fast) keine anpassung in den BasisPgmem und den codeaufwand einmal für alle!
Das Notwendige steht über dem technisch machbaren.
(klingt komisch, funktioniert aber!)
-
Zitat von Fuerchau
Die Anzahl der Leerzeichen vor und nach den "<" und ">" spielt keine Rolle.
Das stimmt nur dann, wenn ein evtl. vorhandenes Schema sogenannten "whitespace" erlaubt.
Das ist sehr oft der Fall, aber eben nicht immer.
-
Zitat von Robi
Ich für meinen Teil kann meine Antwort von
HIER
nur bestätigen.
Das ist ein beigehen. Es ist einfacher als du denkst!
So wie ich das z.Zt. beurteile würd ich sagen, schreib die Daten weiter in 'Printerfile' Form in eine PF.
Dann brauchst du einen Batchjob, der entweder alle paar Sekunden nachsieht ob's was neues gibt, das auch fertig ist, oder via DATAQ den 'mach was' Befehl bekommt (letzteres würde ich bevorzugen)
Der Batch-Job liest die 'Datei' (etwas abgewandelte, ehemalige Prtf-Datei) und baut das XML
Robi
Dann verzichtet doch lieber gleich auf die Printfile bzw. PF, und schreibt gleich alles in die DataQueue,
sowohl die Befehle, als auch die Daten. So habe ich es mal vor vielen Jahren gemacht.
Im Prinzip habe ich die DataQ mit REXX ausgelesen, und die REXX-Routine das ganze XML wrappen lassen.
In REXX habe ich noch einiges mehr dazu getan, also nicht nur die Datenfelder in XML-Tags gepackt, sondern das ganze XML-Dokument gebildet, dieses dann (mit MQ-Series) an den weiterverarbeitenden Service geleitet, und anschließend Log-Dateien und Statistiken geschrieben. MQ-Series und REXX habe ich da aber auch für die Interpretation der eingehenden Requests (XML-Input) verwendet, nicht nur für die Response (XML-Output). Ich habe das System damals auf Performance optimiert, alles im RAM gemacht und über Messages kommuniziert, um die Durchlaufzeiten (Request/Response) möglichst unter einer Sekunde zu halten.
Heute würde ich aber eher auf ILE-RPG setzen, wo es aktuelle und umfangreiche Lösungsansätze gibt.
Ein Bekannter von mir hat sich darauf spezialisiert, also auf WebServices, XML usw. mit ILE-RPG.
Similar Threads
-
By nico1964 in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 07-01-15, 15:57
-
By nico1964 in forum IBM i Hauptforum
Antworten: 21
Letzter Beitrag: 27-12-14, 11:58
-
By Andreas Herzfeldt in forum IBM i Hauptforum
Antworten: 9
Letzter Beitrag: 18-02-05, 12:11
-
By Claudia Lange in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 23-07-02, 11:32
-
By kaym in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 07-07-02, 13:49
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