par Raziel » 14 Nov 2003 à 15:12
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
Raziel
L'administration est un lieu ou les gens qui arrivent en retard croisent dans l'escalier ceux qui partent en avance. [Georges Courteline]