Altova MapForce 2027 Professional Edition

Cet exemple montre comment joindre des données provenant de deux tables de base de données à l'aide d'un composant join MapForce. L'opération de jointure est effectuée en mode SQL, comme décrit dans Joins dans le mode SQL. Notez que la jointure de trois tables ou plus fonctionne de manière très similaire ; voir également Exemple : Créer un rapport CSV à partir de plusieurs tables.

 

L'exemple est accompagné d'un échantillon de mappage qui est disponible sous le chemin suivant : <Documents>\Altova\MapForce2027\MapForceExamples\DocExamples\JoinDatabaseTables.mfd.

mf_map_JoinDatabaseTables

JoinDatabaseTables.mfd

Le mappage ci-dessus a pour objectif de combiner les données de deux tables de base de données source dans un seul fichier CSV cible. Comme l’illustre le schéma de base de données ci-dessous, la première table (users) stocke les noms et adresses e-mail des personnes, tandis que la deuxième table (addresses) stocke leurs adresses. Les deux tables sont reliées par un champ commun (le champ id de la table users correspond au champ user_id de la table addresses). Dans la terminologie des bases de données, ce type de relation est également appelé « relation de clé étrangère ».

mff_jointables

 

Pour plus de clarté, l’image ci-dessous illustre les données réelles contenues dans les deux tables.

mff_jointables_data

 

Chaque enregistrement utilisateur de la table users peut avoir zéro ou plusieurs adresses dans la table addresses. Par exemple, un utilisateur peut avoir une adresse de type « home », ou deux adresses (l’une de type « home » et l’autre de type « work »), ou encore aucune adresse.

 

L’objectif du mappage est de récupérer les données complètes (prénom, nom, e-mail, ville, rue, numéro) de tous les utilisateurs disposant d’au moins une adresse dans la table addresses. Il doit également être possible de récupérer facilement uniquement les adresses d’un type spécifique (par exemple, uniquement les adresses domicile, ou uniquement les adresses travail). Le type d’adresses à récupérer ("home" ou "work") doit être fourni en tant que paramètre au mappage. Les enregistrements de personnes récupérés doivent être triés par ordre alphabétique selon le nom de famille.

 

La contrainte de mappage sera satisfaite à l’aide d’un composant join, comme illustré dans les étapes ci-dessous.

 

Note : L'utilisation d'un composant join n'est pas la seule façon de joindre des tables ou des vues de base de données. Les jointures applicables aux bases de données peuvent également être effectuées à l'aide d'instructions SQL SELECT ; voir Instructions SQL SELECT en tant que tables virtuelles. Une différence majeure entre les instructions SQL SELECT et les composants join réside dans le fait que les premières sont écrites manuellement, ce qui peut offrir davantage de flexibilité. Les composants join constituent une alternative plus simple si vous n'êtes pas à l'aise avec l'écriture manuelle d'instructions SQL.

 

Étape 1 : Ajouter la base de données source

1.Dans le menu Insérer, cliquez sur Base de données. (Vous pouvez également cliquer sur le bouton Insérer Base mf_ic_insert_db.de la barre d’outils).

2.Sélectionnez "SQLite" comme type de base de données, puis cliquez sur Suivant.

3.Recherchez le fichier Nanonull.sqlite disponible dans le dossier DocExamples, puis cliquez sur Se connecter.

4.Lorsque vous y êtes invité, sélectionnez les tables addresses et users.

mf_map_JoinDatabaseTables1

 

Étape 2 : Ajouter le composant join

1.Dans le menu Insérer, cliquez sur Join. (Vous pouvez également cliquer sur le bouton Join mf_ic_join_button de la barre d'outils).

2.Tracez une connexion entre la table users et la première entrée du composant join.

3.Développez la table users et tracez une connexion entre la table addresses (table enfant de users) et la deuxième entrée du composant join. Le bouton gui_add_function_parameter vous permet d’ajouter d’autres tables si nécessaire ; toutefois, dans cet exemple, seules deux tables sont jointes.

mf_map_JoinDatabaseTables2

Note : Il est également possible d’ajouter la connexion directement à partir de la table addresses (celle qui n’est pas une table enfant de users) ; cependant, dans ce cas, les conditions join devraient être définies manuellement, comme décrit dans la section Ajouter des conditions join. Pour les besoins de cet exemple, veillez à créer les connexions comme indiqué ci-dessus. Cela garantit que la condition join requise est créée automatiquement.

 

4.Cliquez sur le bouton Définir condition join mf_ic_join_key disponible sur le composant join. Notez que la condition join a été créée automatiquement (users.id = addresses.user_id).

mf_map_JoinDatabaseTables3

 

Étape 3 : Ajouter le composant CSV cible

1.Dans le menu Insérer, cliquez sur Fichier texte. (Vous pouvez également cliquer sur le bouton Insérer Fichiers de texte ic-component_txt de la barre d’outils).

2.Lorsque vous êtes invité à choisir un mode de traitement du texte, sélectionnez Utiliser un traitement simple pour les fichiers CSV standard... .

3.Cliquez plusieurs fois sur Ajouter champ pour créer sept champs CSV. Laissez tous les autres paramètres tels quels.

mf_map_JoinDatabaseTables4

4.Double-cliquez sur la cellule d’en-tête de chaque champ pour lui attribuer un nom descriptif (cela rendra votre mappage plus lisible).

mf_map_JoinDatabaseTables5

5.Tracez les connexions de mappage entre le composant join et le composant CSV comme indiqué ci-dessous. La connexion entre l'élément joined du composant de jointure et l’élément Rows du composant cible signifie « créer autant d’enregistrements (lignes) dans la cible qu’il y a d’enregistrements répondant à la condition join ».

mf_map_JoinDatabaseTables6

 

Étape 4 : Ajouter la condition SQL WHERE/ORDER et le paramètre d’entrée

1.Cliquez avec le bouton droit sur la connexion entre l’élément joined du composant join et l’élément Rows du composant CSV cible, puis sélectionnez Insérer SQL-WHERE/ORDER.

2.Saisissez les clauses WHERE et ORDER BY comme indiqué ci-dessous.

mf_map_JoinDatabaseTables7

3.Dans le mappage, ajoutez un composant d’entrée (à l’aide de la commande de menu Insérer | Insérer entrée) et connectez sa sortie au paramètre address_type créé à l’étape précédente.

mf_map_JoinDatabaseTables8

4.Double-cliquez sur le composant d’entrée et configurez-le comme indiqué ci-dessous. Une valeur de conception est requise (dans ce cas, "home") pour prévisualiser la sortie du mappage dans MapForce. Si vous souhaitez que l’aperçu récupère les adresses professionnelles, remplacez cette valeur par "work".

mf_map_JoinDatabaseTables9

 

Explication du mappage

La condition de jointure créée automatiquement à l’étape 2 garantit que seuls les enregistrements satisfaisant à la condition de jointure users.id = addresses.user_id sont copiés vers la cible. La condition join a été ajoutée automatiquement car les deux tables sont liées par une relation de clé étrangère et les connexions de mappage ont été tracées en conséquence. Pour plus d’informations sur les relations entre tables, voir Gérer des relations de base de données. Cet exemple ayant exploité les relations entre tables déjà existantes, vous n’avez pas eu à définir manuellement de conditions join. Pour un exemple illustrant la définition manuelle de conditions join, voir Exemple : Créer un rapport CSV à partir de plusieurs tables.

 

Les deux tables sources provenant de la même base de données et du même composant, cette jointure bénéficie du mode SQL mf_ic_join_sql_enabled. Le mode SQL étant activé, l’opération de jointure est effectuée par la base de données, et non par MapForce. En d’autres termes, une instruction INNER JOIN est générée en interne par MapForce et envoyée à la base de données pour exécution. Le type de jointure (INNER JOIN) est indiqué par l’icône Inner Join mff_ic_inner_join située devant la table addresses sur le composant join. Vous pouvez également modifier le type de jointure en LEFT OUTER JOIN mff_ic_left_join, comme décrit dans la section Modifier le mode join. Notez toutefois que la modification du mode de jointure n’affecte pas le résultat de cet exemple.

 

Le composant SQL WHERE/ORDER ajouté à l’étape 4 permet de filtrer (pour récupérer soit les adresses personnelles, soit les adresses professionnelles) et de trier l’ensemble d’enregistrements. Notez que la clause WHERE a créé un paramètre :address_type de type chaîne. Ce paramètre permet de fournir le type d’adresse (personnelle ou professionnelle) à partir du mappage. Pour plus d’informations sur SQL WHERE/ORDER, voir Filtrer et trier des données de base de données (SQL WHERE/ORDER).

 

Enfin, le composant d’entrée permet de fournir la valeur réelle du paramètre lors de l’exécution du mappage. Notez que, lorsque le mappage s’exécute en dehors de MapForce (par exemple, lorsqu’il est exécuté par MapForce Server sur une autre machine), l’entrée doit être fournie au moment de l’exécution du mappage sous forme de paramètre de ligne de commande ; la valeur définie lors de la conception mentionnée ci-dessus est alors ignorée. Pour plus d’informations, voir Fournir des paramètres dans le mappage.

© 2020-2026 Altova GmbH