CIB job technischer Leitfaden (DE)

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);