EgImportExport
EgImportExport es una aplicación perteneciente al paquete de aplicaciones de egeasy. Su finalidad es permitir al administrador importar o exportar objetos a un centro concreto. Para ello, se utiliza la tecnología XML como estándar de intercambio de información, estructurando la información y permitiendo que dicho intercambio se pueda realizar entre diferentes plataformas.
Contenido
Configuración de parámetros
Para poder ejecutar egImportExport, es necesario que en la misma carpeta donde se encuentre su ejecutable exista un fichero llamado egImportExport.ini. En este fichero especificaremos los parámetros de entrada de la aplicación, que son los siguientes:
- USER_NAME: usuario con el que se conectará la aplicación para acceder al centro sobre el que se va a realizar la importación o exportación. El usuario debe estar dado de alta en el centro y estar activo.
- PASSWORD: palabra de paso asociada al usuario, si la tuviera.
- CENTER: nombre del centro al que se va a conectar la aplicación.
- DIR_CONFIGURATIONS: ruta donde se encuentran los ficheros de importación o exportación. En estos fichero se incluyen los parámetros de configuración de la importación o exportación.
Ejemplo:
Una vez tenemos configurado el fichero .ini, veamos cómo crear el fichero de configuración en función de la operación a ejecutar.
Ficheros de configuración
Para la importación (.imp)
Como ya hemos dicho, para realizar una de los dos operaciones, es necesario configurar el fichero asociado a la operación a ejecutar. En este caso, se trata de una importación.
El fichero de configuración de una importación tendrá como nombre el que se le quiera dar, seguido de la extensión .imp (nombre.imp
). En su contenido se incluirán aquellos parámetros que configurarán las características de la importación. Dichos parámetros son:
- OBJECT_DIR: ruta donde se encuentran los objetos a importar, representados como ficheros .xml.
- IMPORTED_DIR: ruta donde se irán moviendo los ficheros .xml cuyos objetos se hayan importado con éxito.
- DOCUMENT_DIR: ruta donde se incluyen los documentos que se quieran importar, si los hubiere.
- MODE: modo de importación.
Veamos un ejemplo a continuación:
Como se puede ver en la imagen anterior, el parámetro MODE tiene asignado el modo ALL. Éste, es uno de los tres modos de importación que pueden ser asignados. Como se ve en el ejemplo, estos tres modos aparecen incluidos en una línea justo debajo del parámetro "MODE", ya que tienen que estar incluidos en el fichero de configuración.
Veamos a continuación las particularidades de cada modo:
- FOUND: en este modo de importación, sólo se importarán aquellos objetos que ya se encuentren creados en el centro, limitándose a actualizar la información de éstos.
- NOT_FOUND: en esta modalidad, se importarán sólo aquellos objetos que no sean encontrados en el centro, de forma que tendrán que ser creados.
- ALL: esta modalidad es en realidad la unión de las dos anteriores. De manera que si el objeto que queremos importar ya está creado actualiza su información, y si no se encuentra, se crea.
Una vez hemos terminado de configurar el fichero, hay que tener en cuenta ciertos aspectos antes de iniciar la importación.
Los directorios que hemos especificado en el fichero de configuración deben ser creados manualmente ya que si no están creados, la aplicación no los creará por sí sola.
Una vez creados los directorios, tendremos que almacenar en los directorios correspondientes aquellos ficheros .xml que queramos importar, así como los ficheros .doc que también se quieran importar.
A la hora de almacenar los ficheros .xml en la carpeta de documentos a importar, es necesario tener en cuenta el nombre que tendrán estos ficheros. El único aspecto a controlar es que no se repita ningún nombre. Una recomendación es establecer alguna regla de nomenclatura que garantice la exclusividad de los mismos. Por ejemplo, nombrarlos mediante el tipo de contenedor y una enumeración siempre creciente.
Para que se lleve a cabo la importación, las declaraciones de los componentes en XML han de coincidir siempre con los declarados en egEasy. Si la intención es la de importar información de otra plataforma, se recomienda la realización de una exportación previa del tipo de contenedor que se quiera generar, obteniendo la adecuada declaración en XML. Cada contenedor a importar de un mismo tipo, diferirá sólo en los datos; nunca en la estructura.
El dominio es otro punto a tener en cuenta. Si los contenedores a importar tienen como dominio un objeto del sistema, sólo es necesario identificar el tipo y el componente; y la aplicación ubicará correctamente el contenedor. En cambio, si el dominio es otro contenedor, se requiere identificar ese contenedor mediante un fichero .xml; que permita a la aplicación diferenciarlo entre todos los posible contenedores de un mismo tipo. Esto obliga a tener en cuenta no sólo la generación de los nuevos contenedores para la importación, sino además la necesidad de exportar los contenedores que sean dominio de los nuevos.
Una vez comprobados todos los parámetros y requisitos que necesita la importación para ejecutarse correctamente, ya es posible lanzar la aplicación egImportExport y efectuar la importación. Si el proceso se realiza correctamente, los ficheros .xml importados se moverán a la carpeta especificada en el parámetro "IMPORTED_DIR"
Téngase en cuenta, que la importación de un contenedor cuyo archivo se encuentra en el historial de las exportaciones e importaciones, implica la actualización del contenedor ya existente. Aunque la intención fuera la generar un objeto nuevo.
Para la exportación (.exp)
Para realizar una exportación de objetos, al igual que para la importación, es necesario incluir un fichero de configuración de la exportación, de extensión .exp, en el directorio especificado en el fichero .ini. Este fichero, incluirá los parámetros de configuración que determinarán el comportamiento de la exportación. Dichos parámetros son:
- OBJECT_CLASS: nombre de la definición de aquellos objetos que se quieren exportar.
- OUTPUT_DIR: directorio de destino de los objetos exportados.
- DOCUMENT_DIR: directorio de destino de aquellos documentos que hayan sido exportados.
- EXPORT_CASCADE: parámetro booleano que especifica si se activa la exportación en cascada; es decir, que todos aquellos objetos que estén incluidos o vinculados al objeto inicial serán también exportados. Para activarlo le asignaremos la letra "S" y para desactivarlo le asignaremos la letra "N".
- MODE: al igual que para las importaciones, puede haber varios modos de exportar objetos que explicaremos más adelante.
Ejemplo:
Al realizar una exportación, es posible que nos interese realizar una exportación que afecte sólamente a los objetos que cumplan ciertas características. Para ello, seleccionaremos uno de los tres modos de exportación que explicamos a continuación:
- NOT_EXPORTED: se exportan aquellos objetos que nunca han sido exportados.
- MODIFIED: se exportan aquellos objetos que han sido modificados respecto a su última exportación
- ALL: es la unión de los dos modos anteriores. En este modo, los objetos que no se exportarán serán aquellos que hayan sido exportados anteriormente y que desde entonces, no han sido modificados.
Pero, ¿cómo sabe la aplicación qué objetos han sido o no exportados alguna vez?
Para ello existe una tabla en la base de datos del centro, que se crea automáticamente al instalar el centro, donde se registran los objetos que han sido exportados y cuándo han sido exportados por última vez. Por tanto, cuando elegimos un modo de exportación concreto, utilizará esta tabla para saber si ha sido exportado el objeto (para el modo NOT_EXPORTED). Si por el contrario tenemos seleccionado el modo MODIFIED, la forma de saber si un contenedor que se va a exportar ha sido modificado en comparación con su última exportación, es accediendo al atributo Modified
en la cabecera del fichero .xml de la última exportación. Ese valor se comparará con la propiedad que guarda la última fecha de modificación del objeto en egeasy, y si son distintas, se procederá a una nueva exportación. Para que la comparación sea posible, es necesario mantener los ficheros .xml de la última exportación en el directorio especificado para ello, o si lo cambiamos, mover los ficheros al nuevo directorio.
Una vez ejecutada la exportación, la nomenclatura de los nombres de los ficheros .xml generados será la siguiente RRC@DRC@NOMBRE_DEL_OBJETO.
Estructura de un objeto en fichero XML
Como ya sabemos, la tecnología utilizada por egImportExport para representar objetos y poder realizar el intercambio de información es XML. Es por ello que saber interpretar la información que incluye un fichero .xml es fundamental para poder realizar las operaciones de exportación o importación de objetos.
A continuación iremos explicando las marcas equivalentes a todas aquellas definiciones que afecten a un objeto en ODL.
Formato del contenedor
La estructura base para representar un contenedor en XML es la siguiente:
<Container id="RRC" name="texto" typeName="texto"> <Header> <Domain domain_filename="archivo.xml" typeName="texto" componentName="texto"/> <Created date="año:mes:día" user_id="texto"/> <Modified date="año:mes:día" user_id="texto"/></Header> <Components> ... <Components/> </Container>
La marca "Container" contiene tres atributos cuya utilidad es identificar al objeto. El atributo id
contendrá el RRC del objeto, el atributo name
el nombre del objeto y el atributo typeName
contendrá el nombre de la definición del contenedor. Si se utilizan prefijos en la definición del contenedor, tienen que ser incluidos en el typeName
.
En la marca "Header" se muestra información relativa a propiedades del objeto como su dominio, su fecha de creación o su fecha de modificación. A su vez, existe una marca para cada una de estas propiedades.
En la etiqueta "Domain" se especificará el dominio del objeto utilizando tres atributos. El atributo domain_filename
sólo se utilizará cuando el dominio del objeto que vamos a importar es otro objeto que también importaremos, de manera que tendremos que especificar su fichero .xml. Para el resto de los casos, incluida la exportación, este atributo estará vacío (""). En el atributo typeName
se especificará el objeto del sistema en el que está alojada el componente especificado en el atributo componentName
.
Las marcas "Created" y "Modified" tienen dos atributos: date
y user_id
. Si queremos realizar una importación, estos atributos estarán vacíos, ya que se le asigna la fecha y usuario asociado a la importación. Para el caso de la exportación, los valores se tomarán del objeto exportado.
Por último, tenemos la marca "Components", donde se incluyen todas aquellas definiciones que se pueden declarar en un contenedor, que a continuación iremos explicando.
Formato de los componentes
Existen dos atributos que son compartidos por todos los componentes y que lo identifican: los atributos name
y typeName
. Además, muchos de ellos comparten una misma estructura a la hora de declararlos en XML.
Campos
Texto, entero, real, lógico, memo, fecha y hora
<FieldString name="texto" typeName="texto">texto</FieldString>
<FieldInteger name="texto" typeName="texto">número</FieldInteger>
<FieldSingle name="texto" typeName="texto">número</FieldSingle>
<FieldBoolean name="texto" typeName="texto">[si|no]</FieldBoolean>
<FieldMemo name="texto" typeName="texto">texto</FieldMemo>
<FieldDate name="texto" typeName="texto">año:mes:día</FieldDate>
<FieldTime name="texto" typeName="texto">hora:minutos:segundo</FieldTime>
Moneda
<FieldCurrency name="texto" typeName="texto" currency="texto">número</FieldCurrency>
En el atributo currency
se especifica la moneda a utilizar. Sus posibles valores son "euro" o "peseta".
Código
<FieldCode name="texto" typeName="texto" code="texto">texto</FieldCode>
El atributo code
corresponderá al código introducido. Y el valor de la declaración es el rótulo asociado al código dado.
Firma
<FieldSignature name="texto" typeName="texto" date="año:mes:día" user_id="texto" user_drc="número" user_name="texto" position="texto"/>
La importación de una firma no es posible por su particularidad respecto a otros tipos de campos, aunque se permite su declaración en el fichero .xml, aunque realmente, ésta será ignorada.
En el atributo position
se especifica el cargo de la persona que firma.
Timbre
<FieldStamp name="texto" typeName="texto" date="año:mes:día" user_id="número" user_drc="número" user_name="texto">texto</FieldStamp>
Comparte la particularidad del campo firma, ya que éste tampoco se puede importar. Al igual que el campo firma, se permite su declaración pero a la hora de importar, será ignorada.
Vínculo
<FieldReference name="texto" typeName="texto" target_filename="archivo.xml">texto</FieldReference>
Cuando realizamos una importación, el objeto vinculado se especifica en el atributo target_filename
, que será un fichero .xml. y el vacío indica que no existe el vínculo. El valor de la declaración es la etiqueta del mismo y es informativo. El valor es ignorado en la importación del campo, pues es determinado por el sistema.