Page 1 sur 1

Agent relance

MessagePublié: 26 Avr 2012 à 12:10
par DomNotes
Bonjour,
Je souhaite faire un agent de relance qui enverra un mail à trois responsable un mois avant la date prévue, ce mail contiendra soit un ficher excel avec la liste des documents à traiter soit la liste des document avec des liens vers les documents.
Le problème c'est que j'ai un champ lecteurs dans les documents et les trois destinataires n'ont pas accès aux mêmes documents, je dois envoyer à chaque utilisateur la liste des document qui le concerne uniquement.
J'ai créer une vue qui affiche les documents dont la date d'échéance est à un mois.

Merci

Re: Agent relance

MessagePublié: 26 Avr 2012 à 13:04
par roubech
tu peux ajouter un niveau de catégorie dans ta vue avec les lecteurs et parcourir ta vue avec un NotesViewNavigator
et, pour chaque destinataire, récupérer la liste des docs et générer le mail

Re: Agent relance

MessagePublié: 26 Avr 2012 à 13:47
par DomNotes
Merci pour la réponse.
J'ai ajouter une colonne catégorisée par lecteurs dans ma vue et la je vais aller voir le help par rapport à NotesViewNavigator car je ne l'ai jamais utilisé . Je dois utiliser quelle méthode de cette classe?

Re: Agent relance

MessagePublié: 26 Avr 2012 à 15:09
par DomNotes
J'ai créer ce bout de code en utilisant la classe notesviewNavigator.
Comment est ce que je peux créer un fichier excel pour chaque catégorie pour l'envoyé par mail à " cat$ " valeur de la catégorie.

Code : Tout sélectionner
Dim nav As NotesViewNavigator
   Dim nav2 As NotesViewNavigator
   Dim entry As NotesViewEntry
   
   
   Set db=sess.currentdatabase
   Set view=db.getview("(Export)")

      
   Set nav = view.CreateViewNav()
   Messagebox nav.Count,, "Number of entries in view"
   
   
   Set entry = nav.GetFirst()
   While Not(entry Is Nothing)
      If entry.IsCategory Then
         
         If Not Isempty(entry.ColumnValues) Then
            cat$ = entry.ColumnValues(0) 'nom de la catégorie et adresse du destinataire du mail
            
            Set nav2 = view.CreateViewNavFromCategory(cat$)
            Messagebox nav2.Count & " entries",, cat$
            
            
         End If
      End If
      Set entry = nav.GetNext(entry)

Re: Agent relance

MessagePublié: 26 Avr 2012 à 22:13
par roubech
à partir d'une NotesDocumentCollection, tu dois pouvoir générer un une liste de liens doc directement dans un mail
sinon, tu tu veux passer par un fichier, dans la rubrique trucs et astuces, tu devrais trouver plusieurs exemples de génération de fichier texte à plat, en donnant l'extension .csv au fichier, il s'ouvrira avec Excel ...

Re: Agent relance

MessagePublié: 27 Avr 2012 à 12:34
par DomNotes
ok,

est ce qu'il y'a moyen de supprimer la colonne catégorisée qui affiche les lecteurs (1ere colonne) au moment de l'export de la vue.

Re: Agent relance

MessagePublié: 27 Avr 2012 à 12:36
par roubech
ça dépend de comment tu as réalisé cet export

Re: Agent relance

MessagePublié: 27 Avr 2012 à 13:14
par DomNotes
Le code est le suivant,
J'ai encore quelque problème avec ce code, quand il s'agit des document de la même catégorie il marche très bien et dès que j'ajoute des document avec une autre catégorie il plante.

Merci pour ton aide

Code : Tout sélectionner
Sub Initialize
   Dim sess As New notessession
   Dim db As notesdatabase
   Dim view As notesview
   Dim doc As notesdocument
   Dim config As notesdocument
   Dim rtitem As notesrichtextitem
   Dim Destinataires() As String
   Dim nav As NotesViewNavigator
   Dim nav2 As NotesViewNavigator
   Dim entry As NotesViewEntry
   Dim valF As NotesViewEntry
   Dim valL As NotesViewEntry
   
   Set db=sess.currentdatabase
   Set view=db.getview("(Export)")
   Set Config = db.GetProfileDocument("Config")
   
   
   Forall x In view.columns     'export des titres de colonnes
      If titre="" Then
         titre=x.title
      Else
         titre= titre +";" +x.title
      End If
   End Forall
   Dim fileNum As Integer
   fileNum% = Freefile()
   jour=Evaluate(|@replacesubstring(@text(@today);"/";"-")|)
   nomfichier="Export du "+jour(0)+".csv" ' Attribuer un nom au fichier export
   
   
   Set nav = view.CreateViewNav()
   Messagebox nav.Count,, "Number of entries in view"
   
   
   Set entry = nav.GetFirst()
   While Not(entry Is Nothing)
      If entry.IsCategory Then
         
         If Not Isempty(entry.ColumnValues) Then
            cat$ = entry.ColumnValues(0) 'nom de la catégorie et adresse du destinataire du mail
            
            
            
            Set nav2 = view.CreateViewNavFromCategory(cat$)
            
            Open nomfichier For Output As fileNum%
            Print #filenum%, titre
            Messagebox nav2.Count & " entries",, cat$
            
            Set valF = nav2.getfirst
            
            Do Until valF Is Nothing
               
               valcol = valF.columnvalues
               valeur=atimplode(valcol, ";")
               Print #fileNum%, valeur
               
               
               Set valF = nav2.getnext(valF)
            Loop
            
            
         End If
         
         
         
      End If
      Set entry = nav.GetNext(entry)
   Wend
   
   Close fileNum%
   pathfile=Curdir+"\"+nomfichier
   destinataire = Config.Resp1(0)        'Récupérer les noms des destinataires du document de paramètrage
   Set memo = New NotesDocument( db )
   Set body = New NotesRichTextItem( memo, "Body" )
   memo.Subject = "Résultat du : "+jour(0)
   memo.sendto=destinataire
   
   Call Body.Appendtext("Bonjour,")
   Call Body.AddNewLine(1)
   Call Body.AddNewLine(1)
   Call Body.Appendtext("Veuillez trouver ci-dessous le fichier export du "+jour(0))
   
   Set rtitem= New notesrichtextitem(Memo, "export")
   pathfile=Curdir+"\"+nomfichier
   Call rtitem.Embedobject( EMBED_ATTACHMENT, "", pathfile)   'Rattacher le fichier export dans le mail
   
   memo.Send(False)
End Sub


la fonction at implode :
Code : Tout sélectionner
Function atImplode(s,  div As String) As String
   If Isarray(s) Then
      Dim i%
      atImplode = s(Lbound(s))
      For i = Lbound(s)+1 To Ubound(s)
         atImplode = atImplode & div & s(i)
      Next
   Else
      atImplode = Cstr(s)
   End If
End Function     



ok,

est ce qu'il y'a moyen de supprimer la colonne catégorisée qui affiche les lecteurs (1ere colonne) au moment de l'export de la vue.

Re: Agent relance

MessagePublié: 27 Avr 2012 à 18:20
par roubech
dans la mesure ou tu prend tel quel l'objet columvalues tu récupère toutes les colonnes
il faudrait ne pas prendre la 1ère colonne
le plus simple serait de remplacer l'appel à ta fonction atImplode par la boucle qui concatène les valeurs, en commencant à 1 au lieu de 0
Code : Tout sélectionner
NbCol = view.Columns.Count
valeur = valF.columnvalues(1)
For i=2 To NbCol
  valeur = ";" + valF.columnvalues(i)
Next


sinon, pour info, au lieu de te coder ta fonction atImplode, il existe une fonction join (et split pour explode)

et tant que j'y suis, les evaluate, peuvent parfois être consommateur, donc quand je peux éviter, j'évite. tout comme les espace dans les noms de fichier (selon les OS ...)
et là, tu peux simplement faire
Code : Tout sélectionner
nomfichier = "Export_" & year(today) & "-" & month(today) & "day(today) & ".csv"

tu notera les & au lieu des + car je suis fainéant et j'ai pas le courage de de convertir les nombre en texte avec des cstr(...)

Re: Agent relance

MessagePublié: 27 Avr 2012 à 18:23
par Michael DELIQUE
salut

quelle est le message d'erreur quand ça plante ? ça donne quoi en mode débug ?

et puis tu peut remplacer ton evaluate par un replace natif en lotus script

Re: Agent relance

MessagePublié: 27 Avr 2012 à 20:09
par roubech
bon, c'est pas le sujet, mais comme on est partit là dessu, une autre solution : format( today, "dd-mm-yyyy" )

Re: Agent relance

MessagePublié: 03 Mai 2012 à 14:41
par DomNotes
Bonjour,

Merci beaucoup pour votre aide. j'ai remplacer la fonction atImplode par le code que m'a proposé roubech.J'ai fais qlq adaptations et ça fonctionne supper bien

au lieu de
NbCol = view.Columns.Count
j'ai utilisé
NbCol = view.ColumnCount
j'ai utilisé la fonction replace et j'ai viré le 1er evaluate
Par contre pour le nom de fichier j'ai utilisé evaluate parce que j'avais besoin de la fonction @adjust et je n'arrivais pas à utiliser en LS adjustday de la classe notedatetime.
Mon agent est hebdomadaire et il se lance la fin de la semaine et moi je veux utiliser la date du 1er jour de la semaine dans le nom du fichier. exemple pour cette semaine "export_du_30-04-12".