Altova MapForce 2023 Professional Edition

Parfois, il est nécessaire non seulement de mettre à jour des enregistrements existants, mais aussi d'insérer de nouveaux enregistrements dans la même table de base de données. Dans ces cas, MapForce propose une action "Mettre à jour si... Insérer Rest". Elle fonctionne comme suit :

 

Si la condition Mettre à jour si est vraie, alors l'enregistrement de base de données existant est mis à jour avec les données provenant du mappage.

Si la condition Mettre à jour si est fausse, et qu'une condition Insérer Rest existe, alors un nouvel enregistrement est inséré.

Si des enregistrements existent dans la base de données sans contre-partie dans le fichier de source, alors ces enregistrements restent inchangés.

 

Note / MariaDB ODBC  

Si la base de données cible est MySQL ou MariaDB through ODBC, l’option Retourner des lignes correspondantes au lieu des lignes affectées doit être activée dans l’onglet Cursor/Results de MySQL ODBC Connector. En alternative, si vous saisissez le string de connexion manuellement par le biais de l’assistant Connexion de base de données, ajouter Option=2 au string de connexion, par exemple : Dsn=mydsn;Option=2;

 

Pour activer cette option depuis le Connecteur ODBC MySQL :

 

1.Appuyer sur la touche Windows et commencer à saisir "ODBC".

2.Exécuter l'Administrateur de sources de données ODBC (soit 32-bit soit 64-bit, selon la plateforme du Connecteur ODBC MySQL installé).

3.Cliquer sur la Data Source Name (DSN) utilisée par le mappage MapForce, puis cliquer sur Configurer.

mf_mysql_odbc_dsn

En option, cocher la case NULL equal. Dans cet exemple, cette case à cocher n'est pas pertinente car ni le champ PrimaryKey se trouvant dans le XML de source ni le champ PrimaryKey dans la base de données ne contient de valeurs null. Néanmoins, vous devriez cocher cette case si vos données contiennent des valeurs null, et si vous souhaitez traiter ces valeurs comme égales ; sinon, vous risquez d'obtenir des résultats indésirables. Pour plus d'informations, voir Gérer des valeurs null dans les actions de table de base de données.

4.Cliquer sur Détails >> pour rendre les options avancées disponibles.

5.Cliquer sur l'onglet Curseurs/Résultats, et puis sélectionner la case à cocher Retourner lignes correspondantes au lieu des lignes touchées.

 

Exemple

L'exemple suivant vous montre comment fusionner (aussi bien Mettre à jour qu'Insérer) des données depuis une source XML dans une table de base de données. L'exemple utilise les fichiers suivants :

 

altova-cmpy-extra.xml — contient les données de source à insérer dans la base de données.

Altova_Hierarchical.xsd — le schéma utilisé pour valider le fichier d'instance ci-dessus.

altova.sqlite — la base de données cible à mettre à jour.

 

Tous les fichiers sont disponibles dans le dossier <Documents>\Altova\MapForce2023\MapForceExamples\. Ci-dessous, le chemin complet y menant sera omis, pour des raisons de simplicité.

 

Le mappage dans cet exemple modifie un fichier de base de données d'échantillon. Il est fortement recommande de sauvegarder la base de données originale et de commencer avec une nouvelle copie avant de suivre les étapes ci-dessous. Cela garantit que les exemples originaux ne sont pas contournés et que vous obtenez les mêmes résultats ci-dessous. Pour plus d'informations, voir Exécuter des mappages qui modifient les bases de données.

 

L'objectif du mappage est de joindre tous les enregistrements provenant d'un document XML de source dans une table cible "Person". Concrètement, pour chaque enregistrement dans les données XML de source, le mappage doit effectuer les choses suivantes :

 

Si la PrimaryKey de la personne dans le fichier XML correspond à une PrimaryKey de personne dans la base de données, alors mettre à jour l'enregistrement.

Tout enregistrement existant dans la table Person qui ne satisfait pas à la condition ci-dessus ne doit pas être touché.

Si la PrimaryKey de la personne dans le fichier XML ne dispose pas d'une correspondance dans la table de base de données de cible, alors ajouter un nouvel enregistrement à la table de la base de données.

 

Pour atteindre l'objectif de mappage, nous allons suivre les étapes suivantes.

 

Étape 1: Insérer le composant XML de source

Dans le menu Insérer, cliquer sur Schéma XML/Fichier, et chercher Altova_Hierarchical.xsd. Lorsque vous êtes invité à fournir un fichier d'instance, chercher altova-cmpy-extra.xml.

 

Étape 2: Insérer la base de données cible

Dans le menu Insérer, cliquer sur Base de données, et suivre les étapes de l'assistant pour vous connecter à Altova.sqlite. Voir Ajouter une Base de données.

 

Étape 3: Tirer les connexions

Tirer les connexions de mappage comme affiché ci-dessous.

mf_db_merge_01

 

Étape 4: Configurer les actions "Mettre à jour si... Insérer Rest"

1.Dans le composant de cible, cliquer sur la touche Action: Insérer ( tbl-act-icon ) située à côté de la table "Person".

2.À côté de Action sur enregistrement, choisir Mettre à jour si.... Cela change l'action de table de la base de données en une action de mise à jour conditionnelle. C'est à dire que l'enregistrement actuel sera uniquement mis à jour lorsqu'une condition sera satisfaite (voir étape suivante).

3.À côté de PrimaryKey, choisir la valeur equal, comme indiqué ci-dessous. Cela définit la condition de mise à jour : c'est à dire, l'enregistrement de la base de données sera mise à jour uniquement lorsque sa valeur PrimaryKey sera égale à la valeur PrimaryKey provenant du mappage.

mf_db_merge_02

4.Cliquer sur Apposer action. Cela permet d'ajouter une nouvelle action à la droite de l'action existante Mettre à jour si. Configurer la nouvelle action en tant que Insérer Rest :

mf_db_merge_03

Dans l'image ci-dessus, les actions de la table de base de données ont été configurées conformément avec les objectifs du mappage. C'est à dire que seule si la condition Mettre à jour si... est satisfaite, l'enregistrement sera mis à jour ; sinon, il sera inséré. L'option "valeur mappée" spécifie que des valeurs provenant du mappage seront utilisées pour remplir tous les champs de l'enregistrement.

 

Il est également possible de définir plus de deux actions par rapport à la même table de base de données (pas nécessairement dans cet exemple néanmoins). Au moment du mappage, des actions sont exécutées de gauche à droite. La dernière action Insérer est considérée être finale ; tout autre action ajoutée ultérieurement sera ignorée.

 

Veuillez noter que la touche Apposer Action dans le dialogue ajoute la nouvelle action après l'action sélectionnée. L'Action Insérer ajoute la nouvelle action avant l'action sélectionnée. Pour supprimer une action existante, cliquer n'importe où à l'intérieur puis cliquer sur Action Supprimer.

 

5.Cliquer sur OK pour fermer le dialogue. Veuillez noter que, de retour au mappage, la touche Action: Insérer tbl-act-icon est maintenant transformée en une touche Action: Mettre à jour; Insérer ( mf_db_ic_action_update_insert ). Cela indique que l'action de mise à jour et d'insertion est configurée pour avoir lieu pour cette table.

 

Étape 5: Consulter le mappage et mettre à jour la base de données

Cliquer sur l'onglet Sortie pour consulter le mappage. Un script SQL est généré, contenant des actions à exécuter par rapport à la base de données. Le script n'a pas encore modifié la base de données ; elle est uniquement destinée à la prévisualisation. Les instructions INSERT ne sont pas visibles dans le script de prévisualisation. Ceci est un comportement normal, care les enregistrements sont insérés de manière conditionnelle et les instructions INSERT dépendent du résultat de l'action Update If (qui n'

n'est pas connu avant les exécutions de mappage).

 

Note :        pour certains types de bases de données, MapForce crée les instructions MERGE à la place des instructions UPDATE. Pour plus d'information, voir instructions MERGE.

 

Pour exécuter le script par rapport à la base de données :

 

Dans le menu Sortie, cliquez sur Exécuter SQL-Script.

 

Maintenant que le mappage a été exécuté et le script appliqué par rapport à la base de données, notez que les instructions INSERT sont visibles dans le volet Sortie.

 

Note :L'exécution du script SQL directement depuis MapForce est juste un des moyens mis à disposition pour mettre à jour la base de données, voir aussi Exécuter des mappages qui modifient des bases de données.

 

Si vous ouvrez la table "Person" dans l'onglet de requête de BD de MapForce (voir Parcourir et interroger des bases de données), vous pouvez voir le résultat du mappage comme suit :

 

Tous les enregistrements de base de données qui avaient des clés primaires correspondantes dans le fichier XML ont été mis à jour. Dans l'exemple, des enregistrements avec la clé primaire 1, 2, 3, 4 et 5.

Tous les enregistrements de base de données qui n'ont pas de clés correspondantes dans le fichier XML restent non-affectés. Dans l'exemple, des enregistrements avec la clé primaire 6, 7, 8 et 9.

De nouveaux enregistrements ont été insérés dans la table "Person" (pour lesquels la clé n'existe pas encore dans la base de données). Dans l'exemple, des enregistrements avec la clé primaire 30 et 31.

mf_db_merge_06

La table "Person" après mettre à jour la base de données

© 2017-2023 Altova GmbH