Documents lus/non lus (suite)
Probleme de documents lus/non lus (suite)
Pour faire suite aux questions ou demandes de quelques visiteurs de ce blog, voici du code permettant de traiter le probleme de perte de synchronisation des marqueurs de non lus dans une boite aux lettres.
...
Le problème existe toujours sous Domino/Notes7 bien qu'un esemble de ses causes aient été corrigées. La perte de synchronisation des non lus peut trouver sa cause dans les suppressions de documents : un utilisateur archive un document non lu depuis son courrier en arrivée vers sa boite d'archives. A la place du document archivé, on trouve, dans le fichier courrier, un talon de suppression. Si le compteur de non lus ne s'est pas décrémenté, il y a fort à parier qu'un des documents non lus soit le talon de suppression (qui n'est pas visible en mode utilisation). Pour remédier au problème, vous pouvez forcer la suppression des talons de suppression en modifiant leur intervalle de purge depuis les paramètres de réplication.
Le code de l'exemple ci-dessous se trouve dans la boite aux lettres de l'utilisateur. Il est exécuté depuis un agent dont les paramètres sont décrits dans l'article Quid de la synchronisation des marqueurs de non lus du mois de juin dernier.
L'agent doit impérativement se trouver dans la boite aux lettres concernée afin que la cible d'exécution 'document non lus de la vue' puisse fonctionner.
L'agent peut très bien être stocké de manière centrale puis exporté dans la boite aux lettres d'un utilisateur particulier. Référez vous à l'article http://10.0.0.139/web/domsphere.nsf/d6plinks/PMOY-6URFJR">Export/Import d'éléments structurels dans une base notesdu 18/10/2006 pour plus d'informations sur cette méthode.
Il doit également être lancé depuis la vue Tous documents, la meilleure méthode est peut être d'ouvrir préalablement cette vue depuis un bouton en langage de formules par exemple.
Code du bouton :
@Command(ileOpenDatabase "":MailFile; "($All)"; ""; ""; "1" );
@command (oolsRunMacro"UnreadDocs");
Code de l'agent UnreadDocs :
Sub Initialize
Dim uiws As New notesuiworkspace
Dim session As New NotesSession
Dim curdb As notesdatabase
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument
Dim agent As notesagent
Set agent=session.CurrentAgent
Set curdb=agent.parent
Set collection = curdb.UnprocessedDocuments
Set doc = collection.GetFirstDocument()
While Not(doc Is Nothing)
Call doc.PutInFolder("UnreadDocs",True )
Set doc = collection.GetNextDocument(doc)
Wend
La suite du code du bouton, dans l'exemple ci-dessous, permet de marquer tous les documents de la base en lus, puis ceux du dossier UnreadDocs en non lus, puis, enfin, de supprimer tous les documents du dossier non lus.
@Command( oolsMarkAllRead );
@Command(iewRefreshFields;
@Command(ileOpenDatabase "":MailFile; "UnreadDocs"; ""; ""; "1" );
@Command(ditSelectAll;
@Command( oolsMarkSelectedUnread );
@Command(iewRefreshFields;
@Command(ileCloseWindow
Puis on pourrait appeler un autre agent pour retirer les documents du dossier UnreadDocs puis éventuellement supprimer ce dossier :
Dim s As New notessession
Dim s as new notessession
Dim maildb As notesdatabase
Set maildb=s.currentdatabase
Dim v As NotesView
Set v=maildb.GetView("UnreadDocs")
Dim maildoc As notesdocument, nextdoc As notesdocument
Set maildoc=v.GetFirstDocument
While Not maildoc Is Nothing
Set nextdoc=v.GetNextDocument(maildoc)
Call maildoc.RemoveFromFolder("UnreadDocs")
Set maildoc=nextdoc
Wend
Call v.Remove
Si l'on dispose de la collection de tous les documents non lus (cf exemple de l'agent UnreadDocs plus haut), la méthode NotesDocumentCollection permet de retirer tous les documents du dosier de manière plus optimisée sur une seule instruction :
Call collection.RemoveAllFromFolder( "UnreadDocs" )
Ce serait plus rapide...
Il existe également un exemple de classe LotusScript de gestion des non lus dans la SandBox http://www-10.lotus.com/ldd/sandbox.nsf/ecc552f1ab6e46e4852568a90055c4cd/50c04aabe223bdcb8525688d007060c7?OpenDocument" target=_Blank>à cet emplacement . Mais le code marche de manière aléatoire en V6-V7 : l'interface utilisateur a des difficultés à prendre en compte la table des non lus lorsqu'elle est modifiée de cette façon. A creuser...
-






