Page 1 sur 1

[Resolu] Agent Archivage depuis une date

MessagePublié: 03 Août 2011 à 14:27
par rko
Bonjour à tous,

Je viens soliciter l'aide d'un développeur

Ma requête est la suivante
Actuellement je suis entrain de préparer la migration Lotus to Exchange (suite à un rachat, et nos acheteurs ont Exchange, je ne peux pas grand chose pour expliquer qu'il faut garder Lotus)

L'archivage Lotus est en place sur mes bases courriers, mais ne marchent pas très bien pour beaucoup de bases, car elles ont héritées depuis des années de plusieurs migration de version.

Je souhaiterais ajouter un agent dans la base, qui peut-être éxécutée manuellement ou à partir d'une ligne commande serveur.
L'objectif du script est de se positionner dans la vue "Tous Documents", de sélectionner tous les mails ou documents avant le 01/09/2011, et de lancer l'archivage de tous ses documents.

L'objectif est d'éviter d'ouvrir toutes les bases courriers (350) et de faire cette tâche manuellement.

Je vous remercie par avance pour votre aide
Rko

MessagePublié: 03 Août 2011 à 14:59
par Raziel
Salut,

rapidement je peux te proposer un truc de ce type :

Dim session As New NotesSession
Dim dbMail As NotesDatabase
Dim dbArch As NotesDatabase
Dim vue As NotesView
Dim doc As NotesDocument
Dim tmp_doc As NotesDocument
Dim dateArchive As New NotesDateTime("01/09/2011")
Dim dateDoc As NotesDateTime
Dim isArchive as boolean

Set dbMail = session.Currentdatabase
Set dbArch = session.Getdatabase("Local ou serveur", "Archive\a_" + dbMail.Filename, false)

If dbArch Is Nothing Then
MsgBox "Base d'archive introuvable"
Exit sub
End If

Set vue = dbMail.Getview("($All)")
Set doc = vue.getfirstdocument
While Not doc Is Nothing
Set dateDoc = New NotesDateTime(Format$(doc.Created, "dd/mm/yyyy"))
If dateArchive.Timedifference(dateDoc) > 0 Then
Call doc.Copytodatabase(dbArch)
isArchive = True
Else
isArchive = false
End If
' Passage au doc suivant
If isArchive Then Set tmp_doc = doc
Set doc = vue.Getnextdocument(doc)
If isArchive Then Call tmp_Doc.Remove(true)
Wend

Y'a possibilité d'améliorer le code notamment pour placer les mails archivés dans le bon dossier.

MessagePublié: 03 Août 2011 à 15:14
par rko
Salut !
je te remercie pour ta réponse rapide

Concernant les bases archives, elles existent déjà pour mes users, je souhaiterais donc éviter qu'il m'en créer une nouvelle.

A la base j'ai une politique d'archivage mise en place avec une "Policy" et un paramètre d'archivage

Oui je souhaite qu'il archive en mettant le mail dans le bon dossier aussi

Merci encore pour ton aide
Raffi

MessagePublié: 03 Août 2011 à 15:28
par Raziel
Je viens de modifier mon code. Alors ce qu'il fait :
1. Récupère le/les profils d'archive pour le user.
2. Si plusieurs profile d'archive, demande au user de sélectionner le bon profil.
3. Pour chaque dossier, scanne le contenu et déplace le mail dans le bon dossier de l'archive si le critère est remplie
4. Scanne le vue tous documents afin de traiter les mails qui ne sont pas contenu dans un dossier.

Je n'ai pas tester le code. Il recherche la base d'archive en local.

Code :
Dim ws As New NotesUIWorkspace
Dim session As New NotesSession
Dim dbMail As NotesDatabase
Dim dbArch As NotesDatabase
Dim vue As NotesView
Dim doc As NotesDocument
Dim tmp_doc As NotesDocument
Dim dateArchive As New NotesDateTime("01/09/2011")
Dim dateDoc As NotesDateTime
Dim isArchive as Boolean

Dim policyList As Variant
Dim pathArchiveMail As Variant

Set dbMail = session.Currentdatabase

' Récupération des profils d'archivages
policyList = dbMail.ArchiveDestinations

If policyList(0) = "" Then
MsgBox "Vous ne possédez pas de profil d'archivage"
Exit Sub
End If

If UBound(policyList) = 0 Then
pathArchiveMail = dbMail.GetArchivePath(policyList(0))
Else
pathArchiveMail = ws.Prompt(PROMPT_OKCANCELLIST, "Sélection du profil d'archivage", "Sélectionnez le profil d'archivage que vous souhaitez récupérer", "", policyList)

If pathArchiveMail = "" Then
MsgBox "Veuillez sélectionner le profil d'archivage à récupérer"
Exit Sub
End If

pathArchiveMail = dbMail.GetArchivePath(pathArchiveMail)
End If

Set dbArch = session.Getdatabase("Local ou serveur", pathArchiveMail, false)

If dbArch Is Nothing Then
MsgBox "Base d'archive introuvable"
Exit sub
End If

' On boucle sur tous les dossiers de la base source afin de positionner les mails dans le bon dossier de la base d'archive
ForAll dossier In dbMail.Views
If dossier.isFolder Then
Set doc = dossier.getfirstdocument
While Not doc Is nothing
Set dateDoc = New NotesDateTime(Format$(doc.Created, "dd/mm/yyyy"))
If dateArchive.Timedifference(dateDoc) > 0 Then
Call doc.Copytodatabase(dbArch)
Call doc.Putinfolder(dossier.name, True)
isArchive = True
Else
isArchive = False
End If
' Passage au doc suivant
If isArchive Then Set tmp_doc = doc
Set doc = vue.Getnextdocument(doc)
If isArchive Then Call tmp_Doc.Remove(True)
Wend
End If
End ForAll

Set vue = dbMail.Getview("($All)")
Set doc = vue.getfirstdocument
While Not doc Is Nothing
Set dateDoc = New NotesDateTime(Format$(doc.Created, "dd/mm/yyyy"))
If dateArchive.Timedifference(dateDoc) > 0 Then
Call doc.Copytodatabase(dbArch)
isArchive = True
Else
isArchive = false
End If
' Passage au doc suivant
If isArchive Then Set tmp_doc = doc
Set doc = vue.Getnextdocument(doc)
If isArchive Then Call tmp_Doc.Remove(true)
Wend

MessagePublié: 03 Août 2011 à 16:34
par rko
Super merci beaucoup je vais tester ça au plus vite, je te tiens au courant !

A+ Good Work !

MessagePublié: 19 Août 2011 à 16:29
par rko
Merci beaucoup pour ton aide mais je vais prendre une petite prestation pour avoir un truc bien qui alimenterais aussi une base journal avec nom de la base, nombre de documents avant / après archivage dans la base courrier !

Je ne suis pas développeur et je galère un peu
A+

MessagePublié: 19 Août 2011 à 16:31
par Raziel
Y'a pas de mal... Dommage que tu sois pas sur Lille... On aurait pû s'en charger... ;-)

MessagePublié: 19 Août 2011 à 16:41
par rko
Salut !
ça peut se faire à distance, tu m'envois le script, je teste si ça marche pas, tu redeveloppe, au mieux je te donne un accès live sur mon serveur ! ou un poste avec designer et une base de test etc... et tu bosses en remote access.

Si tu veux tu peux me faire passer une proposition pour ce script ! je vois après si c'est accepté par mon responsable !

Je viens d'envoyer un mail à un développeur local pour une prestation, avec pour demande les points suivants :

1. Récupére le profil d'archivage pour le user
2. Pour chaque dossier scanne le contenu et déplace le mail dans le bon dossier de l'archive si le critére date est rempli
3. Scanne la vue "tous documents" afin de traiter les mails qui ne sont pas contenu dans un dossier
4. Alimenter une base journal dans laquelle on aurait le nom de la base courrier avec nombre de documents avant et après archivage dans la base, en gros avant d'éxécuter l'archivage l'agent compte le nombre de documents

Pour le point 4 c'est vraiment optionel si trop lourd à faire

Merci

MessagePublié: 22 Août 2011 à 08:18
par Raziel
Salut,

je vois ça avec mon boss.
Je te tiens informé.

MessagePublié: 30 Août 2011 à 16:25
par rko
Je te remercie Raziel, mais j'ai une proposition pour ce développement !
A+

MessagePublié: 30 Août 2011 à 16:25
par Raziel
ok.

MessagePublié: 30 Août 2011 à 16:27
par rko
Je te fournirais Bases Logs + Scripts :-) ça pourra toujours servir

MessagePublié: 30 Août 2011 à 16:29
par Raziel
Cool. Merci. ;-)

MessagePublié: 09 Sep 2011 à 14:30
par rko
Hello Raziel,

C'est ok ma base d'Audit qui comprend 2 agents (Audit et Archivage) est en place et fonctionne à merveille ;-)

Elle intégre un document de configuration dans lequel on stipule
. Le nom du serveur Domino
. La date des mails qui doivent être archivés
. Log ou Archivage
. Le répertoire des bases
. * (pour traiter toutes les bases), oubien nom des bases à indiquer

Un Agent AuditSeul, qui va analyser toutes les bases courriers et log
User, Chemin Base, Taille (Mo), Nombre de document, Date document le plus ancien

Un Agent ArchiveMails, qui va Archiver tous les mails jusqu'à la date indiquée dans le document de configuration et log
User, Chemin Base, Taille (Mo), Nombre de document Avant, Nombre de document Après

Voilà si besoin n'hésite pas à me contacter par MP, je te la fournirais à la fin de la migration vers Exchange, car elle risque d'évoluer un petit peu

A+