PDA

View Full Version : Variable Feldname



Seiten : 1 [2] 3 4

Fuerchau
09-10-12, 12:11
@Andreas
Diese Standards passen dann selten zu den gewünschten Schnittstellen.

@SVIT
Dann denkst du viel zu kompliziert!
Die Reihenfolge der Datenfelder spielt bei XML nur eine untergeordnete Rolle, darum brauchst du dich eigentlich nicht zu kümmern.
Felder in XML werden nämlich über ihre
a) Attributbnamen
oder
b) Knotennamen
referiert.

Sollt du die Inhalte z.B. als Attribut übergeben so ist es Egal ob du



< Satz Att1="A" Att2="B" >


oder

<KNOTEN Att2="A2" Att1="A1">


< Satz Att2="B" Att1="A" >


ausgibts.
Das Selbe gilt auch für Strukturen:



< Satz >
<SATZ>
<FELD1>< F1 > Wert1 < /F1 ></FELD1>
<FELD2>< F2 > Wert2 < /F2 >
</FELD1>

oder

<SATZ>


< Satz >
<SATZ>
<FELD2>< F2 > Wert2 < /F2 >
</FELD1>< F1 > Wert1 < /F1 >
</FELD1>

ausgibst.
Kümmere dich also gar nicht um die Reihenfolge sondern nur um das korrekte XML-Format.

Fuerchau
09-10-12, 12:41
Wer sagt denn, dass man mit SQL kein XML ausgeben kann bzw. erst V7R1 benötigt?



select

'< satz ><SATZ> att1="' concat char(F1)
concat '" att2="' concat char(F2)
concat '" < /satz ></SATZ>'

from
....



Dabei ist es nun unerheblich ob per Knoten oder Attribute ausgegeben werden soll.

Das Ganze in einen QM-Query stellen.
Mit STRQMQRY in eine Ausgabedatei und per CPYTOSTMF ins IFS und fertig ist die XML.

Benötigt man nochden XML-Header so lässt sich dieser
a) in einer Datei konstant ablegen und ebenso per CPYTOSTMF ausgeben
b) per "Select ... union all ..." auch hier einbinden.

andreaspr@aon.at
09-10-12, 13:00
Klar, selbst gebastelt gehts fast immer. Ab 7.1 gibt es jedoch viele neue Funktionen mit denen man mit wenigen Handgriffen ein vollständiges XML mit allem drum und dran ausgeben lassen kann.
Habe darüber in Wien schon mal einen Vortrag bei der Common gehalten.
Die meisten wissen gar nicht, was damit alles möglich ist.
Infocenter DB2 & XML (http://publib.boulder.ibm.com/infocenter/iseries/v7r1m0/topic/rzasp/rzaspkickoff.htm)

Fuerchau
09-10-12, 13:40
Wäre schön, wenn du da mal einen Link zeigst, wie man aus einer SQL-Table/PF ein neues XML-Dokument erzeugst.

So auf die Schnelle konnte ich nur folgendes finden:

XML input and output overview (http://publib.boulder.ibm.com/infocenter/iseries/v7r1m0/topic/rzasp/rbafyxml4389.htm)

Output

SQL is used to retrieve the XML data from the database system.
When querying XML data using an SQL fullselect, the query occurs at the column level. For this reason, only entire XML documents can be returned from the query. http://publib.boulder.ibm.com/infocenter/iseries/v7r1m0/topic/rzasp/delta.gifThe XMLTABLE built in table function can be used to retrieve fragments of an XML document in an SQL query.http://publib.boulder.ibm.com/infocenter/iseries/v7r1m0/topic/rzasp/deltaend.gif

Mit anderen Worten.
Ich kann komplette XML-Dokumente speichern, abfragen und wieder ausgeben.

andreaspr@aon.at
09-10-12, 14:02
Klar doch.

Tabelle mit folgenden Inhalt:

SP1 SP2
1 test1
10 test2
11 test3
12 test4
13 test5
14 test6
15 test7


Abfrage:

Select
XMLGroup ( Tab1.SP1 As "Nummer",
Tab1.SP2 As "Text"
Order By SP1
Option Row "MyXML"
Root "XMLRoot") "XML-Text"
From Tab1


Ergebnis:


<XMLRoot>
<MyXML><Nummer>1</Nummer><Text>test1</Text></MyXML>
<MyXML><Nummer>10</Nummer><Text>test2</Text></MyXML>
<MyXML><Nummer>11</Nummer><Text>test3</Text></MyXML>
<MyXML><Nummer>12</Nummer><Text>test4</Text></MyXML>
<MyXML><Nummer>13</Nummer><Text>test5</Text></MyXML>
<MyXML><Nummer>14</Nummer><Text>test6</Text></MyXML>
<MyXML><Nummer>15</Nummer><Text>test7</Text></MyXML>
</XMLRoot>


Das Ganze könnte man nun mit einem INSERT INTO in eine Tabelle speichern, und mit CPYTO... ins IFS schreiben.

lg Andreas

B.Hauser
09-10-12, 14:04
Wäre schön, wenn du da mal einen Link zeigst, wie man aus einer SQL-Table/PF ein neues XML-Dokument erzeugst.


So:


D MyXMLDoc S SQLTYPE(XML_CLOB_File)
D
//************************************************** ******
C/Exec SQL Set Option Commit=*None, DatFmt=*ISO, TimFmt=*ISO,
C+ Naming=*SYS, CloSQLCsr=*EndActGrp
C/End-Exec
/FREE
Clear MyXMLDoc;
MyXMLDoc_Name = '/home/Hauser/MyXMLDoc.xml';
MyXMLDoc_NL = %Len(%Trim(MyXMLDoc_Name));
MyXMLDoc_FO = SQFOVR; //Replace if exists

Exec SQL
Select XmlDocument
(xmlgroup(EmployeeNo as "PersNo",
Trim(Trim (FirstName) concat ' ' concat
Trim(Name)) as "PersName",
Address as "Street",
ZipCode as "ZipCode",
City as "City"
Order By City Desc, Name
Option Row "Employee"
Root "Staff"))
into :MyXMLDoc
From LobStaff;

*InLR = *On;
/END-FREE
Das ist das komplette, kompilier und lauffähige Programm

andreaspr@aon.at
09-10-12, 14:07
Wie gesagt, du kannst mit SQL sehr viel machen.
- XML automatisiert in die Datenbank mappen lassen. (Auch in eine Relationale DB)
- XML Dokument als ganzes direkt in eine Tabelle speichern und ausgeben.
- Abfrage in ein XML ausgeben lassen.
- XML Dokument aus dem IFS direkt einlesen mit der SQL FunKtion GET_XML_FILE()

svit
09-10-12, 14:23
Vielen Dank,
die Sache ist die, der Kunde gibt volgendes vor:
<naechstemahnung></naechstemahnung>
<zahlungstext>blabla</zahlungstext>
<zusatztext>infotext</zusatztext>
<abzugsfaehbetr>90.00</abzugsfaehbetr>

Also der kunde hat 6 Schablonen vorgegeben
Ich habe die Schablonen + Variablennamen in eine PF Datei abgelegt.
Jetzt muss ich die Schablonendatei lesen und statt Variablen (Feldnamen aus anderen Datei) die Werte reinsetzen.

Hier geht es nicht um ein einfache XML-Datei über eine PF Datei zu erstellen.

svit
09-10-12, 14:25
Vielen Dank,
die Sache ist die, der Kunde gibt volgendes vor:
"<naechstemahnung></naechstemahnung>"
"<zahlungstext>blabla</zahlungstext>"
"<zusatztext>infotext</zusatztext>"
"<abzugsfaehbetr>90.00</abzugsfaehbetr>"

Also der kunde hat 6 Schablonen vorgegeben
Ich habe die Schablonen + Variablennamen in eine PF Datei abgelegt.
Jetzt muss ich die Schablonendatei lesen und statt Variablen (Feldnamen aus anderen Datei) die Werte reinsetzen.

Hier geht es nicht um ein einfache XML-Datei über eine PF Datei zu erstellen.

svit
09-10-12, 14:29
Zum letzten mal
vie kann ich XML kod hinzufügen ?

<test>