INTERNET = E-MAIL = COMUNICAZIONE. La comunicazione e di conseguenza la conoscenza di dati e forse oggi la principale risorsa che lÆuomo conosca. Sviluppare applicazioni che possano interagire e avere comandi per abilitare lÆinvio e la ricezione di E-Mail è diventato fondamentale per quasi tutti i programmatori. In questo articolo vedremo come integrare allÆinterno delle proprie applicazioni funzioni per invio / ricezione di e-mail tramite lÆambiente di sviluppo PowerBuilder.
PowerBuilder è un ambiente multi piattaforma UNIX (IBM AIX, HP UX UNIX) Windows 3.X, 95, 98, NT (nella versione 7.0 la versione a 16 bit per Windows 3.X non sarà più disponibile ), Macintosh. Come tale è possibile sviluppare applicativi multi piattaforma senza alcun problema seguendo piccole accortezze documentate ampiamente. Di conseguenza in PowerBuilder è possibile integrare funzioni di E-Mail a diversi livelli ( X.400, Lotus Notes, DDE, MAPI).
PROBLEMA PRATICO
PowerBuilder è provvisto di un set specifico di funzioni per interagire con le MAPI. Nel nostro articolo vedremo con esempi pratici come utilizzare queste funzioni e riporteremo come esempio una parte dellÆapplicativo Client/Server sviluppato allÆinterno di unÆazienda dove attualmente faccio una consulenza per gestire in automatico errori rilevati tra i gruppi di Test e Sviluppatori, Amministratori di sistema, Analisti, etc. Immaginate di essere in un Team formato da 70 persone, distribuite su più piani e che tutte loro devono interagire in tempo reale ricevendo ed inviando messaggi di errori, soluzioni e assistenza salvando il tutto in un DBMS .
SOLUZIONE
Il problema è stato risolto utilizzando funzioni appartenenti esclusivamente a Powerbuilder. Segue esempio di schermata:
dopo aver inserito i dati richiesti nella form e dopo aver "cliccato" sullÆicona "Salva Anomalia" il programma salva i dati su DBMS ed invia e-mail al responsabile del progetto e per CC a una risorsa da lui scelta.
Il risultato nella propria posta sarà il seguente:
CODICE DI ESEMPIO UTILIZZATO
Segue parte del codice ( inerente E-Mail) utilizzato nellÆevento "Clicked" dellÆicona Salva del nostro Menù
ààààà.
// Crea una sessione di Mail
mailSession mSesa
mailReturnCode mReta
mailMessage mMsga
mSesa = create mailSession
mReta = mSesa.mailLogon( mailNewSession! )
if mReta <> mailReturnSuccess! then
MessageBox("Errore di Accesso Mail","Problemi di Mail")
Return
end if
// Dichiarazione delle Variabili
trasfnumero = dw_1.GetItemNumber(dw_1.GetRow(),"chiave")
numero = string(trasfnumero)
oggetto =dw_1.GetItemString(dw_1.GetRow(),"oggettoproblema")
problema=dw_1.GetItemString(dw_1.GetRow(),"descrizioneproblema")
gravita = dw_1.GetItemString(dw_1.GetRow(),"gravita")
priorita = dw_1.GetItemString(dw_1.GetRow(),"priorita")invia = dw_2.GetItemString(1,"responsabile")
inviapercc = dw_2.GetItemString(1,"perconoscenza")
// Testo che apparirà nella riga OGGETTOmMsga.Subject = 'Messaggio da Priban Doc a Responsabile: ' + oggetto
// Testo che apparirà nel MESSAGGIO//
N.B. i caratteri "~r~n" vengono utilizzati per ritorno a capo
mMsga.NoteText = 'DESCRIZIONE DEL PROBLEMA: ' + problema
+ '~r~n!!!Gravità di:' + gravita + '~r~n!!!Tipo di Priorità: ' + priorita +' ~r~n!!!Riportato in Priban DOC con
Numero di Segnalazione così codificato: ' + numero
// Indirizzo di E-Mail della persona che dovrà ricevere il MESSAGGIO nel nostro caso invia =
// "rossi@rossi.com"
mMsga.Recipient[1].name = invia
// Indirizzo di E-Mail della persona che dovrà ricevere per CC nel nostro caso inviapercc =
//"verdi@rossi.com"
mMsga.Recipient[2].name = inviapercc
// Invio della E-Mail
mReta = MSesa.mailSend ( mMsga )
// Controllo che tutto sia eseguito correttamente
if mReta <> mailReturnSuccess! then
MessageBox("Errore di Invio E-Mail", "E-Mail Interrotta")
Return
else
MessageBox("MESSAGGIO","Problema Notificato via E-Mail al Responsabile e per
CC con indirizzo "+string(invia)+"", Exclamation!)
end if
// Distruggo la sessione di E-MailmSesa.mailLogOff()destroy
mSesa
ààààààààà
Questa parte del codice funzione correttamente nel caso in cui la posta debba essere inviata ad una sola persona + per CC. Nel caso in cui si debba inviare la stessa e-mail a un gruppo di utenti si dovrà procedere nel seguente modo:
àààààààà..
// Ciclo che preleva una lista di indirizzi da una List Box
For inviapiupersone = 1 to lb_gruppo.totalitems()
mMsga.Recipient[inviapiupersone].name = lb_gruppo.item[inviapiupersone]
sle_messaggio.text = "E-Mail inviata a: " + lb_gruppo.item[inviapiupersone]
Next
àààààààà.
LÆesempio su riportato può essere applicato anche ad altri oggetti come una Datawindow contenente una lista di E-Mail, etc.
Hoops, e nel caso di Attachment ? Ok segue codice di esempio:
N.B. Attenzione ad utilizzare Attachment potrebbero appesantire il traffico con conseguenze prevedibili.
// Ciclo che preleva una lista di indirizzi e per ognuno invia un file in Attachment
For inviafile = 1 to lb_attachmentfile.totalitems()
mMsga.AttachmentFile[inviafile].FileName = lb_gruppo.item[inviapiupersone]
// mMsga.AttachmentFile[inviafile].Pathname = "C:\directory"
mMsga.AttachmentFile[inviafile].FileType = mailAttach!
mMsga.AttachmentFile[inviafile].Position = 1
Next
FUNZIONI FORNITE DA POWERBUILDER PER GESTIONE DI E-MAIL ( MAPI ) Vengono riportati di seguito una lista di funzioni fornite allÆinterno di PowerBuilder. Le stesse sono documentate ampiamente ( con relativi esempi ) allÆinterno dellÆhelp o della relativa manualistica fornita con PowerBuilder
Funzioni:
MailAddress
MailAddress
MailDeleteMessage
MailGetMessages
MailLogoff
MailLogon
MailReadMessageFunzione
MailRecipientDetails
MailResolveRecipient
MailSaveMessage
MailSend
Finisce qui il nostro articolo su PowerBuilder - E-Mail. Nel caso in cui vogliate approfondire lÆargomento, vogliate una libreria di esempio o semplicemente delle delucidazioni potete contattarmi al seguente indirizzo Amici Marco E-Mail: bigsoft@bigsoft.com.