Modelos de importación/exportación: anexo técnico 

Proceso de importación y acciones asociadas

La importación y exportación del objeto se realiza mediante un proceso creado a partir de la compilación del modelo. Este proceso temporal se denomina WWINNNNNN o WWENNNNNN (NNNNNN es un número incremental).

En la exportación, el proceso solo extrae datos (filtrados según las habilitaciones de los usuarios). En la importación, el proceso contiene las instrucciones de descodificación del flujo de datos y llama a las distintas funciones vinculadas al objeto que se va a importar, simulando de alguna manera la entrada. Se suele llamar a las etiquetas estándar del proceso SUBXXX y SPEXXX, que permiten gestionar los objetos.

Sin embargo, también se llama a otras etiquetas adicionales específicas de la importación definidas en el proceso IMPXXX, si existe (y en el proceso definido en el modelo, que permite procesar los casos específicos). Las cronologías describen la forma en la que se desarrolla una importación en los distintos tipos de objeto (para mayor información, consulte la documentación de la gestión del objeto). En la siguiente tabla, las acciones del objeto estándar aparecen en cursiva y las de la importación aparecen en negrita.

La columna Acciones muestra las acciones realizadas justo después de la operación indicada en el contexto. Si observamos, por ejemplo, el apartado 8.2, en los objetos simples:

  • Se realizan las acciones VERIF_MOD e IMP_VERIF_MOD.
  • Se bloquea el registro y, a continuación, se realizan las acciones AVANT_MODIF e IMP_AVANT_MODIFIC.
  • Se asignan las variables de la clase (F) y, a continuación, se realizan las acciones INIMOD e IMP_INIMOD.
  • Se reescriben y, a continuación, se realizan las acciones MODIF e IMP_MODIF.
  • Se ejecuta la operación final de transacción (Commit) y, a continuación, se realizan las acciones APRES_MOD e IMP_APRES_MOD.
  • Se desbloquean y, a continuación, se realizan las acciones DEVERROU e IMP_DEVERROU.

Hay que tener en cuenta que las acciones situadas en el proceso específico de importación se realizan antes que las del proceso estándar de importación. Si el proceso específico de importación asigna el valor 1 a la variable GPE, no se puede realizar la acción del proceso estándar de importación.

Objeto simple

Secuencia

Contexto

Acciones

1.1

Antes de crear un programa de importación:

Aún no se ha creado el Openo que permite escribir el programa temporal de importación (nombre proporcionado por la variable IMPTRT).

Se puede modificar el nombre de las máscaras utilizadas (tabla NOMMSK) (número de máscaras proporcionado por NBMASK).

IMP_COMPILE

1.2

Después de crear un programa de importación:

El proceso temporal de importación (nombre proporcionado por la variable IMPTRT) siempre se abre mediante Openo. Se pueden añadir instrucciones adicionales (mediante Wrseq).

El proceso se compilará después de esta acción y, a continuación, comenzará el proceso de importación propiamente dicho.

IMP_TRTSUP

2

Inicio del programa

OUVREIMP_OUVRE

3

Lectura del registro de la cabecera

Transferencia a la clase (F)

La acción AP_IMPORT se ejecuta después de haber cargado las variables descodificadas de cada módulo (el nivel de anidación se identifica con la variable SEPNUM, de 1 a 8) y la abreviatura de la tabla principal se identifica con la variable IMPABR.

 

 

AP_IMPORT

4

Comprobación de la autorización para crear o

modificar:

SETBOUT IMP_SETBOUT (*)

5

Prueba de existencia del objeto:

 

5.1

Si el objeto no existe:

SETBOUT IMP_SETBOUT
RAZCIMP_RAZCRE

5.2

Si el objeto existe:

Carga posterior de la ficha

Nueva comprobación de las autorizaciones

VERROUIMP_VERROU

LIENSIMP_LIENS

SETBOUT IMP_SETBOUT

AVANT_MOD IMP_AVANT_MOD

6.1

Simulación de entrada en las pantallas asociadas

(tabla principal)

IMPORT

IMP_DEFTRT (*)

6.2

En cada campo de la pantalla:

Ejecución de las acciones antes_campo

antes_entrada

inic

Si se completa el campo:

Para saber si el campo se encuentra en una tabla:

(si es necesario, esta acción asigna nolign)

Si OK = 1, transferencia desde la clase (F)

del campo con el mismo nombre

Ejecución de las acciones después_campo

y, si es necesario, después_modif.

 

 

 

 

 

 

IMP_ZONE

7.1

Lectura de un registro del fichero secundario (en todos los niveles de registros secundarios)

 

IMPORT

IMP_TAB

 

AP_IMPORT

 

7.2

Simulación de pantallas asociadas.

En las tablas, se utiliza

la variable nolign.

Por defecto, se añade una línea

(nolign = 0)

 

8

Registro del objeto

 

8.1

Creación:

Inicio de la transacción

Escritura

Final de la transacción

 

 

Rollback:

VERIF_CRE IMP_VERIF_CRE

INICREIMP_INICRE

CREATION IMP_CREATION

APRES_CRE IMP_APRES_CRE

 

AB_CREATION

IMP_AB_CREATION

8.2

Modificación:

Inicio de la transacción

Bloqueo del registro

Asignación de variables (F)

Reescritura

Final de la transacción

 

 

Rollback:

Desbloqueo

VERIF_CRE IMP_VERIF_CRE

AVANT_MODFIC

IMP_AVANT_MODFIC

INIMODIMP_INIMOD

MODIF IMP_MODIF (*)

APRES_MODIMP_APRES_MOD

 

AB_MODIF IMP_AB_MODIF

DEVERROU IMP_DEVERROU

9

Final del programa:

FERME IMP_FERME

(*) Las acciones MODIF e IMP_MODIF se suelen utilizar para gestionar el registro de líneas (MODIF se utiliza en estándar en la gestión de objeto, IMP_MODIF permite gestionar las acciones complementarias). Si es necesario, la acción IMP_DEFTRT permite asignar de nuevo la variable TRTMSK, que define el nombre del proceso automático definido en el diccionario de pantallas. 

La acción IMP_SETBOUT se utiliza para completar las opciones de gestión del objeto. La llamada VIREBOUT se puede utilizar en importación para prohibir, por ejemplo, la creación, afectando a la variable CHAINE, entre otros, que contiene todas las opciones.

Objeto combinado

Secuencia

Contexto

Acciones

1.1

Antes de crear un programa de importación:

Aún no se ha creado el Openo que permite escribir el programa temporal de importación (nombre proporcionado por la variable IMPTRT).

Se puede modificar el nombre de las máscaras utilizadas (tabla NOMMSK) (número de máscaras proporcionado por NBMASK).

IMP_COMPILE

1.2

Antes de crear un programa de importación:

El proceso temporal de importación (nombre proporcionado por la variable IMPTRT) siempre se abre mediante Openo. Se pueden añadir instrucciones adicionales (mediante Wrseq).

El proceso se compilará después de esta acción y, a continuación, comenzará el proceso de importación propiamente dicho.

IMP_TRTSUP

1.3

Inicio del programa

OUVREIMP_OUVRE

2

Lectura del fichero de importación y transferencia a la clase [F]

La acción AP_IMPORT se activa después de haber cargado las variables descodificadas de cada módulo (el nivel de anidación se identifica con la variable SEPNUM, de 1 a 8) y la abreviatura de la tabla principal se identifica con la variable IMPABR.

AP_IMPORT

3

Prueba de existencia del objeto (número de líneas > 0)

 

3.1

Si el objeto existe:

VERROUIMP_VERROU

3.2

Comprobación de la autorización para crear o

modificar:

SETBOUTIMP_SETBOUT (*)

3.3

Si el objeto no existe:

SETBOUTIMP_SETBOUT (*)

RAZCREIMP_RAZCRE

4.1

Bucle de lectura de los registros

Registros asociados a cada línea:

Transferencia a la clase (F)

Final del bucle de lectura

Registros asociados al final del bucle:

FILTRE

LIENSIMP_LIENS

LIENSIMP_LIENS

 

LIENSIMP_LIENS

5.1

Simulación de entrada en las pantallas asociadas

(tabla principal)

IMPORT

IMP_DEFTRT (*)

5.2

En cada campo de la pantalla:

Ejecución de las acciones antes_campo

antes_entrada

inic

Si se completa el campo:

Si OK = 1, transferencia desde la clase [F] del campo con el mismo nombre

Ejecución de las acciones después_campoy, si es necesario, después_modif.

 

 

 

 

IMP_ZONE

6.1

Lectura de un registro del fichero secundario

La acción AP_IMPORT se activa después de haber cargado las variables descodificadas de cada módulo (el nivel de anidación se identifica con la variable SEPNUM, de 1 a 8) y la abreviatura de la tabla principal se identifica con la variable IMPABR.

IMPORT

 

AP_IMPORT

6.2

Simulación de pantallas asociadas.

En las tablas, se utiliza la variable nolign.

Por defecto, se añade una línea

nolign = 0).

 

7

Registro del objeto

 

7.1

Creación:

 

Inicio de la transacción

En cada línea:

Escritura

 

Al final de la escritura de las líneas:

Transacción finalizada:

VERIF_CRE IMP_VERIF_CRE

DEBUT_CRE IMP_DEBUT_CRE

INICREIMP_INICRE

CREATIONIMP_CREATION

MODIFIMP_MODIF

APRES_CREIMP_APRES_CRE

7.2

Modificación:

  Inicio de la transacción

Borrado de las líneas

Bucle en las líneas:

 

Creación de la línea

Al final del bucle

Final de la transacción

VERIF_CRE IMP_VERIF_CRE

DEBUT_MOD

IMP_DEBUT_MOD

FILTRE

INICREIMP_INICRE

CREATIONIMP_CREATION

MODIFIMP_MODIF (*)

APRES_MODIMP_APRES_MOD DEVERROUIMP_DEVERROU

8

Final del programa:

FERME IMP_FERME

 

Objeto tabla

Secuencia

Contexto

Acciones

1.1

Antes de crear un programa de importación:

Aún no se ha creado el Openo que permite escribir el programa temporal de importación (nombre proporcionado por la variable IMPTRT).

Se puede modificar el nombre de las máscaras utilizadas (tabla NOMMSK) (número de máscaras proporcionado por NBMASK).

IMP_COMPILE

1.2

Antes de crear un programa de importación:

El proceso temporal de importación (nombre proporcionado por la variable IMPTRT) siempre se abre mediante Openo. Se pueden añadir instrucciones adicionales (mediante Wrseq).

El proceso se compilará después de esta acción y, a continuación, comenzará el proceso de importación propiamente dicho.

IMP_TRTSUP

1.3

Inicio del programa

OUVREIMP_OUVRE

2

Lectura de los datos del fichero y carga de la clase [F]

La acción AP_IMPORT se ejecuta después de haber cargado las variables descodificadas de cada módulo (el nivel de anidación se identifica con la variable SEPNUM, de 1 a 8) y la abreviatura de la tabla principal se identifica con la variable IMPABR.

 

AP_IMPORT

3

Si el objeto existe:

VERROUIMP_VERROU

4

Bloqueo de la tabla

Inicio de la lectura:

Bucle de lectura de los registros

Al final de la lectura

FILTRE

LIENSIMP_LIENS

LIENSIMP_LIENS

LIENSIMP_LIENS

5

Comprobación de la autorización para modificar:

SETBOUTIMP_SETBOUT (*)

6.1

Simulación de entrada en las pantallas asociadas

(tabla principal)

IMPORT

IMP_DEFTRT (*)

6.2

En cada campo de la pantalla:

Ejecución de las acciones antes_campo

antes_entrada

inic

Si se completa el campo:

Si OK = 1, transferencia desde la clase [F] del campo con el mismo nombre.

Ejecución de las acciones después_campo y, si es necesario, después_modif.

 

 

 

 

IMP_ZONE

7.1

Lectura de un registro del fichero secundario

IMPORT

7.2

Simulación de pantallas asociadas.

Se añade una línea a la tabla (nolign se gestiona mediante la gestión objeto).

 

8

Registro del objeto

 

8.1

Creación

Inicio de la transacción

bloqueo de la tabla

si OK <> 0 después de MOD_IMPORT,

la transacción continúa:

Se borran todos los registros existentes.

En cada línea:

Escritura

Al final de la escritura de las líneas:

Final de la transacción

VERIF_CRE IMP_VERIF_CRE

MOD_IMPORT

 

FILTRE

INICREIMP_INICRE

CREATIONIMP_CREATION

MODIFIMP_MODIF

9

Cuando la transacción se realiza con éxito

APRES_MODIMP_APRES_MOD

10

Final del programa:

FERMEIMP_FERME

 

Acciones del proceso IMPXXX

Todas las acciones IMPxxx tienen el mismo contexto que SUBxxx y se ejecutan después.

Las siguientes acciones son particulares.

Acción IMPORT

La acción IMPORT se ejecuta después de cada lectura de registro.

La variable IMPFIC contiene la abreviatura del fichero importado. La clase correspondiente está en línea (para los datos realmente importados).

En las tablas, la variable nolign se inicializa con el valor 0. Se utilizará en salida para saber qué línea se ha introducido. Si nolign se deja a cero, se creará una nueva línea.

Acción IMP_TAB

La acción IMPORT se utiliza para gestionar los campos de una tabla secundaria ordenados en un cuadro (la página 3 del objeto define las tablas secundarias, las pantallas y las variables correspondientes de la parte inferior del cuadro). De esta forma, se pueden distinguir los campos no indexados que hay que ordenar en un cuadro de otros campos. Esta acción solo se utiliza en las importaciones de objeto de tipo normal.

Acción IMP_ZONE

La acción IMP_ZONE se ejecuta en lugar de la entrada de un campo. Permite recuperar un valor en una pantalla con un nombre diferente en el fichero (por ejemplo, los campos dimensionados en una tabla que corresponden a varias columnas en un cuadro):

  • La variable IMPFIC contiene la abreviatura del fichero que ha provocado la entrada.
  • La variable IMPMSK contiene el nombre de la pantalla que se está introduciendo.
  • La variable IMPZON contiene el nombre del campo que se está introduciendo.
  • La variable IMPMOD, que tiene el valor 0 por defecto, permite desencadenar la acción después_modif.
  • La variable OK, inicializada con el valor 1, permite o no desencadenar la acción estándar.

Acción MOD_IMPORT

La acción MOD_IMPORT solo se utiliza en la importación de un objeto de la tabla (para prohibir dicha importación, si es necesario).

Proceso de importación específico

Este proceso de importación ignora (normalmente por motivos de rendimiento) la gestión estándar del objeto y solo incluye un número restringido de etiquetas llamadas mediante Gosub desde la función de importación. Las etiquetas son las siguientes:

Etiqueta

Contexto

$OUVRE

Al inicio de la importación, esta etiqueta permite declarar las máscaras, tablas y variables necesarias.

$RAZCRE

Al inicio de la lectura (un nuevo registro). Permite reiniciar las variables que se van a cargar en la importación.

$SAIMSK

Cuando se ha leído un conjunto de datos. La variable IMPFIC permite conocer la abreviatura de la tabla cuyo contenido se ha leído. A continuación, se introduce la clase [F] correspondiente a la tabla y se pueden asignar transferencias de datos a las máscaras (en los objetos de tipo cabecera/línea, suele ser una máscara en la que se almacenan temporalmente los datos).

$VALID

Ha finalizado la lectura de los datos. Esta etiqueta permite realizar los controles y crear/modificar los datos en la base.

Solo se recomienda utilizar este modo de importación cuando se producen errores específicos de rendimiento. Aunque sea más lenta, la importación "estándar" de un objeto permite obtener un control automático con todo lo que está descrito en la lógica del objeto, mientras que el programa de importación específico requiere una recodificación manual con llamadas a los componentes existentes.

Ficheros de transcodificación

Principio de la transcodificación

En el modelo de importación o exportación, ADONIX X3 recibe un flujo de datos en un conjunto de caracteres que no es necesariamente el conjunto de caracteres interno (correspondiente al conjunto de caracteres WE8ISO8951P1 en Oracle). Es necesario poder transcodificarlo. Esta documentación solo trata la transcodificación de los caracteres almacenados en un byte. Suelen corresponder a caracteres acentuados o específicos de algunos idiomas occidentales. Estos caracteres suelen estar codificados en un byte con valores comprendidos entre 160 y 250. A continuación, se muestran las correspondencias entre estos caracteres y los códigos ASCII del conjunto estándar utilizado en ADONIX X3 (presentados en Arial).

Byte

0

1

2

3

4

5

6

7

8

9

16…

¡

¢

£

¤

¥

¦

§

¨

©

17…

ª

«

¬

®

¯

°

±

²

³

18…

´

µ

·

¸

¹

º

»

¼

½

19…

¾

¿

À

Á

Â

A

Ä

Å

Æ

Ç

20…

È

É

Ê

Ë

Ì

Í

Î

Ï

Ð

Ñ

21…

Ò

Ó

Ô

Õ

Ö

×

Ø

Ù

Ú

Û

22…

Ü

Ý

Þ

ß

a

á

â

ã

ä

å

23…

æ

ç

è

é

ê

ë

ì

í

î

ï

24…

ð

ñ

ò

ó

ô

õ

ö

÷

ø

ù

25…

ú

û

ü

ý

þ

ÿ

Se realiza mediante el campo Juego de caracteres del apartado de transcodificación. El campo correspondiente toma los valores definidos en el menú local 9. Este menú no se puede parametrizar por defecto, pero se pueden añadir valores para gestionar nuevos conjuntos de caracteres externos.

A cada valor del menú le corresponde un fichero externo, instalado en el servidor, que define las transcodificaciones que hay que realizar. Este fichero está ubicado en el directorio SYS del dossier X3 y se denomina TRANS#.cnv, donde el carácter # es un número del menú local (1, 2, 3…). El fichero TRANS#.cnv debe codificarse con un formato UNIX y un conjunto de caracteres UTF8. Si no es así, la transcodificación no funcionará en la importación o exportación.

El directorio SYSno existe por defecto. Hay que crearlo en el dossier del punto de conexión.

Ejemplo de ruta de acceso al directorio SYS: SAGE\SAGEX3V6\X3V6SQL\Folders\DEMO\SYS

El fichero TRANS0.cnv contiene comentarios explicativos (en inglés) para llevar a cabo esta creación:

  • En primer lugar, se definen dos líneas en las que se indica:
    • adonix="cadena1"
    • output="cadena2"

cadena1 y cadena2son prefijos de 3 caracteres que definen el código del conjunto que se va a definir. Por ejemplo, ado para la cadena 1 y jeu para el segundo conjunto de caracteres.

  • A continuación, se definen distintas líneas para determinar cada carácter asignándole un identificador nemotécnico (con el prefijo cadena1 o cadena2), seguido del signo = y del código del carácter. En la identificación, por ejemplo, del acento agudo con eacute, este carácter se transcodifica en el conjunto de caracteres de llegada jeu con el código decimal 238 (233 para ado). En este caso, se escribirían estas dos líneas:
    • adoeacute="238"
    • jeueacute="233"

Es importante señalar:
  • Que las comillas no son obligatorias (podría ser adoeacute=238).
  • Que los códigos también se pueden proporcionar en bytes (\nnn) y en formato hexadecimal (Hxxx).
  • Que no importa el orden de las líneas (primero se pueden definir todos los caracteres de un conjunto, luego los del siguiente, emparejar los caracteres de dos en dos, o utilizar cualquier otro orden).
  • Que no se transcodificarán los caracteres no definidos (o definidos únicamente en uno de los conjuntos).
  • Que se pueden insertar o añadir libremente líneas explicativas al final de la línea, siempre y cuando vayan precedidas del carácter #.

Ejemplo de fichero: TRANS0.cnv

Este es el contenido del fichero TRANS0.cnv, con explicaciones en inglés:

#
########################################################################
#
# trans0.cnv
#
# Transcodification file used for ADONIX X3 import/export
#
# Each line (except the comments prefixed by # ) must have the following format
#
# adoxxxxx = value1 or extxxxxx = value2
#
# (ado for adonix internal code, ext for "external" file code
#
# xxxxx is an identifier used to associate external & internal code together
#

# values can be defined in following formats :
#
# nnn or "nnn"         value in decimal
# \nnn or "\nnn"       value in octal
# Hnnn or "Hnnn"       value in hexadecimal
#
# Author: Bertrand YVINEC   
# Translated by Dominique BOPP
#
# Copyright (c) ADONIX 1992-2001
#
########################################################################
#
# Identifier definition (default is ado and ext)
#
adonix = "iso"
output = "ibm"

Ejemplo de fichero: TRANS2.cnv

Este fichero permite transcodificar en el conjunto IBM PC. Se han depurado la mayoría de las líneas explicativas.

#
########################################################################
# trans2.cnv
# Copyright (c) ADONIX 1992-2001
########################################################################
adonix = "iso"
output = "ibm"
#
# ISO code first
isoagr="\340"    # a grave
isoeai="\351"    # e acute
isoegr="\350"    # e grave
isocce="\347"    # c cedilla
isougr="\371"    # u grave
isodeg="\260"    # degree
isoali="\247"    # alinea
isoaci="\342"    # a circumflex
isoeci="\352"    # e circumflex
isoici="\356"    # i circumflex
isooci="\364"    # o circumflex
isouci="\373"    # u circumflex
isoatr="\344"    # a dieresis
isoetr="\353"    # e dieresis
isoitr="\357"    # i dieresis
isootr="\366"    # o dieresis
isoutr="\374"    # u dieresis
isopou="\243"    # pound
#
# En código PC
ibmagr="\205"    # a grave
ibmeai="\202"    # e acute
ibmegr="\212"    # e grave
ibmcce="\207"    # c cedilla
ibmugr="\227"    # u grave
ibmdeg="\370"    # degree
ibmali="\365"    # alinea (CP 850)
ibmaci="\203"    # a circumflex
ibmeci="\210"    # e circumflex
ibmici="\214"    # i circumflex
ibmoci="\223"    # o circumflex
ibmuci="\226"    # u circumflex
ibmatr="\204"    # a dieresis
ibmetr="\211"    # e dieresis
ibmitr="\213"    # i dieresis
ibmotr="\224"    # o dieresis
ibmutr="\201"    # u dieresis
ibmpou="\234"    # pound

Importación silenciosa

Principio de la llamada

Si quiere desencadenar directamente una importación en un proceso, puede introducir las siguientes líneas:

If !GSERVEUR
 
   Call OUVRE_TRACE(TIT) From LECFIC
Endif
Call IMPORTSIL([L]COD_MODELE,[L]NOM_FICHIER)from GIMPOBJ
If !GSERVEUR
    Call FERME_TRACE From LECFIC
Endif

 Con

  • [L]COD_MODELE = Variable que contiene el código del modelo de importación
  • [L]NOM_FICHIER = Variable que contiene el nombre completo del fichero que hay que importar

Variables afectadas

Las variables que se pasan como argumento son las siguientes: 

  • [L]COD_MODELE = Variable que contiene el código del modelo de importación
  • [L]NOM_FICHIER = Variable que contiene el nombre completo del fichero que hay que importar

El estado final de la importación se puede recuperar en el campo [M:IMP2]STAT.
Puede obtener el texto en claro del mensaje de error llamando al siguiente subprograma:

Call ERR_IMPORT([M:IMP2]STAT,MESSAGE) From GIMPOBJ