Agent relance

Forum destiné aux questions sur le développement : Formules, LotusScript, Java ...

Agent relance

Messagepar DomNotes » 26 Avr 2012 à 12:10

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
Avatar de l’utilisateur
DomNotes
Posteur néophyte
Posteur néophyte
 
Message(s) : 74
Inscrit(e) le : 22 Déc 2004 à 11:08

Re: Agent relance

Messagepar roubech » 26 Avr 2012 à 13:04

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
Avatar de l’utilisateur
roubech
Modérateur
Modérateur
 
Message(s) : 4976
Inscrit(e) le : 01 Fév 2007 à 20:22
Localisation : Lille

Re: Agent relance

Messagepar DomNotes » 26 Avr 2012 à 13:47

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?
Avatar de l’utilisateur
DomNotes
Posteur néophyte
Posteur néophyte
 
Message(s) : 74
Inscrit(e) le : 22 Déc 2004 à 11:08

Re: Agent relance

Messagepar DomNotes » 26 Avr 2012 à 15:09

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)
Avatar de l’utilisateur
DomNotes
Posteur néophyte
Posteur néophyte
 
Message(s) : 74
Inscrit(e) le : 22 Déc 2004 à 11:08

Re: Agent relance

Messagepar roubech » 26 Avr 2012 à 22:13

à 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 ...
Avatar de l’utilisateur
roubech
Modérateur
Modérateur
 
Message(s) : 4976
Inscrit(e) le : 01 Fév 2007 à 20:22
Localisation : Lille

Re: Agent relance

Messagepar DomNotes » 27 Avr 2012 à 12:34

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.
Avatar de l’utilisateur
DomNotes
Posteur néophyte
Posteur néophyte
 
Message(s) : 74
Inscrit(e) le : 22 Déc 2004 à 11:08

Re: Agent relance

Messagepar roubech » 27 Avr 2012 à 12:36

ça dépend de comment tu as réalisé cet export
Avatar de l’utilisateur
roubech
Modérateur
Modérateur
 
Message(s) : 4976
Inscrit(e) le : 01 Fév 2007 à 20:22
Localisation : Lille

Re: Agent relance

Messagepar DomNotes » 27 Avr 2012 à 13:14

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.
Avatar de l’utilisateur
DomNotes
Posteur néophyte
Posteur néophyte
 
Message(s) : 74
Inscrit(e) le : 22 Déc 2004 à 11:08

Re: Agent relance

Messagepar roubech » 27 Avr 2012 à 18:20

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(...)
Avatar de l’utilisateur
roubech
Modérateur
Modérateur
 
Message(s) : 4976
Inscrit(e) le : 01 Fév 2007 à 20:22
Localisation : Lille

Re: Agent relance

Messagepar Michael DELIQUE » 27 Avr 2012 à 18:23

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
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Re: Agent relance

Messagepar roubech » 27 Avr 2012 à 20:09

bon, c'est pas le sujet, mais comme on est partit là dessu, une autre solution : format( today, "dd-mm-yyyy" )
Avatar de l’utilisateur
roubech
Modérateur
Modérateur
 
Message(s) : 4976
Inscrit(e) le : 01 Fév 2007 à 20:22
Localisation : Lille

Re: Agent relance

Messagepar DomNotes » 03 Mai 2012 à 14:41

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".
Avatar de l’utilisateur
DomNotes
Posteur néophyte
Posteur néophyte
 
Message(s) : 74
Inscrit(e) le : 22 Déc 2004 à 11:08


Retour vers Développement