Parámetros en funciones definidas por el usuario
Cuando se crear una función definida por el usuario se debe indicar qué parámetros de entrada debe tomar (si los toma) y qué resultados debe devolver. Aunque los parámetros de entrada no siempre son necesarios, es obligatorio en todos los casos incluir un parámetro de salida. Los parámetros de las funciones pueden ser de tipo simple (como una cadena o un entero) o una estructura de tipo complejo. Por ejemplo, la función definida por el usuario FindArticle que ve más abajo tiene dos parámetros de entrada y uno de salida:
•POArtNr es un parámetro de entrada de tipo cadena.
•Amount es un parámetro de entrada de tipo entero.
•CompletePO es un parámetro de salida con una estructura XML compleja.
Orden de los parámetros
Cuando una función definida por el usuario tiene varios parámetros de entrada o salida, puede cambiar el orden en que aparecen cuando se llama a esa función. El orden de los parámetros en la asignación de la función (empezando por arriba) dicta el orden en que aparecen cuando se llama a la función.
Importante
•Los parámetros de entrada y de salida se ordenan según su posición de arriba a abajo. Por tanto, si mueve el parámetro input3 a la parte superior de la asignación de la función, se convertirá en el primer parámetro de esta función.
•Si dos parámetros tienen la misma posición vertical, entonces tiene precedencia el último.
•En el caso improbable de que varios parámetros tengan la misma posición, entonces se usa automáticamente un ID de componente interno.
Estructuras de tipo complejo
En la lista siguiente puede ver las estructuras en que se puede basar un parámetro de una función definida por el usuario.
MapForce Basic Edition
•Estructura de XML Schema
MapForce Professional Edition
•Estructura de XML Schema
•Estructura de BD
MapForce Enterprise Edition
•Estructura de XML Schema
•Estructura de BD
•Estructura EDI
•Estructura FlexText
•Estructura de JSON Schema
Las funciones definidas por el usuario se basan en estructuras de base de datos (en las ediciones Professional y Enterprise)
MapForce permite crear parámetros en funciones definidas por el usuario basadas en bases de datos con una estructura de tablas relacionadas. La estructura de tablas relacionadas representa una estructura en memoria que no tiene conexión con la BD en tiempo de ejecución. Esto también significa que no hay una forma automática de administrar las claves foráneas ni acciones de tabla en los parámetros o las variables.
Agregar parámetros
Para agregar un parámetro de entrada o de salida siga estos pasos:
1.Cree una función definida por el usuario o abra una que ya exista.
2.Ejecutar el comando de menú Función | Insertar componente de entrada o Función | Insertar componente de salida (imagen siguiente). También puede hacer clic en (Insertar componente de entrada) or (Insertar componente de salida) en la barra de herramientas.
3.Elija si los componentes de entrada o de salida deben ser de tipo simple o complejo (véase el cuadro de diálogo anterior). Consulte la lista de estructuras complejas disponibles más arriba. Por ejemplo, para crear un parámetro XML de tipo complejo haga clic en Elegir, junto a Estructura, y navegue hasta el esquema XML que describe la estructura requerida.
Si la asignación de la función ya incluye esquemas XML, estos pasan a estar disponibles para seleccionarlos como estructuras. De lo contrario puede seleccionar un esquema nuevo para que proporcione estructura al parámetro. Los mismo ocurre con bases de datos y otras estructuras complejas, siempre que sean compatibles con su versión de MapForce. Con las estructuras XML es posible seleccionar el elemento raíz pata la estructura si el esquema XML lo permite. Para indicar el elemento raíz haga clic en Elegir, junto a Raíz, y seleccione el elemento raíz en el cuadro de diálogo que se abre.
Si la casilla Guardar ruta de acceso de la estructura como relativas al archivo MFD está marcada, la ruta absoluta de la estructura pasará a ser relativa a la asignación actual cuando la guarde. Para más información consulte el apartado relativa y ruta absoluta . Las casillas Requiere una conexión de entrada y El parámetro de entrada es una secuencia se explican en los siguientes apartados.
Requiere una conexión de entrada
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 (véase el cuadro de diálogo de más arriba). Si desmarca esta casilla, el parámetro se convierte en opcional y aparece con un borde discontinuo en la asignación.
También puede indicar un valor de parámetro predeterminado si lo conecta a la entrada default de un parámetro (ejemplo siguiente). El valor predeterminado solo se aplica si no hay ningún otro valor. Si el parámetro opcional recibe un valor cuando se llama a la función, ese valor tiene prioridad sobre el valor predeterminado.
El componente de entrada es una secuencia
Puede decidir si un parámetro de una función se debe tratar como un valor único (opción predeterminada) o como una secuencia. Una secuencia es un rango de cero o más valores. Una secuencia puede ser útil si la función definida por el usuario espera que los datos de entrada sean una secuencia para calcular los valores de esa secuencia, por ejemplo, llamando a funciones como avg, min, max. Para tratar el componente de entrada del parámetro como una secuencia, marque la casilla El parámetro de entrada es una secuencia. Recuerde que esta casilla solo se habilita para funciones definidas por el usuario estándar.
En la asignación siguiente puede ver islustrado el uso de una secuencia: MapForceExamples\InputIsSequence.mfd. En el extracto de esta asignación de elementos (imagen siguiente) el filtros de datos está conectado a la función definida por el usuario Calculate. El resultado del filtro es una secuencia de elementos. Por tanto, el componente de entrada de la función se definió como secuencia.
A continuación puede ver la implementación de la función Calculate que suma todos los valores de la secuencia: Las funciones avg, min y max se ejecutan en la secuencia de entrada. Para ver la estructura interna de la función Calculate hace doble clic en el encabezado del componente Calculate de la asignación anterior.
Por lo general, los datos de entrada (sean una secuencia o no) determinan cómo de a menudo se llama a la función:
•Cuando los datos de entrada se conectan al parámetro sequence, se llama a la función definida por el usuario una sola vez y la secuencia completa se pasa a la función definida por el usuario.
•Cuando los datos de entrada se conectan al parámetro non-sequence, 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 que no sea una secuencia, no se llama a la función. Esto puede ocurrir si la estructura de origen tiene elementos opcionales o si una de las condiciones de un filtro no devuelve coincidencias. Para evitarlo, use la función substitute-missing antes de la entrada de la función para asegurarse de que la secuencia nunca esté vacía. También puede definir el parámetro como secuencia y agregar controles para la secuencia vacía dentro de la función.
Es posible que también necesite la casilla El componente de salida es una secuencia para los parámetros de salida. Cuando una función pasa una secuencia de varios valores a su componente de salida y este no se ha definido como secuencia, la función devuelve solamente el primer elemento de la secuencia.