You are on page 1of 9

Automatizacin COM en PROGRESS

Mtro. en C. Alejandro Botello Castillo


Palabras Clave : Automatizacin, controles ActiveX, OLE, COM.

Resumen La automatizacin de aplicaciones habilitan al usuario a simplificar en un solo paso las acciones que realiza habitualmente, as como a guiar la entrada de informacin con pantallas prediseadas para reducir el riesgo de errores comunes. Este trabajo presenta una forma de automatizacin construida con el sistema manejador de bases de datos Progress y con la tecnologa del Modelo de Objetos Componentes (Component Object Model, COM) de Microsoft, para la realizacin de reportes y transferencias de datos en una aplicacin personalizada.

[English]
Artculo Una de las tecnologas ms innovadoras para la plataforma Windows, ha sido la Incrustacin y Enlace de Objetos (OLE, Object Linking and Embeding), desarrollada por Microsoft y la cual permite que las aplicaciones tengan la posibilidad de ejecucin de otras aplicaciones dentro de su misma interfaz grfica, sin tener que salir de la aplicacin que inici la solicitud, mediante el paradigma de la orientacin a objetos. En este ambiente, a la aplicacin que realiza la llamada a algn servicio se le conoce como cliente y la aplicacin que realiza el servicio, es el servidor, de forma que la informacin entre stos queda vinculada; esto es, si algn dato cambia en el servidor, automticamente se reflejar esta modificacin en el cliente. La automatizacin (antes llamada automatizacin OLE) es una de las caractersticas del Modelo de Objetos Componentes (COM, Component Object Model) de Microsoft, una tecnologa estndar en la industria, usada por las aplicaciones para revelar sus objetos a las herramientas de desarrollo, lenguajes de macros y otras aplicaciones que sean compatibles con la automatizacin. Por ejemplo, una aplicacin de hojas de clculo puede mostrar una hoja de clculo, un diagrama, celda o rango de celdas, cada una como un tipo diferente de objeto. Un procesador de textos puede revelar objetos como una aplicacin, un documento, un prrafo, una frase, un marcador o una seleccin. Un control ActiveX (OCX) es un componente reusable construido mediante COM, que permite extender la funcionalidad y la interfaz grfica de una aplicacin. La automatizacin ActiveX permite a una aplicacin (el Controlador de automatizacin) manejar a otra aplicacin (el Servidor de automatizacin), a travs de objetos COM (objetos de automatizacin) proporcionados por el Servidor de automatizacin. Un objeto de automatizacin representa un empaquetamiento para la funcionalidad del servidor y un punto de conexin del Controlador de automatizacin hacia el Servidor de automatizacin. Esta funcionalidad puede incluir varias capacidades, desde el intercambio de datosentre dos aplicaciones, hasta el control total de la aplicacin servidora por el controlador. PROGRESS soporta la automatizacin ActiveX como Controlador de automatizacin. Esto permite que sea posible escribir cdigo para una aplicacin en 4GL, que se conecte y maneje los objetos de automatizacin en algn Servidor de automatizacin. Esto se hace creando una conexin a un objeto de automatizacin y haciendo referencia a sus propiedades y mtodos. PROGRESS viene con un nmero de ejemplos de aplicaciones de automatizacin, que se instalan

en el subdirectorio %DLC%\src\samples\ActiveX. Cada subdirectorio contiene varios archivos para una sola aplicacin de ejemplo. Uno de los ejemplos ms representativos, es una aplicacin que permite enlazar las ventas de una base de datos en PROGRESS y crear una grfica de barras en Excel. El archivo se llama oleauto.p. Si bien este ejemplo muestra con claridad cmo es posible establecer la automatizacin con Excel, hay ocasiones en que es necesario realizar algo parecido desde otro servidor de automatizacin de Office 97, como Word o Access, sin que actualmente exista algn ejemplo o gua para este tipo de aplicaciones. En las siguientes secciones se explicar cmo es posible emplear la automatizacin en estos servidores, con un caso prctico desarrollado para una aplicacin comercial. Observacin: Aunque este documento se presenta como gua para la automatizacin, slo se aplica para la codificacin mediante el 4GL de PROGRESS 8.2 y posterior. Para el desarrollo mediante el User Interface Builder (UIB) de PROGRESS, refirase al manual PROGRESS External Program Interfaces en el captulo 9 "ActiveX Control Container Support". 1. Creacin y uso de variables tipo COM Al igual que con las variables handlers de tipo WIDGET, PROGRESS define un tipo de hadler para el manejo de objetos COM, el handler de componentes COM-HANDLE, el cual llevar el registro de la conexin entre el Controlador y el Servidor de automatizacin. Los mecanismos entre los objetos COM y los widgets son parecidos, ya que sus mtodos y propiedades son accesados mediante este handler. Para tener acceso a un componente COM, es necesario instanciar una variable handler de tipo componente, con la instruccin:

DEFINE VARIABLE hCOMobject AS COM-HANDLE.

que crea una variable de tipo handler componente. Para accesar a los mtodos de este objeto componente, se emplea la siguiente sintaxis:

[ NO-RETURN-VALUE ] COMhdl-expresion :Referencia-Nombre-Metodo

En donde Referencia-Nombre-Metodo especifica el llamado a un mtodo de un objeto COM que puede regresar o no un valor. COMhdl-expresion es una expresin que regresa un handle componente al objeto COM que posee el mtodo especificado en Referencia-Nombre-Metodo. La opcin de NO-RETURN-VALUE es requerida para aquellos mtodos que no presenten un valor de retorno. Para accesar o modificar las propiedades de un objeto COM, se emplea la siguiente sintaxis:

COMhdl-expresion :Referencia-Nombre-Propiedad

en donde Referencia-Nombre-Propiedad especifica una propiedad de un objeto COM. COMhdlexpresion es una expresin que regresa un handler componente al objeto COM, que posee la propiedad especificada por Referencia-Nombre-Propiedad. Para cada mtodo o propiedad es necesario tener una expresin COM handler, que regrese un valor de handler componente, expresado con la sintaxis:

COMhandle [ : Referencia-Nombre-Metodo | Referencia-NombrePropiedad ] ...

COMhandle es una variable COM-HANDLE. (Note que el primer elemento de una expresin de handler componente debe ser una variable COM-HANDLE). Un handler componente puede encadenar tantas referencias a mtodos y propiedades que sean requeridas para regresar un handler a un objeto COM. Cuando se llama a un mtodo de un objeto COM, es necesario pasar los argumentos, en caso de que los necesite, de la siguiente forma:

Nombre-Metodo ( { [ OUTPUT | INPUT-OUTPUT ]

Nombre-Metodo es el nombre del mtodo del objeto COM. expresion es una expresin vlida en PROGRESS, que se puede pasar como parmetro al mtodo. TipoDato es uno de los diversos especificadores de tipo. Las opciones de modo OUTPUT e INPUT-OUTPUT especifican cmo el parmetro del mtodo es usado. parametro-nulo es cualquier cantidad de espacios en blanco, indicando que el parmetro es opcional y se omite. Cuando se ha terminado de emplear una variable COM-HANDLE, se deber liberar de memoria mediante la sentencia:

RELEASE OBJECT hCOMObject.

Con estas definiciones ya es posible comenzar a codificar en el 4GL de PROGRESS para la automatizacin COM. En las siguientes secciones se tratarn los ejemplos prcticos en que aplic la automatizacin. [Nota] 2. Automatizacin en Word

Aunque PROGRESS cuenta con una herramienta para realizar reportes (Report Builder), a veces es necesario tener un mayor control de la salida y la presentacin de los datos en el reporte. La siguiente aplicacin emplea una tabla maestra con los datos de la unidad revisora, el nmero de revisin y la unidad revisada, y una tabla de detalle donde se muestra la informacin de descripcin, fechas de solicitud y entrega, y el nombre y firma del responsable, con sus iniciales. Ya que el formato del oficio no vara, slo los datos, es ms prctico crear una plantilla de Word y reemplazar la informacin enviada desde PROGRESS. La plantilla de este oficio es como se muestra en la figura1 y se almacena en el subdirectorio de instalacin de Office, en la carpeta de plantillas. De la tabla AutEstimado, se toman los campos Unilog - la cual tiene un join hacia la tabla AuUniLog para obtener la unidad lgica -, Folio y CveUnidad. Para cada Folio se tiene una serie de detalles dados por la tabla AuInfSol en los campos InfSol, FechaSol y FechaEnt. Las iniciales son capturadas al momento en una variable iniciales. El modelo COM permite que cada tem de una aplicacin est definido como un objeto, y pueda ser configurado mediante sus propiedades y ejecutados sus mtodos. Para Word, los objetos son: la aplicacin en s, los documentos, las secciones, las pginas, los rangos de lneas, los prrafos , las columnas, renglones y celdas de una tabla, hasta los caracteres individuales, por decir algunos importantes. Para conocer las propiedades, mtodos y constantes que Word ofrece, se emplea el Visual Basic para Aplicaciones (VBA), que ya viene integrado en cada aplicacin del Office 97 y que est disponible en el men Herramientas/Macro/Editor de Visual Basic (Alt + F11), en el cual se encuentra el Examinador de Objetos (men Ver/Examinador de Objetos o F2), mostrando toda la informacin de los objetos que es posible manejar en Word, como muestra la figura 2. Si desea ms informacin, consulte el manual del Programador de Office 97 o la ayuda en lnea de VBA. Ahora falta determinar la forma en que Word reconoce que es necesaria una actualizacin de datos, desde el Controlador de automatizacin al documento actual. La forma en que Word hace esto es mediante los marcadores (bookmarks), que son marcas que se pueden hacer a un documento para ir a ese punto ms rpidamente o para hacer sustituciones de informacin requerida (por ejemplo, la fecha actual). Para insertar un marcador, se escribe algn texto identificador del marcador y se selecciona (sobreilumina); despus se elige del men Insertar la opcin Marcador, la cual presenta el cuadro de dilogo de la figura 3, el cual pide un nombre para el marcador (el cual puede ser el mismo que el texto identificador) y se elige agregar. De esta forma queda definido el marcador para posteriores referencias a l. En la figura 1 se han creado los marcadores unidad, revision, unidad_2, desc1, fsol y fent, que aparecen encerrados entre corchetes (para poder visualizar los marcadores, se tiene que elegir el men Herramientas/Opciones y seleccionar el separador Ver, y activar la casilla Marcadores) y que se emplearn para la automatizacin con PROGRESS. Ya creada la plantilla en Word, ahora se codifica para hacer las llamadas a los objetos de Word desde el 4GL de PROGRESS. Desde cualquier parte de algn frame en el que se est trabajando, se crear un botn que, al momento de oprimirse, iniciar toda la automatizacin. En la seccin de Triggers del botn creado, se escribir el cdigo siguiente (se numeran las lneas de cdigo para la explicacin detallada posterior). La funcionalidad del botn comienza definiendo las variables internas que necesitar, entre ellas, la variable Word tipo COM-HANDLE (lnea 14). El inicio de la conexin con el Servidor de automatizacin se declara con la sentencia CREATE (lnea 21), que inicia una instancia de Word. La lnea 22 configura a Word para que sea visible. Ya que se tiene la conexin con el servidor, se comienza la transferencia de datos del rengln actual de un objeto browse de PROGRESS, buscando el valor del registro a una variable tipo RECID, definida en el browse anterior (lnea 24). Como el rengln mostrado en el browse es el que se compara en el FIND, la nica vez que habr un error de registro no encontrado es cuando la tabla est vaca. Ahora ya se tiene el valor del registro actual y se indica a Word que abra un

documento nuevo, tomando como base la plantilla creada anteriormente y con nombre, en este caso, de caurt_pl.dot (deber estar en el subdirectorio de instalacin de Office/Plantillas, si no, se deber escribir la ruta completa), mediante el mtodo Add. Ya teniendo el documento abierto, busca el valor de la unidad lgica de la tabla de catlogo AuUniLog y extrae el nombre correspondiente (lnea 26), para llamar al procedimiento Remplazo (lnea 27), el cual busca el nombre del marcador especificado en el primer argumento y lo reemplaza con el valor del campo especificado en el segundo argumento. El tercer argumento indica si el reemplazo es en maysculas (valor 1) o no (valor 0). El cdigo del procedimiento Remplazo se muestra en el listado 2 y funciona de la siguiente manera: el primer parmetro toma el nombre del marcador previamente definido en la plantilla y va hacia l mediante el mtodo GoTo (lnea 12). Una vez que lo encuentra, lo selecciona con el mtodo Select (lnea 13) y reemplaza el valor del argumento 2 mediante el mtodo TypeText (lnea 16). El cambio a maysculas se trata en las lneas 14 y 15, preguntando por el valor lgico del tercer parmetro y utilizando la funcin CAPS() de PROGRESS. Para la creacin del procedimiento, se deber elegir la seccin Procedures y el botn New, escribiendo el nombre Remplazo, como se muestra en la figura 4. Regresando el listado 1, se aplica el procedimiento Remplazo para los marcadores revisin, unidad_2 e iniciales (lneas 29-31). Ahora es necesario llenar la tabla (en Word) con la informacin de detalle de la tabla AuInfSol, de la siguiente manera: primeramente se selecciona el marcador desc1, que est dentro de la tabla, con el mtodo GoTo (lnea 32). Despus se hace un FIND en cada registro que cumpla con el criterio (AuInfSol.revision = AutEstimado.Folio). Como de antemano no se sabe cuntos registros resultarn de esta bsqueda, se tienen que crear renglones en la tabla de forma dinmica, creando marcadores en dichos renglones para acomodar los registros resultantes. Se define una variable contador para tener una identificacin del nmero de renglones aadidos. Para el primer registro resultante, no cumple la condicin de las lneas 38-46 y ejecuta el procedimiento de reemplazo de las lneas 47-49. El primer argumento de la funcin de reemplazo es el valor de las variables descriptor, fechasol y fechaent, construidas con las cadenas "desc", "fsol" y "fent", respectivamente, ms el valor del actual del contador. Esto da como resultado los valores desc1, fsol1 y fent1 para el primer rengln y es como estn definidos en la plantilla (ver figura 1). Pero para el segundo registro de resultados, la comprobacin del IF (lnea 38) es cierta y entra al bloque. Como actualmente se est en el primer rengln de la tabla, se emplean los mtodos MoveDown (lnea 39), para ir al segundo rengln; SelectRow (lnea 40), para seleccionar el rengln completo; InsertRow (lnea 41), para crear un nuevo rengln, y MoveLeft (lnea 42), para posicionarse en la primera celda del rengln recin creado. En este momento estamos en la posicin tal como en el primer registro, pero sin los marcadores para los dems registros de resultado, que son creados mediante el procedimiento CreaMarcador, tomando como parmetro el valor de la variables que contiene el nombre del marcador a crear (lneas 43-45). El cdigo del procedimiento CreaMarcador se detalla en el listado 3, y funciona como sigue: con el mtodo MoveRight (lnea 7) seleccionamos la celda actual (el tercer parmetro indica si se desea slo mover o moverse seleccionado el texto); entonces se crea un nuevo marcador con el mtodo Add del objeto Bookmarks (lnea 8), indicando el nombre del nuevo marcador como el valor del argumento marcador, para la seleccin hecha anteriormente, y finalmente pasa a la celda derecha siguiente con MoveRight (lnea 9). Al terminar estar creado el marcador en el documento actual. Creados los marcadores, se contina con el ciclo del programa, reemplazando los marcadores con los valores del registro actual y actualizando el valor del contador. Note que en la lnea 47, el valor del segundo parmetro est compuesto por el valor del contador, ms un punto y espacio, y el valor del campo InfSol, esto con el fin de que cada rengln est numerado como lo requiere el oficio. Al terminar con el ltimo registro, y regresando al listado 1, nos movemos al inicio del documento con GoTo (lnea 52), para realizar la correccin ortogrfica mediante el mtodo CheckSpelling (lnea 53). Al terminar la revisin ortogrfica, se ejecuta la impresin del documento actual con PrintOut (lnea 54) y se guarda el archivo con SaveAs (lnea 57). El nombre del archivo estar dado por el valor de la variable nom_arch (lnea 55) y se guardar en el directorio especificado con el mtodo ChangeFileOpenDirectory (lnea 56). Finalmente, se termina la aplicacin Servidor de

automatizacin mediante el mtodo Quit (lnea 59) y se libera el handler COM (lnea 60). Cabe mencionar que como el procedimiento es automatizado, si se cancela la revisin ortogrfica, la impresin o el salvado del archivo, se continuar con la siguiente seccin de cdigo. En caso de que ocurra un error serio del sistema, por ejemplo, que no est conectada la impresora o no se pueda guardar el archivo, se presentar un mensaje de error y se detendr el funcionamiento del programa, con resultados hasta ahora impredecibles. Todo el cdigo mostrado para la automatizacin no contiene una verificacin de tratamiento de errores, pero es posible aadir la clusula NO-ERROR al final de cada sentencia y tratar el error mediante un bloque ON ERROR. 3. Automatizacin en Excel Ya que Excel cuanta con capacidades de manejo de bases de datos, parece extrao que se desee hacer algn tipo de automatizacin con PROGRESS. Sin embargo, hay situaciones, como en el presente ejemplo, en las que es necesario el uso de tal para evitar el hacer los procesos a mano. Lo que se pretende es abrir varios archivos formateados de Excel (ver el ejemplo de archivo de la figura 5) y leer los datos que contiene, para exportarlos hacia una tabla en PROGRESS y desde all, hacer un consolidado de todos los archivos importados. Sin embargo, no hay una utilera en Excel ni en PROGRESS que permita este intercambio nativo transparentemente (una opcin sera realizar el proceso mediante ODBC, pero se presupone que no se cuenta con el controlador para ODBC para PROGRESS), de tal forma que es necesario que los datos de Excel sean exportados a un tipo de formato compatible para la importacin en PROGRESS. Se hicieron pruebas y el formato que se eligi fue el de valores separados por comas (CSV, Comma Separeted Values), por presentar menos problemas de conversin entre aplicaciones. Para hacer el programa menos difcil de manejar para el usuario, se inicia el proceso mediante un cuadro de dilogo, en donde el usuario elige el nombre del archivo en Excel que desee importar en PROGRESS, como muestra la figura 6. Al oprimir el botn con el cono de la carpeta, se muestra el cuadro de dilogo estndar de Windows para abrir un archivo. El archivo elegido se pasa como cadena de caracteres al cdigo 4GL para su tratamiento. Al oprimir el botn Importar, comienza el proceso definido en el cdigo del listado 4. Para manejar la automatizacin en Excel es necesario definir las variables handler COM (lneas 1016) y las dems requeridas por el procedimiento (lneas 17-23). En la lnea 24 se establece la conexin con la aplicacin y en la 25 se le indica a la aplicacin que no sea visible durante el proceso. La variable archivo es la cadena resultante del cuadro de dilogo para abrir el archivo de Excel, y en caso de que sea nula, se despliega un mensaje de advertencia al usuario (lneas 26-28). En las lneas 30 a 32 se hace la divisin de la ruta y el nombre del archivo (sin extensin) para almacenarlos en la variables ruta y nombre_arch, respectivamente. La automatizacin comienza en la lnea 33, en donde se llama al mtodo Open del Objeto Excel para abrir el archivo especificado por el valor de la variable archivo. Posteriormente, se crea un handler para una hoja de trabajo (lnea 34) y de esta hoja se selecciona la celda A1. Un problema que se presenta es que no existe uniformidad en el formato de las hojas de clculo; es decir, algunas difieren en la celda que contiene el primer valor de la base de datos, algunas tienen columnas vacas entre las columnas de datos, hay renglones de encabezados mezclados entre los renglones de datos, etc. Para estos problemas la nica solucin es crear una plantilla para que cada departamento enve la hoja de clculo en un formato estndar, pero esto cae fuera del alcance de la programacin del mdulo. Es necesario saber exactamente cul es la regin vlida de la base de

datos y desechar la informacin restante. Por fortuna, existe un mtodo del objeto Range, CurrentRegion (lnea 36), el cual analiza por s solo los valores a partir de una celda pivote y selecciona el rango que parece contener la informacin vlida de una base de datos (realmente este mtodo evita mucha programacin y es una fortuna que estuviera implementado, adems que es rpido y preciso). Se seleccion como celda pivote la A12 (despus de ver varias hojas y checar que por lo menos los datos comienzan en esta celda) y la regin resultante se guarda en un objeto Range nombrado referencia. Posteriormente este rango se selecciona (mtodo Select), se copia (mtodo Copy) y se crea una nueva hoja de clculo limpia (mtodo Add), para pegar el rango que contiene los valores de la base de datos (mtodo PasteSpecial) y activar la celda A1 (mtodo Activate) de la hoja actual (lneas 37-43). Como el mtodo CurrentRegion incluye en el rango los encabezados de los valores, hay an renglones con informacin "sucia", por lo que es necesario eliminarla. Habilitamos la variable bandera a cierto (lnea 44) e iniciamos un ciclo preguntando si en cada rengln, a partir de A1, existe el valor 1,00 1.00, que es un valor de la columna Nmero Consecutivo y es nico e identificable. Si no existe ese valor, se elimina la columna con el mtodo Delete (lnea 51) y se contina hasta que se encuentra el valor deseado, para finalizar el ciclo (lneas 45-52). En este momento ya tenemos la base de datos "limpia", con slo valores y sin encabezados. Se selecciona nuevamente la regin de datos vlida con el mtodo CurrentRegion a otro objeto Range (referencia2) y se eliminan los formatos (alineacin, negritas, cuadriculado, etc.) con el mtodo ClearFormats (lneas 53-55). Finalmente, se exporta el archivo a tipo texto delimitado por comas, mediante el mtodo SaveAs (lnea 56), especificando el valor de la variable nombre_arch ms la extensin ".txt". La propiedad DisplayAlerts se establece a falso (lnea 57) para prevenir que Excel muestre un cuadro de dilogo, para confirmar que se desea salvar el archivo en ese formato (que ya se realiz) y se termina Excel con el mtodo Quit (lnea 58). En este punto termina la interaccin con Excel y se abre el archivo creado para importarlo a la tabla compras en PROGRESS, mediante la sentencia INPUT FROM (lnea 61). La importacin comienza en la lnea 62, con un ciclo que crea un registro limpio (lnea 63) de la tabla compras, y lee cada lnea del archivo de texto, indicando que estn separados por comas, para almacenar cada valor en las columnas respectivas (lnea 64). A cada ciclo se incrementa la cuenta de los registros ledos (lnea 65). Cuando termina la lectura, y si no hay algn error, se cierra el archivo mediante INPUT CLOSE (lnea 67) y se enva un mensaje al usuario indicando el nmero de registros importados. El procedimiento termina limpiando el valor en pantalla del archivo seleccionado para importar (lnea 69) y liberando todos los handler COM creados para la automatizacin (lneas 70-76). Es importante tomar muy en consideracin las notas indicadas en el listado 4 (lnea 6) con respecto al tratamiento de errores que pudieran surgir. La sentencia IMPORT es muy rgida en el aspecto de que hace bien su trabajo, pero no permite un poco de control de validacin al usuario. Este tratamiento de errores queda abierta al usuario con el fin de implementar su estrategia de correccin de errores para resolver sus necesidades. Consulte el manual Programming HandBook de PROGRESS o la ayuda en lnea para conocer los mtodos de validacin de informacin y manejo de errores. 4. Automatizacin en Access El ejemplo mostrado a continuacin tiene la misma funcionalidad que el anterior: abrir un tabla en Access, exportarla en formato de texto y leerla en una tabla en PROGRESS. En la figura 7 se muestra la interfaz presentada al usuario para este proceso. Cuando el usuario seleccione el botn con el cono de la carpeta, se muestra el cuadro de dilogo estndar de Windows para abrir un archivo, del cual se seleccionar la base de datos de Access

(contenida en un archivo con extensin .mdb). Hay que aclarar que este procedimiento est construido de forma muy "cerrada", es decir, que dentro del cdigo hay secciones personalizadas, con el nombre de las tablas y columnas tal y como estn definidas en las bases de datos. Esto impide que la aplicacin sea genrica, permitiendo la lectura de los datos de cualquier tabla de Access; si es necesario hacer un cambio en el esquema de estas tablas, tambin es indispensable modificar la rutina de importacin. El cdigo del listado 5 es el que permite el intercambio de datos desde Access hacia PROGRESS. Como se ha realizado en los otros ejemplos, el listado inicia declarando las variables locales y la variable Access de tipo COM handler para la automatizacin (lneas 9-12). Se crea una instancia de Access mediante la sentencia CREATE (lnea 14) y se indica que no sea visible al usuario (lnea 15). En caso de que no se haya elegido un archivo, el bloque de las lneas 16-18 muestra un mensaje al usuario. Las lneas 20-22 separan el nombre del archivo y la ruta de la variable archivo. Se inicia la interaccin con Access cuando se llama al mtodo OpenCurrentDatabase (lnea 23) con el nombre del archivo del paso anterior. Si se logra abrir la base de datos, se debe verificar cul ha sido abierta; esto se comprueba en las lneas 24, 27 y 32. Para cada base de datos, segn el nmero de tablas que se desean exportar, se ejecuta el procedimiento exporta (lneas 25 y 28-30). Este procedimiento, cuyo cdigo se muestra en el listado 6, toma como parmetros el nombre de la tabla que se desea abrir y la ruta en donde se almacenar el archivo exportado. El mtodo OpenTable abre la tabla especificada mediante el valor de la variable tabla (lnea 8) y el mtodo TransferText realiza la exportacin de la tabla completa hacia el formato de texto delimitado por comas (lnea 9). Una vez que se ha realizado la exportacin, se cierra la base de datos mediante el mtodo CloseCurrentDatabase (lnea 35) y termina la instancia de Access con el mtodo Quit (lnea 36). Ya slo resta hacer la importacin lnea por lnea del archivo exportado mediante la sentencia IMPORT para la tabla correspondiente en PROGRESS (lneas 38-47, 48-55, 56-61 y 62-68). Si el archivo abierto fue nsegop, entonces se hace la conexin a la tabla nsegop mediante la sentencia CONNECT (lnea 39). La sentencia INPUT FROM abre el archivo especificado (lnea 40) como argumento y se inicia el ciclo de lectura por lneas con las sentencias CREATE (lnea 42), que crea un registro en blanco y con la sentencia IMPORT (lnea 43), que lee una lnea del archivo y la empata con los campos especificados. La sentencia INPUT CLOSE (lnea 45) cierra el archivo de importacin y la sentencia DISCONNECT (lnea 46) realiza la desconexin de la base de datos. Como se observa, para las lneas 48-68, los procesos son los mismos que los anteriormente descritos. Si la transferencia es exitosa, o si la base de datos no es la adecuada, se le indica al usuario con un mensaje (lneas 71 y 73). Finalmente se limpia el valor del nombre del archivo (lnea 74) y se libera el handler para la automatizacin (lnea 75). Al igual que en el ejemplo de Excel, se deber establecer una estrategia de comprobacin de errores que se puedan presentar. Los mismos comentarios son aplicables a este ejemplo.

[Nota]. Si es necesaria ms informacin acerca de las herramientas disponibles y las tcnicas para el uso de la tecnologa COM y ActiveX, refirase al manual External Program Interfaces, que tiene varios captulos que tocan este tema, o a la ayuda en lnea desde PROGRESS. Conclusiones La automatizacin COM dentro de PROGRESS presenta una enorme ventaja al aplicar las tecnologas para el intercambio de informacin entre varias aplicaciones que se ejecuten dentro del

ambiente Windows. Sin embargo, se debe analizar si es necesario establecer esta comunicacin, ya que pudieran efectuarse las misma tareas con alguna otra herramienta que proporcione PROGRESS (tal como ReportBuilder, RESULTS, etc.). Otro factor a considerar es la velocidad de respuesta que tendr la aplicacin, ya que el intercambio de mensajes entre objetos COM presenta una latencia que degrada el rendimiento en general. Si es posible, establezca un solo objeto que realice todo el proceso, y si ya no lo est ocupando, desconctelo. La opcin de hacer no visible a la aplicacin servidora de automatizacin (mediante el atributo Visible a falso), incrementa un poco la velocidad de la comunicacin. Claro est que si se tiene una mquina poderosa, el factor de rendimiento no ser de consideracin. Bibliografa PROGRESS External Program Interfaces. No. versin 8 [Documentacin impresa]. PROGRESS User Interface Builder. No. 8 [Documentacin impresa]. PROGRESS User Interface Builder. No. 8 [Ayuda en lnea]. Sitio web. http://www.prlgress.com. Office 97 Examinador de objetos incluido en Visual Basic for Applications. [Ayuda en lnea]. Visual Basic for Application incluido en Office 97. [Ayuda en lnea]. Sitio web. http://www.microsoft.com/COM.

[ Este nmero ]

Direccin General de Servicios de Cmputo Acadmico-UNAM Ciudad Universitaria, M xico D.F.

You might also like