sábado, mayo 05, 2007

Ok, comenzando

Primero.. necesitamos una estructura que almacene los parámetros de conexión a la fuente de datos. Para eso, utilizo una tabla donde guardo todas las configuraciones del sistema. Para el caso, en cualquier lugar seguro que se puedan guardar los parámetros de conexión funcionará. Esta es la función ConnectODBC.p:

DEFINE INPUT PARAMETER ODBC-DSN AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER ODBC-Server AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER ODBC-UserID AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER ODBC-password AS CHARACTER NO-UNDO.
DEFINE INPUT-OUTPUT PARAMETER objConnection AS COM-HANDLE NO-UNDO. /*regresa ? si no se conectó */
DEFINE OUTPUT PARAMETER ODBC-status AS CHARACTER NO-UNDO.

SESSION:SET-WAIT-STATE ( "GENERAL" ).

CREATE "ADODB.Connection" ObjConnection.

ObjConnection:OPEN ( "data source=" + ODBC-DSN + ";server=" + ODBC-Server, ODBC-UserID, ODBC-password, 0 ) NO-ERROR.

SESSION:SET-WAIT-STATE ( "" ).

IF ERROR-STATUS:NUM-MESSAGES > 0 THEN
ASSIGN ODBC-status = ERROR-STATUS:GET-MESSAGE(1).
ELSE
ASSIGN ODBC-status = "".



En el procedimiento que llame a esta función, se puede utilizar el ODBC-status para mostrar el error generado.
La ventana para dar mantenimiento a las conexiones:

Olvídate de los DLLs

En un comienzo, intenté crear la interfase (progress - contpaq i), utilizando el famoso Contpaq i SDK, el cual consiste de unos dlls para ligarse dentro de tu programa, pero al momento de cargar la primera función: dbLogin() en el dbfwin32.dll, se me cerraba el UIB, en realidad, tronaba todo la instancia de progress, por lo cual comenzé a sospechar que no iba a ser posible que progress soportara la forma en que estaba compilado este DLL. Entonces se me ocurrió que se podría crear un archivo de parametros, llamar un pequeño programa hecho en delphi (porque el sdk trae muchos ejemplos desarrollados en ese ambiente), llamarlo mediante DOS SILENT VALUE("xxxx"), que ya he usado anteriormente para llamar al winzip commmand line, con excelentes resultados, y tener resuelto el problema.
Sin embargo, hablando con el buen Ricardo Palau, del equipo de Compac, me recomendó hacer los movimientos directamente en la base de datos, a través de ODBC, (me pregunto porque no me lo habian propuesto antes). Bueno, el chiste es que 12 dias despues de comenzar esta aventura, me salen conque en contpaq i, tienen un daemon checando una tabla para ver a que hora se inserta un registro y disparar rutinas de cálculo de saldos... que delicia... no tendremos que preocuparnos por reprogramar gran parte del contpaq en progress.. que eso si hubiera estado imposible por varios aspectos:
1) no creo que se pudiera acceder al algoritmo de contpaq para afectar todos los registros que se tendrían que crear.
2) sería totalmente impractico volver a programar algo como esa parte de contpaq en progress.
3) si de por sí, así como lo vamos a hacer, la respondabilidad del programador es total para con la integridad de la base de datos de contpaq, que no sería prudente a una compañía como compac, el permitir que los usuarios crearan soluciones de este tipo. Sería un dolor de cabeza de proporciones inmanejables.

Por otro lado, debemos notar que sí tienen en realidad un objeto ocx de tipo .exe para crear la interfase con contpaq i, que sin embargo, no podemos ligar dentro de progress.

Bueno.. dormiré pues son las 2 am, y HOY ES MI CUMPLEAÑOS!!!
Mañana (bueno.. al rato) colocaré aquí unas rutinas de mantenimiento y la especificación de la configuración del ODBC datasource para que lo podamos accesar desde Progress.