CIB merge technischer Leitfaden

10. Anwendungsbeispiele

10.3. Anwendungsbeispiel Report mit mehreren Bausteinen

Allgemein
Verwendung von Unterverzeichnissen für Datenquellen und RTF-Bausteine
Optimierungen für Bausteine mit neuen Farben, Schriften, Listen steuern
Zeipunkt des Abbruchs beim Auftreten von Fehlern festlegen
Umgang mit unversorgten Feldern
Entfernen von Field-Results aus dem Rohtext
Einfügen dynamischer Geschäftsgrafik und Einbetten von Grafiken
Analyse der Feldstruktur in RTF-Bausteinen

Allgemein

Im Folgenden wird davon ausgegangen, dass Sie sich im Unterverzeichnis „Bausteine“ befinden. Das folgende Beispiel beinhaltet ein Anschreiben einer Bank an einen Kunden, das über den aktuellen Status seiner Konten informiert. Es enthält eine Auflistung seiner Konten, inklusive Kontoart, aktuellen Salden und eine Summe der Salden. Außerdem ist ein Bankenlogo eingebunden. Dies erfolgt im RTF über den Feldbefehl { INCLUDEPICTURE „Logo.jpg“}.

Die Daten liegen in mehreren CSV-Dateien vor. Diese beinhalten Kundendaten (knd_kunde.csv), Informationen über seine Konten (kont_konten.csv), die Daten der Bank (bnk_bank.csv) und Informationen zu seinem Ansprechpartner (ber_berater.csv). Es ist sinnvoll die Datenquellen in einem separaten Verzeichnis abzulegen. In diesem Fall liegen die Dateien im Unterverzeichnis „csv“.

Dieses Mal ist der Brief nicht in einer einzigen RTF-Datei untergebracht, sondern auf mehrere Bausteine aufgeteilt. Diese RTF-Bausteine befinden sich ebenfalls in einem separaten Unterverzeichnis „templates“. Es gibt einen Wurzelbaustein (wurzelbaustein.rtf), der mehrere Bausteine anzieht. Dies geschieht mit Hilfe des Feldbefehls { INCLUDETEXT „Baustein.rtf“ }. Unter anderem gibt es Bausteine für Kopf- und Fußzeilen (unterschiedliche für erste Seite und Folgeseiten), für das Anschreiben und für die Kontenübersicht.

Die Kontenübersicht ist als dynamische Tabelle realisiert, welche bereits im Anwendungsbeispiel Serienbrief näher erklärt wurde:

LfdNr

Kontonummer

Saldo

Kontoart

{ SET Saldo_Summe 0 } { IF { MERGEREC ?Konten } = 1

“{ MERGEREC Konten }

{ REF kont_kontonummer }

{ REF kont_saldo \# 0,00 }

{ REF kont_kontoart }

{ SET Saldo_Summe { = { REF Saldo_Summe } + { REF kont_saldo } } }{ NEXT Konten }" \* SOLANGE }

Summe Salden

{ REF Saldo_Summe \# 0,00 }

Um eine Summe über die Salden zu bilden, wird vor der Schleife eine Variable Saldo_Summe mit Hilfe des SET-Feldbefehls definiert und auf 0 gesetzt. In der Schleife wird für jedes Konto der zugehörige Saldo hinzuaddiert. Am Ende wird eine Gesamtsumme ausgegeben.

Das Ergebnis soll ebenfalls in ein eigenes Unterverzeichnis „result“ geschrieben werden.


Verwendung von Unterverzeichnissen für Datenquellen und RTF-Bausteine

Folgender Aufruf erzeugt den fertigen Brief inklusive Kontenübersicht (Bausteine.bat):

cibmrg32.exe --parameterfile=Bausteine_par.par

Inhalt der Datei Bausteine_par.par

Fehler sollen protokolliert werden

--logfile=!Bausteine_log.log
Datenquellen sind unter diesem Pfad zu finden
--target-directory=csv
Bausteine befinden sich (relativ zu target) hier
--source-directory=..\templates
Eingabe-Datei (in source zu finden)
--inputfile=wurzelbaustein.rtf
Ausgabe explizit in eigenes Verzeichnis
--outputfile=!..\result\Kontenuebersicht.rtf
Datenquelle ist Multi-CSV
--datafile=multi.csv
--multidatafile
--charformat


  • Erläuterungen

Das Beispiel setzt mit Hilfe des Parameters --target-directory die Pfadangabe für die Datendateien. Somit ist keine explizite Pfadangabe beim Parameter --datafile erforderlich. Hier reicht es, den Dateinamen der Multi-CSV anzugeben. Alle weiteren CSV-Dateien werden dann ebenfalls in diesem Verzeichnis erwartet.

Der Parameter --source-directory setzt das Verzeichnis, in dem das RTF-Wurzeldokument und die RTF-Bausteine erwartet werden. Der Pfad ist relativ zu dem Pfad, der mit --target-directory angegeben wurde. Durch das Setzen dieses Aufrufparameters, ist keine explizite Pfadangabe beim Parameter --inputfile erforderlich. Hier reicht es, den Namen des Wurzelbausteins anzugeben. Alle weiteren Bausteine werden dann ebenfalls in diesem Verzeichnis erwartet. (sofern keine expliziten Pfadangaben mit INCLUDETEXT gemacht werden).

Das Ergebnis Kontenuebersicht.rtf wird durch eine explizite Pfadangabe in das Unterverzeichnis „result“ geschrieben. Wäre hier kein Pfad angegeben, würde das Ergebnis nach --target-directory geschrieben werden.

Der Parameter --multidatafile gibt an, dass es sich bei der Datei, die mit dem Parameter --datafile angegeben wird, um eine Multi-Steuerdatei handelt.


Optimierungen für Bausteine mit neuen Farben, Schriften, Listen steuern

In den Bausteinen werden neue Farben, Schriften und Listen verwendet. Standardmäßig sind diese auch im Ergebnisdokument enthalten, da der RTF-Kopf am Ende neu geschrieben wird. Hier sind unterschiedliche Optimierungen möglich, die wahlweise durch den Benutzer abgeschaltet werden können. Im Folgenden sollen die neuen Schriften ignoriert werden, alle Farben sollen aber enthalten sein, auch die, die nicht benutzt werden. Dies ist zum Beispiel dann sinnvoll, wenn ein Drucker nur bestimmte Schriftarten drucken kann. Da das Dokument nach dem Mischlauf eventuell noch bearbeitet wird, sollen hier auch alle verwendeten Listen zur Verfügung stehen. Unbenutzte Listen sollen jedoch entfernt werden.

Folgender Aufruf erzeugt das gewünschte Ergebnis (Header.bat):

cibmrg32.exe --parameterfile=Header_par.par

Auszug aus Header_par.par:


--replace-header=automatic
--fonts=keep
--colors=expand
--lists=adjust


  • Erläuterungen

Ohne den Parameter --replace-header werden sowohl die Schriften und Listen, als auch die Farben in das Ergebnis-RTF übernommen. --replace-header=automatic bewirkt hier, dass der RTF-Kopf unter Berücksichtigung der Belegungen der Parameter --fonts, --lists und --colors neu geschrieben wird.

Der Parameter --fonts mit der Belegung „keep“ bewirkt, dass die Haupt-Schriftartentabelle nicht um die neuen Schriften erweitert wird. Es wird auch keine zusätzliche Optimierung durchgeführt, welche die unbenutzen Schriftarten entfernt.

Der Parameter --colors mit der Belegung „expand“ bewirkt, dass die Haupt-Farbtabelle um neue Farben erweitert wird und unbenutzte Farben nicht entfernt werden.

Der Parameter --lists mit der Belegung „adjust“ bewirkt, dass die Haupt-Listentabelle um neue Listen erweitert wird, unbenutzte Listen aber entfernt werden.


Zeipunkt des Abbruchs beim Auftreten von Fehlern festlegen

CIB merge bricht die Verarbeitung ab, wenn zum Beispiel eine Variable eingesetzt wird, die nicht definiert ist. Im Folgenden wird statt der korrekten CSV-Datei kont_konten.csv die CSV-Datei kont_konten_undef.csv verwendet. In dieser ist die Variable kont_kontoart falsch geschrieben (kont_kontart). Wird nun ein Mischlauf gestartet, der diese fehlerhafte CSV-Datei verwendet, entsteht ein Ergebnis-RTF mit einer defekten Tabelle. (OhneBreak_out.rtf).

Folgender Aufruf erzeugt das RTF mit defekter Tabelle (OhneBreak.bat):

cibmrg32.exe --parameterfile=OhneBreak_par.par

Auszug aus OhneBreak_par.par:


--outputfile=!..\result\OhneBreak_out.rtf
--datafile=multi_undef.csv

Der Mischlauf soll nun, wenn möglich, fortgesetzt werden, obwohl die Variable kont_kontoart nicht definiert ist. Die Tabelle soll noch so ausgegeben werden, dass ein gültiges RTF entsteht. Anschließend soll der Mischvorgang aber abgebrochen werden.

Folgender Aufruf erzeugt das gewünschte Ergebnis (BreakLoop.bat):

cibmrg32.exe --parameterfile=BreakLoop_par.par

Folgender Parameter wird hier zusätzlich gesetzt:

--break=loop

Jetzt soll auch bei auftretenden Fehlern der Mischvorgang bis zum Ende durchgeführt werden und einen Fehler zurückliefern.

Folgender Aufruf erzeugt das gewünschte Ergebnis (BreakNever.bat):

cibmrg32.exe --parameterfile=BreakNever_par.par

Folgender Parameter wird hier gesetzt:

--break=never


  • Erläuterungen

Der Parameter --break verschiebt den Zeitpunkt, an dem CIB merge im Fehlerfall den Mischvorgang abbricht.

Mit --break=loop wird folgendes Verhalten erreicht: falls sich der Mischlauf gerade in einer Schleife befindet, wird diese ab dem Fehler nur noch bis zum Ende durchlaufen, also nicht wiederholt. Direkt anschließend wird der Mischvorgang abgebrochen.

--break=never bewirkt, dass CIB merge ungeachtet aller auftretenden Fehler den Mischauftrag bis zum Ende durchführt und den Fehlercode des ersten aufgetretenen Fehlers zurück gibt.


Umgang mit unversorgten Feldern

In einigen Fällen kann es erwünscht sein, dass eine bestimmte Variable nicht durch die Datenquellen versorgt wird (z.B. für eine eventuelle spätere Restdatenerfassung). Im Folgenden wird absichtlich die Variable kont_kontoart nicht definiert (es können die gleichen Eingabedateien, wie im Beispiel zuvor verwendet werden). In diesem Fall soll der Mischvorgang fortgesetzt werden und alle nicht versorgten Felder sollen als REF-Felder in der Ausgabedatei erhalten bleiben.

Folgender Aufruf erzeugt das gewünschte Ergebnis (KeepFields.bat):

cibmrg32.exe --parameterfile=KeepFields_par.par

Folgender Parameter wird hier zusätzlich gesetzt:

--keep-fields=unresolved-ref


  • Erläuterungen

Der Parameter --keep-fields=unresolved-ref sorgt dafür, dass der Mischvorgang trotz fehlender Datenversorgung für die Variable kont_kontoart fortgeführt wird und das REF-Feld für kont_kontoart in der Ausgabedatei KeepFields_out.rtf erhalten bleibt.


Entfernen von Field-Results aus dem Rohtext

Durch MS Word werden sogenannte Field-Reuslts in den Rohtext eingefügt, wovon die meisten von den CIB-Modulen nicht benötigt werden. Durch die INCLUDETEXT-Anweisungen in wurzelbaustein.rtf enthält das RTF einige dieser unnötigen Field-Results. Um die Dateigröße zu optimieren, können die meisten davon entfernt werden. Das Ergebnis soll keine unnötigen Field-Results mehr enthalten.

Folgender Aufruf erzeugt das gewünschte Ergebnis (FieldResults.bat):

cibmrg32.exe
--parameterfile=FieldResults_par.par

Folgende Parameter werden hier gesetzt:

Fehler sollen protokolliert werden

--logfile=!FieldResults_log.log
Datenquellen sind unter diesem Pfad zu finden
--target-directory=csv
Bausteine befinden sich (relativ zu target) hier
--source-directory=..\templates
Eingabe-Datei (in source zu finden)
--inputfile=wurzelbaustein.rtf
Ausgabe explizit in eigenes Verzeichnis
--outputfile=!..\result\wurzelbaustein_FieldResults.rtf
Field-results entfernen
--field-results=p
Keine Inhalte einmischen
--filter=f


  • Erläuterungen

Die durch MS Word eingefügten unnötigen Field-Results werden mit Hilfe des Parameter --field-results entfernt. Durch die Belegung mit „p“ bleiben diejenigen erhalten, die zur Positionierung von Bildern notwendig sind.


Einfügen dynamischer Geschäftsgrafik und Einbetten von Grafiken

Im Folgenden soll die Übersicht der Kontoarten grafisch in einem Tortendiagramm dargestellt werden. Dazu wird eine neue CSV-Datei erstellt, die die Aufteilung des Vermögens je Anlageform enthält (Anlageform.csv). Diese CSV-Datei sieht folgendermaßen aus:

Anlageform;Wert;Legende
Girokonto;530,46;Girokonto 0,56%
Sparkonto;16.700,00;Sparkonto 17,67%
Festgeld;74.000,00;Festgeld 78,29%
Depot;3.288,33;Depot 3,48%

In dieser Datei ist die Legende des Diagramms enthalten und die Summe der Salden pro Anlageform. Die Datei Vermoegensstruktur_torte.emf enthält die Grafikschablone, die zur Erzeugung der dynamischen Geschäftsgrafik herangezogen werden soll. Diese Grafik und das Logo (Logo.jpg), das im Baustein Logo.rtf eingefügt wird, sollen im Ergebnis-RTF eingebettet werden.

Folgender Aufruf erzeugt das gewünschte Ergebnis (Chart.bat):

cibmrg32.exe --parameterfile=Chart_par.par

Folgende Parameter werden hier gesetzt:

Fehler sollen protokolliert werden

--logfile=!Chart_log.log
Datenquellen sind unter diesem Pfad zu finden
--target-directory=csv
Bausteine befinden sich (relativ zu target) hier
--source-directory=..\templates
Eingabe-Datei (in source zu finden)
--inputfile=wurzelbaustein_chart.rtf
Ausgabe explizit in eigenes Verzeichnis
--outputfile=!..\result\Chart_out.rtf
Datenquelle ist Multi-CSV
--datafile=multi_chart.csv
--multidatafile
--charformat
Setzen der chart-Parameter
--chart-source=file
--chart-target=embed
--merge=1


Erläuterungen

Mit --chart-source=file wird angegeben, dass die Geschäftsgrafik aus der mit { INCLUDEPICTURE } eingefügten Grafik berechnet werden soll.

Der Parameter --chart-target=embed gibt an, dass alle Grafiken in das Ergebnis-RTF eingebettet werden sollen (sowohl Chart- als auch Nicht-Chart-Grafiken).


Analyse der Feldstruktur in RTF-Bausteinen

Im Folgenden soll die Feldstruktur der RTF-Bausteine ermittelt werden. Das Ergebnis soll in eine CSV-Datei Felder.csv geschrieben werden. Diese enthält dann alle vorkommenden Variablen, die durch eine Applikation ausgewertet werden könnten.

Folgender Aufruf erzeugt das gewünschte Ergebnis (Analyse.bat):

cibmrg32.exe --parameterfile=Analyse_par.par

Folgende Parameter werden hier gesetzt:

--logfile=!Felder.csv
-mPfad;Feld;Wert
--logfile=!Analyse_log.log
--source-directory=templates
--outputfile=-
--analyse=+Felder.csv
# für jeden Text
--inputfile=Basisbaustein.rtf
-m@
--filter
--inputfile=Bezug.rtf
-m@
--filter
... für jeden RTF-Baustein...
--inputfile=wurzelbaustein.rtf
-m@
--filter
-mdone

  • Erläuterungen

Der Parameter --analyse erzeugt die Datei Felder.csv, die nach dem Analyse-Lauf folgendermaßen aussieht (Auszug):

Pfad;Feld;Wert
Basisbaustein.rtf;REF;knd_geschlecht
Basisbaustein.rtf;REF;knd_nachname
Basisbaustein.rtf;REF;ber_vorname
Basisbaustein.rtf;REF;ber_nachname
Basisbaustein.rtf;REF;ber_vorname
Basisbaustein.rtf;REF;ber_nachname
Bezug.rtf;REF;knd_bezug
Briefkopf.rtf;REF;bnk_name
Briefkopf.rtf;REF;bnk_erg_1
Briefkopf.rtf;REF;bnk_erg_2
Datum.rtf;REF;bnk_datumort
…
Logo.rtf;INCLUDEPICTURE;Logo.jpg
wurzelbaustein.rtf;INCLUDETEXT;?KopfFolgeSeiten.rtf
wurzelbaustein.rtf;INCLUDETEXT;KopfFolgeSeiten.rtf
wurzelbaustein.rtf;INCLUDETEXT;?FussFolgeSeiten.rtf
wurzelbaustein.rtf;INCLUDETEXT;FussFolgeSeiten.rtf
wurzelbaustein.rtf;INCLUDETEXT;?FussErsteSeite.rtf
wurzelbaustein.rtf;INCLUDETEXT;FussErsteSeite.rtf
wurzelbaustein.rtf;INCLUDETEXT;?Briefkopf.rtf
…

Diese Ausgabedatei bietet somit eine Übersicht über alle vorkommenden Variablen. Es wird kein Ausgabe-RTF erzeugt (--outputfile=-) und es werden keine Felder ausgewertet (--filter).

 

Dateilose Dateneingabe mit directory-Parametern:

Summe Salden

{ REF Saldo_Summe \# 0,00 }