Page 1 sur 1

Lire un carnet d'adresses public

MessagePublié: 14 Nov 2003 à 12:36
par Yellow Submarine
Bonjour,Je suis Administrateur Lotus Notes et j'adresse un appel à l'aide.Je voudrais écrire un agent qui ferait :- lire le carnet d'adresses public- dans la vue "Personnes"- sélectionner les documents qui ont "OK" dans la zone "Comment"- écrire ce document dans un autre base qui aurait le même template que le carnet d'adresses publicLa 1ère fois, je ferai touner l'agent sur les documents retenus.Les autres fois, l'agent tournerait lorsque un document sera créé ou modifié.C'est possible d'avoir un squelette de script ?Merci à tous.

Re: Lire un carnet d'adresses public

MessagePublié: 14 Nov 2003 à 13:28
par Raziel
Salut,tu peux essayer un truc de ce genre. Tu créé un agent dans lequel tu met le code suivant :Sub InitializeDim session As New notessessionDim dbCourante As notesdatabaseDim dbCible As notesdatabaseDim docCol As notesdocumentcollectionDim doc As notesdocument Set dbCourante = session.currentdatabaseSet dbCible = session.getdatabase ("mon serveur", "nom de ma base", False)Set docCol = dbCourante.unprocesseddocuments If Not dbCible.IsOpen Then Msgbox "Ouverture de la base cible impossible" Exit SubEnd If Set doc = docCol.getfirstdocumentWhile Not doc Is Nothing If doc.getitemvalue("Comment")(0) = "OK" Then ' On copie le doc dans la base cible Call doc.CopyToDatabase(dbCible) End If ' Passage au doc suivant Set doc = docCol.getnextdocument(doc)Wend End SubCe code copie dans la base cible tous les doc dont le champ Comment est égale à OK.Pour la première exécution, à savoir sur les doc sélectionnés, tu mets les options suivantes pour l'agent :"Lorsque vous le sélectionnez dans le menu actions"et"Les documents sélectionnés"Pour la seconde exécution, en programmé, tu met les options suivantes : "Si des documents ont été crées ou modifiés"

Re: Lire un carnet d'adresses public

MessagePublié: 14 Nov 2003 à 13:29
par Raziel
Petit oubli : L'agent doit se trouver dans le carnet d'adresse public pour lequel tu veux faire une copie des docs.

Re: Lire un carnet d'adresses public

MessagePublié: 14 Nov 2003 à 14:25
par Yellow Submarine
Bonjour Raziel,Merci beaucoup, cela fonctionne.J'espère ne pas abuser, mais est-il possible de modifier le script pour :- en cas de modification du document d'origine tout en gardant "OK", de modifier le document du fichier "cible"- en cas de modification du document d'origine en enlevant "OK", de détruire le document du fichier "cible"- en cas de suppression du document d'origine, de supprimer le document du fichier "cible"Peut-être plus simple => chaque fois détruire le document du fichier cible et de le recréer si il y a "OK"Merci de ton aide.

Re: Lire un carnet d'adresses public

MessagePublié: 14 Nov 2003 à 15:12
par Raziel
Voici une modif du code.En gros, la séquence de traitement est la suivante.Pour chaque nouveau document de la base source (mode de lancement 2) ou pour chaque doc sélectionné (mod de lancement 1), on vérifie s'il y a un doc correspondant dans la base cible. Si oui, on le supprime.Ensuite, si le doc de la base source à le champ Comment égale à OK, on le copie dans la base cible. Dans ce cas, on rajoute dans le document copié un champ nommé RefDocSource est qui contient le UNID du doc source. (c'est grace à ce champ que l'on peut faire le lien).Une fois tous les docs copié, on scan la base cible afin de savoir si tous les docs qu'elle contient sont aussi contenu dans la base source. Si ce n'est pas le cas, on supprime le doc de la base cible.Dans le code que je t'envoi, j'ai dû nottament rajouté la ligne "On Error Resume Next" car pour retrouver le doc source a partir du doc cible (cas un l'on a supprimer un doc dans la base source), j'utilise la méthode getdocumentbyUNID de la classe NotesDatabase. Hors, cette dernière génère une erreur si le doc recherché n'existe pas.Sub Initialize On Error Resume Next Dim session As New notessession Dim dbCourante As notesdatabase Dim dbCible As notesdatabase Dim docCol As notesdocumentcollection Dim docColCible As notesdocumentcollection Dim doc As notesdocument Dim docCible As notesdocument Dim tmpDocCible As notesdocument Set dbCourante = session.currentdatabase Set dbCible = session.getdatabase ("mon serveur", "nom de ma base", False) Set docCol = dbCourante.unprocesseddocuments If Not dbCible.IsOpen Then Msgbox "Ouverture de la base cible impossible" Exit Sub End If ' Traitement de copie des doc dans la base cible Set doc = docCol.getfirstdocument While Not doc Is Nothing ' On regarde si ce doc existe dans la base cible Set docColCible = dbCible.search("RefDocSource='"+doc.UniversalID+"'", Nothing, 0) If docColCible.count <> 0 Then ' on supprime les doc trouvé Call docColCible.removeall(True) End If If doc.getitemvalue("Comment")(0) = "OK" Then ' On copie le doc dans la base cible Set docCible = doc.CopyToDatabase(dbCible) Call docCible.replaceitemvalue("RefDocSource", doc.UniversalID) docCible.save True, True End If ' Passage au doc suivant Set doc = docCol.getnextdocument(doc) Wend ' Traitement de suppression d'un doc dans la base cible s'il n'existe plus dans la base source Set docColCible = dbCible.search("@IsAvailable(RefDocSource)", Nothing, 0) Set docCible = docColCible.getfirstdocument While Not docCible Is Nothing ' On recherche le doc dans la base source Set doc = Nothing Set doc = dbCourante.getdocumentbyUNID (docCible.getitemvalue("RefDocSource")(0)) If doc Is Nothing Then ' Suppression dans la base cible Set tmpDocCible = docCible Set docCible = docColCible.getnextdocument(docCible) Call tmpDocCible.remove (True) Else ' Passage au doc suivant Set docCible = docColCible.getnextdocument(docCible) End If Wend End Sub

Re: Lire un carnet d'adresses public

MessagePublié: 20 Nov 2003 à 11:55
par Yellow Submarine
Bonjour Raziel,Désolé de répondre si tard, mais je viens seulement de l'installer, je vais faire quelques tests.Pour le retard, c'est le client qui veut installer Domino 6.5 ce week-end ... tu vois les tests à faire.Merci beaucoup pour ton aide. Je refais un message après les tests.