Altova MapForce 2023 Enterprise Edition

Manchmal müssen nicht nur vorhandene Datensätze aktualisiert, sondern auch neuen Datensätze in dieselbe Datenbanktabelle eingefügt werden. Zu diesem Zweck steht in MapForce die Aktion "Aktualisieren, wenn...Rest einfügen" zur Verfügung. Dabei geschieht Folgendes:

 

Wenn die Bedingung Aktualisieren, wenn zutrifft, so wird der vorhandene Datenbankdatensatz mit den Daten aus dem Mapping aktualisiert.

Wenn die Bedingung Aktualisieren, wenn nicht zutrifft und eine Bedingung Rest einfügen vorhanden ist, so wird ein neuer Datensatz eingefügt.

Wenn in der Datenbank Datensätze vorhanden sind, zu denen es in der Quelldatei keinen entsprechenden Datensatz gibt, so bleiben diese Datensätze unverändert.

 

Anmerkung zu MySQL / MariaDB ODBC

Wenn es sich bei der Zieldatenbank um eine über ODBC verbundene MySQL- oder MariaDB-Datenbank handelt, muss auf dem Register Cursor/Results von MySQL ODBC Connector die Option Return matched rows instead of affected rows aktiviert sein. Alternativ dazu können Sie bei manueller Eingabe des Strings über den Datenbankverbindungsassistenten die Option Option=2 zum Connection String hinzufügen, z.B: Dsn=mydsn;Option=2;

 

So aktivieren Sie diese Option über den MySQL ODBC Connector:

 

1.Drücken Sie die Windows-Taste und geben Sie "ODBC" ein.

2.Starten Sie den ODBC Data Sources Administrator (je nach Plattform des installierten MySQL ODBC Connectors entweder 32-Bit oder 64-Bit).

3.Klicken Sie auf den im MapForce Mapping verwendeten Data Source Name (DSN) und anschließend auf Configure.

mf_mysql_odbc_dsn

4.Klicken Sie auf Details >> um zu den erweiterten Optionen zu gelangen.

5.Klicken Sie auf das Register Cursors/Results und aktivieren Sie anschließend das Kontrollkästchen Return matched rows instead of affected rows.

 

Beispiel

In diesem Beispiel wird gezeigt, wie Sie Daten aus einer XML-Quelldatei in einer Datenbanktabelle zusammenführen (Indem Daten sowohl aktualisiert als auch eingefügt werden). Im Beispiel werden die folgenden Dateien verwendet:

 

altova-cmpy-extra.xml - enthält die Quelldaten, die in die Datenbank eingefügt werden sollen

Altova_Hierarchical.xsd - das Schema, anhand dessen die obige Instanzdatei validiert wird

Altova.sqlite - die Zieldatenbank, die aktualisiert werden soll

 

Sie finden all diese Dateien im Ordner <Dokumente>\Altova\MapForce2023\MapForceExamples\. Der vollständige Pfad wurde in der Folge aus Gründen der Einfachheit weggelassen.

 

Im Mapping in diesem Beispiel wird eine Beispieldatenbankdatei geändert. Es wird empfohlen, eine Sicherungskopie der Originaldatenbank zu erstellen und mit einer neuen Kopie zu arbeiten, bevor Sie die unten stehende Anleitung befolgen. Dadurch stellen Sie sicher, dass die Originaldaten nicht überschrieben werden und Sie dasselbe Ergebnis, wie unten beschrieben, erhalten. Nähere Informationen dazu finden Sie unter Ausführen von Mappings, die Datenbanken modifizieren.

 

Ziel des Mappings ist es, alle Datensätze aus einem XML-Quelldokument in einer Zieltabelle namens "Person" zusammenzuführen. Dabei muss das Mapping für jeden Datensatz in der XML-Quelldatei die folgenden Aktionen ausführen:

 

Wenn der Primärschlüssel PrimaryKey der Person in der XML-Datei mit dem Primärschlüssel PrimaryKey der Person in der Datenbank übereinstimmt, so muss der Datensatz aktualisiert werden.

Vorhandene Datensätze in der Tabelle "Person", für die die obige Bedingung nicht zutrifft, dürfen nicht verändert werden.

Wenn es für den PrimaryKey der Person in der XML-Datei in der Datenbankzieltabelle keine Entsprechung gibt, so wird ein neuer Datensatz zur Datenbanktabelle hinzugefügt.

 

Gehen Sie dazu folgendermaßen vor:

 

Schritt 1: Fügen Sie die XML-Quellkomponente ein

Klicken Sie im Menü Einfügen auf XML-Schema/Datei und navigieren Sie zur Datei Altova_Hierarchical.xsd. Wenn Sie aufgefordert werden, eine Instanzdatei anzugeben, navigieren Sie zur Datei altova-cmpy-extra.xml.

 

Schritt 2: Fügen Sie die Zieldatenbank ein

Klicken Sie im Menü Einfügen auf Datenbank und befolgen Sie die Anweisungen des Assistenten, um eine Verbindung zu Altova.sqlite herzustellen (siehe Hinzufügen einer Datenbank zum Mapping.

 

Schritt 3: Ziehen Sie die Verbindungen

Ziehen Sie die Mapping-Verbindungen wie unten gezeigt.

mf_db_merge_01

 

Schritt 4: Konfigurieren Sie die "Aktualisieren,wenn... Rest einfügen"-Aktionen

1.Klicken Sie auf die Schaltfläche Aktion: Einfügen ( tbl-act-icon ) neben der Tabelle "Person".

2.Wählen Sie neben Aktion an Datensatz den Eintrag Aktualisieren, wenn... . Dadurch wird die Datenbankaktion in eine auf einer Bedingung basierende Aktualisierungsaktion geändert, d.h. der aktuelle Datensatz wird nur aktualisiert, wenn eine Bedingung erfüllt wird (siehe nächster Schritt).

3.Wählen Sie neben PrimaryKey den Wert gleich aus, wie unten gezeigt. Damit wird die Aktualisierungsbedingung definiert, d.h. der Datenbankdatensatz wird nur aktualisiert, wenn sein PrimaryKey-Wert gleich dem PrimaryKey-Wert aus dem Mapping ist.
mf_db_merge_02
4.Aktivieren Sie optional das Kontrollkästchen NULL gleich. In diesem Beispiel spielt das Kontrollkästchen keine Rolle, da weder das Feld PrimaryKey in der XML-Quelldatei noch das Feld PrimaryKey in der Datenbank Nullwerte enthält. Wenn Ihre Daten jedoch Nullwerte enthalten und solche Nullwerte als identisch behandelt werden sollen, sollten Sie dieses Kontrollkästchen aktivieren, da Sie sonst unerwünschte Ergebnisse erhalten könnten. Nähere Informationen dazu finden Sie unter Behandlung von Nullwerten in Datenbankaktionen.
5.Klicken Sie auf Aktion anhängen. Daraufhin wird rechts von der vorhandenen Aktualisieren, wenn-Aktion eine neue Aktion hinzugefügt. Konfigurieren Sie die neue Aktion als Rest einfügen:
mf_db_merge_03

In der Abbildung oben wurden die Datenbankaktionen den Zielen des Mappings entsprechend konfiguriert, d.h. der Datensatz wird aktualisiert, wenn die Aktualisieren, wenn..-Bedingung zutrifft. Andernfalls wird der Datensatz eingefügt. Mit der Option "gemappter Wert" wird festgelegt, dass alle Felder des Datensatzes anhand der Werte aus dem Mapping befüllt werden.

 

Es können auch mehr als zwei Aktionen an derselben Datenbanktabelle definiert werden (in diesem Beispiel ist dies jedoch nicht notwendig). Die Aktionen werden zur Mapping-Laufzeit von links nach rechts ausgeführt. Die letzte Einfügeaktion wird als endgültig betrachtet; alle anderen danach hinzugefügten Aktionen werden ignoriert.

 

Beachten Sie, dass die neue Aktion mit der Schaltfläche Aktion anhängen hinter der ausgewählten Aktion im Dialogfeld angehängt wird. Mit der Schaltfläche Aktion einfügen wird die neue Aktion vor der ausgewählten hinzugefügt. Um eine vorhandene Aktion zu löschen, klicken Sie auf eine beliebige Stelle in der Aktion und anschließend auf Aktion löschen.

 

6.Klicken Sie auf OK, um das Dialogfeld zu schließen. Beachten Sie, dass im Mapping anstelle der Schaltfläche Aktion: Einfügen tbl-act-icon nun eine Schaltfläche Aktion: Aktualisieren; Einfügen ( mf_db_ic_action_update_insert ) angezeigt wird. Dies zeigt an, dass für diese Tabelle sowohl eine Aktualisierungs- als auch eine Einfügeaktion konfiguriert wurde.

 

Schritt 5: Vorschau auf das Mapping und Aktualisieren der Datenbank

Klicken Sie auf das Fenster Ausgabe, um eine Vorschau auf das Mapping zu sehen. Es wird ein SQL-Skript generiert, das Aktionen enthält, die an der Datenbank ausgeführt werden sollen. Das Skript hat die Datenbank noch nicht geändert; dies dient nur zur Vorschau. Im Vorschauskript sind keine INSERT-Anweisungen zu sehen. Dies ist ein normales Verhalten, da Datensätze auf Basis einer Bedingung eingefügt werden und die INSERT-Anweisungen vom Ergebnis der Aktualisieren, wenn..-Aktion (die vor der Ausführung des Mappings nicht bekannt ist) abhängig sind.

 

Anmerkung:        Für bestimmte Datenbanktypen erstellt MapForce anstelle von UPDATE-Anweisungen MERGE-Anweisungen. Nähere Informationen dazu finden Sie unter MERGE-Anweisungen.

 

So führen Sie das Skript an der Datenbank aus:

 

Klicken Sie im Menü Ausgabe auf SQL-Script ausführen.

 

Jetzt, da das Mapping ausgeführt und das Skript auf die Datenbank angewendet wurde, werden INSERT-Anweisungen auf dem Ausgaberegister angezeigt.

 

Anmerkung:Das Ausführen des SQL-Skripts direkt von MapForce aus ist nur eine der Methoden, um eine Datenbank zu aktualisieren. Siehe auch Ausführen von Mappings, die Datenbanken modifizieren.

 

Wenn Sie die Tabelle "Person" auf dem Register "DB-Abfrage" von MapForce öffnen (siehe Anzeigen und Abfragen von Datenbanken), sehen Sie als Ergebnis des Mappings Folgendes:

 

Alle Datenbankdatensätze, für die es Primärschlüsselentsprechungen in der XML-Datei gab, wurden aktualisiert. Beispiele dafür sind die Datensätze mit den Primärschlüsseln 1, 2, 3, 4 und 5.

Alle Datenbankdatensätze, für die es in der XML-Datei keine Primärschlüsselentsprechungen gab, sind unverändert geblieben. Beispiele dafür sind die Datensätze mit den Primärschlüsseln 6, 7, 8 und 9.

Es wurden neue Datensätze in die Tabelle "Person" eingefügt (Datensätze, für die in der Datenbank noch kein Schlüssel vorhanden war). Beispiele dafür sind die Datensätze mit den Primärschlüsseln 30 und 31.

mf_db_merge_06

© 2017-2023 Altova GmbH