Page 1 sur 1

Attachement automatique de pièces jointes

MessagePublié: 17 Déc 2003 à 12:17
par Niclos
Bonjour a tous, Est il possible par le biais d'un agent en Lotus Script, d'attacher une pièce jointe automatiquement en allant la chercher dans un dossier (serveur ou local). Si oui, comment réaliser ce bijou ? Bonne journée,[%sig%]

Re: Attachement automatique de pièces jointes

MessagePublié: 17 Déc 2003 à 13:07
par AdminExpert
Oui c'est tout à fait possible. J'ai été amené à réaliser cela pour un client en avril 2003. Cet agent était capable automatiquement de détecter un envoi (attachement) ou un réception (détachement).Je peux te passer les sources... il y a de lecture... mais tu peux t'en inspirer et n'en retenir que les lignes de code qui t'intéressent.De plus cet agent est capable de faire du FTP via UNIX.Il y a de la lecture, je te demanderai seulement de rester discret si tu vois des infos de société car je n'aurai pas le temps de faire le ménage.Si tu as email ==> je te le zipp et sendCependant, j'ai laissé un "post" ClassMail offrant la possibilité de créer un mémo en y attachant un ou plusieurs fichiers...à toi de voir...Si tu souhaites le réaliser seul, je te suggère la méthode suivante1/ créer une base Notes "vièrge"2/ la nommée AutoAttach.NSF et pour le titre à toi de voir3/ Attention à la LCA, uniquement accessible aux adminstrateurs systèmes et fonctionnels4/ créer un document de paramétrage qui aura au moins 5 champs :- Nom de l'agent (prendre un nom sur 8 caractères maxi pour des raisons de simplicité) - Nom : PA_Agent - type texte- Nom du fichier à attacher (Remarque : aucun pb si le fichier est en local sur le serveur, par contre Notes ne supporte pas les nom UNC cf \\ ; si tel est le cas pour une ressource réseau, il faut assigner un lecture sur cette ressource, soit un bon vieux net use....) - Nom : PA_FichierAttach - type texte- Liste des destinataires Nom PA_Dest - type Nom, multi évalué, liste et avec sélection le carnet d'adresses et zone modifiable- Objet ça te permets d'être souple si tu gère plusieurs agents - nom : PA_Objet- Message, tu peux personnaliser le message accompagnant chaque agent - nom : PA_Body - texte- tu peux ajouter un autre champ indiquant les jours si tu tombes dans des cas particuliers - Nom PA_Jour - type liste - contenu dimanche|0- tu peux aussi ajouter nom de responsable fonctionnel pour l'avertir du succès de l'opération - nom PA_AdminFonc - type nom- au le nom de l'administrateur système notes - nom PA_AdminSystNotes...samedi|6si j'ai bonne mémoire le premier jour chez lotus commence un dimanche avec une valeur 0 ; si tel n'est pas le cas... tu corrige... pour ensuite utiliser les fonctions dates en LS afin de déterminer le numéro de la semaineNom du masque par exemple "Profil agents", alias PATu crées un document par agent si tu as plusieur types d'agents avec une programmation horaire différente pour chacun d'eux.5/ tu crées une vue "Liste des agents" pseudo : VAGENT6/ tu défini un agent ayant le même nom que la clé renseignée dans le document profil7/ tu utilises les propriétés et méthodes LS des agents afin de détecter le nom de l'agent en cours d'exécution8/ avec ce nom du récupères les informations dans le document profil par getdocumentbykey sur la vue VAGENT9/ tu as ensuite accès aux champs du document et tu génères le mail en fonction de ceux-ci10/ enfin tu utilises le post que j'ai laissé pour envoyer le fichier11/ tester le bon déroulement des opérations et envoyer les messages aux administrateurs que tu as défini12/ enfin tu peux générer des documents log pour chaque agent et créer une vue log catégorisée sur le l'agent et la date de lancementle document log devra au moins comporter- nom de l'agent- date et heure de lancement- un champs texte riche contenant les messages du genrejj/mm/aaaa hh:mm:ss - le messagevoilà j'espère être simple dans mon explicc'est pas très compliqué, si tu maîtrise le LS==> no problemops : tu peux remplace les doc paramètres par des fichier ini... mais c'est une gestion spéciale ==> avantage de cette solution : l'administateur n'a pas besoin d'avoir notes pour intervenir sur le paramétrage et celui-ci peut être fait à distance du moment qu'il a accès au fichier INIdans l'attente de te lire

Re: Attachement automatique de pièces jointes

MessagePublié: 17 Déc 2003 à 13:30
par Niclos
Salut, En effet, je veux bien les sources. Voici mon adresse email (nicolasdamien@yahoo.fr). Je te promet d'être discret sur les infos de ta société. Merci par avance.[%sig%]

Re: Attachement automatique de pièces jointes

MessagePublié: 17 Déc 2003 à 13:42
par AdminExpert
en attendant je te conseil de lire la méthodologie exprimée dans mon précédent mail... les source que je vais t'envoyer viendront compléter tout cecidans l'attente de te lire....attention: y a de la lecture dans mes sources pour les longues soirées d'hiver au moment de l'apéro de noël et nouvel an !!!

Re: Attachement automatique de pièces jointes

MessagePublié: 17 Déc 2003 à 14:19
par Niclos
ok merci beaucoup, je lit tout ca et je reviens vers toi si problèmeBonne fin de journée[%sig%]

Re: Attachement automatique de pièces jointes

MessagePublié: 17 Déc 2003 à 14:19
par Niclos
ok merci beaucoup, je lit tout ca et je reviens vers toi si problèmeBonne fin de journée[%sig%]

Re: Attachement automatique de pièces jointes

MessagePublié: 17 Déc 2003 à 16:28
par AdminExpert
bon si j'ai du temps je te fais une base "vite fait" je te la mail d'ici fin de semaineton dév à mettre en prod qd ?

source de la solution préconisée

MessagePublié: 17 Déc 2003 à 23:42
par AdminExpert
Pour ceux qui le désire, j'ai réalisé pour niclo la petite base notes d'exemple, je peux vous la faire parvenir zippée ; cependant pour ceux qui souhaitent partir du synop... completle voiciSynopsis de base de documents Lotus Notes - créé à 23:40:10 le 17/12/2003Informations de masqueNom : Profil agentPseudonyme : PADernière modification : 17/12/2003 22:53:41Commentaire : [Sans]Type : Document Inclure dans le menu Création : OuiInclure dans Recherche par masque : OuiMasque par défaut : NonMettre automatiquement à jour les champs : OuiEnvoi de documents à l'enregistrement : NonEnregistrement du masque dans documents : NonRécupérer contenus de champ existants : NonEnregistrer mises à jour comme réponses : NonConvertir versions antérieures en réponses : NonActiver les objets pendant la création : NonActiver les objets pendant l'édition : NonActiver les objets pendant la lecture : NonClés de chiffrement de document : [Sans]Liste d'accès aux docs créés avec ce masque : Tous les utilisateursListe d'accès à ce masque pour création : Tous les utilisateursSous-composants :Champ : PA_AgentType de données : TexteMessage d'aide : [Sans]Type de champ : ModifiableSignature des sections et messages : NonChiffrement : Désactivé(e)Accès Editeur nécessaire pour mise à jour : NonFormule de conversion d'entrée : @UpperCase(PA_Agent);En script : NonChamp : PA_FichiersType de données : TexteSéparateurs de liste en entrée : VirguleSéparateur de liste à l'affichage : VirguleMessage d'aide : [Sans]Type de champ : ModifiableSignature des sections et messages : NonChiffrement : Désactivé(e)Accès Editeur nécessaire pour mise à jour : NonEn script : NonChamp : PA_ObjetType de données : TexteMessage d'aide : [Sans]Type de champ : ModifiableSignature des sections et messages : NonChiffrement : Désactivé(e)Accès Editeur nécessaire pour mise à jour : NonEn script : NonChamp : PA_BodyType de données : TexteMessage d'aide : [Sans]Type de champ : ModifiableSignature des sections et messages : NonChiffrement : Désactivé(e)Accès Editeur nécessaire pour mise à jour : NonEn script : NonChamp : PA_SendToType de données : NomsSéparateurs de liste en entrée : VirguleSéparateur de liste à l'affichage : VirguleMessage d'aide : [Sans]Type de champ : ModifiableSignature des sections et messages : NonChiffrement : Désactivé(e)Accès Editeur nécessaire pour mise à jour : NonEn script : NonChamp : PA_CopyToType de données : NomsSéparateurs de liste en entrée : VirguleSéparateur de liste à l'affichage : VirguleMessage d'aide : [Sans]Type de champ : ModifiableSignature des sections et messages : NonChiffrement : Désactivé(e)Accès Editeur nécessaire pour mise à jour : NonEn script : NonChamp : PA_AdminFoncType de données : NomsSéparateurs de liste en entrée : VirguleSéparateur de liste à l'affichage : VirguleMessage d'aide : [Sans]Type de champ : ModifiableSignature des sections et messages : NonChiffrement : Désactivé(e)Accès Editeur nécessaire pour mise à jour : NonEn script : NonCode JavaScript et HTML :[Aucun]Code LotusScript :[Aucun] Informations de vueNom : Liste des agentsPseudonyme : VAGENTSDernière modification : 17/12/2003 21:18:40Commentaire : [Sans]Vue par défaut : OuiRéponses non hiérarchisées : Désactivé(e)Etat à l'ouverture de la vue : DétailléeMarqueurs de documents non lus : AucunFréquence de mise à jour : AutomatiqueSuppression de l'index : JamaisListe d'accès à la vue : Tous les utilisateursFormules relatives à l'heure : NonFormule de sélection : SELECT Form = "PA";Sous-composants :Numéro de la colonne : 1Titre de la colonne : AgentFormule de la colonne : PA_AgentLargeur de colonne : 10 caractèresSéparateur de liste : Masqué : NonRéponses seulement : NonIcône : NonFormat de nombre : LibrePourcentage (valeur * 100)% : NonParenthèses pour nombres négatifs : NonPonctué au millier : NonFormat horaire : 17/12/2003 23:40:10Tri : Ordre croissantJustification : GaucheTotal : AucunMasquer valeurs détaillées : NonCode JavaScript et HTML :[Aucun]Code LotusScript :[Aucun] Informations de bibliothèque de codesNom : AutoAttachLibDernière modification : 17/12/2003 23:14:53Code LotusScript :Option PublicUse "ClassMail"Sub InitializeEnd SubSub AutoAttach Const VUEAGENT="VAGENTS" Dim Session As NotesSession Dim Db As NotesDataBase Dim Agent As NotesAgent Dim ViewProfil As NotesView Dim DocProfil As NotesDocument Dim AgtName As String Dim Msg As Mail '--- Trap des erreurs On Error Goto ErrHandle Print "Auto attachement en cours..." '--- Initialise la session Lotus Notes Set Session=New NotesSession Set Db=Session.CurrentDataBase '--- Détecte le nom de l'agent en cours d'exécution Set Agent = Session.CurrentAgent AgtName = agent.Name '--- On écrit dans le LOG.NSF --- Print "Agent " & AgtName & " démarré" '--- Initialise la vue contenant les documents profil --- Set ViewProfil=Db.GetView(VUEAGENT) If ViewProfil Is Nothing Then Print "La vue VAGENT est inconnue !!!" Goto Fin End If '--- On recherche le document profil --- Set DocProfil=ViewProfil.GetDocumentByKey(AgtName) If DocProfil Is Nothing Then Print "Aucun document profil pour l'agent ";AgtName Goto Fin End If '--- Construction du message, attachement des fichiers et envoi ! --- Set Msg=New Mail Msg.Subject=DocProfil.PA_Objet(0) Call Msg.SetBody(DocProfil.PA_Body) Call Msg.SetAttachement(DocProfil.PA_Fichiers) Call Msg.SetRecipients(DocProfil.PA_SendTo, DocProfil.PA_CopyTo, Null) Call Msg.Send(False) '--- Sur le même principe on peut envoyer un compte rendu à l'administrateur --- Set Msg=New Mail Msg.Subject="Agent " & AgtName Call Msg.SetBody("Traitement correctement effectué") Call Msg.SetRecipients(DocProfil.PA_AdminFonc,Null, Null) Call Msg.Send(False) '--- On sort proprement ! Goto FinErrHandle: '--- On écrit dans le LOG.NSF Print "Erreur ";Err;" : ";Error$ '--- Alerte administrateur Set Msg=New Mail Msg.Subject="Erreur Agent " & AgtName Call Msg.SetBody("Erreur n° " & Err & " - " & Error$) Call Msg.SetRecipients(DocProfil.PA_AdminFonc,Null, Null) Call Msg.Send(False) Resume FinFin: Print "Agent " & AgtName & " terminé" If Not (Msg Is Nothing) Then Delete MsgEnd Sub Nom : ClassMailDernière modification : 17/12/2003 21:25:04Code LotusScript :Option PublicPublic 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 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 Informations d'agentNom : AGENTTESTDernière modification : 17/12/2003 21:27:15Commentaire : [Sans]Agent partagé : OuiType : LotusScriptEtat : Activé(e)Déclencher : Lorsque vous le sélectionnez dans le menu Actions.S'applique à : Exécuter une fois (commandes @ autorisées)Code LotusScript :Option PublicUse "AutoAttachLib"Sub Initialize Call AutoAttachEnd Sub

Re: Attachement automatique de pièces jointes

MessagePublié: 18 Déc 2003 à 11:19
par jose
Moi je cherche pour l'instant à détacher des pièces jointes qui arriverontsur une BAl à interval régulier. Un jour j'aurai besoin de faire surementl'inverse. J'accepte ton offre pour la base et les sources de ton agent. Merci d'avance (jmasdeu@libertysurf.fr)

Re: Attachement automatique de pièces jointes

MessagePublié: 22 Déc 2003 à 11:27
par Cedric
Juste un petit commentaire concernant le rattachement dans un document Notes d'un fichier présent sur le disque.J'ai fait la même chose y a longtemps et le fichier arrivait via FTP.Je scrutais à intervalle régulier un répertoire pour trouver mon fichier et si le fichier était gros ou le transfert lent, il arrivait que le code détecte le fichier et le rattache dans le doc avant qu'il ne soit complètement arrivé, ce qui résultait dans une pièce jointe tronquée (en plus je supprimais le fichier du disque).J'avais résolu le problème en faisant appel aux apis windows (CreateFile) qui permet d'ouvrir un fichier en demandant un lock exclusif. Donc si j'obtenais mon fichier c'est que plus aucun programme ne l'utilisait et qu'il était donc "complet", sinon j'ignorais le fichier jusqu'à la prochaine scrutation.Voila mes 2cts...

Re: Attachement automatique de pièces jointes

MessagePublié: 22 Déc 2003 à 16:20
par AdminExpert
si tuas encore le code sur l'api... je suis preneur merci ça peut tjrs servir...merci

Re: Attachement automatique de pièces jointes

MessagePublié: 06 Jan 2004 à 10:13
par Cedric
je rentre seulement de congés.je suis désolé, mais je n'ai plus ces sources, ayant entre temps changé d'employeur.Ce n'était vraiment pas compliqué, tout ce que je peux encore te fournir c'est l'algo :CreateFile avec le lock pour vérifier que le fichier est là au completClose du fichierCréation d'un Note dans la mail.box du serveur (ou dans la messagerie de l'utilisateur courant).Remplissage des champs + rattachement de la PJ.Save si dans mail.box ou Send si dans la messagerie (pas forcément nécessaire d'enregistrer).Suppression du fichier (<= si tu ne veux pas le garder).