Anmelden

View Full Version : COBOL und komplexe XML erstellen



Seiten : [1] 2

nico1964
28-01-15, 10:01
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

Robi
28-01-15, 10:20
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

nico1964
28-01-15, 10:26
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;)

Fuerchau
28-01-15, 10:43
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
"<Knoten>" delimited by size
Variable delimited by space <== Size geht hier ja auch
"</Knoten>" 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?

Fuerchau
28-01-15, 10:44
Ich sag ja, der Editor ist sch....

Zwischen die Anführungsstriche gehört:

" < Knoten >"
" < / Knoten >"

malzusrex
28-01-15, 10:58
Ich sag ja, der Editor ist sch....


Deshalb nutze ich meistens für Code, SQL, ...
PHP-Code einfügen

nico1964
28-01-15, 12:30
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)):


<?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>

<job>

<job>
<header>
</header></job>

</job>

Robi
28-01-15, 13:16
Ich für meinen Teil kann meine Antwort von
HIER (http://newsolutions.de/forum-systemi-as400-i5-iseries/threads/19506-Erstellen-eines-XML-Dokumentes-aus-COBOL)
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

Fuerchau
28-01-15, 14:49
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.

Robi
28-01-15, 15:07
@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!