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
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 Estado
Else
SMTPSend ('smtp. miservidor.local',mi.direccion@
miservidor.es',cListaDestinatarios,cAsunto,cMensaje,,,'Universidad de
Salamanca',,'1') Returns Estado
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.