Parámetros en funciones definidas por el usuario

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

Inicio >  Funciones > Funciones definidas por el usuario >

Parámetros en funciones definidas por el usuario

Al crear una función definida por el usuario debe indicar qué parámetros de entrada debe tomar (si corresponde) y qué parámetros de salida debe devolver. Mientras que los parámetros de entrada no siempre son necesarios, todas las funciones deben tener un parámetro de salida (es decir, una función siempre debe devolver algo). Por ejemplo, la siguiente función no tiene parámetros de entrada, pero sí uno de salida que devuelve el texto "hola" al usuario:

mf_udf_04

Los parámetros de una función pueden ser de tipo simple (como una cadena de texto o un número entero) o tener una estructura compleja. Por ejemplo, la función definida por el usuario "FindArticle" (imagen siguiente) tiene dos parámetros de entrada y uno de salida.
 

POArtNr es un parámetro de entrada de tipo simple "string" (cadena)
Amount  es un parámetro de entrada de tipo simple "integer" (número entero)
CompletePO  es un parámetro de salida de tipo complejo XML.

mf_udf_09

LookupArticle.mfd

La asignación anterior está disponible como demostración en la siguiente ruta: <Documentos>\Altova\MapForce2019\MapForceExamples\LookupArticle.mfd.

 

Agregar parámetros

 

Para agregar un parámetro de entrada o de salida:

1.Cree una asignación de funciones definidas por el usuario (véase Crear funciones definidas por el usuario) o abra una ya existente (véase Editar funciones definidas por el usuario).
2.Escoja una de estas opciones:

 

Ejecute el comando de menú Función |  Insertar componente de entrada | Insertar componente de salida.
Haga clic en los botones de la barra de herramientas Insertar componente de entradamf_ic_udf_input or Insertar componente de salida mf_ic_udf_output.

mf_udf_08

3.En el cuadro de diálogo anterior, indique si los parámetros de entrada y salida deben ser de tipo simple (como una cadena o un número entero) o complejo (como una estructura XML). Para crear un parámetro de tipo complejo XML haga clic en Elegir, junto a "Estructura" y navegue hasta el esquema XML que describe la estructura requerida.

 

Si la asignación e la función ya incluye esquemas XML, estos se podrán seleccionar como estructuras. De lo contrario puede seleccionar un esquema completamente nuevo que proporcione la estructura del parámetro.

 

Las estructuras XML permiten seleccionar un elemento raíz para una estructura, siempre que el esquema XML lo permita. Para especificar un elemento raíz, haga clic en Elegir, junto a "Raíz", y seleccione el elemento raíz del cuadro de diálogo que aparece.
 
Si marca la casilla Guardar la ruta de acceso del archivo de estructura relativa al archivo MFD, al cerrar la asignación, la ruta absoluta del archivo de la estructura cambiará a una ruta relativa a la asignación que acaba de cerrar. Para más información, consulte el apartado Usar rutas de acceso relativas en un componente.

 

Las casillas Requiere una conexión de entrada y El parámetro de entrada es una secuencia se explican en los siguientes apartados.

 

Parámetros obligatorios

Para hacer que un parámetro sea obligatorio en una función definida por el usuario, marque la casilla Requiere una conexión de entrada. Si un parámetro es obligatorio generará mensajes de error si no le proporciona una conexión de entrada.
 
Para hacer que un parámetro sea opcional, marque la casilla, desmarque la casilla Requiere una conexión de entrada. En la asignación principal los parámetros opcionales tienen un aspecto ligeramente diferente: junto a su conector de entrada (un pequeño triángulo) aparece una especie de regleta.

 

También puede indicar un valor de parámetro predeterminado conectándolo a la entrada predeterminada ("default") de un parámetro, por ejemplo:

mf_udf_18

El valor predeterminado solo se aplicará si no existe ningún otro valor. Si el parámetro opcional recibe un valor al llamar a la función, entonces ese valor tiene prioridad sobre el predeterminado.

 

Parámetros de secuencia

Puede elegir entre si el parámetro de una función se debe tratar como un valor individual (que es el comportamiento predeterminado) o como una secuencia. Para tratar al parámetro como una secuencia y no como un valor individual, marque la casilla El parámetro de entrada es una secuencia. Esta casilla solo es importante y está habilitada si la función definida por el usuario es de tipo estándar (véase Funciones definidas por el usuario inline y regulares). En caso contrario estará deshabilitada.
 
Una secuencia puede contener cero o más valores. Puede que quiera tratar el parámetro como una secuencia si su función definida por el usuario espera que los datos de entrada sean una secuencia para poder añadir a esta más valores (por ejemplo llamando a funciones como avg, min o max). Para ver un ejemplo, abra la siguiente asignación de demostración: <Documentos>\Altova\MapForce2019\MapForceExamples\InputIsSequence.mfd. En esta asignación, el filtro "datos" está conectado a la función definida por el usuario "Calculate". El componente de salida del filtro es una secuencia de elementos, por lo que el parámetro de entrada de la función se considera como secuencia.

mf_udf_11

InputIsSequence.mfd

La función "Calculate" agrega internamente todos los valores de la secuencia (como se ve en la imagen siguiente, ejecuta las funciones de agregado en la secuencia de entrada).

mf_udf_12

Por lo general los datos de entrada, sean una secuencia o no, determinan la frecuencia con la que se llama a la función.

 

Si los datos de entrada están conectados a un parámetro de secuencia, solo se llama a la función definida por el usuario una vez y la secuencia al completo pasa a la función definida por el usuario.
Si los datos de entrada están conectados a un parámetro de no secuencia, entonces solo se llama a la función definida por el usuario una vez por cada elemento de la secuencia.

 

Si conecta una secuencia vacía a un parámetro de no secuencia, el resultado es que no se llama a la función.

 

Esto puede ocurrir si la estructura fuente tiene elementos opcionales o si una condición del filtro no devuelve coincidencias. Para evitar esto puede usar bien la función substitute-missing antes de la función de entrara, para garantizar que la secuencia nunca esté vacía, o cambiar el parámetro a secuencia y agregar en el interior de la función instrucciones sobre qué hacer con la secuencia vacía.

 

Puede que la casilla El parámetro de salida es una secuencia también sea necesaria para los parámetros de salida. Si una función para una secuencia de valores múltiples a su componente de salida y este no es una secuencia, la función solo devolverá el primer elemento de la secuencia.

 

Orden de los parámetros

Si una función definida por el usuario tiene varios parámetros de entrada o de salida, puede cambiar el orden en que los parámetros deben aparecer para los usuarios de esta función. Por ejemplo, la siguiente función tiene tres parámetros de entrada, input1, input2 e input3.

mf_udf_13

El orden de los parámetros en la asignación de la función (empezando por arriba) determina el orden en que aparecen para los usuarios de esta función:

mf_udf_14

Tenga en cuenta que:

 

Los parámetros de entrada y de salida se clasifican por su posición de arriba a abajo. Por lo tanto, si mueve el parámetro  a la parte superior de la asignación de la función, se convierte en el primer parámetro de esta función.
Si dos parámetros tiene la misma posición vertical, tiene prioridad el que esté más a la izquierda.
En el poco frecuente caso de que dos parámetros tengan exactamente la misma posición se usa automáticamente el componente interno ID para ordenarlos.

© 2019 Altova GmbH