Altova MapForce 2023 Enterprise Edition

A veces no solo es necesario actualizar registros de una tabla sino insertar registros nuevos en la misma tabla. En casos así podemos usar la acción Actualizar si... Insertar restantes de MapForce, que funciona de la siguiente manera:

 

Si se cumple la condición Actualizar si, el registro de la base de datos se actualiza con los datos de la asignación.

Si no se cumple la condición Actualizar si y existe una condición Insertar restantes, se inserta un registro nuevo.

Si en la base de datos existen registros que no tienen equivalentes en el archivo de origen, estos registros no se modifican.

 

Nota sobre MySQL ODBC

Si la base de datos de destino es MySQL con conexión por ODBC, deberá habilitar la opción Return matched rows instead of affected rows (Devolver filas coincidentes en lugar de filas afectadas) de la pestaña Cursor/Results del conector MySQL ODBC. Si lo prefiere e introduce la cadena de conexión a mano en el asistente de conexión para bases de datos, añada Option=2 a la cadena de conexión (p. ej. Dsn=mydsn;Option=2; )

 

Para habilitar esta opción desde el conector MySQL ODBC:

 

1.Pulse la tecla Windows y teclee "ODBC".

2.Ejecute el administrador de fuentes de datos ODBC (versión de 32 bits o de 64 bits, dependiendo de la plataforma del conector MySQL ODBC instalado).

3.Haga clic en el nombre de origen de datos (DSN) utilizado por la asignación de MapForce y después haga clic en el botón Configure para modificar la configuración.

mf_mysql_odbc_dsn

4.Haga clic en Details >> para acceder a las opciones avanzadas de configuración.

5.Haga clic en la pestaña Cursors/Results y después marque la casilla Return matched rows instead of affected rows.

 

Ejemplo

El siguiente ejemplo explica cómo combinar (actualizar e insertar) datos de un XML de origen en una tabla de una base de datos. Para ello se usan estos archivos:

 

altova-cmpy-extra.xml, que contiene los datos de origen que se deben insertar en la base de datos.

Altova_Hierarchical.xsd, que es el esquema utilizado para validar el archivo de instancia anterior.

Altova.sqlite, que es la base de datos de destino que se debe actualizar.

 

Todos estos archivos están en la carpeta <Documentos>\Altova\MapForce2023\MapForceExamples\ y, para simplificar, en las instrucciones omitimos su ruta de acceso.

 

La asignación de este ejemplo modifica un archivo de base de datos de ejemplo. Lo más recomendable es crear una copia de seguridad de la base de datos original y empezar con una copia nueva antes de seguir las instrucciones que aparecen más abajo. Así se evitarán posibles modificaciones en los ejemplos originales y obtendrá el mismo resultado que en este ejemplo. Para más información consulte Ejecutar asignaciones que modifican bases de datos.

 

El objetivo de la asignación que nos ocupa es combinar todos los registros de un documento XML de origen en una tabla de destino llamada "Person". Es decir, por cada registro de los datos XML de origen, la asignación deberá hacer lo siguiente:

 

Si el campo PrimaryKey de la persona en el archivo XML se corresponde con el campo PrimaryKey de la persona en la base de datos, la asignación deberá actualizar el registro.

Los registros de la tabla "Person" que no cumplan esta condición no se modificarán.

Si el campo PrimaryKey de la persona en el archivo XML no tiene equivalentes en la tabla de base de datos de destino, la asignación añadirá un registro nuevo en la tabla.

 

Para conseguir este objetivo debemos seguir estos pasos:

 

Paso nº1: insertar el componente XML de origen

En el menú Insertar haga clic en el comando Archivo o esquema XML y navegue hasta el esquema Altova_Hierarchical.xsd. Cuando la aplicación solicite un archivo de instancia, navegue hasta el archivo altova-cmpy-extra.xml.

 

Paso nº2: insertar la base de datos de destino

En el menú Insertar haga clic en el comando Base de datos y siga los pasos del asistente para conectarse a Altova.sqlite (véase Agregar, editar y quitar objetos de BD).

 

Paso nº3: dibujar las conexiones

Dibuje las conexiones de asignación de datos que aparecen en la imagen.

mf_db_merge_01

 

Paso nº4: configurar las acciones "Actualizar si... Insertar restantes"

1.En el componente de destino haga clic en el botón Acción: Insertar tbl-act-icon situado junto a la tabla "Person".

2.Junto al campo Acción para el registro seleccione Actualizar si..., lo cual cambia la acción de tabla de base de datos por una acción de actualización condicional. Es decir, el registro actual solamente se actualizará si se cumple una condición concreta (paso siguiente).

3.Junto al campo PrimaryKey, seleccione el valor es igual (imagen siguiente). Esto define la condición de actualización: el registro de la base de datos solamente se actualizará si su valor PrimaryKey es igual al valor PrimaryKey procedente de la asignación.

mf_db_merge_02

4.Puede optar por marcar la casilla Null equal. En este ejemplo esta casilla es irrelevante, ya que ni el campo ClavePrimaria del XML de origen ni el campo ClavePrimaria de la BD contienen valores null. Sin embargo, debería marcar eta casilla si sus datos contienen valores null y quiere que estos sean tratados como iguales; de lo contrario puede que no obtenga los resultados deseados. Para más información consulte el apartado Gestionar valores null en acciones de tabla de BD.

5.Haga clic en el botón Anexar acción. Esto añade una acción nueva a la derecha de la acción Actualizar si... actual. Configure esta acción nueva como Insertar restantes.

mf_db_merge_03

En la imagen anterior, las acciones de tabla de base de datos están configuradas de acuerdo con los objetivos de esta asignación. Es decir, el registro solamente se actualizará si se cumple la condición Actualizar si. De lo contrario, el registro se insertará. La opción valor asignado especifica que los valores de la asignación se usarán para rellenar todos los campos del registro.

 

También se pueden definir más de dos acciones en la misma tabla de base de datos (aunque en nuestro ejemplo esto no es necesario). Cuando se ejecute la asignación, las acciones se ejecutarán de izquierda a derecha. Se entiende que la última acción Insertar es la última acción y las acciones que se añadan después se pasarán por alto.

 

Tenga en cuenta que el botón Anexar acción del cuadro de diálogo añade una acción nueva después de la acción seleccionada. El botón Insertar acción añade una acción nueva antes de la acción seleccionada. Para eliminar una acción haga clic en ella y después en el botón Eliminar acción.

 

6.Haga clic en Aceptar para cerrar el cuadro de diálogo. Observe cómo, en la asignación, el botón Acción:Insertar tbl-act-icon se ha convertido en Acción: Actualizar; Insertar mf_db_ic_action_update_insert. Esto indica que se configuró una acción de actualización y de inserción para esta tabla.

 

Paso nº5: vista previa de la asignación y actualizar la base de datos

Abra el panel Resultados para consultar una vista previa de los resultados de la asignación. La asignación genera un script SQL que contiene las acciones que se deben ejecutar en la base de datos. El script no ha modificado todavía la base de datos. Solamente se trata de una vista previa.

 

Puede que en el script de vista previa no aparezca ninguna instrucción INSERT. Esto es totalmente normal y se debe a que los registros se insertan de forma condicional y a que las instrucciones INSERT dependen del resultado de la acción Actualizar si (lo cual no ocurre hasta que se ejecuta la asignación).

 

Nota:para determinadas bases de datos MapForce crea instrucciones de combinación MERGE en lugar de instrucciones UPDATE. Para más información consulte el apartado Instrucciones de combinación MERGE.

 

Para ejecutar el script en la base de datos:

 

En el menú Resultados haga clic en Ejecutar script SQL.

 

Una vez ejecutada la asignación de datos y aplicado el script a la base de datos, podemos observar cómo las instrucciones INSERT ahora aparecen en el panel Resultados.

 

Nota:el script SQL se puede ejecutar desde MapForce directamente pero hay otras maneras de actualizar la base de datos (véase Ejecutar asignaciones que modifican bases de datos).

 

Si abrimos la tabla "Person" en el panel Consulta de BD de MapForce (véase Examinar y consultar bases de datos), podrá ver el resultado de la asignación:

 

Se actualizaron todos los registros de la base de datos que tenían claves principales equivalentes en el archivo XML (p. ej. los registros con clave principal 1, 2, 3, 4 y 5).

No se modificaron los registros de la base de datos que no tenían claves equivalentes en el archivo XML (p. ej. los registros con clave principal 6, 7, 8 y 9).

Se insertaron registros nuevos en la tabla "Person", cuando la clave no existía en la base de datos (p. ej. los registros con clave principal 30 y 31).

mf_db_merge_06

© 2017-2023 Altova GmbH