Compart bringt DocBridge® Communication Suite auf den Markt
Markteinführung der DocBridge® Communication Suite: Neue Maßstäbe in Flexibilität und Technologie im Kundenkommunikationsmanagement.
WeiterMit den neuen Data Dictionaries vereinfacht DocBridge® Communication Suite drastisch die Art und Weise, wie Daten eingebunden werden: Verschiedenste externe Quellen treffen auf ein stabiles, einheitliches Datenmodell. Ob einfache .dds- und .ddm-Konfigurationen oder mehrstufiges XSL-Transforming im Gear-Prozess, hier wird gezeigt, wie dynamische Datensätze effizient verarbeitet werden können – und dabei steckt jede Menge Potenzial für die Zukunft!
Data Dictionaries wurden als MVP (Minimum Viable Product) in der Spring 2024-Version der DocBridge® Communication Suite eingeführt und seither weiter verbessert.
Das Hauptziel von Data Dictionaries ist es, eine Abstraktionsschicht zwischen externen Datenquellen mit unterschiedlichen (und möglicherweise, z. B. aufgrund einer Migration) variierenden Datenstrukturen und einem stabilen, internen Datenmodell zu schaffen, das innerhalb der DBCS von verschiedenen Vorlagen und Prozessen genutzt werden kann.
Jede DBCS-Umgebung kann null, ein oder mehrere Data Dictionaries enthalten. Wenn Sie es bevorzugen, keine Data Dictionaries zu nutzen, können Sie weiterhin den aus früheren DocBridge® Impress-Versionen bekannten Ansatz verwenden, bei dem eine „xml datafile“ direkt jeder Vorlage zugeordnet wird und kein Mapping erfolgt.
Zunächst müssen Sie ein Data-Dictionary-Schema erstellen und im Resource Director ablegen. Dieses Schema beschreibt, welche Felder Sie in Ihrem Data Dictionary verwalten möchten, weist ihnen Namen und Vorschauwerte (für den Impress Designer) zu und enthält Beispieldatensätze, die im Vorschau-Modus des Impress Designers oder sogar in Gear-Workflows verwendet werden können, wenn keine Verbindung zur vorgelagerten Datenquelle besteht.
Zur Erzeugung eines Data-Dictionary-Schema können Sie den komfortablen Data Dictionary Editor verwenden. Hierzu klicken Sie auf "+" in Resource Director, um eine neue Ressource zu erstellen, und wählen dann die Kachel "Datenkataloge" aus.
Alternativ können Sie ein Data Dictionary Schema auch als XML Datei erstellen und in Resource Director hochladen. Ein einfaches Data Dictionary Schema könnte dabei wie folgt aussehen:
<?xml version="1.0" encoding="UTF-8"?>
<DataDictionary
xmlns="http://www.compart.com/ns/data-dictionary/schema">
<Name>DD Name</Name>
<Title>Title of DataDictionary</Title>
<Description>This is the description of the DataDictionary</Description>
<DocumentMode mode="document" loop="/"/>
<DataSchema id="Root">
<DisplayName>Root</DisplayName>
<Content>
<Entry id="FirstName">
<DisplayName>FirstName</DisplayName>
<Preview>Marco</Preview>
</Entry>
<Entry id="LastName">
<DisplayName>LastName</DisplayName>
<Preview>Fabiani</Preview>
</Entry>
<Entry id="StreetName">
<DisplayName>StreetName</DisplayName>
<Preview>Mühlenstraße</Preview>
</Entry>
<Entry id="HouseNumber">
<DisplayName>HouseNumber</DisplayName>
<Preview>78</Preview>
</Entry>
<Entry id="ZipCode">
<DisplayName>ZipCode</DisplayName>
<Preview>10234</Preview>
</Entry>
<Entry id="City">
<DisplayName>City</DisplayName>
<Preview>Berlin</Preview>
</Entry>
<Entry id="Country">
<DisplayName>Country</DisplayName>
<Preview>Deutschland</Preview>
</Entry>
<Entry id="PolicyNumber">
<DisplayName>PolicyNumber</DisplayName>
<Preview>K 123-852369/P</Preview>
</Entry>
<Entry id="PolicyName">
<DisplayName>PolicyName</DisplayName>
<Preview>Kraftfahrtversicherung Klassik Privat</Preview>
</Entry>
<Entry id="InvoiceDate">
<DisplayName>InvoiceDate</DisplayName>
<Preview>2024-06-05</Preview>
</Entry>
</Content>
</DataSchema>
<SampleSets default="SampleSet-1">
<SampleSet id="SampleSet-1">
<DisplayName>SampleSet-1</DisplayName>
<Data>
<Root>
<FirstName>Marco</FirstName>
<LastName>Fabiani</LastName>
<StreetName>Mühlenstraße</StreetName>
<HouseNumber>78</HouseNumber>
<ZipCode>10234</ZipCode>
<City>Berlin</City>
<Country>Deutschland</Country>
<PolicyNumber>K 123-852369/P</PolicyNumber>
<PolicyName>Kraftfahrtversicherung Klassik Privat</PolicyName>
<InvoiceDate>2024-06-05</InvoiceDate>
</Root>
</Data>
</SampleSet>
</SampleSets>
</DataDictionary>
Unten sehen Sie die externe Datenquelle, die wir für das Beispiel verwenden möchten. Es handelt sich um XML-Daten, die beispielsweise via REST oder MQ als Eingabe in unseren Gear-Prozess eingehen könnten:
<?xml version="1.0" encoding="UTF-8"?>
<Policyholders>
<Policyholder gender="female" preferredLang="de">
<LastName>Schneider</LastName>
<FirstName>Anna</FirstName>
<Birthday>1985-07-22</Birthday>
<Address>
<ZipCode>80331</ZipCode>
<City>München</City>
<StreetName>Leopoldstraße</StreetName>
<HouseNumber>23</HouseNumber>
<State>Bayern</State>
<Country>Deutschland</Country>
</Address>
<ContactDetails>
<email>anna.schneider@example.com</email>
<phone>01761123456</phone>
</ContactDetails>
<PolicyNumber premium="yes">M 456-789012/A</PolicyNumber>
<PolicyName>Haftpflichtversicherung</PolicyName>
<InvoiceDate>15.11.2023</InvoiceDate>
</Policyholder>
<Policyholder gender="male" preferredLang="en">
<LastName>Fabiani</LastName>
<FirstName>Marco</FirstName>
<Birthday>1961-01-30</Birthday>
<Address>
<ZipCode>10234</ZipCode>
<City>Berlin</City>
<StreetName>Mühlenstraße</StreetName>
<HouseNumber>78</HouseNumber>
<State>Berlin</State>
<Country>Deutschland</Country>
</Address>
<ContactDetails>
<email>fabiani.marco@liberi.it</email>
<phone>0171444965</phone>
</ContactDetails>
<PolicyNumber premium="yes">K 123-852369/P</PolicyNumber>
<PolicyName>Kraftfahrtversicherung Klassik Privat</PolicyName>
<InvoiceDate>24.10.2023</InvoiceDate>
</Policyholder>
<Policyholder gender="male" preferredLang="en">
<LastName>Smith</LastName>
<FirstName>John</FirstName>
<Birthday>1970-03-15</Birthday>
<Address>
<ZipCode>10001</ZipCode>
<City>New York</City>
<StreetName>5th Avenue</StreetName>
<HouseNumber>742</HouseNumber>
<State>NY</State>
<Country>USA</Country>
</Address>
<ContactDetails>
<email>john.smith@example.com</email>
<phone>2125551234</phone>
</ContactDetails>
<PolicyNumber premium="no">N 789-123456/B</PolicyNumber>
<PolicyName>Health Insurance Basic</PolicyName>
<InvoiceDate>01.12.2023</InvoiceDate>
</Policyholder>
</Policyholders>
Nun wollen wir eine Mapping-Datei erstellen, die Daten aus dieser Quellstruktur in das zuvor erstellte Data Dictionary überführt. Derzeit müssen Sie diese .ddm-Datei manuell erstellen, was jedoch ebenfalls recht einfach ist - künftig wird auch dieser Schritt durch einen komfortablen Editor erleichtert. Legen Sie die .ddm-Datei im Resource Director ab, damit Sie sie in Ihrem Gear-Prozess verwenden können. Beachten Sie, dass unsere Quelldaten mehrere Datensätze enthalten, zur besseren Übersicht erfolgt das Data-Mapping auf der Ebene einzelner Datensätze.
In einer .ddm-Datei (Data Dictionary Mapping) wird festgelegt, wie bestimmte Felder aus einer externen Datenquelle in die Struktur des Data Dictionary übertragen werden sollen. Im gezeigten Beispiel bedeutet das konkret:
Schema-Definition:
Das <Schema>
-Element mit der ID „Root“ dient als Einstiegspunkt. In diesem Schema werden alle erforderlichen Felder (Entries) definiert, die im Data Dictionary abgebildet werden sollen.
Entry-Elemente:
Jedes <Entry>
-Element besitzt eine eindeutige ID, die dem entsprechenden Feld im Data Dictionary entspricht (etwa „PreferredLanguage“, „FirstName“, „LastName“ usw.). Diese IDs sind ausschlaggebend, damit das System weiß, wie es die Daten später zuordnen und verarbeiten soll.
Source-Bereich mit XPath:
Innerhalb jedes <Entry>
-Elements wird über <Source>
definiert, woher die Werte im externen XML stammen sollen. Das geschieht per <XPath>
-Ausdruck.
Zum Beispiel:
<XPath>/Policyholder/@preferredLang</XPath>
Dieser Ausdruck gibt an, dass der Wert aus dem Attribut @preferredLang
des Tags <Policyholder>
ausgelesen wird. Damit wird die externe Datenstruktur auf das gewünschte Feld im Data Dictionary gemappt. Bei „InvoiceDate“ wird sogar eine kleine Umwandlung per XPath-Funktion concat durchgeführt, um z. B. ein Datumsformat anzupassen
Ergebnis:
Das Mapping verbindet also jedes einzelne Feld (Entry) im Data Dictionary mit dem passenden Abschnitt in den externen XML-Daten. Beim späteren Ausführen des Prozesses (z. B. in einem Gear-Workflow) wird anhand dieser .ddm-Datei die Zuordnung vorgenommen und alle Felder werden korrekt ins Data Dictionary übernommen.
<?xml version="1.0" encoding="UTF-8"?>
<DataMapping xmlns="http://www.compart.com/ns/data-dictionary/mapping" version="1.0">
<Schema id="Root">
<Entry id="PreferredLanguage">
<Source>
<XPath>/Policyholder/@preferredLang</XPath>
</Source>
</Entry>
<Entry id="Gender">
<Source>
<XPath>/Policyholder/@gender</XPath>
</Source>
</Entry>
<Entry id="FirstName">
<Source>
<XPath>/Policyholder/FirstName</XPath>
</Source>
</Entry>
<Entry id="LastName">
<Source>
<XPath>/Policyholder/LastName</XPath>
</Source>
</Entry>
<Entry id="StreetName">
<Source>
<XPath>/Policyholder/Address/StreetName</XPath>
</Source>
</Entry>
<Entry id="HouseNumber">
<Source>
<XPath>/Policyholder/Address/HouseNumber</XPath>
</Source>
</Entry>
<Entry id="ZipCode">
<Source>
<XPath>/Policyholder/Address/ZipCode</XPath>
</Source>
</Entry>
<Entry id="City">
<Source>
<XPath>/Policyholder/Address/City</XPath>
</Source>
</Entry>
<Entry id="PolicyName">
<Source>
<XPath>/Policyholder/PolicyName</XPath>
</Source>
</Entry>
<Entry id="PolicyNumber">
<Source>
<XPath>/Policyholder/PolicyNumber</XPath>
</Source>
</Entry>
<Entry id="InvoiceDate">
<Source>
<XPath>concat(substring(/Policyholder/InvoiceDate, 7, 4), '-',
substring(/Policyholder/InvoiceDate, 4, 2), '-',
substring(/Policyholder/InvoiceDate, 1, 2))</XPath>
</Source>
</Entry>
</Schema>
</DataMapping>
Wie Sie sehen, ordnen wir hier die Werte der Quelldaten den einzelnen Einträgen in unserem Data Dictionary zu, z. B. wird das Attribut @preferredLang
der Data-Dictionary-Einheit „PreferredLanguage“ zugewiesen.
Außerdem erkennen Sie, dass wir unkompliziert per XSLT Standard Daten-Transformationen durchführen können, z.B. um Zeichenketten miteinander verknüpfen, wie in den Zeilen 57–59 gezeigt. Von Compart unterstützte XSLT und xPath Funktionen können Sie der DocBridge Communication Suite Dokumentation entnehmen.
Die letzte Ressource, die Sie zum Einsatz von Data Dictionaries benötigen, ist das data-mapping XSL Stylesheet, welches zusammen mit der DocBridge® Communication Suite ausgeliefert wird. Daran sollten Sie im Normalfall keine Änderungen vornehmen.
Nun wollen wir alles zusammenführen und einen Gear-Prozess erstellen, der unsere Quelldaten in die Struktur des Data Dictionary mappt und als Ausgabe eine PDF-Sammeldatei erzeugt.
Da mehrere Datensätze verarbeitet werden sollen, müssen wir die Daten für jeden Datensatz einzeln mappen. Deshalb verwenden wir nach dem Einlesen der eingehenden XML-Daten in einen DOM das DOM Iterator Worklet. Anschließend wird das XSLT Transformer Worklet eingesetzt, um die Quelldaten für jeden Datensatz in die Data-Dictionary-Struktur zu übertragen.
Dieser Vorverarbeitungsablauf wird am besten in einen Compound Worklet gepackt, der einen ByteReader-Eingangspin und einen DOM-Ausgangspin hat:
Nachdem wir die Worklets zusammengestellt haben, müssen wir den DOM Iterator konfigurieren und den XPath-Ausdruck festlegen, über den iteriert wird, um für jeden Datensatz einen eigenen DOM zu erstellen. Klicken Sie mit der rechten Maustaste auf das DOM Iterator Worklet und wählen Sie „Worklet Konfiguration“. Stellen Sie bei Verwendung der oben gezeigten Beispieldaten den Wert wie folgt ein:
Als Nächstes öffnen Sie die Konfiguration für das XSLT Transformer Worklet. Hier müssen Sie sowohl den Parameter „XSLT URI“ auf die URI setzen, unter der Sie das data-mapping XSL-Stylesheet abgelegt haben, als auch den XSL-Parameter. Für den XSL-Parameter setzen Sie den Key auf „datasource“ und den Content auf die URI, unter der Sie die Mapping-Konfiguration hinterlegt haben. Siehe Beispiel:
Abschließend können wir unser Haupt-Worklet erstellen, indem wir den vorgelagerten Preprocessing Compound Worklet mit einem Impress Worklet und einem PDF Writer verbinden, wie unten dargestellt. Achten Sie darauf, den Parameter „Impress Template configuration“ auf die URI zu setzen, unter der Sie eine passende Impress-Vorlage für Ihr Data Dictionary abgelegt haben:
Wenn Sie statt einzelner PDFs (denn wir haben den DOM Iterator genutzt, um die Batch-Eingabedaten in einzelne Datensätze zu splitten) eine einzige „Batch“-PDF-Ausgabedatei erhalten möchten, müssen Sie in der Konfiguration des PDF Writers (Rechtsklick auf den PDF Writer Worklet) für die „Separators“ den Input Trigger „only“ auf „DomSeparator“ setzen.
Die Implementierung der Data Dictionaries in DocBridge® Communication Suite deckt den wesentlichen Funktionsumfang ab, um unterschiedliche externe Datenquellen von einem einheitlichen internen Datenmodell zu abstrahieren, das schnell und effizient in verschiedenen Vorlagen und Prozessen genutzt werden kann.