CIB job technischer Leitfaden (DE)

Website: CIB eLearning
Kurs: CIB job
Buch: CIB job technischer Leitfaden (DE)
Gedruckt von: Invitado
Datum: Friday, 17. May 2024, 05:00

1. Lieferumfang

Die Komponente CIB job wird als Binärmodul in Form einer separaten DLL ausgeliefert. CIB job ist auch integraler Bestandteil des CIB documentservers.

Komponente

Softwareumfang

CIB job

 

WIN32

CibJob32.dll

CibJob32.lib           

CibJob.h

CoMod.h           

CIB Job-DLL für WIN32, Schnittstelle zur Anwendung

Library für CIB job

Includedatei für CIB job

Allgemeine Includedatei für CoMod Module

Linux/Unix

libcibjobux.so

libcibjobux.sl           

shared library für Unix(e)

shared library für HP Ux

CIB runshell

WIN32

cibrsh.exe

CIB runshell, Kommandozeilenshell WIN32

Unix

cibrshux

CIB runshell, Kommandozeilenshell für Unix(e)

Beispiele

 

jobs/basic

jobs/customer

           

jobs/examples           

jobs/soap           

jobs/stylesheet           

templates           

Beispiele für Kommandos (erkennbar über Namen)

Echte Aufträge der CIB documentserver Kunden (anonymisiert)

Allg. Beispiele fachlicher Art

Beispiele für Webservice-Aufträge

Beispiele für Namespaces und Schemas

Rtf- und Pdf-Vorlage für die Beispiel- Auftragsdateien



Systeme

CIB job ist für folgende weitere Plattformen verfügbar:

  • Linux, Linux64
  • SUN Solaris/Sparc, 32/64
  • SUN Solaris/x86, 32/64
  • IBM Aix
  • HP Ux
  • Linux für OS/390

weitere Plattformen auf Anfrage.


Zusatzmodule

Nach dem bewährten Baukastenprinzip, gibt es zu allen Produkten auch Zusatzkomponenten, die dem Entwickler entweder die technische Integration in seine bevorzugte Architektur erleichtern oder auch den Funktionsumfang der aktuellen Komponente sinnvoll ergänzen können.

Alle Produkte sind in separaten technischen Leitfäden ausführlich dokumentiert. Diese Informationen können Sie gerne beim CIB Support anfordern.


CIB runshell

Die CIB runshell ist ein Kommandozeilentool über das alle CIB Produkte, die in Form von DLLs oder shared libraries ausgeliefert werden, angesteuert werden können.

Mit der CIB runshell ist es insbesondere möglich alle Aufrufparameter („Properties“) zu setzen, die diese einzelnen CIB office Module zur Verfügung stellen.

Mit der CIB runshell kann man Funktionen des CIB job gezielt ansteuern. Sie eignet sich auch hervorragend für einen Einsatz innerhalb von (Batch)jobs.

Der Aufruf der cibrsh.exe sieht wie folgt aus:

cibrsh.exe -? | { [<Propertyname>=<Propertywert>]* -<Kommando> 
<Eingabedateiname> [<Ausgabedateiname>] }*

Die Reihenfolge der Angaben ist nicht variabel, sondern gibt die Abarbeitungsreihenfolge vor. Zwischen den Schaltern und ihren Argumenten ist ein Leerzeichen. Die Schreibweise der Schalter wird beachtet.

Dateinamen mit Leerzeichen müssen in Anführungszeichen eingeschlossen werden, ebenso Propertyname und –wert. Rechts und links vom Gleichheitszeichen darf kein Leerzeichen stehen.

Hier ein Beispielaufruf:

Führe zwei Aufträge aus und setze vorher die Lizenzinformationen

cibrsh.exe LicenseCompany=MyCompany LicenseKey=abcd-efgh-12345678 –d 
..\jobs\Job-Studenten.xml –d ..\jobs\Job-Rechnung.xml

JCoMod Wrapper

Auf Anfrage erhalten Sie mit dem JCoMod Wrapper eine komplette JAVA/JNI Kapselung, die eine einfache Ansteuerung von CIB job aus JAVA ermöglicht. Der JcoMod Wrapper bedient auch die CIB runshell, so dass man die CIB Komponenten auch als eigene Prozesse aus der JAVA VM starten kann.


CoMod.net

Falls Sie CIB job und andere CIB Module in einer .net-Umgebung einsetzen möchten, fragen Sie uns nach den entsprechenden Schnittstellen. Diese stehen für CIB format/output, CIB  job, CIB merge, CIB pdf toolbox, CIB pad, CIB view und CIB job als .net Assemblies zur Verfügung.


CIB documentServer

Der CIB documentServer dient zur Optimierung des Einsatzes der CIB office Module (CoMod) insbesondere beim Einsatz auf Servern (Dokument- und Druckdienste).

Die geforderte hohe Flexibilität zur Integration in das jeweilige Kundenumfeld wird durch die Realisierung als Baukastensystem aus Komponenten erreicht. Mit dem Standardpaket ist eine schnelle Realisierung - auch komplexer Dokumentanforderungen - im jeweiligen Kundensystem möglich. Darüber hinaus kann der Kunde über die gebotenen Customizing-Möglichkeiten individuelle bzw. anwendungsspezifische Teilkomponenten realisieren.

Der CIB documentServer bietet Aufrufmöglichkeiten auf verschiedenen logischen und technischen Ebenen.

Die Ebenen entsprechen dabei unterschiedlichen Kommunikationsschichten, die neben dem Transport der Informationen zusätzliche Funktionalitäten (Service) zur Verfügung stellen. Jede Schicht kann aus der jeweils darüber bzw. darunter liegenden Schicht mit den Komponenten des CIB documentServers angesprochen werden.

Zusätzlich verfügt jede Schicht auch über offen gelegte Schnittstellen, die eine Kundenanwendung direkt ansprechen kann. Der Aufrufer des CIB documentServers entscheidet selbst, welche Aufrufebene und welche Zusatzfunktionalität er nutzen möchte.

2. Einführung

Über entsprechende technische Schnittstellen wird von der Anwendung eine Auftragsbeschreibung im XML-Format übergeben, in der die Eingaben, die Ausgaben, Optionen und sogar Daten formal angegeben sind (XML-basierte Auftragsverarbeitung).

Die zu verarbeitenden Dateien und die Ergebnisdateien müssen nicht als Dateien im Dateisystem übergeben werden, sondern können ebenso im Speicher übergeben werden. Des Weiteren werden bei der Abarbeitung mehrerer Schritte keine Zwischendateien im Dateisystem erzeugt.

Kundenanwendung

Für die Einbindung von CIB job ist folgendes zu tun.

Der Nutzer erstellt eine sogenannte Auftragsdatei, in der alle Schritte, die von den jeweiligen Modulen (merge, format etc.) ausgeführt werden sollen, hinterlegt sind. Über sogenannte Properties („Schritt“-Properties) können in der Auftragsdatei die Einstellungen für den entsprechenden Schritt gesetzt werden.

Die Module werden in der Auftragsdatei durch sogenannte Kommandos angesprochen. Durch die Angabe des jeweiligen Kommandos weiß CIB job, welche Komponente mit welchen Einstellungen aufgerufen werden muss.

Folgende CIB office Module können über Kommandos von CIB job angesprochen werden:

CIB merge: Text-Daten-Integration, bedingte Textbausteine, Schleifen über Detaildaten, Berichtserstellung, dynamische Geschäftsgrafiken, usw.

CIB format/output: Formatkonvertierung, PDF Erzeugung, Direktdruck, Formulargenerierung, dynamische Barcodes, usw.

CIB pdf toolbox: Text-Daten-Integration bei PDF-Formularen, PDF Dokumente zusammenfügen, nachträglich Texte ins PDF einfügen, usw.

CIB mail: E-mail Versand über SMTP oder MAPI

CIB job unterstützt bei der Verarbeitung durch Bereitstellen weiterer Funktionalitäten:

CIB job: Laden von Dateien aus dem Dateisystem, Weitergabe der Daten an die anderen Schritte, Speichern von Dateien im Dateisystem, Umbenennen von Dateien, Löschen von Dateien

CIB job stellt ebenfalls eine Schnittstelle für benutzerdefinierte Kommandos (etwa Archiv- oder Datenbankzugriffe) zur Verfügung.


3. Auftrag: Begriffe

Ein Auftrag wird mittels einer Auftragsdatei formuliert, die im XML-Format vorliegt und der nachfolgenden Auftragsspezifikation gehorcht.

Das Auftragsergebnis kann als Auftragsergebnisdatei im XML-Format vorliegen und gehorcht dann ebenfalls der nachfolgenden Auftragsergebnisspezifikation.

Das Auftragsergebnis kann auch als ein (binärer) Datenstrom angefordert werden, der dann ein einzelnes Ergebnisdokument (direkte Auftragsergebnisdatei) darstellt.

Auftragsdatei und Auftragsergebnisdatei werden in der Regel nicht im Dateisystem vorliegen, sondern als Zeichenketten oder Datenströme im Hauptspeicher übergeben.


Beispiele:

Mische diesen Rohtext mit jenen Daten und gib mir das Ergebnis zurück, auch als PDF und  TIFF – ich warte.

Schicke dieses Dokument auf jenen Serverdrucker – das Ergebnis interessiert mich nicht.

Ich habe hier dieses RTF und ein paar Daten, und möchte hierfür Restdatenerfassung mittels einer HTML-Maske machen. Erzeuge die Erfassungsregeln und die HTML-Datei bitte aus dem RTF.

Mische dieses dynamische Formular mit jenen Daten und direkter Rückgabe eines PDF-Dokuments an den Client zur Anzeige im Adobe Reader oder Ausdruck am Client

Aufbereitung eines Dokuments als PDF mit Ablage auf dem Server. Ich möchte eine URL auf dieses Ergebnis zurückerhalten.

Stellt man diese Aufträge als Eingabe, Ausgaben und Optionen dar, so können sie so aussehen:

Eingabe: Dieses.rtf, Daten.xml,
Ausgabe: Dieses.pdf, Dieses.tif
Optionen: Synchron
Eingabe: Dieses.rtf
Ausgabe: Drucker
Optionen: \\Server\HpLaserjet5, Duplex
Eingabe: Dieses.rtf, Daten.xml
Ausgabe: Restdatenerfassung , Daten.xml
Optionen: Erzeuge HTML, Erzeuge Regeln

Verfolgt man dieses Konzept der Darstellung von Aufträgen weiter, so kommt man zu der in einem der nächsten Abschnitte beschriebenen Auftragsspezifikation.


4. Auftrag: Spezifikation





4.1. XML Format

Die Auftragsdatei und die Auftragsergebnisdatei werden im XML Format, Version 1.0 erstellt.

Das Encoding ist frei wählbar, in der Regel werden dies „UTF-8“ oder „ISO-8859-1“ (Latin-1) sein. Das Encoding „ISO-8859-15“ (Latin-9) wird momentan nicht unterstützt. (Stand Version 1.4.20b).

 <? xml version="1.0" encoding="UTF-8"?>
 

Binärdaten in der Auftragsdatei oder der Auftragsergebnisdatei werden in der Regel Base64-encoded.

Sowohl Auftragsdatei als auch Auftragsergebnisdatei können optional mit ZLIB komprimiert werden.

Binärdaten in einer direkten Auftragsergebnisdatei (kein XML) werden nicht encoded und nicht komprimiert.


4.2. XML Struktur

Der Name des XML-Wurzelelements der Auftragsdatei ist frei wählbar. Darunter können sich beliebige weitere Elemente befinden, also insbesondere auch die zum Auftrag gehörenden Nutzdaten.

Eine Auftragsdatei enthält genau ein Element <Comod>, innerhalb dessen der Auftrag entsprechend dem Abschnitt Auftragsspezifikation angegeben ist.

Eine Auftragsergebnisdatei im XML Format enthält genau ein Element <Comod>, innerhalb dessen das Auftragsergebnis entsprechend dem Abschnitt Auftragsergebnispezifikation angegeben ist.


4.3. XML Schema

https://www.cib.de/schemas/job/1.5/cibjob.xsd enthält das formale Schema, also die maschinenüberprüfbare Beschreibung von Auftragsdatei und Auftragsergebnisdatei. Bitte fragen Sie den CIB support nach der aktuellen Versionsnummer.

Der Aufbau der Datei befindet sich ebenfalls im Anhang.

Da das Schema nur den Aufbau des Knotens <Comod> und seiner Unterknoten angibt, muss es in der Auftragsdatei direkt bei diesem Knoten angegeben werden. Für den Rest der Auftragsdatei (Daten) gilt möglicherweise ein kundeneigenes Schema.

Siehe Beispiel Job-Namespaces.xml im Verzeichnis basic


4.4. XML Elemente

Die innerhalb des Auftrags eingesetzten XML Elemente werden in den mitgelieferten Beispielaufträgen mit dem XML Schema formell beschrieben und dort ausführlich dokumentiert.


5. Auftragsspezifikation




5.1. Inhalt eines Auftrags

Im Wesentlichen enthält ein Auftrag Jobs, von denen jeder aus mehreren Schritten (Steps) besteht.

Jobs
Schritte
Kommando
Einstellungen
Einstellungen mit Schrittnamen als Dateinamen
Standardeinstellungen
Einstellungen für den Auftragsmanager
Konfigurationseinstellungen
Zusatzeinstellungen für asynchron ausgeführte Aufträge

Jobs

Die Jobs sind voneinander unabhängig und werden nacheinander in der in der Auftragsdatei angegebenen Reihenfolge abgearbeitet.

Welche Zwischen- oder Endergebnisse die Ausgaben eines Jobs darstellen, kann über die Verknüpfung der Schritte untereinander oder über eine direkte Angabe festgelegt werden.

Alle Ausgaben aller Jobs stellen die Ausgabe des Auftrags dar.

Sie werden im synchronen Fall miteinander als eingebettete Ergebnisdokumente in einer einzigen Auftragsergebnis­datei zurückgeliefert.

Schlägt ein Schritt eines Jobs fehl, so gilt dieser Job als fehlgeschlagen und es werden in der Auftragsergebnisdatei keine Ergebnisdokumente für diesen Job geliefert.

Zu jedem Job können Einstellungen (CIB job Properties) bezüglich der Job-Bearbeitung angegeben werden.


Schritte

Die einzelnen Schritte eines Jobs werden in der Reihenfolge abgearbeitet, in der sie in der Auftragsdatei angegeben sind.

Bei jedem Schritt werden das aufgerufene Modul und dessen spezifische Eingaben und Einstellungen (Properties) angegeben. Es ist nicht möglich einer Property mehrere verschiedene Werte zuzuordnen. Sind mehrere Werte für dieselbe Property angegeben, so gilt der zuletzt angegebene Wert.

Ein Schritt hat keine, eine oder mehrere Eingaben (Inputs), die entweder in der Auftragsdatei selbst enthalten sind, oder die durch vorhergehende Schritte erzeugt wurden.

Jeder Schritt hat keine, eine oder mehrere Ausgaben, die nachfolgenden Schritten als Eingabe dienen können oder die die Ergebnisdokumente des zugehörigen Jobs darstellen. Wenn ein Schritt keine Ausgabe hat, dann bedeutet das, dass nur ein Zahlenwert (Fehlercode, ggf. mit Fehlertext), aber kein Ergebnisdokument geliefert wird.

Die Schritte sind hierzu standardmäßig in der Reihenfolge miteinander verknüpft, in der sie in der Auftragsdatei angegeben sind. Das heißt die Ausgaben eines Schritts sind immer die Eingaben des nächsten Schritts. Die Ausgaben des letzten Schritts sind die Ausgaben des Jobs und somit dessen Ergebnisdateien.

Diese Standardverknüpfung kann durch explizite Benennung von Ein- und Ausgaben bei jedem Schritt angepasst werden, etwa dass erst der dritte Schritt die Ausgaben der beiden vorhergehenden Schritte als Eingabe erhält. Auf ähnliche Weise können auch die Ausgaben des Jobs frei ausgewählt werden.

Es ist darauf zu achten, dass die Reihenfolge der Schritte in der Auftragsdatei so angegeben ist, dass die benötigten Eingaben bei allen Schritten bereits erzeugt worden sind.


Kommando

Bei jedem Schritt wird durch die Angabe eines Kommandonamens das aufzurufende Modul ausgewählt, etwa „merge“ für CIB merge und „pdfmerge“ für die CIB pdf toolbox.

Die Liste der unterstützten Kommandos finden Sie im Abschnitt Kommandos.

Über die Konfigurationsdatei von CIB job können außerdem benutzerdefinierte Kommandos (etwa Archiv- oder Datenbankzugriffe) eingeführt werden. Hierzu erstellen Sie ein natives Modul, das eine vorgegebene Schnittstelle bereitstellt.


Einstellungen

Bei jedem Schritt werden die anzuwendenden Einstellungen explizit als Property-Elemente angegeben.

Die jeweiligen Properties entnehmen Sie bitte den Technischen Leitfäden zu den entsprechenden Modulen.


Einstellungen mit Schrittnamen als Dateinamen

Bei bestimmten Kommandos sind darüber hinaus bei bestimmten Einstellungen Schrittnamen anstatt Dateinamen angebbar. CIB job wird die Schrittnamen so verarbeiten, dass die entsprechenden Dateien im Speicher an das jeweilige Modul übergeben werden. Diese werden als $(schrittname) angegeben.


Standardeinstellungen

Außerdem können im Auftrag Einstellungen für die Kommandos vordefiniert werden, die dann für alle Schritte in diesem Auftrag gelten, die das entsprechende Kommando ausführen.

Diese Standardeinstellungen werden von gleichnamigen Einstellungen, die bei einem Schritt angegeben sind überschrieben.


Einstellungen für den Auftragsmanager

Im Auftrag können in den Standardeinstellungen auch Einstellungen für den Auftragsmanager CIB job selbst enthalten sein (Properties).


Konfigurationseinstellungen

Noch grundlegendere Einstellungen, etwa Lizenz- und Verzeichnisinformationen werden auf analoge Weise in der Konfiguration von CIB job hinterlegt und gelten damit für sämtliche Aufträge.

Dies gilt sowohl für die Einstellungen von CIB job selbst als auch für Einstellungen der Einzelmodule.

Gleichnamige Angaben für Einstellungen im Auftrag überschreiben die in der Konfiguration getroffenen Einstellungen.

Siehe Abschnitt Konfiguration.


Zusatzeinstellungen für asynchron ausgeführte Aufträge

Für die asynchrone Ausführung ist der CIB documentserver erforderlich. Das CIB documentserver client framework erlaubt die asynchrone Ausführung von Aufträgen.

Das auf dem Server hergestellte Ergebnis kann mit einem "Poll-Request" abgeholt werden. Dieser enthält als zusätzliche Angabe die async-id, unter der der CIB documentserver den eigentlichen Auftrag entgegen genommen hat.

Beispiel für einen Poll-Request:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
<Comod>
<!-- Generated poll request for asynchronously started request -->
   <producer>CIB documentserver Java Framework 1.5.23</producer>
   <version>1.3</version>
   <async-id>129916347222219596</async-id>
   <defaults/>
   <jobs/>
</Comod>
</root>

Ab Version 1.5.x mit Schemaversion 1.3.


5.2. Beispiel (einfach)

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<!--    CIB job XML Schema 1.2 für CIB job.
-->
<root>
   <!-- Request -->
   <!-- Definition des Jobs bzw. der Steps die vom Aufrufer an den documentserver geschickt werden -->
   <Comod>
          <!-- Defaultoptionen die für alle Jobs gültig sind, sofern nicht im Job selbst überschrieben -->
          <defaults>
                 <properties command="job">
                       <property name="OutputMode">Direct</property>
                       <!-- <property name="OutputMode">Xml</property> -->
                 </properties>
          </defaults>
          <!-- Liste aller Jobs in diesem Auftrag -->
          <jobs>
                 <!-- Einzeljob -->
                 <job name="Bank" timeout=”20000”>
                       <!-- Liste aller durch diesen Job auszuführenden Steps -->
                       <steps>
                              <!-- Einzelstep -->
                              <step name="Merge-Step" command="merge">
                                 <!-- Liste der Properties für diesen Step -->
                                 <properties>
                                        <!-- Daten werden im XML mitgegeben -->
                                        <!-- siehe Abschnitt Rechnung weiter unten -->
                                        <property name="-a">..\templates\</property>
                                        <property name="-i">..\templates\Examples­Rechnung.rtf</property>
                                        <property name="-l!">merge.log</property>
                                        <property name="-h">XML:$(inline)</property>
                                        <property name="-d">/root/Rechnung</property>
                                        <property name="-s"/>
                                 </properties>
                          </step>
                              <step name="Format-Step" command="format">
                                 <inputs>
                                        <input name="Merge-Step"/>
                                 </inputs>
                                 <properties>
                                        <property name="OutputFormat">FormatPdf</property>
                                 </properties>
                          </step>
                       </steps>
                 </job>
          </jobs>
   </Comod>
<Rechnung>
   <serverlizenz>0</serverlizenz>
   <Firma>CIB software</Firma>
   <Abteilung>XML Job Test</Abteilung>
   <Anrede>Herr</Anrede>
   <Vorname>Egon</Vorname>
   <Nachname>Müller</Nachname>
   <Strasse>Stuntzstrasse 16</Strasse>
  <Postleitzahl>81677</Postleitzahl>
   <Ort>München</Ort>
   <ID_Length>4</ID_Length>
   <ID>1234</ID>
   <Zusatz_ID>07777</Zusatz_ID>
   <produkt>CIB pdf brewer Pro&#38;Form</produkt>
   <Lizenznehmer>Egon Müller</Lizenznehmer>
   <Lizenzkey>1111-abcde-22222</Lizenzkey>
<Zahlungsart>Kreditkarte</Zahlungsart>
   <Lizenzzahl>2</Lizenzzahl>
   <Datum>10.10.2006</Datum>
<Datum_Rechnungfaellig>11.11.2006</Datum_Rechnungfaellig>
</Rechnung>
</root>


5.3. Beispiel (komplex)

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<!--    CIB job XML Schema 1.2 für CIB job ab Version 1.4.x.
 
   (c) CIB software GmbH 2004
   Version 1.1, $Revision: 2 $
-->
<root>
   <!-- Request -->
   <!-- Definition des Jobs bzw. der Steps die vom Aufrufer an den documentserver geschickt werden -->
   <Comod>
          <!-- Defaultoptionen die für alle Jobs gültig sind, sofern nicht im Job selbst überschrieben -->
          <defaults>
                 <properties command="job">
                       <property name="OutputMode">Direct</property>
                 </properties>
          </defaults>
          <!-- Liste aller Jobs in diesem Auftrag -->
          <jobs>
                 <!-- Einzeljob -->
                 <job name="Bank">
                       <!-- Liste aller durch diesen Job auszuführenden Steps -->
                       <steps>
                              <step name="merge1" command="merge">
                                 <!-- Liste der Properties für diesen Step -->
                                 <inputs>
                                        <input name="job"/>
                                 </inputs>
                                 <properties>
                                        <!-- Daten werden im XML mitgegeben -->
                                        <!--<property name="-v"/>-->
                                        <property name="-a">..\templates\</property>
                                        <property name="-i">..\templates\Basic­VermoegenswirksameLeistungen .rtf</property>
                                        <property name="-l!">..\work\merge.log</property>
                                        <property name="-h">XML:$(inline)</property>
                                        <property name="-d">/root/BankAntragVLBerlin</property>
                                        <property name="-s"/>
                                 </properties>
                          </step>
                              <step name="format1" command="format">
                                 <inputs>
                                        <input name="merge1"/>
                                 </inputs>
                                 <properties>
                                        <property name="OutputFormat">FormatPdf</property>
                                 </properties>
                          </step>
                              <step name="merge2" command="merge">
                                 <inputs>
                                        <input name="job"/>
                                 </inputs>
                                 <!-- Liste der Properties für diesen Step -->
                                 <properties>
                                        <!-- Daten werden im XML mitgegeben -->
                                        <!-- siehe Abschnitt DATA weiter unten -->
                                        <property name="-a">..\templates\</property>
                                        <property name="-i">..\templates\Basic­Ratensparen.rtf</property>
                                        <property name="-l!">merge.log</property>
                                        <property name="-h">XML:$(inline)</property>
                                        <property name="-d">/root/Formdata</property>
                                        <property name="--chart-output-format">emf</property>
                                        <property name="--chart-target">embed</property>
                                        <property name="--chart-source">file</property>
                                        <property name="-s"/>
                                 </properties>
                          </step>
                              <step name="format2" command="format">
                                 <inputs>
                                        <input name="mergeBBS"/>
                                 </inputs>
                                 <properties>
                                        <property name="OutputFormat">FormatPdf</property>
                                 </properties>
                          </step>
                              <step name="join" command="pdfjoin">
                                 <inputs>
                                        <input name="format1"/>
                                        <input name="format2"/>
                                 </inputs>
                                 <properties>
                                        <property name="OutputOwnerPassword">My­Password </property>
                                 </properties>
                          </step>
                       </steps>
                 </job>
          </jobs>
   </Comod>
<BankAntragVLBerlin>    <BankArbgeb>Hans Bank</BankArbgeb>    <BankKundeAnrede>Herr</BankKundeAnrede>    <BankKundeTitel>Dr.</BankKundeTitel>    <BankKundeName>Franz Heizer</BankKundeName>    <BankKundeStrasse>Musterweg 3c</BankKundeStrasse>    <BankKundeAdresszusatz>bei Herrn Meilhammer</BankKundeAdresszusatz>    <BankKundePLZOrt>54321 Musterdorf</BankKundePLZOrt>    <BankPersonalNummer>AGH4876836</BankPersonalNummer>    <BankBetrag>3500,00</BankBetrag>    <BankDatumStart>30.01.2003</BankDatumStart>    <BankZahlungsIntervall>jaehrlich</BankZahlungsIntervall>
</BankAntragVLBerlin>
<Formdata>    <Bank_Institut>Testinstitut 2006</Bank_Institut>    <Bank_Filiale>Test-Geschäftsstelle</Bank_Filiale>    <Bank_Produktbezeichnung>Spar-Bonus Rentability (89,1)</Bank_Produktbezeichnung>    <Bank_Vertragsbeginn>19.03.2007</Bank_Vertragsbeginn>    <Bank_Anlagebetrag>0,00</Bank_Anlagebetrag>    <Bank_Rate>53,29</Bank_Rate>    <Bank_RhythmusRate>monatlich</Bank_RhythmusRate>    <Bank_AnzahlRaten>124</Bank_AnzahlRaten>    <Bank_Dynamisierung>0</Bank_Dynamisierung>    <Bank_Dynamisierungsart>keine</Bank_Dynamisierungsart>  
<Bank_Faelligkeit>19.07.2017</Bank_Faelligkeit>    <Bank_SummeRaten>0,00</Bank_SummeRaten>    <Bank_SummeZinsen>6607,96</Bank_SummeZinsen>    <Bank_SummePraemien>1048,39</Bank_SummePraemien>    <Bank_SummeZAST>0,00</Bank_SummeZAST>    <Bank_SummeSOLZ>0,00</Bank_SummeSOLZ>    <Bank_Endkapital>8129,56</Bank_Endkapital>    <Bank_Effektivzins>3,93</Bank_Effektivzins>
    <!-- Tabelle - Zeile 1 -->    <h_Tabelle_5Spalten>        <Spalte1>2004</Spalte1>        <Spalte2>532,90</Spalte2>        <Spalte3>5,98</Spalte3>        <Spalte4>0,00</Spalte4>        <Spalte5>538,88</Spalte5>    </h_Tabelle_5Spalten>

</Formdata>
</root>

6. Auftragsergebnisspezifikation




6.1. Inhalt eines Auftragsergebnisses allgemein

Das Auftragsergebnis ist entweder ein einzelnes Ergebnisdokument (direkte Auftragsergebnisdatei), dessen Typ/Format über eine Mimetype-Information angegeben ist.

Oder das Auftragsergebnis enthält zu allen im Auftrag spezifizierten Jobs und Schritten je eine Ergebnisinformation und liegt hierzu im XML-Format vor.

Bei der Verwendung von asynchronen Aufträgen (erfordert CIB documentserver), kann ein Auftragsergebnis auch aus einem XML bestehen, das lediglich eine Auftrags-ID und einen Auftragsbearbeitungsstatus enthält.


MIME-Type
Der zurückgelieferte MIME-Type des Auftragsergebnisses ist bei direkten Auftragsergebnisdateien der MIME-Type des Ergebnisdokuments und sonst „text/xml“.

Entsprechend der Möglichkeiten von CIB format/output sowie CIB merge/CIB pdf toolbox können folgende MIME-Types bei direkten Auftragsergebnisdateien auftreten:

application/pdf
application/postscript
application/vnd.hp-PCL
application/rtf
application/vnd.adobe.xfdf
application/zip
image/gif
image/jpeg
image/tiff
text/comma-separated-values
text/css
text/html
text/plain (mit encoding)

6.2. Inhalt eines Auftragsergebnisses im Fehlerfall

Im Fehlerfall wird auch bei Anforderung einer direkten Auftragsergebnisdatei eine Auftragsergebnisdatei im XML-Format geliefert.

Jobergebnis
Schrittergebnis
Ergebnisdokument
Fehlerinformation

Jobergebnis

Liefert ein Schritt einen Fehler, so gilt der gesamte Job als nicht erfolgreich ausgeführt. Das Jobergebnis enthält ein spezielles Element, in dem der Erfolg oder Misserfolg des Jobs festgehalten ist.

Das Jobergebnis enthält darüber hinaus zu jedem Schritt ein Schrittergebnis.


Schrittergebnis

Zu jedem Schritt wird ausgegeben, ob er erfolgreich war, oder ob ein Fehler aufgetreten ist oder ob er nicht ausgeführt wurde. Das Schrittergebnis enthält einen Fehlertext zum aufgetretenen Fehler.

Zusätzlich kann das Schrittergebnis optional den Inhalt einer Tracedatei oder Logdatei enthalten, wenn das zum Schrittkommando gehörende Modul dies unterstützt.


Ergebnisdokument

Tritt bei einem Schritt eines Jobs ein Fehler auf, so wird kein Ergebnisdokument erzeugt, auch wenn die Schritte davor erfolgreich waren. Besteht ein Job z.B. aus einem Merge-Schritt und einem Format-Schritt und tritt beim Format ein Fehler auf, so wird auch für den davor erfolgreichen Merge-Schritt kein Ergebnisdokument zurückgeliefert.


Fehlerinformation

Die beim Schrittergebnis ausgegebenen Fehlerinformationen, also Fehlercode, Fehlertext und Traceinformation sind modulspezifisch.

Es wird hierzu auf die Dokumentationen der CIB docgen Module verwiesen: http://www.cib.de/deutsch/download/dokumentation.htm


6.3. Beispiel (Fehlerfall mit Trace)

???Hier muss ein neues Beispiel für cibjob.xsd Version 1.1 erstellt werden???
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<cibjob:Comod xmlns:cibjob="http://www.cib.de/schemas/job/1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="
http://www.cib.de/schemas/job/1.0 http://www.cib.de/schemas/job/1.2/cibjob.xsd
">
  <!--CIB job Ausgabe 31.07.2006 09:20:16 -->
  <!-- (c) CIB software GmbH 2004-2006 -->
  <version>1.0</version>
  <producer>CIB job 1.1.8</producer>
  <job-results>
    <job-result name="Anschreiben"> 
      <!--Mindestens ein Step schlug fehl-->
      <job-result-code>404</job-result-code>
      <job-result-text>Fehler im Bearbeitungsschritt.</job-result-text>
      <failed name="Merge-Step"/>
      <failed name="FormatStep"/>
      <!--Liste aller Ergebnisse-->
      <step-results>
        <!-- Merge-Step -->
        <step-result name="Merge-Step">
          <step-result-code>4</step-result-code>
          <step-result-text>CIB merge - Fehler: 4</step-result-text>
          <step-trace>CIB merge 3.9.141
(c) CIB software GmbH 1991-2006
 
Diese Software ist urheberrechtlich sowie nach internationalen Vertraegen
geschuetzt.Unberechtigter Vervielfaeltigungen und Verbreitungen unabhaengig
auf welche Art oder Weise oder mit welchen Mitteln, elektronisch oder
mechanisch und unabhaengig zu welchem Zweck,
ob ganz oder auszugsweise, kann schwere zivil- und strafrechtliche Konsequenzen
nach sich ziehen und wird unter Ausschoepfung der Rechtsmittel geahndet.
 
FEHLER: Fehlbedienung: Fehlerhafte Dateiangabe
    Fehler während der Datei Warder.rtf
    Datei nicht gefunden
==> Datei nicht geoeffnet
    Dateiname: ..\templates\Warder.rtf
==> kann Dokument nicht öffnen
==> Dokument nicht korrekt bearbeitet
==> Mischvorgang nicht fehlerfrei beendet
==> Auswertung der Parameter unterbrochen
Programmrückgabewert 4
</step-trace>
        </step-result>
        <!-- FormatStep -->
        <step-result name="FormatStep"> 
          <step-result-code>411</step-result-code>
          <step-result-text>Step konnte nicht ausgeführt werden, weil beim Eingabe-Step "Merge-Step" ein Fehler auftrat.</step-result-text>
        </step-result>
      </step-results>
    </job-result>
  </job-results> </cibjob:Comod>

6.4. Inhalt eines Auftragsergebnisses im Erfolgsfall

Im Erfolgsfall muss zwischen der direkten Auftragsergebnisdatei und einer Auftragsergebnisdatei im XML-Format unterschieden werden.
Die direkte Auftragsergebnisdatei besteht nur aus dem einzigen Ergebnisdokument und enthält keine weiteren Informationen.
Die weiteren Unterabschnitte beziehen sich daher nur auf eine Auftragsergebnisdatei im XML-Format.
Jobergebnis
Schrittergebnis
Ergebnisdokument

Jobergebnis

Nur wenn alle Schritte erfolgreich ausgeführt werden konnten, gilt der gesamte Job als erfolgreich ausgeführt. Das Jobergebnis enthält ein spezielles Element, in dem der Erfolg oder Misserfolg des Jobs festgehalten ist.

Das Jobergebnis enthält darüber hinaus zu jedem Schritt ein Schrittergebnis.


Schrittergebnis

Zu jedem Schritt wird ausgegeben, dass er erfolgreich war durch den Fehlercode 0.

Zusätzlich kann das Schrittergebnis optional den Inhalt einer Tracedatei oder Logdatei enthalten, wenn das zum Schrittkommando gehörende Modul dies unterstützt.


Ergebnisdokument

Wenn ein Schritt ein Ergebnisdokument erzeugt, das nicht nur als Eingabe für den nächsten Schritt dient, sondern zur Jobausgabe gehört, so wird das Ergebnisdokument in die Auftragsergebnisdatei eingebettet.

Genauer wird das Dokument Base64 encoded und im Schrittergebnis abgelegt.


6.5. Beispiel (Erfolgsfall)

Eingebettetes Ergebnisdokument Base64 encoded.

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<cibjob:Comod xmlns:cibjob="http://www.cib.de/schemas/job/1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.cib.de/schemas/job/1.2 http://­www.cib.de/­schemas/­job/1.2/cibjob.xsd">
  <!--CIB job Ausgabe 01.09.2006 10:18:37 -->
  <version>1.0</version>
  <producer>CIB job 1.2.9b</producer>
  <job-results>
    <job-result name="Analyse Beispiel">
      <job-result-code>0</job-result-code>
      <job-result-text>Erfolgreich</job-result-text>
      <!--Liste aller Ergebnisse-->
      <step-results>
        <!-- Analyse -->
        <step-result name="Analyse">          <step-result-code>0</step-result-code>
          <step-result-text>Erfolgreich</step-result-text>
          <step-data encoding="base64" mimetype="text/plain">QmVpc3BpZWw7UkVGO05hbWXk9vzfx
NbcCkJlaXNwaWVsO01FUkdFUkVDOz9hbGlhcwpCZWlzcGllb
DtORVhUOy1hbGlhcwo=
</step-data>
        </step-result>
      </step-results>
    </job-result>
  </job-results>
 
</cibjob:Comod>


6.6. Inhalt eines Auftragsergebnisses zu einem asynchron ausgeführten Auftrag

Allgemein
Beispiel (Asynchroner Auftrag angenommen)
Beispiel (Asynchroner Auftrag nicht abgeschlossen)
Beispiel (Asynchroner Auftrag abgeschlossen)

Allgemein

Hat der CIB documentserver den Auftrag erfolgreich in die Warteschlange eingereiht, so antwortet er sofort mit einem Auftragsergebnis, das eine Auftrags-ID enthält. Mit dieser ID kann nachfolgend ein Auftrag (Poll-Request) an den CIB documentserver gesendet werden, der später das eigentliche Auftragsergebnis zurückliefert, falls es bereits fertig ist.

Falls es noch nicht fertig ist, enthält das Auftragsergebnis eines Poll-Requests einen Status, der die nicht abgeschlossene Bearbeitung kennzeichnet. Es müssen weitere solche Aufträge vom Client gesendet werden, bis das eigentliche Auftragsergebnis fertig ist.

Das CIB documentserver Java Framework kann aus einer Auftragsannahme den Poll-Request erzeugen. Siehe Beispiel im Abschnitt Zusatzeinstellungen für asynchron ausgeführte Aufträge.


Beispiel (Asynchroner Auftrag angenommen)

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<cibjob:Comod xmlns:cibjob="http://www.cib.de/schemas/job/1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cib.de/schemas/job/1.3 http://www.cib.de/schemas/job/1.3/cibjob.xsd">
<!-- Generated info response. Your request has been queued.-->
<job-results/>
<async-id>129916347222219596</async-id>
<async-state>started</async-state>
</cibjob:Comod>


Beispiel (Asynchroner Auftrag nicht abgeschlossen)

Dieses Auftragsergebnis entspricht im Wesentlichen dem obigen zur Auftragsannahme.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<cibjob:Comod xmlns:cibjob="http://www.cib.de/schemas/job/1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cib.de/schemas/job/1.3 http://www.cib.de/schemas/job/1.3/cibjob.xsd">
<!-- Generated info response. Your request is still pending.-->
<job-results/>
<async-id>129916700757826850</async-id>
<async-state>pending</async-state>
</cibjob:Comod>


Beispiel (Asynchroner Auftrag abgeschlossen)

Dieses Auftragsergebnis entspricht dem normalen Auftragsergebnis sowohl im Erfolgs- als auch im Fehlerfall. Letzteres heißt, dass der Auftrag asynchron bearbeitet wurde, jedoch nicht erfolgreich.

7. Kommandos

Abgesehen von benutzerdefinierten Kommandos unterstützt CIB job einen bestimmten Funktionsumfang der CIB docgen Module.


7.1. CIB merge

Kommandoname: „merge“.

Füllt Nutzdaten aus der Auftragsdatei oder aus anderen Quellen in RTF-Textbausteine ein. Führt weitere RTF-Feldbefehle aus wie Bedingungen, Schleifen, Einsetzen von weiteren Textbausteinen. Die Ausgabe ist ein neues RTF-Dokument.

Alle Kommandozeilenparameter (Einstellungen) der enthaltenen CIB merge Version werden unterstützt.

Der Parameter –O wird nicht unterstützt, da die Ausgabe von CIB merge stets im Speicher an CIB job zurückgegeben wird. Wird intern verwendet.

Der Parameter –L wird unterstützt – dieser erzeugt die Logdatei jedoch im Dateisystem. Als Zwischenlösung wird diese Datei von CIB job von dort gelesen und in die Auftragsergebnisdatei integriert. Gegebenenfalls ist auf Eindeutigkeit des Dateinamens zu achten. Ab Version 1.4.19 erzeugt der Parameter -L auch die Logdatei im Speicher wenn der Wert für diesen Parameter auf leer gesetzt ist. Die Fehlermeldung von merge wird dann im Fehlerxml angezeigt.

Werden bei einem „merge“-Schritt über das <input>-Element Ergebnisse von anderen Schritten als Eingabe für CIB merge bestimmt, so entspricht dies der Angabe eines oder mehrerer --directory-set Parameter an CIB merge.

Die Property –x (Fortschrittsanzeige während des Mischvorgangs) darf bei CIB job und CIB documentserver nicht eingesetzt werden.

Liste der unterstützten Output-Properties:

  • GeneratedDocumentCount
  • PrintedPageCount

7.2. CIB merge/analyse

Kommandoname: „analyse“.

Liest Informationen über RTF-Feldbefehle aus der Eingabe, die ein RTF-Textbaustein sein muss. Die Ausgabe erfolgt als ein CSV-Dokument mit den Spalten Bausteinname, Feldname und Parameter.

Alle Kommandozeilenparameter (Einstellungen) der enthaltenen CIB merge Version werden unterstützt.

Zu den Parametern –O und –L siehe Kommando CIB merge.

Wird beim „analyse“-Schritt über das <input>-Element ein Ergebnis eines anderen Schrittes als Eingabe für CIB merge bestimmt, so entspricht dies der Angabe eines --directory-set Parameters an CIB merge.

Liste der unterstützten Output-Properties:

  • GeneratedDocumentCount


7.3. CIB merge/filter

Kommandoname: „mergefilter“.

Seit: CIB job 1.5.26

Dieses Kommando aktiviert die CIB merge Filter Funktionen. Diese spielen mit den CIB merge Parametern “--field-results” und “—filter“ zusammen.

Aus dem Eingabe-RTF werden nicht benötigte RTF-Token entfernt, wie z.B. überflüssige Grafikkopien, große Fieldresults oder Zusatzinformationen von MS Word. Die Verwendung des „mergefilter“ reduziert die Größe des RTFs erheblich und macht dadurch die weitere Verarbeitung um einiges schneller.

Die Parameter “--field-results (-r)” oder “--filter (-f)” müssen nicht angegeben werden. Sie werden automatisch mit den Default-Werten „-rp, -ff“ ergänzt. Weitere CIB merge Parameter wie „-L”, “-I”, “-o”, etc. können gemäß Technischem Leitfaden CIB merge verwendet werden.

Liste der unterstützten Output-Properties:

  • GeneratedDocumentCount


7.4. CIB format/analyse

Kommandoname: „formatanalyse“

Seit: CIB job 1.4.x

Dieses Kommando aktiviert die CIB format Analyse Funktionen. Diese spielen mit dem OutputCallback-Mechanismus zusammen. Das Kommando-Ergebnis ist die CSV-Ausgabe des CIB format&analyse callback.


7.5. CIB format/output

Kommandoname: „format“.

Seit: CIB job 1.4.x

 

Verarbeitet ein RTF-Dokument. Es werden Schriftarten und Formatierungen ausgewertet, Zeilen- und Seitenumbruch durchgeführt und das Dokument abschließend ausgegeben. Die Ausgabe erfolgt als ein Dokument in einem anderen technischen Format (zum Beispiel PDF, siehe unten) oder auf einem Drucker.

Alle Properties (Einstellungen) der enthaltenen CIB format/output Version werden unterstützt.

Die Property AbortDlg darf bei CIB job und CIB documentserver nicht eingesetzt werden.

Die Properties „InputFilename“ und „OutputFilename“ werden nicht unterstützt, da die Eingabe und Ausgabe von CIB format/output stets im Speicher erfolgt. Daher werden auch die Properties „InputMemoryAddress“, „MemoryOutputCallback“ und „MemoryOutputUserdata“ nicht unterstützt, da sie vom aufrufenden CIB job intern genutzt werden.

Dieses Kommando unterstützt die Ergebnisdokumentformate PDF, TIFF, Text, HTML, Postscript und PCL (Property „OutputFormat“ auf „FormatPdf“, „FormatTiff“, „FormatText“, „FormatHtml“, „FormatPostscript“, „“ und „FormatPcl“).

Zusätzlich ist bei geeigneter Konfiguration der Maschine über die Ausgabeformate „Printer“, „PostscriptPrinter“ und „PclPrinter“ direkter Ausdruck auf Druckern möglich, die an den Server angeschlossenen sind. Das Schrittergebnis enthält in diesem Fall kein Dokument.

Über die Property „PrintBracketMode“ (Ab Version 1.7.) können mehrere Druck-Dokumente in einem Druckauftrag geklammert werden. Dadurch wird vermieden, dass sich Druckseiten von unterschiedlichen Personen mischen und danach per Hand auseinander sortiert werden müssen. Bei diesen Dokumenten kann es sich um RTFs oder PDFs (auch gemischt) handeln.
Hinweis: Property „PrintBracketMode“ ist nur unter Windows verwendbar. Sie ist nicht unter CIB documentserver, sondern nur in CIB runshell jobs oder CIB job direkt einsetzbar.


Liste der unterstützten Output-Properties:

  • GeneratedDocumentCount
  • PrintedPageCount
  • DocumentUsedFonts
  • CheckMaskViolations
  • FontMaskViolations
  • CheckError
  • MultiRtfError
  • DocumentUsedOriginFonts (Implementiert ab Version 1.4.18)
  • DocumentUsedPaperFormats (Implementiert ab Version 1.4.18)
  • DocumentUsedGraphics (Implementiert ab Version 1.4.18)
  • PrintBracketMode (Implementiert ab Version 1.7.0)

7.6. CIB image toolbox/image-conversion

Kommandoname: „image-conversion“.

Seit: CIB job 2.0.x

Umwandlung von Tif-Bildern nach Png, Jpg, Bmp und Svg Formate

Liste derunterstützten Output-Properties:

  • OriginPageCount
  • OriginMimeType
  • OriginImagePageInfo
  • ResultFileNamePatterns
  • ResultCount
  • ProcessingStatus

7.7. CIB image toolbox/image-processing

Kommandoname: „image-processing“.

Seit: CIB job 2.0.x

Bearbeitung von Bildern/Dateien

Liste der unterstützten Output-Properties:

  • OriginPageCount
  • OriginMimeType
  • OriginImagePageInfo
  • ResultFileNamePatterns
  • ResultCount
  • ProcessingStatus

7.8. CIB invoice toolbox

Kommandoname: „invtb“.

Seit: CIB job 2.3.x

Erstellung von ZugFerd konformen Daten.

Die XML konformen Daten werden durch die Ausgabe Property ZUGFeRDOutputXML im Response geliefert

Ein Beispiel für eine Auftragsdatei können Sie unter Kapitel 9.2.14 finden.

Liste der unterstützten Output-Properties:

  • ZUGFeRDOutputXML


7.9. CIB pdf toolbox/merge

Kommandoname: „pdfmerge“.

Füllt Nutzdaten aus der Auftragsdatei oder aus anderen Quellen in das PDF-Dokument ein. Die Ausgabe ist ein neues PDF-Dokument mit ausgefüllten Eingabefeldern.

Alle Properties (Einstellungen) der enthaltenen CIB pdf toolbox Version werden unterstützt.

Die Properties „InputFilename“ und „OutputFilename“ werden nicht unterstützt, da die Eingabe und Ausgabe der  CIB pdf toolbox stets im Speicher erfolgt. Daher werden auch die Properties „InputMemoryAddress“, „MemoryOutputCallback“ und „MemoryOutputUserdata“ nicht unterstützt, da sie vom aufrufenden CIB job intern genutzt werden.

Liste der unterstützten Output-Properties:

  • GeneratedDocumentCount
  • PageCount

7.10. CIB pdf toolbox/join

Kommandoname: „pdfjoin“.

Verarbeitet ein oder mehrere PDF-Dokumente. Diese können aneinandergefügt oder in Teildokumente zerlegt werden. Es können Grafiken und Texte aufgebracht (overlay) werden, sowie Hintergrundgrafiken und –PDFs hinterlegt werden. Die Ausgabe ist ein neues PDF-Dokument.

Bei den Properties InputFilename, BackgroundFilename und Overlay werden Schrittnamen als Dateinamen unterstützt. Diese werden als $(schrittname) angegeben. Siehe auch Abschnitt Einstellungen mit Schrittnamen als Dateinamen im Kapitel Auftrag, Unterkapitel Auftragsspezifikation.

Über die Property „PrintBracketMode“ (Ab Version 1.7.) können mehrere Druck-Dokumente in einem Druckauftrag geklammert werden. Dadurch wird vermieden, dass sich Druckseiten von unterschiedlichen Personen mischen und danach per Hand auseinander sortiert werden müssen. Bei diesen Dokumenten kann es sich um RTFs oder PDFs (auch gemischt) handeln.
Hinweis: Property „PrintBracketMode“ ist nur unter Windows verwendbar. Sie ist nicht unter CIB documentserver, sondern nur in CIB runshell jobs oder CIB job direkt einsetzbar.

Zu den Properties siehe CIB pdf toolbox/merge.

Liste der unterstützten Output-Properties:

  • GeneratedDocumentCount
  • PageCount
  • PrintBracketMode (Implementiert ab Version 1.7.0)

7.11. CIB job

Allgemein
Kommando „load“
Kommando „save“
Kommando „mem“
Kommando „identity“
Kommando „delete“
Kommando „version“
Kommando „htmltopdf“

Allgemein

Bei den Defaulteinstellungen in der Auftragsdatei und in der Konfigurationsdatei wird das spezielle Kommando „job“ unterstützt. Damit können auch für CIB job selbst Voreinstellungen (Properties) getroffen werden.

Kommandoname: „job“.

Dieser Kommandoname wird ausschließlich im Abschnitt <defaults> der Auftragsdatei und der Konfigurationsdatei verwendet. Die Defaulteinstellungen für das Kommando „job“ bestimmen nicht die Properties der einzelnen Schritte. Möchten Sie diese setzen, so setzten Sie diese über die Defaulteinstellungen des entsprechenden Kommandos in der jobconfig.xml. Properties, die in einem Schritt gesetzt werden, überschreiben die Defaulteinstellungen. Das Kommando enthält ein Attribut „id“ (Implementiert ab Version 1.4). Enthält ein Property-Element eines Steps als Wert $(id), so wird die Zeichenkette durch den id-Wert des Jobs ersetzt. Ist bei einem Job keine id angegeben, so wird die „DefaultID“ (Portnummer des Socketserver) ausgegeben.

CIB job stellt folgende Kommandos bereit:


Kommando „load“

Sonderkommando, mit dem ein im Dateisystem vorliegendes Dokument als Ergebnisdokument des Schrit­tes in den Speicher geladen wird. Es kann dann als Eingabe für den nächsten Schritt dienen.

Bei diesem Schritt muss die CIB job-Property „InputFilename“ auf die zu ladende Datei gesetzt werden. Die CIB job-Property „WorkSpace“ wird berücksichtigt.

Falls die Job-Property „UseInMemoryProcessing“ den Wert „false“ hat, so ist dieser Schritt deaktiviert.


Kommando „save“

Sonderkommando, das das Eingabedokument des Schrittes im Dateisystem speichert. Das Eingabedokument kann dabei im Auftrag enthalten sein oder von einem vorhergehenden Schritt erzeugt worden sein. Auf diese Weise können Zwischen- oder Endergebnisdokumente auf dem Server im Dateisystem abgelegt werden.

Bei diesem Schritt muss die CIB job-Property „OutputFilename“ auf die zu schreibende Datei gesetzt werden. Die CIB job-Property „WorkSpace“ wird berücksichtigt.

Sind sowohl die Property „OutputFilename“ als auch die Property „OutputUrl“ angegeben, so wird der Pfad zu einem Ergebnisdokument zurückgegeben. Dies gilt für beide OutputModi (Direct/XML).  Ist lediglich die Property „OutputFilename“ gesetzt, so ist das Ergebnis der Dateiname.

Falls die Job-Property „UseInMemoryProcessing“ den Wert „false“ hat, so ist dieser Schritt deaktiviert.

 

ab Version 1.4.20:

Optional lässt sich die boolsche Property „CreatePath“ setzen. Damit wird erreicht, dass ein evtl. nicht vorhandenes Verzeichnis aus „OutputFilename“ erzeugt wird. Dabei gilt es Zugriffsrechte zu beachten.

Unter unixoiden Betriebssystemen existiert zusätzlich dazu die optionale Property „DirectoryPermissions“. Der gesetzte Wert bestimmt die Zugriffsberichtigungen der erzeugten Verzeichnisse. Es wird ein Eingabewert in der Form ‚0755’ erwartet. Defaultwert ist ‚0777’.  Wichtig: Die im System gesetzte umask wird immer beachtet.


Kommando „mem“

Sonderkommando, mit dem eine im Auftrag direkt enthaltene Datei oder andere Daten als Eingabe für nachfolgende Schritte zur Verfügung gestellt werden können. Die Datei ist dazu als Textelement im XML enthalten, genauer als Wert der Property „InputData“ bei diesem Schritt. Ab Version 1.4.19 akzeptiert mem auch als Eingabe die Ausgabe eines vorherigen Schrittes über das Input-Element.

In der Regel sind die Daten dabei Base64-encoded abgelegt. Zusätzlich können die Daten komprimiert oder verschlüsselt sein. Dies wird durch die Property „InputEncoding“ definiert.

Die dekodierten Daten können außerdem in ein anderes Charset umgewandelt werden, indem die Properties „InputCharset“ auf das Charset der Daten und „OutputCharset“ auf das gewünschte Charset gesetzt werden.

Abschließend können die Daten wieder encoded werden, indem die Property „OutputEncoding“ gesetzt wird.

Die Eingabe kann auch die Ausgabe eines anderen Schrittes sein.

Auf diese Weise können beliebige Zwischenergebnisse verschlüsselt, komprimiert oder anders umgewandelt werden.

Zusätzlich kann mit der Property „ContentType“ dem Ergebnis eine MIME-Type zugewiesen werden.

Falls die Job-Property „UseInMemoryProcessing“ den Wert „false“ hat, so ist dieser Schritt deaktiviert.


Kommando „identity“

Sonderkommando, mit dem ein Zwischenergebnis „umbenannt“ werden kann.

Die Eingabe dieses Schrittes entspricht der Ausgabe (ohne Kopiervorgang). Da ein identity-Schritt ebenfalls einen Namen besitzt, hat also das durchgereichte Zwischenergebnis nun diesen Namen angenommen.

Es kann so zum Beispiel dem Endergebnis ein fester Name zugewiesen werden, egal aus welchen Schritten er erzeugt wurde.

Es werden keine Properties berücksichtigt.

Falls die Job-Property „UseInMemoryProcessing“ den Wert „false“ hat, so ist dieser Schritt deaktiviert.


Kommando „delete“

Sonderkommando, mit dem ein im Dateisystem vorliegendes Dokument gelöscht werden kann.

Bei diesem Schritt muss die CIB job-Property „InputFilename“ auf die zu löschende Datei gesetzt werden. Die CIB job-Property „WorkSpace“ wird berücksichtigt.

 

ab Version 1.4.20:

Zusätzlich existiert die boolsche Property „RemovePath“.  Bei gesetztem Wert wird versucht den kompletten Pfad, der in „InputFilename“ gesetzt wurde, zu löschen. Dabei gelten die üblichen Konventionen, z.B. lassen sich Verzeichnisse mit Inhalt nicht löschen. Verzeichnisse, die in „WorkSpace“ gesetzt wurden, werden nicht beachtet.

Sollte es nicht möglich sein, ein Verzeichnis zu löschen, so wird eine Warnung ins logfile geschrieben. Das Programm bricht in diesem Fall nicht mit einem Fehler ab.

Es ist nicht möglich nur einen Pfad ohne Dateiangabe zu setzen, der Job wird in einem solchen fall mit einem Fehler beendet.

Falls die Job-Property „UseInMemoryProcessing“ den Wert „false“ hat, so ist dieser Schritt deaktiviert.


Kommando „version“

Sonderkommando, das als Ergebnis die Versionsnummern der verwendeten CIB docgen Module im XML-Format liefert. Das Kommando kann ausschließlich mit dem OutputMode „Xml” verwendet werden.

Implementiert ab Version 1.4.20

Liste der unterstützten Output-Properties:

  • VersionCommandMerge
  • VersionCommandFormat
  • VersionCommandPdfToolbox
  • VersionCommandMail


Kommando „htmltopdf“

Sonderkommando dass eine HTML-Eingabedatei mit Hilfe der Library „wkhtmltox.dll“ nach Pdf konvertiert wird. Die Eingabedatei wird durch die Property InputFilename gesetzt. Die Pdf-Ausgabe erfolgt durch die Property OutputFilename.

Implementiert ab Version 3.0.0

Wichtig: Für Linux wird mindestens gclib 2.10 benötigt.

7.12. CIB mail

Kommandoname: „mail“.

Versendet die Eingabe über CIB mail über TCP Sockets an einen SMTP-fähigen Mailserver.

Es können beliebige dynamische Anhänge an das zu versendende Mail angefügt werden. Auch der Mailtext selbst kann durch vorhergehende Schritte (etwa CIB merge, CIB format/html) erzeugt worden sein.

Bei den Properties MailAttachmentFileName, MailTextFileName und MailTextContentType werden Schrittnamen als Dateinamen unterstützt. Diese werden als $(schrittname) angegeben. Siehe auch Abschnitt Einstellungen mit Schrittnamen als Dateinamen.

Über Properties werden dann noch die Betreffzeile und die Sender- und Empfängeradressfelder belegt.

Implementiert ab Version 1.4.x

Liste der unterstützten Output-Properties:

  • none

7.13. CIB doXichange

Kommandoname: „lo-conversion“

Mit CIB doXichange wird ein Dokument in ein PDF (Version 1.4) konvertiert. Dazu wird LibreOffice powered by CIB verwendet.

Unterstützt werden die Plattformen Windows 32/64bit und Linux 32/64bit

Die Dokument Konvertierung wird für folgende Extensions angeboten:

.123, ,602, ,abw, ,bmp, ,cdr, ,cgm, ,cmx, ,cwk, ,dbf, ,dif, ,doc, ,docm, ,docx, ,dot, ,dotm, ,dotx, ,dxf, ,emf, ,eps, ,fb2, ,fh, ,fh1, ,fh10, ,fh11, ,fh2, ,fh3, ,fh4, ,fh5, ,fh6, ,fh7, ,fh8, ,fh9, ,fodg, ,fodp, ,fods, ,fodt, ,gnm, ,gnumeric, ,htm, ,html, ,hwp, ,key, ,lrf, ,lwp, ,mcw, ,met, ,mml, ,mw, ,mwd, ,numbers, ,nx^d, ,odc, ,odf, ,odg, ,odg, ,odm, ,odp, ,ods, ,odt, ,otg, ,otm, ,otp, ,ots, ,ott, ,p65, ,pages, ,pbm, ,pcd, ,pct, ,pcx, ,pgm, ,pict, ,pm, ,pm6, ,pmd, ,pot, ,potm, ,potm, ,potx, ,potx, ,ppm, ,pps, ,ppsx, ,ppsx, ,ppt, ,pptm, ,pptm, ,pptx, ,psd, ,pub, ,ras, ,sgf, ,sgv, ,slk, ,stc, ,std, ,sti, ,stw, ,svg, ,svgz, ,svm, ,sxc, ,sxd, ,sxg, ,sxi, ,sxm, ,sxw, ,sylk, ,tga, ,tif, ,tiff, ,uof, ,uop, ,uos, ,uot, ,vdx, ,vsd, ,vsdm, ,vsdx, ,wb2, ,wdb, ,wk1, ,wk1, ,wk3, ,wks, ,wmf, ,wn, ,wpd, ,wpg, ,wps, ,wps, ,wq1, ,wq2, ,wri, ,xbm, ,xlc, ,xlk, ,xlm, ,xls, ,xlsb, ,xlsm, ,xlsx, ,xlt, ,xltm, ,xltx, ,xlw, ,xpm, ,zabw.


Installierte makros ausführen

Ausserdem kann man durch das Kommando „lo-conversion“ ein in LibreOffice installiertes Macro ausführen. Dafür muss man die Property macroUrl im Request deklarieren.

<steps>
<step command="lo-conversion" expected-result-code="0" name="LOmacroConversion">
<properties>
<property name="macroUrl">macro:///Macro.Main(arg)</property>
<property name="InputFilename">Input.ott</property>
<property name="OutputFilename">Output.pdf</property>
<property name="OutputFormat">pdf</property> </properties>
</step>

Dies ist möglich in Version 2.2.0

Durch das Kommando „lo-runmacro“ ist es möglich eine installierte Macro ohne weitere Parameter ausführen, indem nur die Property macroUrl einsetzt.

<steps>
<step command="lo-runmacro" expected-result-code="0" name="LOmacroConversion">
<properties>
<property name="macroUrl">macro:///Macro.Main(arg)</property>
</properties>
</step>

Dies ist möglich in Version 2.2.1.

LibreOffice powered by CIB Installationen:

Die Linux Versionen 32/64 Bit werden als .tar.gz-Archive ausgeliefert.
Die Windows Versionen 32/64 Bit als ZIP-Archiv.

Zu beachten:

Unter Windows ist es erforderlich, dass die VisualC++ redistributables für die verwendete Architektur (x86/x64) installiert sind. Sie sind zu finden unter:

"https://www.microsoft.com/de-de/download/details.aspx?id=40784"

In allen Fällen muss die Umgebungsvariable zum Auffinden des LibreOffice-Installations-Verzeichnisses ("LOPath") gesetzt werden. Das kann direkt auf Systemebene oder, bei Verwendung des CIB documentServers, durch Setzen der entsprechenden Environment-Variable geschehen.

Beispiel: LOPath=c:\opt\cib\LO\program

Liste der unterstützten Properties:
„InputFilename“                      Eingabedatei als absoluter Pfad
„OutputFilename“                   Ausgabedatei als absoluter Pfad
„OutputFormat“                      „FormatPdf“ (Angabe optional)

Implementiert ab Version 2.0.1

„macroUrl“    URL zu einer in LO installierten Macro die ausgeführt wird.Syntax: macro:///Library.Module.Function(args)

Implementiert ab Version 2.2.0

8. Technische Schnittstellen

Vor dem Aufruf der Execute-Funktion (CIB job Execute) muss mindestens eine Auftragsdatei als Eingabe und ein Ausgabeziel für die Auftragsergebnisdatei über die CIB job Properties konfiguriert sein.

Anschließend führt die Execute-Funktion die in der Auftragsdatei spezifizierten Schritte in der dort angegebenen Reihenfolge aus und liefert das Ergebnis entsprechend dem Abschnitt Auftragsergebnisspezifikation zurück.

Die Auftragsdatei kann im Dateisystem vorliegen. Auch die Auftragsergebnisdatei kann im Dateisystem erzeugt werden, wobei die Mimetype-Information bei direkten Auftragsergebnisdateien dann nicht zur Verfügung steht.

Im CIB documentserver arbeitet CIB job jedoch im Speicher. Das heißt, dass der Aufrufer die Auftragsdatei über die Angabe von Speicheradressen oder Streams zur Verfügung stellt. Die Ausgabe erfolgt auf ähnliche Weise, indem CIB job an einen vom Aufrufer bereitgestellten Callback mehrere Speicheradressen übergibt.

 Dieses Kapitel gibt einen kurzen Überblick über die verfügbare API und deren Parameter. Allgemein gilt, dass man über die Funktion CibJobSetProperty seine gewünschten Parameter setzt und dann die Funktion CibJobExecute aufruft.

CIB job wird als native shared Library für die verschiedenen Betriebssysteme zur Verfügung gestellt. Die exportierten Routinen haben (bis auf individuelle Parameter) die Signatur

COMOD_BOOL COMOD_API CibJobXXX(<Parameter>);

Der Rückgabewert 0 (FALSE) zeigt an, dass ein Fehler aufgetreten ist. Fehlercode und Fehlertext werden dann über CibJobGetLastError() und CibJobGetLastErrorText() abgeholt. Bei Erfolg wird ein Wert ungleich 0 (TRUE) zurückgegeben, dessen Zahlenwert bedeutungslos ist.


8.1. CibJobSetProperty

COMOD_BOOL COMOD_API CibJobSetProperty(char* a_pOptionName, char* a_pOptionValue);

Mit dieser Funktion werden Eigenschaften für die CIB job Komponente gesetzt.

Alle CIB job Properties sind vom Typ Stringproperty. Das bedeutet, dass beim Setzen stets eine nullterminierte Folge von single byte Characters zu übergeben ist.

Parameter:

Typ:

Variable:

Bedeutung:

char*

a_pOptionName

Name der Einstellung, siehe Einstellungen

char*

a_pOptionValue

Adresse eines lesbaren, nullterminierten Speicherbereichs beim Aufrufer


8.2. CibJobGetProperty

COMOD_BOOL  COMOD_API CibJobGetProperty(char* 
a_pOptionName, char* a_pOptionValue, long a_lBufferLength);

Mit dieser Funktion können die aktuell gesetzten Eigenschaften der CIB job Komponente abgefragt werden.

Alle CIB job Properties sind vom Typ Stringproperty. Das bedeutet, dass beim Aufruf dieser Routine die Adresse eines beschreibbaren Speicherbereichs sowie dessen Länge angegeben werden müssen.

Parameter:

Typ:

Variable:

Bedeutung:

char*

a_pOptionName

Name der Einstellung, siehe Einstellungen

char*

a_pOptionValue

Adresse eines beschreibbaren Speicherbereichs beim Aufrufer

Long

a_lBufferLength

Länge des beschreibbaren Speicherbereichs beim Aufrufer


8.3. CibJobExecute

COMOD_BOOL COMOD_API CibJobExecute(void);

Mit dieser Funktion wird ein Auftrag bearbeitet.

Es ist zu beachten, dass beim Fehlschlagen dieses Aufrufs dennoch eine Auftragsergebnisdatei geliefert wird, in der weitere Informationen zu finden sind.

Parameter:

Typ:

Variable:

Bedeutung:

 

Keine

Alle Eingabeinformationen werden über SetProperty vorher gesetzt


8.4. CibJobGetLastError

COMOD_BOOL COMOD_API CibJobGetLastError(int *a_pErrorCode);

Mit dieser Funktion wird der Fehlercode des letzten fehlgeschlagenen Aufrufs einer der anderen Routinen abgefragt.

Wenn der letzte Aufruf der anderen Routine erfolgreich war, liefert die Funktion den Wert 0.

Parameter:

Typ:

Variable:

Bedeutung:

int *

a_pErrorCode

Adresse eines sizeof(int) Bytes großen beschreibbaren Speicherbereichs beim Aufrufer


8.5. CibJobGetLastErrorText

COMOD_BOOL COMOD_API CibJobGetLastErrorText(char* a_pTextBuffer, long a_lBufferLength);

Mit dieser Funktion wird der Fehlertext zum letzten fehlgeschlagenen Aufruf einer der anderen Routinen abgefragt.

Bei einigen Fehlersituationen liefert die Funktion zusätzliche kontextbezogene Fehlerinformationen.

Parameter:

Typ:

Variable:

Bedeutung:

char *

a_pTextBuffer

Adresse eines beschreibbaren Speicherbereichs beim Aufrufer

Long

a_lBufferLength

Länge des beschreibbaren Speicherbereichs beim Aufrufer


8.6. CibJobGetErrorText

COMOD_BOOL COMOD_API CibJobGetErrorText(int a_iErrorId, char* a_pTextBuffer, long a_lBufferLength);

Mit dieser Funktion wird der Fehlertext zu einer Fehlernummer abgefragt.

Kontextbezogene Zusatzinformationen wie bei GetLastErrorText können mit dieser Funktion nicht erhalten werden.

Parameter:

Typ:

Variable:

Bedeutung:

int

a_iErrorId

Fehlercode

char *

a_pTextBuffer

Adresse eines beschreibbaren Speicherbereichs beim Aufrufer

long

a_lBufferLength

Länge des beschreibbaren Speicherbereichs beim Aufrufer


8.7. CibJobGetVersion

COMOD_BOOL COMOD_API CibJobGetVersion(unsigned long *a_iVersion);

Mit dieser Funktion wird die Versionsnummer des Moduls abgefragt.

Damit können Sie in Ihrer Anwendung sicherstellen, dass eine Mindestversion vorliegt, wenn Sie etwa spezielle Programmeigenschaften benutzen, die erst ab einem bestimmten Release zur Verfügung gestellt wurden.

Parameter:

Typ:

Variable:

Bedeutung:

unsigned long *

a_iVersion

Adresse eines sizeof(unsigned long) Bytes großen beschreibbaren Speicherbereichs beim Aufrufer

Die Angaben sind Bytecodiert:

Major = (Version & 0xFF000000) >> 24;

Minor = (Version & 0x00FF0000) >>16;

Release (hex) = (Version & 0x0000FFFF);


9. CIB job Properties

Allgemein
Property „ConfigFilename“
Property „ModuleVersion“
Property „LicenseCompany“
Property „LicenseKey“
Property „InputData“
Property „InputDataLength4“
Property „InputMemoryAddress“
Property „MemoryOutputCallback“
Property „MemoryOutputUserdata“
Property „OutputMode“
Property „InputFilename“
Property „OutputFilename“
Property „OutputUrl“
Property „UseInMemoryProcessing“
Property „WorkSpace“
Property „InputData“
Property „InputEncoding“
Property „OutputEncoding“
Property „InputCharset“
Property „OutputCharset“
Property „ContentType“
Property „RemovePath“
Property „CreatePath“
Property „DirectoryPermissions“
Property „OutputContentType“
Property „MaxJobExecutionTime“
Property „WriteDate“
Property „WriteProducer“
Property „WriteTIMING“
Property „LicenseFile“

Allgemein

Die sogenannten „Properties“ oder Eigenschaften bilden ein wesentliches Kriterium vor dem Aufruf der eigentlich auszuführenden Methode. Alle unten im Klartext genannten Optionsnamen sind in den einzelnen Headerdateien der Komponenten auch als define deklariert und auch über diese defines in Ihrem Sourcecode ansprechbar. Die verschiedenen Ausgabemodule besitzen weitere spezielle Properties, die dort in den einzelnen Unterkapiteln beschrieben sind.

Alle CIB job Properties, auch die Zahlenwerte sind vom Typ Stringproperty. Siehe auch Abschnitt Aufrufschnittstelle.

Es ist zu unterscheiden zwischen Properties, die über die Aufrufschnittstelle CibJobSetProperty() gesetzt werden und Properties, die bei Schritten in der Auftragsdatei angegeben werden. Die Properties sind entsprechend gekennzeichnet mit „(Aufruf)“ und/oder „(Schritt)“.

Aufrufproperties können auch im <default>-Element des Auftrags oder der Konfigurationsdatei angegeben werden.

Ist eine Property wie z.B. WorkSpace mehrmals gesetzt, so gilt folgende Reihenfolge:

Die niedrigste Priorität hat die Angabe in der Konfigurationsdatei, eine höhere Priorität hat die Angabe im Abschnitt default, die höchste Priorität hat die Angabe im Schritt des Auftrags.

Zu beachten ist, dass die Schreibweise der Propertynamen berücksichtigt wird.


Property „ConfigFilename"

Angabe des Dateinamens für die Konfigurationsdatei.

Die Property kann nur über die Aufrufschnittstelle CibJobSetProperty() gesetzt werden.

Es handelt sich hierbei um eine Zeichenkette, die den Dateinamen und –pfad enthält. Wenn der Pfad oder die Datei nicht existieren, wird kein Fehler gemeldet, aber ein Eintrag im Trace erzeugt und es wird die Standardkonfiguration benutzt.

Die Property hat Vorrang vor der Umgebungsvariable CIB_JOB­CONFIG­FILE­NAME. Ist die Property gesetzt, wird die Umgebungsvariable ignoriert.

Der Standardwert wenn die Property und die Umgebungsvariable nicht gesetzt sind oder leer sind lautet ./jobconfig.xml. Das bedeutet die Datei jobconfig.xml muss einfach ins Arbeitsverzeichnis des aufrufenden Prozesses kopiert werden.


Property „ModuleVersion"

Liefert die Version des vorliegenden CIB job Moduls als String.

Es handelt sich hierbei um eine Ausgabeproperty. Die Property kann nur über die Aufrufschnittstelle CibJobGetProperty() gelesen werden.


Property „LicenseCompany"

Angabe des Lizenznehmers.

Die Property kann über die Aufrufschnittstelle CibJobSetProperty() gesetzt werden und kann in den Job-Defaults oder in der Konfigurationsdatei angegeben werden.

Es handelt sich hierbei um eine Zeichenkette, die den Namen des Lizenznehmers enthält.

Die Property muss vor dem Aufruf von Execute gesetzt sein.


Property „LicenseKey"

Angabe des Lizenzschlüssels.

Die Property kann über die Aufrufschnittstelle CibJobSetProperty() gesetzt werden und kann in den Job-Defaults oder in der Konfigurationsdatei angegeben werden.

Es handelt sich hierbei um eine Zeichenkette, die den Lizenzschlüssel enthält.

Die Property muss vor dem Aufruf von Execute gesetzt sein.


Property „InputData"

Die Property kann sowohl über die Aufrufschnittstelle CibJobSetProperty() gesetzt werden, als auch bei einem Schritt in der Auftragsdatei angegeben werden. Für die Verwendung der Property bei einem Schritt siehe Abschnitt Property „InputData“.

Übergabe der Auftragsdatei als Zeichenkette.

Die Länge der Zeichenkette müssen sie mit der Property „InputDataLength4“ setzen.

Die Property muss vor dem Aufruf von Execute gesetzt sein.


Property „InputDataLength4"

Setzt die Länge der Zeichenkette von der Property „InputData“.

Die Property kann nur über die Aufrufschnittstelle CibJobSetProperty() gesetzt werden.

Die Property muss vor dem Aufruf von Execute gesetzt sein.


Property „InputMemoryAddress"

Übergabe der Auftragsdatei im Hauptspeicher.

Die Property kann nur über die Aufrufschnittstelle CibJobSetProperty() gesetzt werden.

Diese Property enthält eine Folge aus Speicheradressen von lesbaren Speicherblocks und deren Länge. Die Speicheradressen und die Längen werden dezimal angegeben. Es wird abwechselnd eine Adresse und eine Länge angegeben, die Zahlenwerte sind durch Strichpunkte getrennt.

Diese Speicherblocks müssen – wenn zusammengesetzt – die Auftragsdatei enthalten.

Die Property muss vor dem Aufruf der Execute-Funktion gesetzt sein. Ist die Property „InputData“ ebenfalls gesetzt, hat „InputMemoryAddress“ Vorrang.


Property „MemoryOutputCallback"

Übergabe der Callbackadresse, um die erzeugte Auftragsergebnisdatei entgegenzunehmen.

Die Property kann nur über die Aufrufschnittstelle CibJobSetProperty() gesetzt werden.

Nullterminierte Zeichenkette, die den dezimalen Wert der Adresse einer ausführbaren Funktion enthält.

Die Funktion muss folgende Signatur besitzen (C-Syntax):

COMOD_BOOL COMOD_API *MemoryOutputCallbackType(const char* a_Output, size_t a_Length, void*a_pUserdata, int a_Error);

Typ:

Variable:

Bedeutung:

const char *

a_Output

Adresse des aktuellen Ergebnisspeicherblocks

Size_t

a_Length

Länge des aktuellen Ergebnisspeicherblocks

Void *

a_pUserdata

Inhalt der Property MemoryUserData

Int

a_Error

Aktueller Fehlercode

Die Funktion wird während der Laufzeit von CIBjobExecute mehrmals aufgerufen.

Beim ersten Aufruf wird lediglich eine Zeichenkette übergeben, die den MIME-Type der in den nachfolgenden Aufrufen gelieferten Auftragsergebnisdatei enthält. Dieser erste Ergebnisspeicherblock ist also nicht Teil der Auftragsergebnisdatei.

Beim letzten Aufruf haben die Adresse des aktuellen Ergebnisspeicherblocks und die Länge beide den Wert 0. Nach dem Ende dieses Aufrufs sind die bei den vorhergehenden Aufrufen gelieferten Adressen ungültig. Der Aufrufer muss die Daten also spätestens bei diesem Aufruf kopieren.

Die Property muss vor dem Aufruf der Execute-Funktion gesetzt sein. Wenn diese Property gesetzt ist, wird die Property „OutputFilename“ ignoriert.

Die Funktion kann FALSE zurückgeben, um die Verarbeitung durch CIB job abzubrechen.


Property „MemoryOutputUserdata"

Übergabe eines beliebigen Zeigers, der bei jedem Aufruf des „MemoryOutputCallback“ der Callbackfunktion im Parameter Userdata zur Verfügung gestellt wird.

Die Property kann nur über die Aufrufschnittstelle CibJobSetProperty() gesetzt werden.

Nullterminierte Zeichenkette, die den dezimalen Wert der Adresse enthält.

Die Property muss nicht gesetzt werden, muss dann aber vor dem Aufruf der Execute-Funktion gesetzt sein.


Property „OutputMode"

Steuerung des Ausgabemodus.

Die Property kann über die Aufrufschnittstelle CibJobSetProperty() gesetzt werden, als auch in den Job-Defaults angegeben werden.

Nullterminierte Zeichenkette mit den erlaubten Werten „Direct“ und „Xml“.

Nur im Fall „Direct“ wird bei erfolgreicher Ausführung des Auftrags das erste Ergebnisdokument des ersten Jobs als direkte Auftragsergebnisdatei zurückgeliefert.

Im Fall „Xml“ oder wenn bei der Ausführung ein Fehler aufgetreten ist, wird eine Auftragsergebnisdatei im XML-Format entsprechend dem Abschnitt Auftragsergebnisspezifikation zurückgegeben.

Die Property muss nicht gesetzt werden, muss dann aber vor dem Aufruf der Execute-Funktion gesetzt sein.

Der Defaultwert der Property ist „Xml“.


Property „InputFilename"

Übergabe des Dateinamens der Auftragsdatei, wenn diese im Dateisystem vorliegt.

Die Property kann sowohl über die Aufrufschnittstelle CibJobSetProperty() gesetzt werden, als auch bei einem Schritt mit den Kommandos „load“ oder „delete“ in der Auftragsdatei angegeben werden.

Nullterminierte Zeichenkette, die den Dateinamen und –pfad enthält.

Diese Property kann an zwei unterschiedlichen Stellen auftreten: Wird sie über die native Aufrufschnittstelle gesetzt, heißt das, dass die Auftragsdatei aus dem Dateisystem einzulesen ist.

Ist sie dagegen bei einem Schritt mit dem Kommando „load“ gesetzt, wird dadurch die angegebene Datei aus dem Dateisystem gelesen und als Schrittergebnis in den Speicher geladen.

Die Property muss vor dem Aufruf der Execute-Funktion gesetzt sein. Diese Property wird dann ignoriert, wenn eine der Properties „InputData“ oder „InputMemoryAddress“ gesetzt ist. Ist die Property allerdings bei einem Schritt mit dem Kommando „load“ angegeben, so wird sie dort immer ausgewertet.


Property „OutputFilename"

Übergabe des Dateinamens der Auftragsergebnisdatei, wenn diese im Dateisystem vorliegt.

Die Property kann sowohl über die Aufrufschnittstelle CibJobSetProperty() gesetzt werden, als auch bei einem Schritt mit dem Kommando „save“ in der Auftragsdatei angegeben werden und bei den Job-Defaults.

Nullterminierte Zeichenkette, die den Dateinamen und –pfad enthält.

Diese Property kann an zwei unterschiedlichen Stellen auftreten: Wird sie über die native Aufrufschnittstelle gesetzt, heißt das, dass die Auftragsergebnisdatei oder die direkte Auftragsergebnisdatei in das Dateisystem geschrieben wird.

Ist sie dagegen bei einem Schritt mit dem Kommando „save“ gesetzt, wird das Ergebnisdokument des Schritts (nicht die Auftragsergebnisdatei) in das Dateisystem geschrieben. Das Schrittergebnis eines solchen Schritts ist der Dateiname, außer die Property „OutputUrl“ ist ebenfalls gesetzt.

Die Property muss vor dem Aufruf der Execute-Funktion gesetzt sein. Diese Property wird dann ignoriert, wenn die Property „MemoryOutputCallback“ gesetzt ist. Ist die Property allerdings bei einem Schritt mit dem Kommando „save“ angegeben, so wird sie dort immer ausgewertet.


Property „OutputUrl"

Rückgabe des Pfades zu einem Ergebnisdokument (nur bei einem Schritt mit dem Kommando „save“).

Die Property kann nur bei einem Schritt mit dem Kommando „save“ in der Auftragsdatei angegeben werden.

Nullterminierte Zeichenkette, die die Url enthält. Diese Url wird aus Sicht des Clients auf ein im Dateisystem des Servers vorliegendes Ergebnisdokument verweisen. Damit das funktioniert, muss beim gleichen Schritt die Property „OutputFilename“ einen dazu passenden Pfad und Dateinamen enthalten.

Das bedeutet, dass die Auftragsergebnisdatei im XML-Format gesendet wird, aber das Ergebnisdokument mit dem Kommando „save“ von CIB job ins Dateisystem geschrieben wird.

Der Outputmode kann nicht „Direct“ sein.


Property „UseInMemoryProcessing"

Steuert die Verwendung des Memoryinterfaces

Die Property kann über die Aufrufschnittstelle CibJobSetProperty() gesetzt werden, als auch in den Job-Defaults angegeben werden.

Boolsche Property mit erlaubten Werten „true“, „false“, „1“ und „0“  (case-insensitive).  DefaultWert „true“.

Im Fall „true“ werden Ergebnisse einzelner Steps im Speicher vorgehalten bzw. auch an den nachfolgenden Schritt weitergegeben.

Im Fall „false“ wird ausschließlich auf Datenträgerebene gearbeitet. Einzelne Steps erfordern eine explizite Angabe der Properties „InputFilename“ und „OutputFilename“. Es werden keine Stepresults im Speicher vorgehalten.

Die Steps „Save“, „Load“, „Identitiy“, „Delete“ und „Mem“ sind im Fall „false“ deaktiviert.


Property „WorkSpace"

Definition eines Basisverzeichnisses für alle Dateinamensangaben.

Die Property kann sowohl über die Aufrufschnittstelle CibJobSetProperty() gesetzt werden, als auch bei einem Schritt mit dem Kommando „load“ oder „save“ in der Auftragsdatei angegeben werden, sowie bei den Job-Defaults.

Nullterminierte Zeichenkette, die einen Pfad enthält. Der Pfad kann absolut angegeben werden oder relativ zum Arbeitsverzeichnis des aufrufenden Prozesses.

Alle anderen Dateiangaben in den Properties „InputFilename“ und „OutputFilename“ und nur diese werden relativ zum Workspace betrachtet.

Die Property kann über die Aufrufschnittstelle , in der Konfigurationsdatei, im Auftrag oder bei den Schritten mit dem Kommando „load“ oder „save“ angegeben werden. Im letzteren Fall gelten sie nur für die dort angegebenen Werte der Properties „InputFilename“ und „OutputFilename“.


Property „InputData"

Übergabe von Eingabedaten für Schritte eingebettet in der Auftragsdatei.

Die Property kann nur bei einem Schritt mit dem Kommando „mem“ in der Auftragsdatei angegeben werden.

Diese Property wird mit einer XML-kompatiblen Zeichenkette gefüllt. Diese ist in der Regel die Base64-encodede Darstellung einer Datei. Diese kann zusätzlich komprimiert oder verschlüsselt sein. Siehe Properties „InputEncoding“ und „InputCharset“.


Property „InputEncoding"

Angabe, wie die in der Property „InputData“ übergebenen Daten zu dekomprimieren bzw. zu dekodieren sind.

Die Property kann nur bei einem Schritt mit dem Kommando „mem“ in der Auftragsdatei angegeben werden.

Diese Property wird mit einer kommagetrennten Folge von Encoding-Bezeichnern gefüllt. Die Reihenfolge der Encodings ist die, wie sie auf die Daten angewendet wurde, um den Inhalt der „InputData“ Property zu erhalten. CIB job wendet sie also von hinten nach vorne an, um den dekodierten Inhalt zu ermitteln.

Folgende Encodings werden unterstützt:

Zip, Base64

Base64

Weitere Encodings auf Anfrage.


Property „OutputEncoding"

Angabe, welche Encodings auf das Schrittergebnis anzuwenden sind.

Die Property kann nur bei einem Schritt mit dem Kommando „mem“ in der Auftragsdatei angegeben werden.

Diese Property wird mit einer kommagetrennten Folge von Encoding-Bezeichnern gefüllt. Die Reihenfolge der Encodings ist die, wie sie von CIB job auf die Daten angewendet werden sollen, nachdem eine etwaige Charset-Umwandlung stattgefunden hat. Siehe Property „InputCharset“.

Folgende Encodings werden unterstützt:

Zip, Base64

Base64

Weitere Encodings auf Anfrage.


Property „InputCharset"

Angabe des Charsets der Eingabe.

Die Property kann nur bei einem Schritt mit dem Kommando „mem“ in der Auftragsdatei angegeben werden.

Diese Property enthält einen Charset-Bezeichner. Es ist dies das Charset der dekodierten Daten, also nach Anwendung der Property „InputEncoding“. Siehe auch Property „InputData“.

Nur wenn beide Charset-Properties gesetzt sind, wird eine Charset-Umwandlung vom „InputCharset“ ins „OutputCharset“ vorgenommen.

Folgende Charsets werden unterstützt:

CodePageAnsi

CodePageMac

CodePagePc

CodePagePca

CodePagePdf

CodePage1256Arabic

CodePageUnicode

CodePageUtf8

Folgende Charsets werden ebenfalls unterstützt, konnten jedoch noch nicht sprachlich überprüft werden:

CodePage932ShiftJIS

CodePage949Hangul

CodePage936GB2312

CodePage950ChineseBIG5

CodePage1255Hebrew

CodePage1253Greek

CodePage1254Turkish

CodePage1258Vietnamese

CodePage874Thai

CodePage1250EastEurope

CodePage1251Cyrillic

CodePage1257Baltic


Property „OutputCharset"

Angabe des gewünschten Ziel-Charsets.

Die Property kann nur bei einem Schritt mit dem Kommando „mem“ in der Auftragsdatei angegeben werden.

Beschreibung siehe Property „InputCharset“.


Property „ContentType"

Angabe, was die Schritteingabe bzw. -ausgabe eigentlich darstellt (MIME-Type).

Die Property kann nur bei einem Schritt mit dem Kommando „mem“ oder „load“ in der Auftragsdatei angegeben werden.

Diese Property wird mit einer http-kompatiblen Zeichenkette gefüllt, die den MIME-Type der Daten angibt, zum Beispiel text/plain.


Property „RemovePath"

(ab Version 1.4.20)

Ermöglicht das zusätzliche Entfernen von Verzeichnissen.

Der Defaultwert für diese Property lautet FALSE

Die Property kann nur bei einem Schritt mit dem Kommando „delete“ in der Auftragsdatei angegeben werden.

Die Property wird mit einem boolschen Wert gefüllt, wahlweise als Zeichenkette oder als Ganzzahl.

Es wird versucht den in „InputFilename“ gesetzten Pfad, d.h. Datei mit Verzeichnis, zu löschen. Sollte es nicht möglich sein die Datei zu löschen, so gibt das Programm einen Fehler zurück.

Falls sich die Datei entfernen lässt, das Löschen von Verzeichnissen aber nicht möglich sein sollte, dann wird kein Fehler gesetzt. In diesem Fall wird eine Warnung ins logfile geschrieben.

Verzeichnisse, die in der Property „WorkSpace“ gesetzt werden, werden nicht beachtet.

Es gilt die üblichen Konventionen beim Entfernen von Dateien und Verzeichnissen zu beachten, wie z.B Zugriffsbeschränkungen, etc.


Property „CreatePath"

(ab Version 1.4.20)

Ermöglicht das zusätzliche Anlegen von Verzeichnissen.

Der Defaultwert für diese Property lautet FALSE

Die Property kann nur bei einem Schritt mit dem Kommando „save“ in der Auftragsdatei angegeben werden.

Die Property wird mit einem boolschen Wert gefüllt, wahlweise als Zeichenkette oder als Ganzzahl.

Es wird versucht den in „OutputFilename“ gesetzten Pfad, d.h. Datei mit Verzeichnis, zu erstellen.. Sollte es nicht möglich sein die Datei zu erstellen, so gibt das Programm einen Fehler zurück.

Unter unixoiden Betriebssystemen besteht die optionale Property „DirectoryPermissions“. (Beschreibung siehe unten).

Es gilt die üblichen Konventionen beim Erstellen von Dateien und Verzeichnissen zu beachten, wie z.B.  Zugriffsbeschränkungen, etc.


Property „DirectoryPermissions"

(ab Version 1.4.20)

Angabe der gewünschten Zugriffsbeschränkungen.

Der Defaultwert für diese Property lautet ‚0777’

Die Property kann nur bei einem Schritt mit dem Kommando „save“ in der Auftragsdatei angegeben werden.

Die Property wird mit einer 4-stelligen Ganzzahl gefüllt.  Sie setzt die Zugriffsbeschränkungen für mit „CreatePath“ im Kommanso „save“ erstellte Verzeichnisse auf unixoiden Betriebssystemen.

Wichtig: Die im Zielsystem gesetzte Einstellung der Systemproperty „umask“ wird auf den gesetzten Wert angewendet.


Property „OutputContentType"

(ab Version 1.4.20)

Diese Property liefert im Fall einer Ausgabe in Datei „OutputFilename“ den Mimetype des Ergebnisses.

Dies wird benötigt, wenn CIB job von einer Anwendung aufgerufen wird, z.B. Jcomod, die den Typ des erzeugten Auftrags-Ergebnisses nicht kennt.

Zu den möglichen Inhalten dieser Property siehe Kapitel „MIME-Type“.


Property „MaxJobExecutionTime"

(ab Version 1.6.2)

Mit dieser Property „MaxJobExecutionTime“ kann eine maximale Laufzeit für einen Auftrag vorgegeben werden. Die Property kann an CIB job (CibJobSetProperty), in der jobconfig.xml oder den Job-Defaults angegeben werden.

Benötigt die Ausführung des Auftrags länger als diese Zeit, wird der Auftrag abgebrochen und der Fehler 414 geliefert.

Es wird eine Fehlerantwort erstellt, mit JobResultCode 414, und einem StepResultCode 412 oder 413.


Property „WriteDate"

(ab Version 2.3.5)

Durch diese Property kann man festlegen, ob im Response das Bearbeitungsdatum zurückgeliefert werden soll.

Boolsche Property mit erlaubten Werten „true“, „false“, „1“ und „0“  (case-insensitive).  DefaultWert „true“ (Die Property wird im Response geliefert).


Property „WriteProducer"

(ab Version 2.3.5)

Durch diese Property kann man festlegen, ob im Response der Aufrufer zurückgeliefert werden soll.

Boolsche Property mit erlaubten Werten „true“, „false“, „1“ und „0“  (case-insensitive).  DefaultWert „true“ (Die Property wird im Response geliefert).


Property „WriteTIMING"

(ab Version 2.3.5)

Durch diese Property kann man festlegen, ob im Response die Dauer der Auftragsverarbeitung zurückgeliefert werden soll.

Boolsche Property mit erlaubten Werten „true“, „false“, „1“ und „0“  (case-insensitive).  DefaultWert „true“ (Die Property wird im Response geliefert).


Property „LicenseFile"

(ab Version 3.5.0)

Durch die Property „LicenseFile“ können Lizenzinformationen im JSON-Format hinterlegt werden. Dadurch müssen die Lizenzinformationen nicht durch das Property-Paar „LicenseKey“ und „LicenseCompany“ angegeben werden, welche weiterhin als Alternative zur Verfügung stehen.

Die Lizenzinformationen können entweder direkt angegeben oder durch eine entsprechende Datei hinterlegt werden:

Beispiel mit Datei:

<property name="LicenseFile">myLicense.txt</property>

Beispiel Inhalt direkt im JSON-Format:

<property name="LicenseFile">{
          "Company": "Gesellschaft-Name",
          "Key": "xxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxx ",
          "OperatingSystem": "Windows",
          "Products": [
                      {
                                  "Name": "CIB job" 
                      } 
           ] 
} 
</property>


10. Systemeinstellungen

Umgebungsvariable CIB_JOBTRACE

Angabe eines Dateinamens für eine Tracedatei (Logdatei).
Zeichenkette, die den Dateinamen und –pfad enthält. Der Pfad muss existieren, die Datei wird erzeugt bzw. ersetzt.
Die Variable muss vor dem Laden des CIB job Moduls gesetzt sein.
Beispiel: set CIB_JOBTRACE=/tmp/prtrace.log

Umgebungsvariable CIB_JOBCONFIGFILENAME

Angabe des Dateinamens für die Konfigurationsdatei.

Zeichenkette, die den Dateinamen und –pfad enthält. Der Pfad und die Datei müssen existieren. Ist dies nicht der Fall, wird kein Fehler gemeldet, aber ein Eintrag im Trace erzeugt und es wird die Standardkonfiguration benutzt.

Die Variable muss vor dem Laden des CIB job Moduls gesetzt sein.

Die Property „ConfigFilename“ hat Vorrang. Ist diese gesetzt, wird die Umgebungsvariable ignoriert. Der Standardwert wenn die Umgebungsvariable und die Property nicht gesetzt sind oder leer sind lautet ./jobconfig.xml.

Die Datei jobconfig.xml kann einfach ins Arbeitsverzeichnis der aufrufenden Funktion kopiert werden. Die Voreinstellung ist dabei das Arbeitsverzeichnis der aufrufenden Funktion.

Beispiel: set CIB_JOBCONFIGFILENAME=/web­apps/­Cib­Document­server/­WEB-INF/jobconfig.xml


11. Konfiguration

Die Konfiguration von CIB job ist ein Auftrag ohne Jobs und wird in einer XML-Datei auf dem Server hinterlegt. Die Steuerung, wo diese Datei liegt, und die Regeln nach denen sie gesucht wird, sind in den Abschnitten Umgebungsvariable CIB_JOB­CON­FIG­FILENAME und Property „ConfigFilename“ beschrieben.

Die in der Konfiguration angegebenen Standardeinstellungen gelten für alle ankommenden Aufträge.

Enthält ein ankommender Auftrag selbst Standardeinstellungen, so gelten diese.

Die höchste Priorität haben allerdings stets die Einstellungen, die beim einzelnen Schritt angegeben sind.

Auch für benutzerdefinierte Kommandos werden die Grundeinstellungen auf analoge Weise hier angegeben.

Darüber hinaus werden benutzerdefinierte Kommandos in dieser Datei auch erst spezifiziert (Abbildung Kommando-Name zu Shared Library-Dateiname, Name der Execute-Funktion, Auflistung der unterstützten Properties).

Siehe Abschnitt Benutzerdefinierte Kommandos.


Beispiel

<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
   CIB job XML Schema 1.2 für CIB job ab Version 1.4.x.
<Comod>
   <!-- Defaulteinstellungen die für alle Jobs und Commands gültig sind, sofern
          nicht im Job bzw. Step selbst überschrieben -->
   <defaults>
<properties command="job">
                 <!-- Zu den Properties des speziellen Kommandos "job" siehe bitte die                      
Onlinehilfe von CIB job. -->
                 <property name="OutputMode">direct</property>
          </properties>
          <properties command="format">
                 <property name="LicenseCompany">MyCompany</property>
                 <property name="LicenseKey">abcd-efgh-12345678</property>
                 <!-- Verzeichniskonfiguration Windows
                 <property name="PpdFilename">ppd/hp4100.ppd</property>
                 <property name="FontWorkSpace">C:\WINDOWS\Fonts</property>
                 -->
          <properties command="user1">                
<!—Beispiel für Voreinstellungen eines Usersteps -->
                 <property name="Database">\\dbserv33</property>
          </properties>
   </defaults>
   <!— Deklaration Usersteps -->
   <usercommands>
          <usercommand command=”user1”>
             <module>user1.dll</module>
             <function>ExecuteUser1</function>
          </usercommand>
   </usercommands>
</Comod>

12. Allgemeine Beispiele

Lizenzschlüssel hinterlegen
Formulare und Textbausteine ablegen
Pfadangaben hinterlegen
Formulare und Textbausteine im Auftrag mitliefern

Lizenzschlüssel hinterlegen

Die Lizenzschlüssel für die CIB docgen Module wird sinnvoller weise in der CIB job-Konfigurationsdatei hinterlegt. Fügen Sie in die jobconfig.xml für alle verwendeten Kommando Einträge (einschließlich für CIB job) die Properties „LicenseCompany“ und „LicenseKey“ hinzu. Beachten Sie, dass die Lizenz nur als gültige Lizenz gewertet wird, wenn Sie die Lizenz für CIB job und CIB format angeben. Eine Lizenzangabe von CIB job oder CIB format ist nicht ausreichend.

Beispielkonfigurationsdatei:

<?xml version="1.0"
encoding="ISO-8859-1"?>
<!--
   CIB job XML Schema 1.2 für CIB job ab Version 1.4.x.
 
<Comod>
   <!-- Defaulteinstellungen die für alle Jobs und Commands gültig sind, sofern
          nicht im Job bzw. Step selbst überschrieben -->
   <defaults>
          <properties command="format">
                 <property name="LicenseCompany">MyCompany</property>
                 <property name="LicenseKey">abcd-efgh-12345678</property>
          </properties>
   </defaults>
</Comod>


Zusätzliche Informationen zur CIB job-Konfigurationsdatei finden Sie in dem Abschnitt Konfigurationseinstellungen.


Formulare und Textbausteine ablegen

In der Auftragsdatei verweisen Sie mit zwei Einstellungen auf das Verzeichnis, in dem die vorbereiteten Formulare und Textbausteine liegen: Bei der Angabe des Wurzeldokuments (CIB merge: „-i“, CIB pdf toolbox/merge: „InputFilename“) und bei CIB merge auch noch mit dem Textbausteinverzeichnis („-a“).

Die Angabe des Textbaustein-Verzeichnis ist erforderlich, damit Textbausteine und Bilder gefunden werden, die aus der Eingabedatei mit {includetext} oder {includepicture} angesprochen werden. Dies wird im Fall der CIB pdf toolbox/merge nicht benötigt, da aus einem PDF-Fomular keine anderen Dokumente aufgerufen werden können.

Beispielauftragsdatei (Ausschnitt):

<step name="merge1" command="merge">
   <properties>
          <!-- Hier den Bezug zum Textbausteinverzeichnis
                 herstellen: -->
          <property name="-a">..\templates\</property>
          <!-- Hier das Wurzeldokument angeben: -->
          <property name="-i">..\templates\LBS.rtf</property>
          <property name="-h">XML:$(inline)</property>
          <property name="-d">/root/LBS-Daten</property>
          <property name="-s"/>
   </properties>
</step>

In diesem Beispiel sind die Pfade relativ zum Arbeitsverzeichnis angegeben.

Siehe auch:

Entwurf von Auftragsdateien


Pfadangaben hinterlegen

Wie bereits im vorherigen Abschnitt beschrieben, kann in einer Auftragsdatei über bestimmte Einstellungen das Verzeichnis, in dem die zu verwendenden Formulare und Textbausteine liegen, festgelegt werden. Für eine zentrale Verwaltung dieser Einstellungen empfiehlt es sich, diese in der jobconfig.xml vorzunehmen. Das hat den Vorteil, dass man für alle Auftragsdateien die Einstellungen an nur einer Stelle vornehmen muss. Fügen Sie daher für alle verwendeten Kommando Einträge die entsprechenden Properties hinzu.

Beispielkonfigurationsdatei:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
   CIB job XML Schema 1.1 für CIB job ab Version 1.4.x.
 
<Comod>
   <!-- Defaulteinstellungen die für alle Jobs und Commands gültig sind, sofern
          nicht im Job bzw. Step selbst überschrieben -->
   <defaults>
          <properties command="merge">
                 <property name="LicenseCompany">MyCompany</property>
                 <property name="LicenseKey">abcd-efgh-12345678</property>
                 <property name="-a">..\test-templates\</property>
          </properties>
   </defaults>
</Comod>

Zusätzliche Informationen zur CIB job-Konfigurationsdatei finden Sie in dem Abschnitt Konfigurationseinstellungen.


Formulare und Textbausteine im Auftrag mitliefern

Ihre für CIB merge und CIB pdf toolbox/merge vorbereiteten Formulare und Textbausteine können in den meisten Fällen auch in den Auftrag eingebettet werden. Verwenden Sie hierzu das Kommando „mem“ beziehungsweise im speziellen Fall von CIB merge die Einstellung --directory-set=Name. Sie finden Beispiele hierzu im Unterverzeichnis jobs.


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>


14. Framework

Für den Einsatz von CIB job mit dem CIB documentserver, wird ein Framework zur Verfügung gestellt.
Erfolgt der Einsatz von CIB job ohne den CIB documentserver, können Sie auf Anfrage ebenfalls das Framework erhalten. Dieser Abschnitt zeigt einen kompletten Aufruf mit dem Framework aus der Anwendungsschicht.

Auftragsdatei erzeugen
Auftragsergebnisdatei analysieren
Ergebnisdokumente auslesen
Nutzdaten in Auftrag einbetten
Auslesen von Tracedateien
Erstellung von ZUGFeRD konformen Daten

Auftragsdatei erzeugen

Der Auftrag besteht aus den Jobs und Schritten einerseits und Ihren Nutzdaten andererseits. Erzeugen sie beides nacheinander und fügen Sie zuletzt die Nutzdaten dem Auftrag hinzu:

Nutzdaten erzeugen und vorbereiten:

// Erzeugen Sie Ihr Nutzdaten-XML
String XML = "<?xml ...";
 
// Verpacken Sie es in einen de.cib.xml.dom.Dom
Dom Dom = new Dom(XML.getBytes());


Kommandos, Schritte und Job bauen:

// Bereiten sie die Schritte mit den gewünschten Kommandos vor 
CommandFactory Factory = new CommandFactory();
Step MergeStep = new Step(Factory.createCommand("merge"), "merge");
Step FormatStep = new Step(Factory.createCommand("format"), "format");
 
// Properties vom Merge Step
MergeStep.setProperty("-A", "..\\templates");
MergeStep.setProperty("-i", "..\\templates\\Rohtext.rtf");
MergeStep.setProperty("-l!", "merge.log");
MergeStep.setProperty("-h", "XML:$(inline)");
MergeStep.setProperty("-d", "/root/Data");
MergeStep.setProperty("-s");
 
// Properties vom Format Step
// Optional: FormatStep.setInputStep(MergeStep);
FormatStep.setProperty("OutputFormat", "FormatPdf");
 
// Job zusammensetzen
Job Job = new Job("Darlehen");
Job.setProperty("OutputMode", "XML");
Job.addStep(MergeStep);
Job.addStep(FormatStep);

 
Request zusammensetzen:

// Request zusammensetzen aus Nutzdaten, 
Request Request = new Request(Dom);
// Defaultproperties
Request.setDefaultProperty(MergeStep.getCommand(), "OutputFormat",
   "FormatText");
// Und dem Job
Request.addJob(Job);

 

Request in Bytefolge umwandeln:

RequestXmlBuilder Builder = new RequestXmlBuilder();
byte[] RequestBytes = Builder.getXmlBytes(Request);

Response aus den Ergebnisbytes machen, im Beispiel über einen http-Zugriff auf einen CIB documentserver:

Response = new UrlDocumentServerImpl().execute(Request);


Auftragsergebnisdatei analysieren

Das erzeugte Auftragsergebnis enthält nun entweder eine Fehlermeldung oder eine oder mehrere Ergebnisdokumente. Ob es sich um eine direkte Auftragsergebnisdatei handelt, oder nicht bleibt für Sie transparent:

if (Response.hasErrors()) 
{
   // TODO: Errorinfos auswerten
}
else {
   // Nur ein einziges Pdf erwartet, also bietet die Response einen direkten Zugriff darauf.
   JobResult JobResult = Response.getJobResult();
   StepResult StepResult = JobResult.getStepResult();
   String ContentType = StepResult.getMimeType();


Ergebnisdokumente auslesen

Der Zugriff auf das enthaltene Ergebnisdokument ist schnell erledigt:

   // Pdf Zurückgeben
   InputStream Data  = StepResult.getStepData();


Nutzdaten in Auftrag einbetten

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: Nutzdaten für CIB pdf merge in Auftrag einbetten

Framework: Auftragsdatei erzeugen


Auslesen von Tracedateien

Die von den Schritten optional erzeugten Tracedateien werden vom Client mittels eines einfachen Zugriffs ausgelesen:

   // Trace auslesen
   String Trace = StepResult.getTrace();

Siehe auch:

Auftragsentwurf: Tracedateien zum Client übertragen

Framework: Auftragsergebnisdatei analysieren


Erstellung von ZUGFeRD konformen Daten

Ab CIB documentServer 1.11.0 ist es möglich, Aufträge für die Erstellung von ZUGFeRD konformen Rechnungsdaten zu erzeugen:

 

// Bereiten sie die Schritte mit den gewünschten Kommandos vor 
CommandFactory Factory = new CommandFactory();
Step zugFerdStep = new Step(new CommandFactory().createCommand(CommandFactory.COMMAND_INVOICE_TOOLBOX), "invoice-step");
// Properties vom Invoice Step
zugFerdStep.setPropertyMode("ZUGFeRDOutputXML", "out");
zugFerdStep.setPropertyMode("ValidationReportJson", "out");
zugFerdStep.setProperty("TraceFilename", "invtb.log");
zugFerdStep.setProperty("OutputFormat", "FormatZUGFeRD");
zugFerdStep.setProperty("OutputFilename", "out.xml");
zugFerdStep.setProperty("ZUGFeRDConformanceLevel", "Basic");
zugFerdStep.setProperty("ZUGFeRDDocumentID", "MusterRechnung 0000000001");
zugFerdStep.setProperty("ZUGFeRDDocumentName", "Rechnung");
zugFerdStep.setProperty("ZUGFeRDDocumentType", "380");
zugFerdStep.setProperty("ZUGFeRDDocumentDate", "27.10.2014");
Context zugferdContext1 = new Context("HeaderIncludedNote");
zugferdContext1.setContextProperty("ZUGFeRDHeaderIncludedNoteContent","folgende");
Context zugferdContext2 = new Context("BillingItem");
zugferdContext2.setContextProperty("ZUGFeRDBillingItemQuantity","3.0000");
zugferdContext2.setContextProperty("ZUGFeRDBillingItemUnitCode","C62");
zugferdContext2.setContextProperty("ZUGFeRDBillingItemProductName","Beispielprodukt");
zugFerdStep.addContext(zugferdContext1);
zugFerdStep.addContext(zugferdContext2);
zugFerdStep.setProperty("ZUGFeRDSellerName", "Rechnungssteller GmbH");
zugFerdStep.setProperty("ZUGFeRDBuyerName", "Buyer GmbH");
zugFerdStep.setProperty("ZUGFeRDSellerDeliveryDate", "27.10.2014");
zugFerdStep.setProperty("ZUGFeRDSellerAddressCountry", "DE");
zugFerdStep.setProperty("ZUGFeRDSettlementPaymentReference", "OnlineBestellung 0000000001");
zugFerdStep.setProperty("ZUGFeRDSettlementCurrencyCode", "EUR");
zugFerdStep.setProperty("ZUGFeRDSettlementInformation", "Überweisung");
zugFerdStep.setProperty("ZUGFeRDSettlementCreditorIBAN", "DE12500105170648489890");
zugFerdStep.setProperty("ZUGFeRDAccountName", "Rechnungssteller GmbH");
zugFerdStep.setProperty("ZUGFeRDSettlementCreditorBIC", "INGDDEFFXXX");
zugFerdStep.setProperty("ZUGFeRDSettlementLineTotalAmount", "0.00");
zugFerdStep.setProperty("ZUGFeRDSettlementChargeTotalAmount", "0.00");
zugFerdStep.setProperty("ZUGFeRDSettlementAllowanceTotalAmount", "0.00");
zugFerdStep.setProperty("ZUGFeRDSettlementTaxBasisTotalAmount", "0.00");
zugFerdStep.setProperty("ZUGFeRDApplicableTradeTaxBasisAmount", "INGDDEFFXXX");
zugFerdStep.setProperty("ZUGFeRDApplicableTradeTaxApplicablePercent", "0.00");
zugFerdStep.setProperty("ZUGFeRDApplicableTradeTaxCalculatedAmount", "0.00");
zugFerdStep.setProperty("ZUGFeRDSettlementGrandTotalAmount", "0.00");
 
// Job zusammensetzen
Job Job = new Job("ZugFerdJob");
job.addStep(zugFerdStep);


15. XML-Schema

In diesem Abschnitt ist der Stand vom 06.09.2005 des CIB job Schemas für Auftragsdateien und Auftragsergebnisdateien im XML-Format abgedruckt. Durch die umfangreiche Kommentierung dient dies zugleich als Dokumentation und Implementierungsspezifikation für die zugehörigen Programmteile im CIB documentserver und auch in der Kundenanwendung.

Das aktuelle Schema kann jederzeit bezogen werden unter https://www.cib.de/schemas/job/1.5/cibjob.xsd.

<?xml version="1.0" encoding="UTF-8"?>
<!--
   CIB job XML Schema 1.5 für CIB job ab Version 1.6.x.

   (c) CIB software GmbH 2013
   
   de: EINFÜHRUNG:
   Dieses Schema beschreibt formal die XML Struktur einer CIB job Auftragsdatei
   sowie Auftragsergebnisdatei. Sie enthält umfangreiche Kommentare zu den
   einzelnen verwendeten Elementen, so daß sie gleichzeitig als Dokumentation
   und Implementierungsvorgabe dient.
   en: INTRODUCTION:
   This schema describes formal the XML structure from a CIB job jobfile as well as
   job result file. It contains large comments to the single used elements, so they
   can seen as documentation and impenenationrule at the same time. 
  
   de: INHALT:
   Abschnitt 1: Wurzelement für Aufträge und Auftragsergebnisse.
   Abschnitt 2: Elemente für Aufträge.
   Abschnitt 3: Elemente für Auftragsergebnisse.
   en: CONTENT:
   Chapter 1: Root element for jobs and job results.
   Chapter 2: elements for jobs.
   Chapter 3: elements for job results.
  
   de: Es werden explizite <xs:complexType> mit Namen definiert und schrittweise
   zusammengesetzt. Die verfügbaren Properties werden zunächst aufgrund
   ihrer Vielzahl nicht validiert. Insbesondere ist so eine Erweiterung der
   Funktionalität der CIB docgen möglich, ohne das Schema zu verändern.
   en: It will be explicite defined <xs:complexType> with names and composed
   stepwise. The available properties will not be validated by reason of
   their plurality. In particular, an extenstion of the functionality of the
   CIB docgen is possible, without changing the schema.
-->
 
<xs:schema
   xmlns:xs="http://www.w3.org/2001/XMLSchema"    targetNamespace="http://www.cib.de/schemas/job/1.5"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://www.cib.de/schemas/job/1.5"    elementFormDefault="unqualified" attributeFormDefault="unqualified" version="1.5">
  
<!-- Machine readable documentation in several languages -->
<xs:annotation>
   <xs:documentation xml:lang="de">
          Schema für Auftragsdateien und Auftragsergebnisdateien. Mit diesem Schema kann
          das Comod-Element validiert werden.
   </xs:documentation>
   <xs:documentation xml:lang="en">
          Schema for job files and job-result files. This schema allows the validation
          of the Comod element.
   </xs:documentation>
</xs:annotation>
 
 
 
<!-- ABSCHNITT 1: Wurzelelement für Aufträge und Auftragsergebnisdateien
   en: CHAPTER 1: root element for jobs und job-result descriptors -->
 
<!-- Element <Comod>:
   de: Wurzel-Element für CIB job (trennt Auftragsdaten von eventuellen Nutzdaten).
   Fügen Sie einen <Comod>-Element an beliebiger Stelle in Ihrem Auftrags-XML
   hinzu, allerdings nur einen einzigen. Sie können das vorliegende Schema zur
   Validierung des Comod-Elements benutzen, indem Sie es dort referenzieren:
   en: Root element for CIB job (seperates job-data from possible reference-data).
   Add a <Comod>-Element at any postion in your job-XML, but only one. You
   can use the present schema for validation of the Comod-elements by referencing
   there.
   <root>
          <cibjob:Comod xmlns:cibjob="http://www.cib.de/schemas/job/<version>"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"                  xsi:schemaLocation="www.cib.de/schemas/job/<version> cibjob.xsd">
          ...
          </cibjob:Comod>
          <!- - Ihre Daten - - >
          <data xmlns="Ihr Schema">
          ...
          </data>
   </root>
-->
<xs:element name="Comod" type="ComodType"/>
 
<!-- User data shall be presentable in arbitrary layout -->
<xs:complexType name="UserData">
  <xs:sequence>
    <xs:any />
  </xs:sequence>
</xs:complexType>
 
<!-- Element <Comod>:
   de: Das Comod-Element enthält im Fall von Auftragsdateien Standardeinstellungen
   (defaults) und Jobs (jobs). Im Fall von Auftragsergebnisdateien stattdessen nur
   die Jobergebnisse (job-results). In beiden Fällen kann angegeben werden, auf
   welche Schemaversion sich das Comod-Element bezieht und welche Anwendung
   und Anwendungsversion das XML erzeugt hat.
   en: In case of job-files the Comod element contains default settings (defaults)
   and jobs (jobs). If there are job-result files, the Comod element contains only
   job-results. In all cases you can specify the refered schemaversion
   of the Comod element and which application and application-version are generated the xml.
   -->
<xs:complexType name="ComodType">
   <xs:sequence>
          <!-- Element <version>:
                 de: Version der Struktur des Comod-Elements. Das entspricht der
                 Version des Schemas.
                 en: Version of the structure of the Comod element. This correspond
                 to the schema-version. -->
          <xs:element name="version" type="xs:string" minOccurs="0" />
          <!-- Element <producer>:
                 de: Erzeugende Anwendung. Wenn die Version der erzeugenden
                 Anwendung im XML stehen soll, so muß sie hier mit angegeben werden,
                 nicht im Element <version>.
                 en: Generating application. If the version of the generating application
                 are to be located in the XML file, so you have to specifiy the version here
                 and not at element <version>. -->
          <xs:element name="producer" type="xs:string" minOccurs="0"/>
          <!-- Element <async-id>:
                 de: Numerische Identifier für asynchrone Anfragen. Das Elementist optional
                 und ist synchrone Anfragen leer.
                 en: Identifier for asynchronous requests. this element is optional and empty for
                 synchrounous requests-->
          <xs:element name="async-id" type="xs:string" minOccurs="0" maxOccurs="1"/>
          <!-- Element <async-state>:
                 de: Status von asynchrone Anfragen. Das Element ist optional
                 und ist synchrone Anfragen leer.
                 en: state for asynchronous requests. this element is optional and empty for
                 synchrounous requests-->
          <xs:element name="async-state" type="xs:string" minOccurs="0" maxOccurs="1"/>
          <!-- de: Nach diesen Standardelementen folgt nun entweder eine Auftragsdatei
                 oder eine Auftragsergebnisdatei.
                 en: After these default-elements a job-file or a job-result file
                 is now following. -->
          <xs:choice>
                 <!-- de: Alternative: Auftragsdatei, siehe Abschnitt 2
                        en: Option: job-file, see chapter 2 -->
                 <xs:sequence>
                        <!-- Element <defaults>:
                              de: Grundeinstellungen für beliebige Kommandos. Sie gelten für alle
                              Jobs in diesem Auftrag. Siehe DefaultType.
                              en: Default settings for any commands. They are effective for all
                              jobs in these job. -->
                        <xs:element name="defaults" type="DefaultType" minOccurs="0" maxOccurs="1"/>
                        <!-- Element <jobs>:
                              de: Auflistung der Jobs in diesem Auftrag, siehe auch JobType.
                              en: Listing of jobs in these job, see also JobType. In case of async
                              poll requests, the jobs element is missing. -->
                        <xs:element name="jobs" type="JobsType" minOccurs="0" maxOccurs="1"/>
                 </xs:sequence>
                 <!-- de: Alternative: Auftragsergebnisdatei, siehe Abschnitt 3
                        en: Option: job-result file, see chapter 3 -->
                 <xs:sequence>
                        <!-- Element <job-results>:
                              de: Auflistung von Jobergebnissen. Siehe JobResultType
                              en: Listing of job-results. See JobResultType. In case of async responses
                              the jobs element is missing. -->
                        <xs:element name="job-results" type="JobResultsType" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
    </xs:choice>
  </xs:sequence>
</xs:complexType>
 
 
 
<!-- de: ABSCHNITT 2: Elemente für Aufträge
   en: CHAPTER 2: elements for jobs -->
 
<!-- Element <defaults>:
   de: Die Grundeinstellungen bestehen aus einer Folge von properties-Elementen. Es
   ist hierbei erforderlich, daß bei jedem Element das Attribut command angegeben
   ist, um zu spezifizieren, für welches Kommando die Standardeinstellungen
   gelten.
   Das Element <defaults> wurde eingeführt, damit bei der Erzeugung von
   Auftrags-XMLs die Grundeinstellungen von den Schritteinstellungen unabhängig
   erzeugt werden können.
   en: The default settings consists of a order of properies-elements. It is necessary
   to specify for each element the attribut command to determine, for which command
   the default values will be applied.
   The element <defaults> was introduced for a independent creation of the default
   settings from the step-settings if you generate job-XMLs. -->
<xs:complexType name="DefaultType">
  <xs:sequence>
    <!-- Element <defaults>.<properties>:
                 de: Eine Folge von properties-Elementen, nicht Einzelproperties
                 (property-Element). Bei jedem properties-Element muß das command-
                 Attribut angegeben sein. Beispiel:
                 <defaults>
                        <properties command="format">
                              <property name="OutputFormat">FormatPdf</property>
                        </properties>
                 </defaults>
                 en: An order of properties-elements, not single properties (property-element).
                 For each properties-element you have to specify the command-attribut.
                 Example:
                 <defaults>
                        <properties command="format">
                              <property name="OutputFormat">FormatPdf</property>
                        </properties>
                 </defaults>-->
    <xs:element name="properties" type="PropertiesType" minOccurs="0"
                 maxOccurs="unbounded"/>
  </xs:sequence>
</xs:complexType>
 
<!-- Element <jobs>:
   de: Das Jobs-Element faßt die im Auftrag enthaltenen Jobs zusammen.
   Die Jobs sind voneinander unabhängig und werden nacheinander in der in
   der Auftragsdatei angegebenen Reihenfolge abgearbeitet.
   en: The job-element unites the containing jobs in a job. The jobs are independent
   from each other and will executed one after another, in the order specified
   in the jobfile.-->
<xs:complexType name="JobsType">
  <xs:sequence minOccurs="0" maxOccurs="unbounded">
    <!-- Element <jobs>.<job> -->
    <xs:element name="job" type="JobType" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
</xs:complexType>
 
<!-- Element <job>:
   de: Ein Job spezifiziert eine Folge von Schritten, die in der angegebenen Reihenfolge
   abgearbeitet werden. Zusätzlich werden spezielle Einstellungen für den
   Jobmanager (CIB job) hier angegeben.
   en: A job describes an order of steps, which are executed in specified order.
   Additional specify here special settings for the jobmanager (CIB job). -->
<xs:complexType name="JobType">
  <xs:sequence>
    <!-- Element <job>.<properties>:
                 de: Dies sind die Zuweisungen der Werte an die CIB job Properties. Sie sind
                 meistens nicht erforderlich, da diese Einstellungen oben in den Defaults
                 getroffen werden.
                 en: These are the assignments of the values to the CIB job properties. Mostly
                 they are not necessary because these settings are set in the defaults. -->
    <xs:element name="properties" type="PropertiesType" minOccurs="0" maxOccurs="1"/>
          <!-- Element <job>.<outputs>:
                 de: Hier können die Ausgaben definiert werden. Normalerweise ist die Ausgabe
                 eines Jobs die Ausgabe des letzten Schrittes. Dies kann mit dem output-
                 Element so abgeändert werden, daß die Ausgaben irgendeines Schrittes
                 oder auch von mehreren Schritten als Jobergebnis zurückgeliefert
                 werden.
                 en: Here can be defined the outputs. Usually the output is the result of a
                 job from the last step. This can be changed with the output-element so,
                 that the results from any step or from more steps are returned as
                 job-result. -->
          <xs:element name="outputs" type="OutputsType" minOccurs="0" maxOccurs="1"/>
          <!-- Element <job>.<steps>:
                 Hier folgen nun die Schritte des Jobs.
                 en: The steps of the job are now followed here. -->
          <xs:element name="steps" type="StepsType" minOccurs="1" maxOccurs="1"/>
   </xs:sequence>
   <!-- Attribut <job>.name:
          de: Der Job hat einen eindeutigen Namen. Dies kann sinnvoll sein, wenn mehrere
          jobs in einem Auftrag enthalten sind. Der Name kann zum Beispiel eine
          Session-ID sein.
          en: The job has a unique name. This make sense if more jobs contained in one job.
          For example, the name can be a session-ID.-->
   <xs:attribute name="name" type="xs:string" use="required"/>
   <!-- Attribut <job>.expected-result-code:
          de: Hier kann der zu erwartende Fehlercode angegeben werden.
          en: The expected error code can be specified here. -->
   <xs:attribute name="expected-result-code" type="xs:string" />
   <!-- Attribut <job>.id:
          de: Eine id, die in Properties mit $(id) eingesetzt werden kann.
          en: An arbitrary id, which can be placed in properties as $(id). -->
   <xs:attribute name="id" type="xs:string" use="optional"/>
   <!-- Attribut <job>.timeout:
          de: Ein optionaler Timeout für den gesamten job.
          en: An optional timeout for the execution time of the whole job. -->
   <xs:attribute name="timeout" type="xs:string" use="optional"/>
</xs:complexType>
 
<!-- Element <job>.<outputs>:
   de: Die Ausgaben werden durch Angabe von einem oder mehreren Step-Namen
   ausgewählt.
   en: The outputs are selected by indicating one or more step-names. -->
<xs:complexType name="OutputsType">
   <xs:sequence>
          <!-- Element <job>.<outputs>.<output>:
                 de: Der Name des Schritts wird als Attribut Name dieses Elements angegeben.
                 Siehe auch StepNametype.
                 en: The name of the step are specified by attribut name from this element.
                 See also StepNametype. -->
          <xs:element name="output" type="StepNameType" minOccurs="0" maxOccurs="unbounded"/>
   </xs:sequence>
</xs:complexType>
 
<!-- Element <steps>:
   de: Hier werden die einzelnen Arbeitschritte definiert. Die Schritte werden in der
   angegebenen Reihenfolge abgearbeitet. Die Ausgabe des einen Schritts wird zur
   Eingabe des Nachfolgenden, außer diese Standardverknüpfung wird mit dem
   inputs-Element abgeändert. Siehe StepType.
   en: The single working-steps will be defined here. The steps are executed in
   specified order. The output from a step will be the input for the follower,
   besides these standardlink will be changed with the inputs-element. See StepType. -->
<xs:complexType name="StepsType">
   <xs:sequence>
          <!-- Element <steps>.<step> -->
          <xs:element name="step" type="StepType" maxOccurs="unbounded"/>
   </xs:sequence>
</xs:complexType>
 
<!-- Element <step>:
   de: Definition eines Schrittes. Ein Schritt ruft immer ein einziges Kommando auf.
   Das Kommando ist daher neben dem Schrittnamen die wichtigste Angabe.
   Außerdem werden kommandospezifische Einstellungen vorgenommen.
   en: Definition for a step. A step always calls a single command. Therefore, the command is
   besides the stepname, the primary instruction. In addition there will be
   commando-specific settings.-->
<xs:complexType name="StepType">
   <xs:sequence>
          <!-- Element <step>.<inputs>:
                 de: Normalerweise ist die Eingabe dieses Schritts die Ausgabe des
                 Vorhergehenden. Mit dem inputs-Element können jedoch die Ausgaben von
                 einem oder mehreren anderen Schritten aus diesem Job als Eingaben
                 ausgewählt werden. Die genannten Schritte müssen aber bereits
                 ausgeführt sein, also weiter oben im Job stehen.
                 en: Usually the input for these step is the output from the former. However, with
                 the inputs-element can be selected the outputs from one or more steps
                 from this job as inputs. However, the mentioned steps have already to be
                 executed, so they have to stand above the job. -->
          <xs:element name="inputs" type="InputsType" minOccurs="0" maxOccurs="1"/>
          <!-- Element <step>.<properties>:
                 de: Dies sind Zuweisungen der Werte an die kommandospezifischen
                 Properties. Die Angabe des Kommandos ist hier nicht erforderlich, da
                 sie sich immer auf das Schrittkommando beziehen.
                 en: These are assignments of the value to the commandospecific properties.
                 Here, the statement of the command is not necessary, because they
                 always refer to the step-command. -->
          <xs:element name="properties" type="PropertiesType" minOccurs="0" maxOccurs="1"/>
          <!-- Element <step>.<trace>:
                 de: Optional kann der Inhalt einer oder mehrerer Tracedateien in das
                 Schrittergebnis eingefügt werden. Das trace-Element muß also einen
                 Dateinamen auf dem Server enthalten, wenn es angegeben ist.
                 en: Optional the content of one or more trancefiles can inserted in
                 the step-result. If it is specified, the trace element must contain a
                 filename on the     server.-->
          <xs:element name="trace" type="xs:string" minOccurs="0" maxOccurs="1" />
   </xs:sequence>
   <!-- Attribut <step>.name:
          de: Der Name des Schrittes muss innerhalb eines Jobs eindeutig sein, damit
          der Schritt in den inputs- und outputs-Elementen adressiert werden kann.
          en: Inside of the job the name of the step have to be unique because the step
          can be addressed into inputs and outputs elements.
   -->
   <xs:attribute name="name" type="xs:string" use="required"/>
   <!-- Attribut <step>.command:
          de: Das auszuführende Kommando muß unbedingt angegeben sein. Die
          Menge der verfügbaren Kommandos hängt von der Version des Auftrags-
          Managers (CIB job) ab. Eine Validierung der hier angegebenen
          Kommandos wird im Hinblick auf die zukünftigen benutzerdefinerten
          Kommandos nicht vorgenommen.
          en: The command to be executed have to be specified necessarily. The amount
          of the available commands depends on the version of the Jobmanager (CIB job).
          A validation of the here specified commands will be not taken in view of future
          user defined commands. -->
   <xs:attribute name="command" type="xs:string" use="required"/>
   <!-- Attribut <step>.expected-result-code:
          de: Hier kann der zu erwartende Fehlercode angegeben werden.
          en: The expected error code can be specified here. -->
   <xs:attribute name="expected-result-code" type="xs:string" />
   <!-- Attribut <step>.timeout:
          de: Ein optionaler Timeout für diesen einen step.
          en: An optional timeout for the execution time of this step. -->
   <xs:attribute name="timeout" type="xs:string" use="optional"/>
</xs:complexType>
 
<!-- Element <step>.<inputs>:
   de: Die Eingaben werden durch Angabe des Step-Namens identifiziert. Hiermit
   kann die Standardverknüpfung der Schritte abgeändert werden. Die
   Standardverknüpfung entspricht der Aufschreibungs- und damit der
   Ausführungsreihenfolge. Siehe auch StepType.
   en: The inputs will be identified by specification of the step-name. Herewith, the
   defaultlink of the steps can be changed. The defaultlink corresponds to the
   written and so to the executed order. See also StepType. -->
<xs:complexType name="InputsType">
   <xs:sequence>
          <!-- Element <step>.<inputs>.<input>:
                 de: Der Name des Schritts wird als Attribut name dieses Elements angegeben.
                 Siehe auch StepNametype.                  en: The name of the step will be specified as attribut name for this element.
                 See also StepNametype. -->
          <xs:element name="input" type="StepNameType" minOccurs="0"
                 maxOccurs="unbounded"/>
   </xs:sequence>
</xs:complexType>
 
<!-- Element <properties>:
   de: Properties werden durch dieses Element zusammengefaßt. Das command-
   Attribut ordnet die genannten Properties einem Kommando zu.
   en: Properties are summarized by this element. The command attribut assigns the
   mentioned properties to a command. -->
<xs:complexType name="PropertiesType">
   <xs:sequence>
          <!-- Element <properties>.<property>:
                 de: Eine eventuell leere Folge von einzelnen Property-Wertzuweisungen.
                 Siehe PropertyType
                 en: A possible empty order for a single property value-assignment. See PropertyType -->
          <xs:element name="property" type="PropertyType" minOccurs="0"                  maxOccurs="unbounded"/>
   </xs:sequence>
   <!-- Attribut <properties>.command:
          de: Das command-Attribute ist optional, weil Properties ja automatisch bereits
          einem Kommando zugeordnet sind, wenn sie innerhalb eines Schrittes
          angegeben    sind. Den ein Schritt bezieht sich ja immer nur auf ein
          Kommando. Bei der Angabe von Properties im defaults-Element ist das
          nicht der Fall. Daher muß dort das command-Attribut belegt werden.
          en: The command attribut is optional, because properties are automatically
          assigned to a command if they are declared inside of a step. Because a step
          refers always to only one command. At the specification of properties in the
          defaults element this is not in the case. Therefore, there is to set the
          command attribut.
   -->
   <xs:attribute name="command" type="xs:string" use="optional"/>
</xs:complexType>
 
<!-- Element <property>:
   de: Ein Property-Element weist einem kommandospezifischen Propertynamen
   einen der dafür zugelassenen Werte zu. Die verfügbaren Propertynamen werden
   zunächst aufgrund ihrer Vielzahl nicht nach Name oder Werttyp validiert, obwohl
   das sicherlich hilfreich wäre. Dies ist aufgrund der Kommandozuordnung mit
   nicht mit dem Schema möglich. Eine Zwischenversion könnte jedoch alle überhaupt
   verfügbaren Namen validieren.
   en: A property element assigns to a commando-specific propertyname a valid value. Due to
   the plurality of the available propertynames, they are not validated by name or
   valuetype, although this will be certainly helpfully. Because of the commando assignment,
   this ist not possible with the schema. However, a temporary version can
   validate all available names. -->
   <xs:complexType name="PropertyType">
          <xs:simpleContent>
                 <!-- Attribut <property>.name:
                        de: Der Inhalt wird also als Textelement im property-Element angegeben und
                        der Name als Attribut: <property name="Name">Wert</property>. Ein
                        leerer Propertywert kann als <property name="Name"/> ausgedrückt
                        werden.
                        en: The content is specified at the property element as text element and
                        the name is specified as attribut: <property name="Name">Wert</property>.
                        An empty property value can named by <property name="Name"/>. -->
                 <xs:extension base="xs:string">
                        <xs:attribute name="name" type="xs:string"
                              use="required" />
                        <!-- Attribut <property>.mode:
                              de: derzeit werden nur die Werte: "in" "out" "inout" ausgewertet, alle anderen Werte
                              werden intern noch auf "in" gesetzt.
                              Die Modes "out" und "inout" ermglichen einem Step Property-Werte an den Aufrufer
                              zurückzuliefern
                              en: Currently only the values "in" "out" "inout" will be evaluated, any other
                              values will be put internal to "in". The modes "out" and "inout" enables a
                              step to return to the caller property-values. -->
                        <xs:attribute name="mode" type="xs:string" default="in">
        </xs:attribute>
                 </xs:extension>
          </xs:simpleContent>
   </xs:complexType>
 
   <!-- Attribut <inputs>.name und <outputs>.name:
   de: Angabe eines Schrittnamens. Dieser Typ wird in Ein- und Ausgabedefinitionen
   verwendet. Siehe Inputstype und OutputsType.
   en: Specification of a stepname. This type will be used in input and output
   definitions. See Inputstype and OutputsType.-->
<xs:complexType name="StepNameType">
   <xs:attribute name="name" type="xs:string"/>
</xs:complexType>
 
 
 
<!-- de: ABSCHNITT 3: Elemente für Auftragsergebnisse
    en: CHAPTER 3: elements for job-results -->
 
<!-- Element <failed>:
   de: Dieses Element gibt den Namen des Jobs an, der fehlgeschlagen ist.
          Wenn kein solcher Job angegeben werden kann, weil etwa ein anderer
          Fehler vorliegt, so fehlt das Element. Der Name des Jobs wird als
          Attribut jobname dieses Elements angegeben.
   en: This element indicates the name of the failured job. If no step can
          be specified, because another error is existent, the element is
          missing. The name of the job is specified as the attribut jobname.
-->
<xs:complexType name="JobFailed">
   <xs:sequence>
          <xs:element name="failed" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
   </xs:sequence>
   <xs:attribute name="jobname" type="xs:string" use="required"/>
</xs:complexType>
<!-- Element <job-results>:
   de: Dieses Element faßt die Ergebnisse der einzelnen Jobs zusammen. Da
   die Jobs unabhängig voneinander ausgeführt werden, kann ein Job erfolgreich
   gewesen sein, ein anderer aber einen Fehler enthalten. Zu jedem Job im Auftrag
   wird ein Ergebnis geliefert.
   en: These element summarizes the results of the single jobs. Because the jobs
   are executed independent from each other, a job can be succeeded but another
   can contain an error. At any job in the job a result is returned. -->
<xs:complexType name="JobResultsType">
   <xs:sequence>
          <!-- Element <job-results>.<failed>:
                 de: Dieses Element gibt den Namen des Jobs an, der fehlgeschlagen ist.
                 Wenn kein solcher Job angegeben werden kann, weil etwa ein anderer
                 Fehler vorliegt, so fehlt das Element. Der Name des Jobs wird als
                 Attribut jobname dieses Elements angegeben. Siehe auch JobNametype.
                 en: This element indicates the name of the failured job. If no job can
                 be specified, because another error is existent, so the element is
                 missing. The name of the job is specified as the attribut jobname.-->
          <xs:element name="failed" type="JobFailed" minOccurs="0" maxOccurs="unbounded"/>
          <!-- Element <job-results>.<job-result>:
                 de: Liste der Jobergebnisse zu allen Jobs. Wenn diese nicht bekannt ist,
                 muss das Element fehlen.
                 en: This element contains the list of job results. If the number of job-results
                 is not known, this element is missing.-->
          <xs:element name="job-result" type="JobResultType" minOccurs="0"
                 maxOccurs="unbounded"/>
   </xs:sequence>
</xs:complexType>
<!-- Element <failed>:
   de: Dieses Element gibt den Namen des Schrittes an, der fehlgeschlagen ist.
          Wenn kein solcher Schritt angegeben werden kann, weil etwa ein anderer
          Fehler vorliegt, so fehlt das Element. Der Name des Schritts wird als
          Attribut name dieses Elements angegeben.
   en: This element indicates the name of the failured step. If no step can
          be specified, because another error is existent, so the element is
          missing. The name of the step is specified as the attribut name.
-->
<xs:complexType name="StepFailed">
   <xs:sequence>
          <xs:element name="failed" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
   </xs:sequence>
   <xs:attribute name="name" type="xs:string" use="required"/>
</xs:complexType>
<!-- Element <job-result>:
   de: Das Ergebnis eines einzelnen Jobs enthält einen Fehlercode ungleich 0, wenn
   einer der Schritte fehlgeschlagen ist, oder ein anderer Fehler aufgetreten ist.
   Wenn alle Schritte erfolgreich durchgeführt wurden, ist der Fehlercode 0.
   In beiden Fällen sind alle Schrittergebnisse enthalten. Aber nur bei Erfolg
   sind darin auch die Ergebnisdokumente enthalten, die über das outputs-
   Element angefordert waren. War das output-Element nicht angegeben, so
   enthält nur der letzte Schritt ein Ergebnisdokument.
   en: If one of the steps failed or another error occured, the result of a single
   job contains an errorcode unlike 0. If all steps are succeeded, the errorcode is 0.
   In all cases all step-results are included. But only if there is a success,
   the result documents are contained, which are demanded on the outputs element. If
   there was no specified output element, so only the last step is a result document. -->
<xs:complexType name="JobResultType">
   <xs:sequence>
          <!--de: Numerischer Fehlercode. 0 bedeutet, daß alle Schritte erfolgreich
                 ausgeführt wurden. Der eigentliche Fehlercode findet sich jedoch beim
                 step-result-Element des fehlgeschlagenen Schrittes.
                 en: Numerical errorcode. 0 means, that all steps are succeeded. The acutal
                 errorcode is located at the step-result-element from the failured step. -->
          <xs:element name="job-result-code" type="xs:int"/>
          <!--de: Wenn ein Fehler aufgetreten ist, wird hier zum Fehlercode zusätzlich
                 ein Fehlertext mitgeliefert. Die genaue Fehlerursache wird jedoch im
                 step-result-text-Element des fehlgeschlagenen Schrittes geliefert.
                 en: If an error occured, there will be an an additional error message.
                 The detailed cause of error is located at the step-result-text-element
                 from the failure step. -->
          <xs:element name="job-result-text" type="xs:string" minOccurs="0"/>
          <!-- Element <job-result>.<job-timing>:
                 Timing for this job. -->
          <xs:element name="job-timing" type="xs:string" />
          <!-- Element <job-result>.<failed>:
                 de: Dieses Element gibt den Namen des Schrittes an, der fehlgeschlagen ist.
                 Wenn kein solcher Schritt angegeben werden kann, weil etwa ein anderer
                 Fehler vorliegt, so fehlt das Element. Der Name des Schritts wird als
                 Attribut name dieses Elements angegeben. Siehe auch StepNametype.
                 en: This element indicates the name of the failured step. If no step can
                 be specified, because another error is existent, so the element is
                 missing. The name of the step is specified as the attribut name.-->
          <xs:element name="failed" type="StepFailed" minOccurs="0" maxOccurs="unbounded"/>
          <!-- Element <job-result>.<step-results>:
                 de: Hier folgen nun die Ergebnisse der Schritte.
                 en: The results of the steps now followed here. -->
          <xs:element name="step-results" type="StepResultsType" minOccurs="1" maxOccurs="1"/>
   </xs:sequence>
   <!-- Attribut <job-result>.name:
          de: Im job-result-Element wird der Name des zugehörigen Jobs aus dem Auftrag
          wiederholt, um bei mehreren Jobs eine Identifizierung zu ermöglichen.
          en: At the job-result-element the name of the associated job from the request will be
          repeated, to enable in more jobs a identification. -->
   <xs:attribute name="name" type="xs:string" use="required"/>
   <!-- Attribut <job-result>.id:
          de: Im job-result-Element wird die id des zugehörigen Jobs aus dem Auftrag
          wiederholt, um bei mehreren Jobs eine Identifizierung zu ermöglichen.
          en: At the job-result-element the id  of the associated job from the request will be
          repeated, to enable in more jobs a identification. -->
   <xs:attribute name="id" type="xs:string" use="optional"/>
</xs:complexType>
 
<!-- Element <step-results>:
   de: Abfolge der Einzelschrittergebnisse. Es ist für jeden Schritt aus dem Auftrag ein
   Schrittergebnis vorhanden. Wenn bei einem Schritt ein Fehler aufgetreten ist, so
   sind der fehlercode und -text beim entsprechenden step-result-Element enthalten.
   Die Schrittergebnisse der nachfolgenden Schritte sind ebenfalls vorhanden, sie
   haben jedoch den Fehlercode "Nicht ausgeführt".
   en: Sequence of single-step-results. For each step from the job a step result is
   existing. If an error occured in a step, the error code und message is contained
   at the corresponding step-result-element. The step-results of the following steps
   are also existent, but they have the error code "Nicht ausgeführt".-->
<xs:complexType name="StepResultsType">
   <xs:sequence>
          <!-- Element <step-results>.<step-result> -->
          <xs:element name="step-result" type="StepResultType"
                 maxOccurs="unbounded"/>
   </xs:sequence>
</xs:complexType>
 
<!-- Element <step-result>:
   de: Ergebnisse eines Bearbeitungsschrittes. Dieses Element enthält neben dem Fehlercode
   gegebenenfalls auch das Ergebnisdokument.
   en: Results of a working step. This element contains besides the error code
   also the result document if necessary. -->
<xs:complexType name="StepResultType">
   <xs:sequence>
          <!-- Element <step-result>.<step-result-code>:
                 de: Kommandospezifischer, numerischer Fehlercode. 0 bedeutet, daß der
                 Schritt erfolgreich ausgeführt wurde.
                 en: Commandospecific, numerical error code. 0 means, that the step
                 is executed succeeded -->
          <xs:element name="step-result-code" type="xs:int" />
          <!-- Element <step-result>.<step-result-text>:
                 de: Kommandospezifischer Fehlertext, häufig mit hilfreichen
                 Zusatzinformationen aus dem aufgerufenen Modul.
                 en: Commandospecific error message, frequently with helping
                 additional informations from the called modul. -->
          <xs:element name="step-result-text" type="xs:string" />
          <!-- Element <step-result>.<step-timing>:
                 Timing for this step. -->
          <xs:element name="step-timing" type="xs:string" />
          <!-- Element <step-result>.<properties>:
               Sequenz aller OutputProperties dieses Schritts:
               Dies sind alle Properties mit mode=out bzw inout -->
          <xs:element name="properties" type="PropertiesType" maxOccurs="1" minOccurs="0"></xs:element>
          <!-- Element <step-result>.<step-data>:
                 de: Enthält im Erfolgsfall bei Schritten, die ein Ergebnis liefern das
                 Ergebnisdokument oder allgemeiner Ergebnisdaten, wie etwa eine Url.
                 en: In success case on steps, which returns a result contains the
                 result document or commonly resultdata like for example an url. -->
            <xs:element name="step-data" type="StepDataType" minOccurs="0" maxOccurs="1"/>
          <!-- Element <step-result>.<step-trace>:
                 de: Wenn im Auftrag ein trace-Element angegeben war, wird im step-trace-
                 Element der zugehörige Dateiinhalt zurückgeliefert. Auch im Erfolgsfall
                 en: If a trace element was specifiend in a job, there will returned the
                 according file content at the step trace element. -->
          <xs:element name="step-trace" type="xs:string" minOccurs="0" maxOccurs="1" />
   </xs:sequence>
   <!-- Attribut <step-result>.name:
          de: Der Name entspricht dem Namen des zugehörigen Schritts im
          Auftrag.
          en: The name corresponds to the name of the associated step at the job. -->
   <xs:attribute name="name" type="xs:string" use="required"/>
</xs:complexType>
  
<!-- Element <step-result>.<step-data>:
   de: Schrittergebnis-Typ (Base64 oder CData).
   en: step-result-type (Base64 or CData) -->
<xs:complexType name="StepDataType">
   <xs:simpleContent>
          <xs:extension base="xs:string">
                 <!-- Attribut <step-data>.encoding:
                        de: Das encoding-Attribut gibt an, welche Art von Ergebnis im step-data-
                        Element enthalten ist. Derzeit sind dies base64 für Ergebnisdokumente
                        und cdata.
                        en: The encoding attribut specifies the kind of result, contained in the
                        step data element. Currently these are base64 and cdata. -->
                 <xs:attribute name="encoding">
                        <xs:simpleType>
                              <xs:restriction base="xs:string">
                                     <!-- Enum <step-data>.encodings:
                                            de: Hier werden ggf. weitere mögliche Encodings definiert.
                                            en: Here, more available encodings will be defined. -->
                                     <xs:pattern value="base64|cdata"/>
                              </xs:restriction>
                        </xs:simpleType>
                 </xs:attribute>
                 <!-- Attribut <step-data>.mimetype:
                        de: Gibt den Dokumenttyp des im step-data-Element enthaltenen
                        Ergebnisdokuments an. Die Angabe erfolgt http-konform, also
                        etwa application/pdf oder text/plain.
                        en: Specifies the document type from the result-document which is
                        contained at the step data element. The specification happens
                        http-conform, for example application/pdf or text/plain. -->
                 <xs:attribute name="mimetype" type="xs:string"/>
          </xs:extension>
   </xs:simpleContent>
</xs:complexType>
 
<!-- Schema: "http://www.cib.de/schemas/job/<version>" -->
</xs:schema>


16. Output Properties

CIB format/output
CIB merge
CIB pdf toolbox merge / CIB pdf toolbox join
Weitere Output Properties mit Attribut mode

CIB format/output

 

 

Ab Version

GeneratedDocumentCount

CIBPDF_PROP_GENERATED_DOCUMENT_COUNT

1.4.16

PrintedPageCount

CIBPR_PROP_PRINTED_PAGE_COUNT

1.4.16

CheckMaskViolations

COMOD_PROP_CHECKMASKVIOLATIONS

1.4.16

DocumentUsedFonts

CIBPR_PROP_DOCUMENT_USED_FONTS

1.4.16

DocumentUsedOriginFonts

CIBPR_PROP_DOCUMENT_USED_ORIGINFONTS

1.4.18

DocumentUsedPaperFormats

CIBPR_PROP_DOCUMENT_USED_PAPER_FORMATS

1.4.18

DocumentUsedGraphics

CIBPR_PROP_DOCUMENT_USED_GRAPHICS  

1.4.18



CIB merge

 

 

Ab Version

GeneratedDocumentCount

CIBPDF_PROP_GENERATED_DOCUMENT_COUNT

1.4.16



CIB pdf toolbox merge / CIB pdf toolbox join

 

 

Ab Version

GeneratedDocumentCount

CIBPDF_PROP_GENERATED_DOCUMENT_COUNT

1.4.16

PageCount

COMOD_PROP_PAGECOUNT

1.4.19



Weitere Output Properties mit Attribut mode

Ab CIB job 2.1.0 besteht die Möglichkeit weitere Output Properties in den einzelnen CIB job Steps abzuholen.

Dafür muss man im Auftrag die abzuholenden Properties mit dem entsprechenden Wert des Atributes "mode" setzen. Im zugehörigen Response werden dann die Werte der jeweiligen Properties ausgegeben.  

Die möglichen Werte des "mode" Atributes sind:

  • "In": Defaultwert
  • "Out": Damit wird angegeben, dass die Property abgeholt werden soll
  • Inout: Damit setzt man einen Wert für diese Property, der dann ebenfalls im Response abgeholt wird

Beispiel: 

<step command="pdfjoin" expected-result-code="0" name="imageGenerator">
   <properties>
          <property name="TextLayerInfo" mode="out"/>
          <property name="DocInfo.Author" mode="inout">author</property>
          <property name="OutputFormat">FormatWebview</property>
          <property name="RenderingEngine">CIBRenderer</property>
          <property name="OutputFilename">page_cib_renderer2.png</property>
          <property name="InputFilename">input_cib_renderer2.pdf</property>
   </properties>
</step>

 

 In diesem Step wird der Property DocInfo.Author mit Modus "inout" ein Wert übergeben. Ausserdem wird die Property TextLayerInfo mit Modus "out" angegeben.

Beide Properties mit deren entsprechenden Werten werden im Response gelistet.

        <step-result name="imageGenerator">          
             <step-result-code>0</step-result-code>
        <step-result-text>Erfolgreich</step-result-text>          <step-timing>0:00:00,219</step-timing>
          <properties>
            <property name="DocInfo.Author">author</property>
            <property name="TextLayerInfo">{"groups":["any_visible"]}</property>
            <property name="PageCount">3</property>
            <property name="GeneratedDocumentCount">1</property>
          </properties>
          <step-data/>
        </step-result>

 

Ein Sonderfall ist die Property PageInfo. Hier muss zusätzlich die Property GetPageInfo gesetzt werden.

<step name="TestPageInfo" command="pdfjoin">
   <properties>
          <property name="PageInfo" mode="out"/>
          <property name="GetPageInfo">1</property>
          <property name="InputFilename">TestPageInfo.pdf</property>  
   </properties>
</step> 

 

Im Response wird die Breite, Höhe und Orientierung pro Seite geliefert.​

      <step-result name="TestPageInfo">
        <step-result-code>0</step-result-code>
        <step-result-text>Erfolgreich</step-result-text>
        <step-timing>0:00:00,015</step-timing>
        <properties>
            <property name="PageCount">3</property>
            <property name="GeneratedDocumentCount">1</property>
            <property name="PageInfo.0">Width=595.3 Height=841.9 Rotate=0</property>
            <property name="PageInfo.1">Width=595.3 Height=841.9 Rotate=90</property>
            <property name="PageInfo.2">Width=295.1 Height=756.1 Rotate=0</property>
          </properties>
          <step-data/>
        </step-result>

17. Fehlercodes

Wir empfehlen zur konkreten Auswertung der Fehlernummer, die Funktion CibJobGetLastErrorText bzw. CibJobGetErrorText zu verwenden. Die hier angegebene Übersicht zeigt eine Übersicht über die Fehlernummern. Die aktuelle Software kann ggf. noch umfangreichere Fehlerinformationen enthalten.

Rückgabewert

Bedeutung / Mögliche Ursache

0

Vorgang erfolgreich abgeschlossen.

401

Alle XML-Parser-Fehler, Details im Fehlertext

402

Funktion ist nicht implementiert

403

Interner Fehler. Bitte an den Support support@cib.de melden.

404

Es wurde ein Fehler von einem Ausführungsschritt gemeldet. Die eigentliche Fehlerursache und den zugehörigen Fehlercode findet man in der Auftragsergebnisdatei im stepresult.

405

Die Eingabe ist leer.

406

Die Angaben zu einem Job oder Step sind fehlerhaft oder nicht ausreichend.

407

Die verwendeten Properties sind nicht miteinander kompatibel.

408

Reserviert

409

Es wurden keine Angaben zur Eingabe vorgenommen.

410

Es ist eine Ausnahme in Java aufgetreten.

411

Ein Schritt wurde aufgrund eines Fehlers bei einem vorhergehenden Schritt nicht ausgeführt.

412

Der Schritt wurde abgebrochen, da er länger als die maximale Laufzeit benötigt hat.

413

Der Schritt wurde abgebrochen, da er länger als die maximale Laufzeit benötigt hat.

414

Der Job wurde abgebrochen, da er länger als die maximale Laufzeit benötigt hat.

 

436

Framework: Beim Abholen einer Auftragsergebnisdatei, die asynchron vom CIB documentserver bearbeitet wurde ist ein Fehler aufgetreten.

437

Framework: Allgemeine Ausnahme

438

Framework: Kein Socketserver verfügbar

439

Framework: Timeout beim Lesen von den Socketservers. Die Bearbeitungszeit des Dokuments ist zu lang.

440

SocketServer: Der Socketserver hat das Terminierungssignal empfangen und sich deshalb beendet

441

SocketServer: Zu wenig oder keine Argumente

442

SocketServer: Nicht zulässige Portnummer

443

SocketServer: Das Modul CIB job konnte nicht geladen werden

444

SocketServer: Ungültiger Content-Type im http-Request

445

SocketServer: allgemeiner Fehler mit Beschreibung

446

SocketServer: allgemeiner Fehler

447

SocketServer: Die Url im http-Header ist ungültig. Erlaubt sind /job und /terminate

448

Reserviert

449

Reserviert

1000

ungültige Lizenz (wird nicht unterstützt)

1001

LibreOffice konnte nicht geladen werden

1002

unbekannter Fehler (wird noch nicht unterstützt)

1003

allgemeiner I/O-Fehler (wird noch nicht unterstützt)

1004

Fehler beim Laden des InputFiles

1005

Fehler beim Speichern des OutputFiles

1006

ungültiger Parameter