CIB job technischer Leitfaden (DE)

13. Entwurf von Auftragsdateien

Aufträge und Auftrags–Ergebnisse ansprechend darstellen
Ergebnisdokument 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 einbetten


PDF 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/­deu­tsch/­products/­pdfplugin/­cibpdfform­fields_bei­spiel.­htm beschrie­ben.

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 Ergebnisdokumen­te 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 einbetten


Verwenden 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 Sche­ma 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>