Ejemplo: búsqueda y concatenación

www.altova.com Imprimir este apartado Página anterior Subir un nivel Página siguiente

Inicio >  Funciones > Funciones definidas por el usuario >

Ejemplo: búsqueda y concatenación

MapForce viene con varias demostraciones de asignaciones que ilustran cómo se suelen usar las funciones definidas por el usuario. Una de estas asignaciones es el archivo PersonListByBranchOffice.mfd, que encontrará en la carpeta <Documentos>\Altova\MapForce2019\MapForceExamples\.

mf_udf_19

PersonListByBranchOffice.mfd

Esta asignación tiene los siguientes requisitos empresariales:

Extraer datos de un archivo XML de origen y escribirlos en un archivo XML de destino. Los datos son detalles de los empleados, como su nombre y apellidos.
Buscar ciertos datos sobre cada empleado en un archivo XML aparte (número de teléfono, dirección de correo electrónico, puesto).
Procesar datos de una forma concreta antes de escribirlos en el archivo de destino. El número de teléfono, la dirección de correo electrónico y el puesto de cada empleado debe estar representado por una sola cadena (separadas por comas) y debe escribirse en el elemento Detalles del archivo XML de destino.
Extraer únicamente los elementos XML que coincidan con un criterio de búsqueda (en este caso, información sobre empleados de una sucursal específica). Los usuarios de la asignación deben poder especificar el nombre de la sucursal como parámetro en la línea de comandos, por ejemplo al ejecutar la asignación en MapForce Server.

 

Ahora examinemos los componentes que ponen en práctica los requisitos que acabamos de explicar:

 

El parámetro de entrada de la asignación ("OfficeName") es un simple componente de entrada. Una constante da un valor predeterminado ("Nanonull, Inc.") que se usa si el usuario de la asignación no proporciona ningún valor de parámetro. Para saber más sobre componentes de entrada simples, consulte el apartado Pasar parámetros a la asignación.
Para filtrar únicamente empleados pertenecientes a una sucursal en concreto, la asignación usa un componente de filtro ("Office"). Este filtro comprueba si el nombre de la sucursal que da el parámetro es igual que el nombre de sucursal que contiene el archivo XML. Si es así, el filtro pasa los datos del elemento Office al componente de destino. Para más información sobre filtros consulte el apartado Filtros y condiciones.
Para buscar información en el segundo archivo XML, la asignación llama a una función definida por el usuario, "LookupPerson". La lógica de esta función viene comentada en detalle más abajo.
Para procesar los datos de los empleados, la función "LookupPerson" llama internamente a otras funciones que obtienen y concatenan información sobre cada empleado. Todas estas operaciones se encuentran en la asignación de la función y no son visibles en la asignación principal, como suele ocurrir en las encapsulaciones. Después, la función "LookupPerson" rellena el elemento Detalles en el archivo XML de destino.

 

Implementar la función de búsqueda

La función de búsqueda viene dada por la función "LookupPerson", cuya definición se muestra en la imagen siguiente.

mf_udf_20

Función "LookupPerson"

Como se ve en la imagen anterior, la función incluye el archivo XML de origen del que se deben obtener los datos. A continuación se añaden tres parámetros de entrada que corresponden con los valores de búsqueda: Office_Name, First_Name y Last_Name. Todos los parámetros de entrada se han marcado como obligatorios (es decir, se ha marcado la casilla Requiere una conexión de entrada en el cuadro de diálogo "Propiedades").
 
La función "EqualAnd function" es una función definida por el usuario distinta encerrada en la función activa. Esta función devuelve un valor binario. Llamar a esta función en la secuencia de la imagen anterior obtiene la siguiente lógica booleana:

mff_udf_lookup_example

El valor de la función (TRUE o FALSE) pasa al filtro cada vez que se procesa un nuevo elemento. Si el filtro recibe el valor TRUE, significa que la operación ha tenido éxito y los detalles del empleado se han obtenido y devuelvo a la asignación exterior. De lo contrario se examinan los siguientes elementos en contexto hasta que termine el bucle.

 

En la primera instancia de la función "EqualAnd" el conector b está rodeado por un círculo, lo que indica que este parámetro es el contexto prioritario. La prioridad es una función opcional que optimiza la ejecución de la asignación. Principalmente garantiza que los datos personales de una sucursal en concreto que obtiene el parámetro a se procesa primero. Para establecer un parámetro como prioritario, haga clic con el botón derecho en él y elija Contexto prioritario en el menú contextual. Para más información, consulte el apartadoNodo de contexto prioritario.

 

Implementación de una concatenación

La función "Person2Details" es otra función anidada en la función "LookupPerson". Esta función devuelve un valor de cadena. Concatena los tres valores recibidos como parámetros y las dos constantes de texto, como se muestra a continuación:

mf_udf_21

Función "Person2Details"

La función concat es una función integrada de MapForce que puede gestionar tantos parámetros como sea necesario (véase Agregar o eliminar argumentos en una función).

 

Ejecutar la asignación

Para obtener una vista previa de cómo se ejecutará la asignación en MapForce, haga clic en la pestaña Resultados. La asignación se ejecutará con el parámetro de entrada predeterminado ("Nanonull, Inc."), por lo que solo obtendrá información de los empleados de esta sucursal. Para obtener datos de otra sucursal, cambie la constante que está conectada al parámetro de entrada de "Nanonull, Inc." a "Nanonull Partners, Inc." y vuelva a ejecutar la asignación.


© 2019 Altova GmbH