CIB job technischer Leitfaden (DE)
13. Entwurf von Auftragsdateien
Aufträge und Auftrags–Ergebnisse ansprechend darstellenErgebnisdokument als direkte Auftragsergebnisdatei
RTF Formular mit Daten füllen und PDF erzeugen
PDF Formular mit Daten füllen
Zwischenergebnisse speichern
Nutzdaten für CIB merge in Auftrag einbetten
Verwenden von multi.csv (CIB merge-Schalter –c)
Verwendung von mehreren Aliasnamen mit XML
Nutzdaten für CIB pdf toolbox/merge in Auftrag einbetten
CIB job XML Schema nutzen
Tracedateien zur aufrufenden Anwendung übertragen
Batchverarbeitung von Aufträgen
Zeitliche Begrenzung von Aufträgen
Beispiel für die Erzeugung von ZUGFeRD konformen Daten durch CIB invoice toolbox
Aufträge und Auftrags–Ergebnisse ansprechend darstellen
Um Auftragsdateien und Auftragsergebnisdateien während der Entwicklungsphase schneller erfassen zu können, werden ein XSLT-Stylesheet cibjob.xsl und ein Cascading Stylesheet cibjob.css mit ausgeliefert. Es gibt folgende zwei Möglichkeiten die Stylesheet-Anweisung einzubinden:
Fügen Sie eine Stylesheet-Anweisung in ein XML ein, um es im Standardbrowser betrachten zu können.
Wichtig:
Die Stylesheet-Dateien müssen sich im gleichen Verzeichnis wie die im Browser
geöffnete XML-Datei befinden. Ist das nicht der Fall kann die XML-Datei nicht
geöffnet werden. Es wird eine Fehlermeldung angezeigt.
Beispielauftrags(ergebnis)datei (Ausschnitt):
<?xml version="1.0" encoding="ISO-8859-1" ?>
<?xml:stylesheet type="text/xsl" href="cibjob.xsl"?>
<root>
<Comod>
…
Fügen Sie eine Stylesheet-Anweisung mit folgender URL in ein XML ein, um es im Standardbrowser betrachten zu können.
Beispielauftrags(ergebnis)datei (Ausschnitt):
<?xml version="1.0" encoding="ISO-8859-1" ?>
<?xml:stylesheet type="text/xsl" href="http://www.cib.de/schemas/job/1.2/cibjob.xsl"?>
<root>
<Comod>
…
Gerne können Sie die mitgelieferten Stylesheets an Ihre Bedürfnisse anpassen.
Ergebnisdokument als direkte Auftragsergebnisdatei
Setzen Sie die CIB job-Einstellung (Property) „OutputMode“ auf den Wert „Direct“. Dies können Sie sowohl in der CIB job Konfigurationsdatei, in den Standardeinstellungen (<defaults>) des Auftrags als auch beim auszuführenden Job selbst angeben.
Beispielauftragsdatei (Ausschnitt):
<?xml version="1.0" encoding="ISO-8859-1" ?>
<root>
<Comod>
<defaults>
<properties command="job">
<!-- Dieser Auftrag wird nur ein einziges Ergebnisdokument
erzeugen und das soll direkt, also ohne umgebendes XML
zurückgesendet werden. -->
<property name="OutputMode">Direct</property>
</properties>
</defaults>
<jobs>
...
Die alternative Einstellung für die Property „OutputMode“ ist „Xml“.
RTF Formular mit Daten füllen und PDF erzeugen
Erstellen Sie ein RTF-Formular „Rohtext.rtf“ als Wurzeldokument wie in der Schulungsdokumentation „Grundlagen CoMod - dynamische Dokumente“ beschrieben.
Legen Sie während oder vor der Dokumenterstellung auch das Aussehen des XML für ihre Nutzdaten fest:
<Daten>
<KundeAnrede>Herr</KundeAnrede>
<KundeTitel>Dr.</KundeTitel>
<KundeName>Franz Heizer</KundeName>
<KundeStrasse>Musterweg 3c</KundeStrasse>
<KundeAdresszusatz>bei Herrn Meilhammer</KundeAdresszusatz>
<KundePLZOrt>54321 Musterdorf</KundePLZOrt>
<PersonalNummer>AGH4876836</PersonalNummer>
<Betrag>3500,00</Betrag>
<DatumStart>30.01.2003</DatumStart>
<ZahlungsIntervall>jaehrlich</ZahlungsIntervall>
</Daten>
Achten Sie darauf, dass zusätzlich zu Ihren Daten auch der Auftrag im XML Platz findet. Dieser soll standardmäßig als erstes Kind des Wurzelelements ins Nutzdaten-XML eingefügt werden. Es ist daher sinnvoll, ein neutrales Wurzelelement hinzuzufügen:
<root>
<Daten>
<KundeAnrede>Herr</KundeAnrede>
...
</Daten>
</root>
Kopieren Sie das Wurzeldokument, alle Textbausteine und die benötigten Grafiken in das gewählte Verzeichnis ..\templates für Formulare. Siehe Abschnitt Formulare und Textbausteine ablegen oben.
Definieren Sie den XPath-Zugriff, der einerseits zu Ihrem Nutzdaten-XML als auch zu den Zugriffen auf die Variablen im Wurzeldokument und den Textbausteinen passt, im Beispiel „/root/Daten“.
Legen Sie die Parameter für die PDF-Konvertierung fest, etwa OpenSize=Fit, OpenLayout=TwoColumnLeft, FontsEmbedded= 1. Siehe hierzu auch die Dokumentation zu CIB format/output.
Der Auftrag sieht dann folgendermaßen aus (die Pfadangaben wurden bereits in der jobconfig.xml hinterlegt. Siehe Abschnitt Pfadangaben hinterlgegen):
<?xml version="1.0" encoding="ISO-8859-1" ?>
<root>
<Comod>
<defaults>
<!-- Einstellungen, die für alle Aufträge gleich sind. -->
<properties command="merge">
<property name="-i">Rohtext.rtf</property>
<property name="-l!">merge.log</property>
<property name="-h">XML:$(inline)</property>
<property name="-s"/>
</properties>
<properties command="format">
<property name="OutputFormat">FormatPdf</property>
<property name="FontsEmbedded">1</property>
</properties>
</defaults>
<jobs>
<job name="job1">
<properties>
<!-- Es soll eine direkte Auftragsergebnisdatei erzeugt werden, also
das PDF ohne umgebendes XML zurückgesendet werden. -->
<property name="OutputMode">Xml</property>
</properties>
<steps>
<step name="merge1" command="merge">
<properties>
<property name="-i">Rohtext.rtf</property>
<property name="-d">/root/Daten</property>
</properties>
<trace>merge.log</trace>
</step>
<step name="format1" command="format">
<properties>
<property name="OpenSize">Fit</property>
<property name="OpenLayout">TwoColumnLeft</property>
</properties>
</step>
</steps>
</job>
</jobs>
</Comod>
<Daten>
<KundeAnrede>Herr</KundeAnrede>
<KundeTitel>Dr.</KundeTitel>
<KundeName>Franz Heizer</KundeName>
<KundeStrasse>Musterweg 3c</KundeStrasse>
<KundeAdresszusatz>bei Herrn Meilhammer</KundeAdresszusatz>
<KundePLZOrt>54321 Musterdorf</KundePLZOrt>
<PersonalNummer>AGH4876836</PersonalNummer>
<Betrag>3500,00</Betrag>
<DatumStart>30.01.2003</DatumStart>
<ZahlungsIntervall>jaehrlich</ZahlungsIntervall>
</Daten>
</root>
Siehe auch:
Auftragsentwurf: PDF Formular mit Daten füllen
Auftragsentwurf: Nutzdaten für CIB merge in Auftrag einbetten
Auftragsentwurf: Nutzdaten für CIB pdf merge in Auftrag einbetten
Framework: Nutzdaten in Auftrag einbettenPDF Formular mit Daten füllen
Erstellen Sie ein PDF-Formular „Formular.pdf“ aus einem RTF-Formular mit CIB pdf formfields wie auf der Website http://www.cib.de/deutsch/products/pdfplugin/cibpdfformfields_beispiel.htm beschrieben.
Legen Sie während oder vor der Dokumenterstellung auch das Aussehen des XML für ihre Nutzdaten fest, legen Sie das Formular im Formularverzeichnis (..\templates) ab und legen Sie den XPath-Ausdruck fest (/root/Daten). Alles wie im vorigen Abschnitt zu RTF-Formularen beschrieben.
Im Auftrag wird als zusätzliche Einstellung nur die Verschlüsselung aktiviert durch die Angabe von Passworten.
Der Auftrag sieht dann folgendermaßen aus (die Pfadangaben wurden bereits in jobconfig.xml hinterlegt. Siehe Abschnitt Pfadangaben hinterlegen):
<?xml version="1.0" encoding="ISO-8859-1" ?>
<root>
<Comod>
<jobs>
<job name="job1">
<steps>
<!-- Direkt das PDF-Formular mit den Daten versehen. -->
<step name="merge" command="pdfmerge">
<properties>
<!-- Das Ergebnisdokument verschlüsseln und
somit vor Veränderung sichern. -->
<property name="OutputOwnerPassword">
MyPasswort</property>
<property name="InputFilename">
Formular.pdf</property>
<property name="DataFileType">XML</property>
<property name="DataXmlPath">/root/Daten</property>
</properties>
</step>
</steps>
</job>
</jobs>
</Comod>
<Daten>
<DepotNummer>1234567890</DepotNummer>
<Vorname>Max</Vorname>
<Nachname>Mustermann</Nachname>
<KontoInhaber>Andreas Mustermann</KontoInhaber>
<KontoNummer>081508150815</KontoNummer>
<KontoBLZ>25050180</KontoBLZ>
<WKN>0987654321</WKN>
<UnterKonto>JA</UnterKonto>
<FondsBezeichnung>Deka Technology TF</FondsBezeichnung>
<LimitTermin>31.12.2004</LimitTermin>
<MengeBetrag>2000,00</MengeBetrag>
<MengeStuecke>1000</MengeStuecke>
<LimitBetrag>2100,00</LimitBetrag>
<Verwendungszweck>keine Angabe</Verwendungszweck>
<Auftraggeber>Max Mustermann</Auftraggeber>
<Datum>20.04.2004</Datum>
<BedienerName>Karl Auer</BedienerName>
<BedienerTelefon>0511-4711</BedienerTelefon>
<DatumUndUhrzeit>20.04.2004 11:11</DatumUndUhrzeit>
<InstitutBLZ>25050090</InstitutBLZ>
</Daten>
</root>
Siehe auch:
Auftragsentwurf: RTF Formular mit Daten füllen und PDF erzeugen
Auftragsentwurf: Nutzdaten für CIB merge in Auftrag einbetten
Auftragsentwurf: Nutzdaten für CIB pdf merge in Auftrag einbetten
Framework: Nutzdaten in Auftrag einbetten
Zwischenergebnisse speichern
Über das spezielle Kommando „save“ können Ergebnisdokumente von beliebigen Schritten abgespeichert werden.
Wenn es sich um ein Ergebnisdokument handelt, das dem Aufrufer zur Verfügung stehen soll, wird statt des base64 encodeten Ergebnisdokuments eine URL in die Auftragsergebnisdatei eingesetzt.
Beispielauftragsdatei (die Pfadangabe wurde bereits in der jobconfig.xml hinterlegt. Siehe Abschnitt Pfadangabe hinterlegen):
<?xml version="1.0" encoding="ISO-8859-1" ?>
<root>
<Comod>
<defaults>
<properties command="job">
<property name="OutputMode">Xml</property>
</properties>
<properties command="format">
<property name="OutputFormat">FormatPdf</property>
</properties>
</defaults>
<jobs>
<job name="job1">
<steps>
<step name="merge" command="merge">
...
</step>
<step name="format" command="format"/>
<step name="url" command="save">
<!-- Das Ergebnisdokument auf Platte schreiben lassen und
einen Link zurückgeben. Dieses Kommando wird
von CIB job umgesetzt. -->
<properties>
<!-- Unter dieser URL erreicht der Aufrufer das
gespeicherte Ergebnisdokument -->
<property name="OutputUrl">
http://www.mycompany.de/app/generated/-
68F1112E-E31A-40d4-8DBF-F12FD45.pdf
</property>
<!-- Unter diesem Dateinamen und Verzeichnis
(Workspace) sieht der Server das Ergebnisdokument
-->
<property name="OutputFilename">68F1112E-E31A-
40d4-8DBF-F12FD45.pdf</property>
</properties>
</step>
</steps>
</job>
</jobs>
</Comod>
</root>
Nutzdaten für CIB merge in Auftrag einbetten
Wie Sie in vielen abgebildeten Beispielaufträgen gesehen haben, enthält die Auftragsdatei Ihre Nutzdaten einfach als weiteres Element des Auftrags.
Mit dem CIB documentserver Framework fügen Sie dabei sehr komfortabel Ihr Nutzdaten-XML in den aufzubauenden Auftrag ein. Siehe auch den entsprechenden Abschnitt in den Anleitungen zum Framework.
Die einzige Rahmenbedingung ist, dass der bei den Einstellungen zu CIB merge angegebene XPath, der den Datenzugriff steuert, zu Ihrer XML-Struktur und auch zu den im Textbausteinverzeichnis angegebenen Variablenzugriffen passt.
Beispielauftragsdatei (die Pfadangaben wurden bereits in jobconfig.xml hinterlegt. Siehe Abschnitt Pfadangabe hinterlegen):
<?xml version="1.0" encoding="ISO-8859-1" ?>
<root>
<Comod>
<jobs>
<job name="job1">
<steps>
<step name="merge1" command="merge">
<properties>
<property name="-i">LBS.rtf</property>
<property name="-h">XML:$(inline)</property>
<!-- Hier den Bezug zum Element <root>.<LBS-Daten>
herstellen: -->
<property name="-d">/root/LBS-Daten</property>
<property name="-s"/>
</properties>
</step>
...
</steps>
</job>
</jobs>
</Comod>
<!-- Hier beginnen die in den Auftrag eingebetteten Nutzdaten. Diese werden
von CIB merge über den obigen XPath gefunden. Im Textbausteinverzeichnis können
diese Variablen dann einfach mit ihren Namen angesprochen werden. -->
<LBS-Daten>
<LBSKundeAnrede>Herr</LBSKundeAnrede>
<LBSKundeTitel>Dr.</LBSKundeTitel>
<LBSKundeName>Franz Heizer</LBSKundeName>
<LBSKundeStrasse>Musterweg 3c</LBSKundeStrasse>
<LBSKundeAdresszusatz>bei Herrn Meilhammer</LBSKundeAdresszusatz>
<LBSKundePLZOrt>54321 Musterdorf</LBSKundePLZOrt>
<LBSPersonalNummer>AGH48111761836</LBSPersonalNummer>
<LBSBetrag>3500,00</LBSBetrag>
<LBSDatumStart>30.01.2003</LBSDatumStart>
<LBSZahlungsIntervall>jaehrlich</LBSZahlungsIntervall>
…
</LBS-Daten>
</root>
Siehe auch:
Auftragsentwurf: RTF Formular mit Daten füllen und PDF erzeugen
Auftragsentwurf: PDF Formular mit Daten füllen
Auftragsentwurf: Nutzdaten für CIB pdf merge in Auftrag einbetten
Framework: Nutzdaten in Auftrag einbettenVerwenden von multi.csv (CIB merge-Schalter –c)
Zur Verwendung von mehreren (virtuellen) Datendateien analog multi.csv im CIB documentserver mit Aufträgen, siehe bitte die Anleitung im nächsten Abschnitt (mehrere Aliasnamen).
Verwendung von mehreren Aliasnamen mit XML
CIB merge (und CIB pdf toolbox/merge) unterstützt gleichzeitig mehrere Datenquellen, aus denen Werte in Dokumente eingesetzt werden können.
Begriff Alias
Analog zu einer Liste mit verschiedenen SQL-Abfragen, die jeweils verschiedene Anzahlen von Zeilen und Spalten haben können, wurde mit CIB merge bisher eine sogenannte „Multisteuerdatei“ verwendet. Diese enthielt eine Tabelle von Dateinamen (CSV-Dateien), denen über den Tabellentitel jeweils ein logischer Name – der „Alias“ zugewiesen wurde. Beispiel (multi.csv):
Rechnung;Schuldner;Anschrift;Bankverbindung;Raten
Rechnung.csv;Schuldneradresse.csv;Rechnungsadresse.csv;
Zahladresse.csv;Raten.csv
ergibt u.a., dass die Daten zum „Schuldner“ sich in der Datei „Schuldneradresse.csv“ befinden. Die darin enthaltenen Werte, etwa „S_Name“ können dann (Schalter –prefix-delimiter=. setzen) über {ref Schuldner.S_Name} im RTF/PDF referenziert werden. Weiterhin können die Datensatzzeiger für jeden Alias separat weitergeschaltet oder abgefragt werden (nur RTF) mit den entsprechenden Feldern ({mergerec ?Schuldner}, {next Schuldner}).
Beispiel Schuldneradresse.csv (eine Datenzeile):
S_ROLLE;S_ANREDE;S_NAME1;S_STRASSE;S_LAND;S_POSTLEITZAHL;S_ORT;S_ART;S_TELEFON
SCHULD;<ohne Angabe>;Schuldner;Straße 2;Deutschland;80992;
München;Zweitschuldner;Telefon 2
Begriff XPath
XPath ist eine XML-Abfrage-Sprache. So wie in ODBC-Datenquellen Abfragen per SQL geschehen, werden diese in XML üblicherweise mittels XPath realisiert. Es bietet die Freiheit sehr präzise oder auch sehr lockere Anfragen an den "Datenserver" zu stellen.
Wie kann ich mir einen Xpath vorstellen? Das ist so eine Mischung aus "Ich zeige an eine Stelle im XML-Baum" (wie bei Verzeichnissen) und "ich wähle über Namen oder Bedingungen mehrere Knoten aus" (wie bei SQL).
Das Ergebnis eines XPath-Ausdrucks ist also eine (auch mal leere oder einelementige) Menge von Knoten mit ihren Kindern und Attributen. Das können auch verschiedenartige Knoten an ganz unterschiedlichen Stellen des XML-Baumes sein.
Einfache XPath-Ausdrücke
//data Liefert alle Datensätze <data>, egal unter wie vielen Überknoten er liegt. Wenn es folgende Knoten gibt:
<root>
<data type="person"><name>Meier</name>…</data>
<data type="person"><name>Müller</name>…</data>
<company>
<data type="address"><street>Mainstreet</street>…</data>
</company>…
dann sind sogar Knoten mit unterschiedlichem Aufbau (person und address) im Ergebnis enthalten, denn es werden alle drei <data>-Knoten geliefert.
/root/data Liefert alle Knoten <data>, die sich im Wurzel-Knoten mit dem Namen <root> befinden. Gibt es unter dem Knoten <root> mehrere Knoten <data>, so bilden alle zusammen das Ergebnis des XPaths.
/*/data liefert den Datensatz vom Knoten <data>, welcher sich direkt unter einem beliebigen Wurzel-Knoten befinden muss. Von obigem Beispiel-XML würden daher nur die ersten beiden <data>-Knoten im Ergebnis enthalten sein (Namens-Wildcard).
Raffinierte XPath-Ausdrücke
/root/data/raten/rate
Dieser XPath deutet darauf hin, dass
die zugehörige XML-Datei unter dem Knoten <raten> mehrere Knoten
<rate> besitzt. Diese werden alle als Ergebnis geliefert.
/root/data/adressen/adresse[rolle='mahi']
Liefert alle Adress-Knoten <adresse>
unter dem Knoten <adressen>, aber nur die Adressen, bei denen der
Unterknoten <rolle> den Textwert 'mahi' besitzt (Filterung).
/root/data/adressen/adresse[@rolle='mahi']
Genauso, nur dass das Attribut rolle
den Textwert 'mahi' besitzen muss (<adresse rolle="mahi">)
Alias aus XML Daten
Um Daten aus XML-Datenquellen zu holen, verwendet CIB merge Xpath-Ausdrücke. Genauer für jeden Aliasnamen, der Daten aus einer XML-Datei holt je einen XPath-Ausdruck. Analog zur bisherigen Angabe eines CSV-Dateinamens oder eines SQL-Statements wird deshalb im Fall von XML die Datenquelle so angegeben:
"XML:dateiname.xml;/root/data/adressen/adresse[rolle='mahi']"
Zum Vergleich (CSV und SQL):
"dateiname.csv"
"SQL:Datenquellenname;SELECT name, vorname FROM adressen WHERE …"
Wie wird dann aus der "Menge von Knoten mit ihren Kindern und Attributen" (vgl. Abschnitt XPath-Abfrageergebnis) ein Ergebnis aus Spalten (Variablennamen) und Zeilen (Datensätze)?
Die Zeilen (Datensätze) entstehen erwartungsgemäß aus den Knoten. Das heißt jeder Knoten im Abfrageergebnis wird als ein Datensatz betrachtet. Wie die Datensätze einer CSV-Datei kann man mit der {next}-Feldanweisung die Knoten des XPath-Abfrageergebnisses weiterschalten.
Die Spalten und Variablennamen ergeben sich je Knoten aus seinen direkten Kindknoten und seinen Attributen (die ja ebenfalls direkte Kindknoten sind) wie in folgendem Beispiel dargestellt.
Wenn der Knoten so aussieht:
<data type="person">
Forstner, Karl
<name>Forstner</name>
<firstname sex="m">Karl</firstname>
<initial/>
<address>
<street>Böhmerwaldstraße 28</street>
...
</address>
</data>
ergeben sich daraus folgende Variablen und Werte, die im Rohtext über {ref}-Feldanweisungen eingesetzt werden können:
Variablenname |
Variablenwert |
Bemerkung/Begründung |
type |
"person" |
Eigenes Attribut des Knotens |
name |
"Forstner" |
Direktes Kindelement ohne eigene Kinder mit einem Textinhalt |
firstname |
"Karl" |
Direktes Kindelement ohne eigene Kinder mit einem Textinhalt |
initial |
"" |
Direktes Kindelement ohne eigene Kinder ohne Textinhalt |
data |
"Forstner, Karl" |
Eigener Textinhalt des Knotens |
name() |
"data" |
Name des Knotens, Spezialvariable je Aliasname |
Das Attribut sex sowie der Knoten <street> bleiben unberücksichtigt, da sie keine direkten Kinder des Knotens sind. Der Knoten <address> führt nicht zu einer Variablen, da er selbst Kinder besitzt.
Groß-/Kleinschreibung
Anders als in den an CIB merge übergebenen XML-Daten und XPath-Ausdrücken (!) bleibt im RTF die Groß- und Kleinschreibung der Variablennamen wie bisher unberücksichtigt.
Ersatz der Multisteuerdatei im Fall von XML-Daten
Ab der Version 3.9.135 von CIB merge ist eine direkte Unterstützung von Multi-XML-Daten integriert:
Über die Schalter –h und –d wird ein Multisteuerknoten im XML angegeben. Durch Hinzufügen des "klassischen" Multisteuerdatei-Schalters –c interpretiert CIB merge dann die dort im XML enthaltenen Aliasdefinitionen selbständig und stellt die zugehörigen Aliasnamen bereit.
Beispielauftragsdatei (die Pfadangaben wurden bereits in jobconfig.xml hinterlegt. Siehe Abschnitt Pfadangabe hinterlegen):
<?xml version="1.0" encoding="ISO-8859-1" ?>
<root>
<Comod>
<jobs>
<job name="job1">
<steps>
<step name="merge1" command="merge">
<properties>
<!--Wurzeldokument inkl. Pfad angeben, falls dieser von jobconfig.xml getroffenen
Einstellung abweichen soll -->
<property name="-i">..\templates\LBS.rtf</property>
<property name="-h">XML:$(inline)</property>
<!-- Hier den Bezug zum Multi-Element <root>.<Multi>
herstellen: -->
<property name="-d">/root/Multi</property>
<property name="-c"/>
<property name="-s"/>
</properties>
</step>
…
</Comod>
<multi>
<Rechnung>XML:$(this);/root/data/rechnung</Rechnung>
<Schuldner>XML: $(this);/root/data/adressen/
adresse[@rolle='SCHULD']</Schuldner>
<Anschrift>XML: $(this);/root/data/adressen/
adresse[@rolle='RECHNUNG']</Anschrift>
<Bankverbindung>XML: $(this);/root/data/adressen/
adresse[@rolle='MAHI']</Bankverbindung>
...
</multi>
<data>
<rechnung>
<HAUSPOST>SPK 002</HAUSPOST>
...
</rechnung>
<schuldneradresse>
<S_ROLLE>SCHULD</S_ROLLE>
...
</schuldneradresse>
<rechnungsadresse>
<R_ROLLE>RECHNUNG</R_ROLLE>
...
</rechnungsadresse>
<zahladresse>
<Z_ROLLE>MAHI</Z_ROLLE>
...
</zahladresse>
…
</data>
Nutzdaten für CIB pdf toolbox/merge in Auftrag einbetten
CIB pdf toolbox/merge unterstützt die gleichen Möglichkeiten wie CIB merge, verwendet jedoch andere Namen bei den Einstellungen. Ab der Version 1.3.64 der CIB pdf toolbox wird auch der MultiOutput-Schalter für Multialias unterstützt:
Beispielauftragsdatei:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<root>
<Comod>
<jobs>
<job name="job1">
<steps>
<step name="merge" command="pdfmerge">
<properties>
<!--Dateiname inkl. Pfad angeben, falls dieser von jobconfig.xml getroffenen
Einstellung abweichen soll -->
<property name="InputFilename">
../templates/DekaKauf.pdf</property>
<property name="DataFileType">XML</property>
<property name= "DataXmlPath">
/root/FormData</property>
<property name="MultiOutput">0</property>
</properties>
</step>
</steps>
</job>
</jobs>
</Comod>
<FormData>
<DepotNummer>1234567890</DepotNummer>
<Vorname>Max</Vorname>
<Nachname>Mustermann</Nachname>
<KontoInhaber>Andreas Mustermann</KontoInhaber>
<KontoNummer>081508150815</KontoNummer>
<KontoBLZ>25050180</KontoBLZ>
...
</FormData>
</root>
Siehe auch:
Auftragsentwurf: RTF Formular mit Daten füllen und PDF erzeugen
Auftragsentwurf: PDF Formular mit Daten füllen
Auftragsentwurf: Nutzdaten für CIB merge in Auftrag einbetten
Auftragsentwurf: Verwendung von mehreren Aliasnamen mit XML
Framework: Nutzdaten in Auftrag einbetten
CIB job XML Schema nutzen
Um mit eigenem Programmcode erzeugte Auftragsdateien gegen das CIB job XML-Schema (Siehe Anhang) zu validieren, geben Sie das Schema beim <Comod>-Element des Auftrags an:
Beispielauftragsdatei:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<root>
<cibjob:Comod
xmlns:cibjob="http://www.cib.de/schemas/job/1.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="www.cib.de/schemas/job/1.2 cibjob.xsd">
<defaults/>
<jobs>
...
</cibjob:Comod>
<bbs:BBS-Daten xmlns:bbs="http://www.kunde.de/schemas/bbs"
xmlns="http://www.kunde.de/schemas/bbs"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.kunde.de/schemas/bbs Job-BBS.xsd">
...
</bbs:BBS-Daten>
</root>
Sie können gleichzeitig Ihre Nutzdaten mit Ihrem eigenen Schema validieren. Das Wurzelelement <root> Ihres Auftrags kann nicht validiert werden.
Tracedateien zur aufrufenden Anwendung übertragen
Mit dem Element <trace>Dateiname<trace> kann die Logdatei eines Kommandos von CIB job zur aufrufenden Anwendung übertragen werden. So kann zum Beispiel die mit der Property „-L“ des Kommandos „merge“ (CIB merge) erzeugte Fehlerdatei „merge.log“ in die Auftragsergebnisdatei eingesetzt werden.
Beispielauftragsdatei (Ausschnitt):
<steps>
<step name="merge1" command="merge">
<properties>
…
<property name="-L!">merge.log</property>
…
</properties>
<!-- Angabe, welcher Trace in der Auftragsergebnisdatei zurückgeliefert
werden soll für diesen Step. -->
<trace>merge.log</trace>
</step>
Beispielauftragsergebnisdatei:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Comod>
<!--CIB job Ausgabe 26.10.2004 15:17:05 -->
<producer>CIB job 1.0.4d</producer>
<version>1.0</version>
<job-results>
<job-result name="BBS">
<!--Mindestens ein Step schlug fehl-->
<job-result-code>404</job-result-code>
<job-result-text>Fehler im Bearbeitungsschritt.</job-result-text>
<failed name="merge"/>
<!--Liste aller Ergebnisse-->
<step-results>
<!-- merge -->
<step-result name="merge">
<step-result-code>4</step-result-code>
<step-result-text>CIB merge - Fehler: 4</step-result-text>
<step-trace>FEHLER: Fehlbedienung: Fehlerhafte Dateiangabe
Fehler während der Datei ..\templates\XML2000.rtf_FEHLER
Datei nicht gefunden
==> Datei nicht geoeffnet
Dateiname: ..\templates\..\templates\XML2000.rtf_FEHLER
Fehler: Fehlbedienung: Fehlerausgang mit Programm-Zeilennummer
Fehler während der Datei ..\templates\XML2000.rtf_FEHLER
Fehler: Fehlbedienung: unerwartete Datenwerte
Fehler während der Datei ..\templates\XML2000.rtf_FEHLER
Eingabedatei hat unbekanntes Format
==> Dokument nicht korrekt bearbeitet
Programmrückgabewert 4
</step-trace>
</step-result>
</step-results>
</job-result>
</job-results>
</Comod>
Es ist zu beachten, dass Tracedateien, etwa von CIB
format/output sehr groß werden können.
Batchverarbeitung von Aufträgen
Grundsätzlich können mehrere Teilaufträge (Jobs) in einer Auftragsdatei angegeben sein und diese werden unabhängig voneinander bearbeitet.
Der Speicherbedarf bei diesem Vorgehen kann jedoch sehr hoch sein, da das Auftragsergebnis die Ergebnisdokumente aller Jobs enthält.
Wir empfehlen, eine große Anzahl von Auftragsdateien mit je einem oder wenigen Jobs zu erzeugen, und diese an den CIB documentserver zu übertragen.
Eine Batchverarbeitung ohne Applicationserver oder
Programmierung ist mit der Nutzungsvariante Kommandozeile auf allen Systemen
möglich (siehe Abschnitt CIB runshell).
Zeitliche Begrenzung von Aufträgen
Durch die Angabe des timeout-Attributs bei den Elementen <job> und <step> kann eine maximale Ausführungsdauer vorgegeben werden. Die Ausführung wird dann von CIB job unterbrochen und eine Fehlerantwort (XML) mit Fehlercode 414 erzeugt.
Obwohl die Zeiten in Millisekunden angegeben werden, ist eine Genauigkeit der Kontrolle der Dauer nur im Bereich +/- 1 Sekunde realisiert. Jedoch ist eine Begrenzung der Ausführungsdauer damit grundsätzlich erreichbar.
Im CIB documentserver kann die Festlegung einer maximalen
Ausführungsdauer auch zentral für alle Aufträge erfolgen, siehe Abschnitt
Konfiguration.
Beispiel für die Erzeugung von ZUGFeRD konformen Daten durch CIB invoice toolbox
Ab CIB job 2.3.0 in Zusamenarbeit mit dem Modul CIB
invoice toolbox 1.4.2 ist es möglich ZUGFeRD konforme Ausgabedaten in XML
Format aus dem Response mittel der Property ZUGFeRDOutputXML zu erhalten:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
<Comod>
<defaults>
<properties command="job">
<property name="OutputMode">Xml</property>
<property name="UseInMemoryProcessing">0</property>
</properties>
</defaults>
<jobs>
<job expected-result-code="0" name="PdfMergeZugFerd">
<steps>
<step command="invtb" expected-result-code="0" name="invoice-step">
<properties>
<property name="ValidationReportJson" mode="out"/>
<property name="ZUGFeRDOutputXML" mode="out"/>
<property name="OutputFormat">FormatZUGFeRD</property>
<property name="ZUGFeRDConformanceLevel">Basic</property>
<property name="ZUGFeRDDocumentID">MusterRechnung 0000000001</property>
<property name="ZUGFeRDDocumentName">Rechnung</property>
<property name="ZUGFeRDDocumentType">380</property>
<property name="ZUGFeRDDocumentDate">27.10.2014</property>
<context type="HeaderIncludedNote">
<property name="ZUGFeRDHeaderIncludedNoteContent">folgende</property>
</context>
<property name="ZUGFeRDSellerName">Rechnungssteller GmbH</property>
<property name="ZUGFeRDBuyerName">Buyer GmbH</property>
<property name="ZUGFeRDSellerDeliveryDate">27.10.2014</property>
<property name="ZUGFeRDSellerAddressCountry">DE</property>
<property name="ZUGFeRDSettlementPaymentReference">OnlineBestellung 0000000001</property>
<property name="ZUGFeRDSettlementCurrencyCode">EUR</property>
<property name="ZUGFeRDSettlementInformation">Überweisung</property>
<property name="ZUGFeRDSettlementCreditorIBAN">DE12500105170648489890</property>
<property name="ZUGFeRDAccountName">Rechnungssteller GmbH</property>
<property name="ZUGFeRDSettlementCreditorBIC">INGDDEFFXXX</property>
<property name="ZUGFeRDSettlementLineTotalAmount">57.00</property>
<property name="ZUGFeRDSettlementChargeTotalAmount">0.00</property>
<property name="ZUGFeRDSettlementAllowanceTotalAmount">0.00</property>
<property name="ZUGFeRDSettlementTaxBasisTotalAmount">175.00</property>
<property name="ZUGFeRDSettlementTaxTotalAmount">33.25</property>
<property name="ZUGFeRDSettlementGrandTotalAmount">208.25</property>
<property name="ZUGFeRDApplicableTradeTaxBasisAmount">175.00</property>
<property name="ZUGFeRDApplicableTradeTaxApplicablePercent">19.00</property>
<property name="ZUGFeRDApplicableTradeTaxCalculatedAmount">33.25</property>
<context type="BillingItem">
<property name="ZUGFeRDBillingItemQuantity">3.0000</property>
<property name="ZUGFeRDBillingItemUnitCode">C62</property>
<property name="ZUGFeRDBillingItemProductName">Beispielprodukt</property>
</context>
</properties>
</step>
</steps>
</job>
</jobs>
</Comod>
</root>