Page 1 sur 1

Comparer le contenu de 2 vues dans une même base

MessagePublié: 10 Avr 2012 à 15:57
par Sylvie35
Bonjour à Tous,

N'ayant pas trouvé mon bonheur... je me permets de m'adresser à vous tous.
Dans la même base, je souhaiterai créer un agent pemettant de comparer les documents de 2 vues 1 et 2 et contenant les documents suivants :
Vue1 :
Colonne1(Champ : FicheCode)
A
B
C
D

Vue2 :
Colonne1(Champ : QuaiCorrespondant)
A
A
C
C
C
La première colonne de chaque Vue 1 et 2 doit servir de clé de comparaison (A, B, C, D, ...)
L'agent doit balayer la Vue 1 comparée à la Vue 2 et identifier les valeurs dans la Vue 1 qui n'existent pas dans la Vue 2.
Dans ce cas, il doit m'envoyer un message écran (par mail par la suite) pour chaque document manquant, par exemple ici pour B et D.

En LotusScript, voici le code que je n'arrive pas à faire fonctionner :
Option Public
Sub Initialize
'Agent permettant de contrôler les documents
Dim s As New notessession
Dim db As NotesDatabase
Set db = s.CurrentDatabase

Dim vue1 As notesView
Set vue1 = db.GetView("((VUE1))")
Dim doc1 As NotesDocument
Set doc1 = vue1.GetFirstDocument

Dim vue2 As NotesView
Set vue2 = db.GetView("((VUE2))")
Dim doc2 As NotesDocument

'Tant qu'il y a des documents dans la vue
While Not doc1 Is Nothing

Set doc2 = Vue1.getNextDocument(doc1)

If doc1.FicheCode(0) = doc2.QuaiCorrespondant(0) Then
doc1.remove(True)
End if
MessageBox ("Pas de document aujourd'hui ! " & doc1.FicheCode(0))
Set doc1 = doc2

Wend
End Sub

Quelqu'un a t'il une idée ?
Merci pour vos réponses.
Sylvie35

Re: Comparer le contenu de 2 vues dans une même base

MessagePublié: 10 Avr 2012 à 16:13
par Michael DELIQUE
salut

déjà tu ne boucle pas sur chaque element de ta vue1

ensuite quand tu supprime un document alors que tu parcours une vue il faut le passer dans un notesdocument temporaire faire avancer la boucle d'un tour et ensuite l'effacer sinon ça bug

Re: Comparer le contenu de 2 vues dans une même base

MessagePublié: 10 Avr 2012 à 20:38
par roubech
Tu as beaucoup de documents dans ces vues ?
si non, tu peux récupérer la liste des valeurs de la colonne 1 avec un @DbColumn et idem pour la vue 2
Code : Tout sélectionner
tLkp1 := @Unique(@Dbcolumn( ""; "vue1"; 1 ));
tLkp2 := @Unique(@Dbcolumn( ""; "vue2"; 1 ));
tLst := @Replace( tLkp1; tLkp2; "" );
@Trim( tLst )

Mais attention à la limite des 16 K

Sinon en LS, tu peux aussi passer par des NotesViewNavigator pour ne parcourir la colonne des vues (sans consommer de ressources à ouvrir les docs)