25 octubre 2010

Uso del comando “SMTPSend”, caso práctico.


Partimos de la existencia de una tabla Oracle, que contiene las direcciones e-mail de posibles destinatarios del mensaje a enviar, lo haremos en sólo tres sencillos pasos.
Paso I.
Creamos una ventana, desde donde el usuario podrá seleccionar cada uno de los elementos del mensaje a enviar:

Las variables de entorno que usaremos serán las siguientes:
Class Variable                 Type                 Subtype
FileLog                           Object              FileOps
cListaDestinatarios         List                   
cAsunto                          Character           50
cMensaje                         Character           1000
cOrderAdjuntar               Boolean            

cAdjunto                         Character           100
Sentencia                         Object


Paso II.
El método $construct de la ventana:
Local Variable                 Type                                      Subtype
Condicion                        Character                                1000 
lStatus                             Short integer (0 to 255)         

;  Carga las direcciones e-mail de los posibles destinatarios DB-ORACLE

Do $sessions.[$sessions.$first().$name].$newstatement() Returns Sentencia

;  La variable Condicion contendrá la clausula where con las condiciones de la sentencia select de Oracle, en nuestro ejemplo, tomamos dicha clausula de la ya consignada en una queri denominada Bus_Alumnos.

Calculate Condicion as $queries.Bus_Alumnos.$extraquerytext
Do Sentencia.$execdirect(con("Select unique(EMAIL) from BALUMNOS ",Condicion)) Returns lStatus
Do Sentencia.$fetch(cListaDestinatarios,kFetchAll) Returns lStatus
Do cListaDestinatarios.$sendall($ref.$selected.$assign(kTrue))

;  Una vez cargada la lista cListaDestinatarios con las direcciones de e-mail, candidatas, nos aseguramos de tener la primera línea de la lista seleccionada, y las variables usadas para adjuntar un documento en sus valores iniciales.

Do cListaDestinatarios.$line.$assign(0)
Calculate cOrdenAdjuntar as 0
Calculate cAdjunto as ''


Paso III.
Crearemos un control de eventos para el botón: Adjuntar archivo
On evClick
Do FileOps.$getfilename(cAdjunto) Returns #F
If flag false
Calculate cOrdenAdjuntar as 0
Calculate cAdjunto as ''
Do $cobj.$redraw()
End If

Otro para el botón: Cancelar

On evClick
Close top window

Y finalmente



El evento para el botón: Enviar

Local Variable                 Type                                      Subtype
lArchivoBin                    Binary                                    n/a
lBinData                          Binary                                    n/a
lCharData                        Character                                1000000000
lCharSet                          Character                                50
lContentSubType           Character                                50
lContentType                 Character                                50
lEncoding                        Character                                1000000000
lFileName                        Character                                50
lLevel                              Short integer (0 to 255)
lNimeList                        List
lNombreArchivo             Character                                50
                                                          
On evClick

;  Primero eliminaremos de la lista las direcciones e-mail, que el usuario a des-seleccionada sobre la lista de candidatos.

Set current list cListaDestinatarios
For each line in list from 1 to #LN step 1
If cListaDestinatarios.$selected=kFalse
Delete line in list
End If
End For

;  Comprobaremos si el usuario ha seleccionado (o no) un documento para adjuntar al e-mail, pues el comando SMTPSend cambiará dependiendo de ésto.

If cAdjunto<>''
Do lNimeList.$define(lLevel,lContentType,lContentSubType,lFileName,lCharData,lBinData,lCharSet,lEncoding)
Do lNimeList.$add(0,'multipart','mixed')
Do lNimeList.$add(1,'text','plain',,cMensaje,,,)
Calculate lNombreArchivo as mid(cAdjunto,rpos(':',cAdjunto)+1,50)
Do FileLog.$openfile(cAdjunto)
Do FileLog.$readfile(lArchivoBin)
Do FileLog.$closefile()
Do lNimeList.$add(1,'application','octet-stream',lNombreArchivo,,lArchivoBin,,,)
SMTPSend ('smtp.miservidor.local','mi.direccion@ miservidor.es',cListaDestinatarios,cAsunto,lNimeList,,,'Universidad de Salamanca',,'1') Returns #F
Else
SMTPSend ('smtp. miservidor.local',mi.direccion@ miservidor.es',cListaDestinatarios,cAsunto,cMensaje,,,'Universidad de Salamanca',,'1') Returns #F
End If
Close top window

Y eso habrá sido todo, sólo indicar que el objeto, que muestra los destinatarios en la ventana de composición del mensaje, es de tipo kCheckBoxList, para facilitar al usuario, des-seleccionar direcciones e-mail.

Un cordial saludo, en especial a Case Software, Victor y Pepe, quienes se manifiestan como seguidores de éste blog.

14 septiembre 2010

Creación y uso de una sesión con Oracle



- Instalación del cliente:

1) Sobre la instalación del cliente Oracle en Mac OS X, consulte la nota técnica Cliente Oracle
 

2) Crearemos los parámetros necesarios en el archivo "tnsnames.ora" a fin de que el cliente Orcale pueda conectarse con la base de datos (en nuestro ejemplo la llamaremos "BASEORA"

- Creación de la biblioteca:

1) Crearemos una nueva biblioteca Omnis, a la que llamaremos "Sesión"


2) Añadiremos una clase "schema" en correspondencia con una tabla existente en nuestra base de datos Orcale (para nuestro ejemplo será "BDIREC"


3) Añadiremos una clase "table" (en nuestro ejemplo la llamaremos "Tabla") y asignaremos en su propiedad "sqlclassname" el esquema "BDIREC"

En "Starup_Task" crearemos las siguientes variables:

4) La variable Task, "taSesion" de tipo "Object" y con subtipo "ORACLE8SESS" y las variables Class, "clEsquema" y "clTabla" de tipo "List", a ésta última le añadiremos el "subtype" "Tabla".
 

- Conexión simple:

Añadiremos (bajo el método $construct, del "Starup_Task")


5) Do taSesion.$logon('BASEORA','usuario','contraseña','nombresesión')


- Si deseamos usar un "pool" de conexiones:

5) Do $extobjects.ORACLE8DAM.$objects.ORACLE8SESS.$makepool('Sesiones',10,'BASEORA','usuario',contraseña')

Cada vez que deseemos obtener una nueva conexión de entre las 10 disponibles usaremos:

6) Do clEsquemaPrueba.$sessionobject.$assign($sessionpools.Sesiones.$new())

- Uso de una clase esquema (schema)

6/7) Do clEsquema.$sessionobject.$assign(taSesion)
7/8) Do clEsquema.$select()
8/9) Do clEsquema.$fetch(kFetchAll)


- Uso de una clase tabla (table)

6/7) Do clTabla.$sessionobject.$assign(taSesion)
7/8) Calculate $clib.$tables.Tabla.$sqlclassname as 'BDIREC'
8/9) Do clTabla.$carga
9/10) Do clTabla.$sort(clTabla.NOMBREC)

En este último caso el método "$carga" es el encargado de leer la tabla y guardar su contenido en la lista "clTabla", tal y como sigue:

El método "$carga", se creará en la clase "Tabla", con el siguiente contenido:


1) Do $cinst.$select()
2) Do $cinst.$fetch(kFetchAll)

02 marzo 2010

Manual de programación en castellano


Manual de Programación Omnis Studio en Castellano. Mediante el primer enlace podrá obtener una edición en formato PDF, mediante el segundo, podrá optar por la edición impresa.



Support independent publishing: Buy this book on Lulu.

Recuerde que:  Adquiriendo una licencia o una actualización de cualquier producto Omnis Studio a través del distribuidor oficial (http://www.softpi.com), recibirá una copia en formato PDF.