Altova MapForce 2023 Enterprise Edition

En este apartado explicamos cómo buscar información sobre los empleados y presentar esa información de forma adecuada. Para probar la implementación de la búsqueda necesitará esta asignación: MapForceExamples\PersonListByBranchOffice.mfd.

mf_udf_19

Objetivos

En este caso los objetivos son:

 

Buscar información sobre cada uno de los empleados (su extensión de teléfono, dirección de correo electrónico y título) en un archivo XML aparte.

Presentar estos datos como lista separada por comas y asignarla al elemento Details del archivo XML de destino.

Extraer información sobre los empleados de una sola filial llamada Nanonull, Inc.

 

Para ello hemos diseñado la asignación de la siguiente forma:

 

Para visualizar solamente los empleados de Nanonull, Inc. la asignación usa el filtro Office.

Para buscar información sobre los empleados en un archivo XSLT diferente la asignación llama a la función definida por el usuario LookupPerson. La implementación de esta función definida por el usuario se describe más abajo.

Para procesar la información de los empleados, la función LookupPerson llama internamente a otras funciones que obtienen y concatenan la información de los empleados. Todas estas operaciones están dentro de la asignación de la función y no son visibles en la asignación principal. Después, la función LookupPerson asigna los datos del empleado al elemento Details en PersonList.

 

Implementación de LookupPerson

La funcionalidad de búsqueda la proporciona la función LookupPerson, sobre la que encontrará más información más abajo. Para ver la implementación interna de la función definida por el usuario haga doble clic en su encabezado en la asignación principal.

mf_udf_20

Así se configuró la unción definida por el usuario:

 

Los datos se obtienen del archivo XML Altova_Hierarchical.xml: (i) el nombre de la oficina y el nombre y apellido de los empleados, que se usan para seleccionar solamente empleados de Nanonull, Inc., y (ii) el correo electrónico, el título y la extensión de teléfono, que se concatenan en una sola cadena. A continuación describimos las definiciones de las funciones EqualAnd y Person2Detail.

La función definida por el usuario también tiene tres parámetros de entrada que proporcionan los valores de búsqueda Office_Name, First_Name y Last_Name. El valor del parámetro Office_Name se obtiene de la entrada OfficeName de la asignación principal, y los valores de First_Name y Last_Name los da el componente BranchOffices de la asignación principal.

El valor de la función EqaulAnd (true o false) se pasa al filtro Details cada vez que se procesa la información (título, correo electrónico, teléfono) de un empleado. Cuando el filtro Details obtiene el valor true se entiende que la búsqueda se ha realizado correctamente y que se pueden pasar los datos obtenidos a la asignación principal. De lo contrario se examina el elemento siguiente en el contexto hasta que termine el bucle.

 

Implementación de EqualAnd

La función EqualAnd (véase más abajo) es una función definida por el usuario aparte que está definida dentro de la función definida por el usuario LookupPerson. Para ver la estructura interna de EqualAnd haga doble clic en su encabezado.

mf_udf_22

EqualAnd primero comprueba si a es igual a b; si el resultado es true, este se pasa al primer parámetro de la función logical-and. Si los dos valores son true en la función logical-and, el resultado también es true y se pasa a la siguiente función EqualAnd. El resultado de la tercera función EqualAnd (véase LookupPerson más arriba) se pasa al filtro Details.

 

Implementación de Person2Detail

La función definida por el usuario Person2Details es otra función que se encuentra dentro de LookupPerson. Esta función (véase más abajo) concatena tres valores (obtenidos de Altova_Hierarchical.xml) y dos constantes de texto.

mf_udf_21

 

Resultados

Al hacer clic en el panel Resultados, MapForce muestra la información recuperada de los empleados de Nanonull Inc (véase a continuación).

 

<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>

 

© 2017-2023 Altova GmbH