Page 1 sur 1

LS : Class Mail - Gratos

MessagePublié: 09 Déc 2003 à 23:41
par AdminExpert
Dans la majorité de mes applications j'ai été amené à développer des actions de workflow, envois automatiques de messages, etc..De plus (clients assez difficiles), je devais formater les messages (couleur, gras, liens, fichiers attachés, accusé de réception, principal, replyto, et tout le tralala), - je me suis donc développé une Class Mail "perso" afin de pouvoir composer librement un message un peu comme si j'étais en train de le rédiger avec un client Notes.Je tiens donc à vous le faire partager et surtout rendre service à ceux qui ne sont pas à l'aise avec le LS.Je vous donne ci-dessous le code de la classe. Celui-ci est suivi d'un exemple d'utilisation.Bien entendu le code de cette classe est perfectible en terme de fonctionnalités. Dommage en LS on ne peut pas faire comme en JAVA, c'est-à-dire construire automatiquement la Doc de la classe au moment de la compilation et obtenir le fichier HTML correspondant... peut-être dans une version 99.99 de Notes.Si quelqu'un a de bonnes idées pour les nouvelles fonctionnalités, je suis preneur.PS : cette forme de programmation risque peut-être de choquer les débutants en LS mais sachez que cela devient de plus en plus à la mode dans les dév et c'est de plus, plus propre et plus orienté Objet... Attention, le LS Objet ne possède pas toutes les propriétés de la programmation Objet comme en C++, Java ou C#.=== ClassMail ===Public Class Mail Private MailSession As NotesSession Private MailDB As NotesDataBase Private MailDoc As NotesDocument Private RTBody As Variant Private RS As Variant Private ItemSendTo As NotesItem Private ItemCopyTo As NotesItem Private ItemBlindCopyTo As NotesItem ' Constructeur Public Sub new Set MailSession=New NotesSession Set MailDB = MailSession.CurrentDataBase Set MailDoc=New NotesDocument(MailDB) Set RTBody = MailDoc.CreateRichTextItem( "Body" ) Set RS=MailSession.CreateRichTextStyle MailDoc.Form="Memo" End Sub Public Sub SetRecipients(SendTo As Variant, CopyTo As Variant, BlindCopyTo As Variant) Set ItemSendTo = New NotesItem( MailDoc, "SendTo", SendTo ) Set ItemCopyTo = New NotesItem( MailDoc, "CopyTo", CopyTo ) Set ItemBlindCopyTo = New NotesItem( MailDoc, "CopyTo", BlindCopyTo ) End Sub Public Property Set Subject As String MailDoc.Subject=Subject End Property Public Property Set ReturnReceipt As Integer MailDoc.ReturnReceipt=ReturnReceipt End Property Public Sub SetBody(Body As Variant) If Isarray(Body) Then Forall T In Body Call RTBody.AppendText( T ) Call RTBody.AddNewLine(1) End Forall Else Call RTBody.AppendText( Body ) Call RTBody.AddNewLine(1) End If End Sub Public Sub SetDocLink(Msg As String,DocLink As NotesDocument) Call RTBody.AddNewLine(1) Call RTBody.AppendText( Msg ) Call RTBody.AppendDocLink( DocLink, MailDoc.Subject(0)) End Sub Public Sub SetDocLinkDB(Msg As String,DocLink As NotesDataBase) Call RTBody.AddNewLine(1) Call RTBody.AppendText( Msg ) Call RTBody.AppendDocLink( DocLink, MailDoc.Subject(0)) End Sub Public Sub SetAttachement(F As Variant) If Isarray(F) Then Forall Attached In F Call RTBody.EmbedObject( EMBED_ATTACHMENT, "", Attached) End Forall Else Call RTBody.EmbedObject( EMBED_ATTACHMENT, "", F) End If End Sub Public Property Set Principal As String MailDoc.Principal=Principal End Property Public Property Set ReplyTo As String MailDoc.ReplyTo=ReplyTo End Property Public Sub SetColor(Color As Variant) RS.NotesColor=Color Call RTBody.AppendStyle(RS) End Sub Public Sub SetBold(isBold As Integer) RS.Bold=isBold Call RTBody.AppendStyle(RS) End Sub Public Sub SetItalic(isItalic As Integer) RS.Italic=isItalic Call RTBody.AppendStyle(RS) End Sub Public Sub Send(isSave) Call MailDoc.Send( isSave ) End Sub Public Sub Delete Set MailDoc=Nothing Set MailSession=Nothing Set MailDB=Nothing Set RTBody=Nothing Set RS=Nothing End Sub End Class=== Comment l'utiliser dans un script LS ===Sub Initialize Dim s As notessession Dim db As notesdatabase Dim mm As Mail Set mm=New Mail() mm.subject="essai" Dim texte(2) As String Dim copyto(1) As String Dim f(1) As String copyto(0)="Admin PERSO" copyto(1)="toto@wanadoo.com" Set s=New notessession Set db=s.currentdatabase texte(0)="ligne1" texte(1)="ligne2" texte(2)="ligne3" f(0)="c:\config.sys" f(1)="c:\autoexec.bat" Call mm.SetRecipients("Admin PERSO",copyto,Null) Call mm.SetBody(texte) Call mm.SetBody("ligne4") Call mm.SetBold(True) Call mm.SetColor(COLOR_RED) Call mm.SetBody("ici liste des fichiers") Call mm.SetAttachement(f) Call mm.SetAttachement("c:\windows\win.ini") Call mm.SetBody("") Call mm.SetColor(COLOR_BLUE) Call mm.SetBold(False) Call mm.SetItalic(True) Call mm.SetBody("liste des fichiers ok") Call mm.SetDocLinkDB("voici la base",db) Call mm.Send(False) Delete mmEnd Sub

Comment l'implémenter

MessagePublié: 10 Déc 2003 à 13:13
par AdminExpert
J'ai oublié de préciser comment l'implémenter pour ceux qui ne maîtrise pas le LS1/ créer une bibliotheque de script2/ dans la section déclaration effectuer un copier/coller de la classe "Mail"3/ enregistrer cette bibliotheque dans MailLib (par exemple)pour utiliser la classe Mail, il suffit d'ajouter la ligne Use "MailLib" dans la classe option de votre agent, de votre masque, de votre bouton, etc...ensuite dans l'evénement voulu (Initialise si c'est un agent) copier le code donné en exemple. Changer bien entendu le nom des destinataires, les noms de fichiers au besoin, etc.Petite correction (que je dois apporter depuis longtemps déjà)remplacer la ligneSet ItemBlindCopyTo = New NotesItem( MailDoc, "CopyTo", BlindCopyTo ) parSet ItemBlindCopyTo = New NotesItem( MailDoc, "BlindCopyTo", BlindCopyTo ) ps : je n'ai jamais été amené l'option copie cachée m

Re: LS : Class Mail - Gratos

MessagePublié: 10 Déc 2003 à 15:00
par sand
MERCI BEAUCOUP.Sand

Re: LS : Class Mail - Gratos

MessagePublié: 10 Déc 2003 à 17:01
par AdminExpert
j'espère que tu en feras bon usage ça marche ???

Re: LS : Class Mail - Gratos

MessagePublié: 16 Déc 2003 à 15:30
par Raphaël
Bonjour,tout d'abord merci pour ce script : il marche super bien!!Par contre lorsque je suis dans ma page web et que je veux le lancer il ne fonctionne pas.... Pkoi???J'ai un bouton "envoi" dans mon masque avec dans le 'click' :@Command([FileSave]);@Command([FileCloseWindow])Ensuite sur mon WebQuerySave de mon masque :@Command([ToolsRunMacro]; "EnvoiDemande")Sachant que EnvoiDemande est le nom de mon agent.Voilà si kelk'un à une proposition, je suis preneur!!Merci d'avanceRaph

Re: LS : Class Mail - Gratos

MessagePublié: 16 Déc 2003 à 16:19
par AdminExpert
ok, merci pour la première phraseje ne l'ai pas écrit pour le web il fonctione uniquement pour un client "lourd"de plus le LS ne fonctionne qu'en mode serveur quand on est en client Notes... le LS n'est pas reconnu par IE ==> revoir les propriétés de ton agent...Il est clair que le code est à revoir dans ce contexte... j'ai pas trop le temps d'y voir plus en ce moment...cependant peux-tu en dire plus sur ton implémentation ? quel genre de dysfonctionnement ? attention il ne se charge pas d'envoyer le document en coursil faut ajouter dans le script la gestion du contexte .DocumentContext...bon ces explications sont dites à la va vite... mais je manque de billes... si tu peux en dire plus ou qq d'autre

Re: LS : Class Mail - Gratos

MessagePublié: 17 Déc 2003 à 10:30
par Raph
Bonjour,En faîte le lotus script est dans ma base qui est bien sur mon sur mon serveur.Après qd on fait appel au lotus script via un agent il peut fonctionner parfaitement pour le web (je le fait pour envoyer des messages "basique").Maintenant malgré l'appel via l'agent, est ce que dans les fonction lotus script qd on est en mode web, il faut déclarer d'autre classe changer d'autre ligne de code???Sinon, pour revenir à ce que je veux faire : J'ai une page web qui correspond à un masque. Je voudrais pouvoir envoyer en mail le contenu de ce masque via un bouton. (Le masque correspond à un courrier type contenant certaine info que je dois envoyer). Et là je bloque un peu....Merci d'avance,@+