Implémentation de la consultation
Cette rubrique explique comment rechercher des données sur les employés et présenter cette information de manière utile. Pour tester l’implémentation de la consultation, vous aurez besoin du mappage suivant : MapForceExamples\PersonListByBranchOffice.mfd.
Objectifs
Nos objectifs sont les suivants :
•Pour rechercher des données sur chaque employé (leur poste, adresse e-mail et titre) dans un fichier XML.
•Pour présenter ces données en tant que liste séparée par une virgule et mapper cette liste dans l’élément Détails de l’XML cible.
•Pour extraire l’information sur les employés uniquement d’un branch office dénommé Nanonull, Inc.
Pour atteindre ces objectifs, nous avons conçu notre mappage de la manière suivante :
•Pour filtrer uniquement des employés de Nanonull, Inc., le mappage utilise le filtre Office.
•Pour consulter des informations sur les employés dans un autre fichier XML, le mappage appelle la FDU LookupPerson. L’implémentation de cette UDF est décrite dans la sous-section ci-dessous.
•Pour traiter des données d’employés, la fonction LookupPerson appelle en interne d’autres fonctions qui extraient et concatène l’information sur chaque employé. Toutes ces opérations se trouvent dans le mappage de la fonction et ne sont pas visibles dans le mappage principal. La fonction LookupPerson mappe ensuite les données de l’employé vers l’élément Détails dans PersonList.
LookupPerson : Structure interne
La fonction de consultation est fournie par la fonction LookupPerson, dont la définition est illustrée ci-dessous. Pour voir l’implémentation interne de la FDU, double-cliquez sur son en-tête dans le mappage principal.
La FDU est définie comme suit :
•Les données sont extraites depuis le fichier XML Altova_Hierarchical.xml: (i) le nom de l’office et les prénom et nom de famille des employés, qui sont utilisés pour sélectionner les employés de Nanonull, Inc., et (ii) l’e-email, le titre et l’extension téléphonique qui sont concaténés en un string. Les définitions des fonctions EqualAnd et Person2Detail sont décrites ci-dessous.
•L’UDF a trois paramètres d’entrée qui fournissent les valeurs look-up Office_Name, First_Name et Last_Name. La valeur du paramètre Office_Name est extraite depuis l’entrée OfficeName du mappage principal, et les valeurs de First_Name et Last_Name sont fournies par le composant BranchOffices du mappage principal.
•La valeur de la fonction EqaulAnd (true ou false) est passée au filtre Details à chaque fois que de nouveaux détails liés aux employés (titre, e-mail, téléphone) sont traités. Lorsque le filtre Détails obtient la valeur true, l’opération look-up a du succès et les détails de l’employé sont extraits et retournés dans le mappage principal. Sinon, l'item suivant est examiné dans le contexte, et cette procédure continue jusqu’à la fin de la boucle.
Implémentation EqualAnd
La fonction EqualAnd est une FDU séparée (voir ci-dessous) définie à l’intérieur de la FDU LookupPerson. Pour voir la structure interne de l’UDF EqualAnd, double-cliquez sur l’en-tête de la fonction.
La FDU EqualAnd vérifie d’abord si a est égale à b ; si le résultat est true, il est passé comme premier paramètre de la fonction logical-and. Si les deux valeurs dans la fonction logical-and sont true, le résultat est également true et passé à la prochaine fonction EqualAnd. Le résultat de la troisième fonction EqaulAnd (voir LookupPerson UDF ci-dessus) est passé au filtre Details.
Implémentation Person2Detail
La FDU Person2Details est une autre fonction à l’intérieur de la FDU LookupPerson. La FDU Person2Details (voir ci-dessous) concatène trois valeurs (extraites de Altova_Hierarchical.xml) et deux constantes de texte.
Sortie
Lorsque vous cliquez sur le volet Sortie, MapForce afficher les prénom et nom, et les détails des employés uniquement pour Nanonull, Inc (voir l’extrait ci-dessous).
<PersonList>
<Person>
<First>Vernon</First>
<Last>Callaby</Last>
<Details>Office Manager, EMail:v.callaby@nanonull.com, Phone: 582</Details>
</Person>
<Person>
<First>Frank</First>
<Last>Further</Last>
<Details> Accounts Receivable, EMail:f.further@nanonull.com, Phone: 471</Details>
</Person>
...
</ PersonList>