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.
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 |
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 |
Todas las acciones IMPxxx tienen el mismo contexto que SUBxxx y se ejecutan después.
Las siguientes acciones son particulares.
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.
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.
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 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).
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.
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:
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.
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"
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
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
Las variables que se pasan como argumento son las siguientes:
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