tester l'égalité de 2 listes

Publié:
14 Sep 2012 à 08:27
par isabelle
Bonjour,
Je cherche à tester l'égalité de 2 champs, Liste1 et Liste2, dans un agent lotus script. J'ai fait plusieurs essais mais à chaque fois j'ai une erreur Type mismatch.
mon dernier essai, j'ai essayé d'utiliser des notesItem intermédiaires mais sans succes.
quelqu'un a-t-il une idée ?
Merci
Dim item1 As NotesItem
Set item1 = doc.GetFirstItem( "Liste1" )
Dim item2 As NotesItem
Set item2 = doc.GetFirstItem( "Liste2" )
If Not (item1.values = item2.values) then
....
end if
lorsque je debug, j'e vois la propriété "Values", je pensais qu'on pouvait l'utiliser ...
[-] ITEM1 ["Liste1", 1280, 92, False, False, True,...]
NAME "Liste1"
TYPE 1280
[-] VALUES ["Valeur1",...]
[0] "Valeur1"
[1] "Valeur2"
[2] "Valeur3"
[3] "Valeur4"
[-] ITEM2 ["Liste2", 1280, 92, False, False, True,...]
NAME "Liste2"
TYPE 1280
[-] VALUES ["Valeur1",...]
[0] "Valeur1"
[1] "Valeur2"
[2] "Valeur3"
[3] "Valeur4"
Re: tester l'égalité de 2 listes

Publié:
14 Sep 2012 à 09:32
par Michael DELIQUE
Salut
Item.values renvois un array tu ne peut pas tester qu'un Array = Array avec un code du genre Item.Values = Item.Values. ça marche pas.
il faut tester chaque valeurs
essais avec cette fonction
- Code : Tout sélectionner
Public Function ArrayEgal(wvrArray1 As Variant, wvrArray2 As Variant, nbTaille As Long) As Boolean
REM détermine si 2 tableaux sont égaux
REM nbTaille <1 teste tout le tableau si non teste la tableau jusqu'a la valeur indiqué
Dim nbLBound1 As Long
Dim nbLBound2 As Long
Dim nbUBound1 As Long
Dim nbUBound2 As Long
Dim nbIndex As Long
Dim i As Long
On Error Goto CatchError
ArrayEgal = False
REM controle de la variable tableau
Select Case Datatype(wvrArray1)
Case 8704
rem c'est bien une variable tableau à taille dynamique
If ArrayDim(wvrArray1) > 1 Then
Error 9999,"Seul les tableaux a 1 dimension sont traités"
End If
End Select
REM controle de la variable tableau
Select Case Datatype(wvrArray2)
Case 8704
rem c'est bien une variable tableau à taille dynamique
If ArrayDim(wvrArray2) > 1 Then
Error 9999,"Seul les tableaux a 1 dimension sont traités"
End If
End Select
nbLBound1 = Lbound(wvrArray1)
nbLBound2 = Lbound(wvrArray2)
If Typename(wvrArray1(nbLBound1)) <> Typename(wvrArray2(nbLBound2)) Then
Exit Function
End If
nbUBound1 = Ubound(wvrArray1)
nbUBound2 = Ubound(wvrArray2)
nbIndex = nbUBound1-nbLBound1
If nbTaille < 1 Then
If nbLBound1 <> nbLBound2 Then
Exit Function
End If
If nbUBound1 <> nbUBound2 Then
Exit Function
End If
Else
If Abs(nbTaille) < nbIndex Then
nbIndex = Abs(nbTaille)
End If
End If
Select Case Ucase(Trim(Typename(wvrArray1(i))))
Case "NOTESDOCUMENT","NOTESVIEW"
For i = nbLBound1 To nbIndex
If wvrArray1(i).UniversalID <> wvrArray2(i).UniversalID Then
Exit Function
End If
Next
Case Else
For i = nbLBound1 To nbIndex
If wvrArray1(i) <> wvrArray2(i) Then
Exit Function
End If
Next
End Select
ArrayEgal = True
Exit Function
CatchError:
MsgBox "("+Cstr(GetThreadInfo (1))+" Call by "+Cstr(GetThreadInfo(10))+")"+Chr(10)+"Error " + CStr(Err) + " : "+Chr(10) + CStr(Error)+". "+Chr(10)+"Line # "+Cstr(Erl),16," ERROR !"
ArrayEgal = False
Exit Function
End Function
Public Function ArrayDim(wvrArray As Variant) As Integer
REM renvois le nombre de dimmension d'un array
Dim i As Integer
On Error Goto CatchError
ArrayDim = 0
REM controle de la variable tableau
If Islist(wvrArray) Then
ArrayDim = 1
Exit Function
Elseif Isarray(wvrArray) = False Then
Error 9999, "''wvrArray'' do not containt Array, datatype = "+Cstr(Datatype(wvrArray))
Exit Function
End If
REM détect la fin du tableau
On Error 9 Resume Next
REM si le tableau n'a aucune dimension
On Error 200 Resume Next
While True
i = Ubound(wvrArray,ArrayDim +1)
If Err Then
Exit Function
End If
ArrayDim = ArrayDim +1
Wend
Exit Function
CatchError:
MsgBox "("+Cstr(GetThreadInfo (1))+" Call by "+Cstr(GetThreadInfo(10))+")"+Chr(10)+"Error " + CStr(Err) + " : "+Chr(10) + CStr(Error)+". "+Chr(10)+"Line # "+Cstr(Erl),16," ERROR !"
ArrayDim = 0
Exit Function
End Function
Re: tester l'égalité de 2 listes

Publié:
14 Sep 2012 à 14:17
par Steph_
sinon en formule c'est faisable
c'est un bout de code que j'utilise dans une base ou je cherche les utilisateurs d'une liste qui ne sont pas dans une autre liste
et il y a une liste d'exclusion
list1:=toutlemonde;
list2:=signer;
list3:=exclusion;
reste:=@Unique(@Trim(@Replace(list1;list2;"")));
reslist:=@Unique(@Trim(@Replace(reste;list3;"")));reslist
Re: tester l'égalité de 2 listes

Publié:
14 Sep 2012 à 15:32
par isabelle
merci pour vos réponses.
en fait, je veux vérifier si un champ d'un document est modifié par un traitement. ce champ contient une liste de valeur.
comme solution, je pensais sauvegarder le champ en debut de traitement et ensuite verifier si égalité ou non en fin de traitement.
d'ou ma question pour comparer 2 champs contenant une liste de valeur.
mais peut-etre qu'il a une autre solution pour savoir si un champ à été modifié ....
Re: tester l'égalité de 2 listes

Publié:
14 Sep 2012 à 15:41
par Michael DELIQUE
non pas vraiment d'autre solution que de tester avant et apres
Re: tester l'égalité de 2 listes

Publié:
14 Sep 2012 à 18:30
par roubech
Si c'est juste savoir que c'est différent et pas quelle élément alors tu peux concaténer le tableau avec un join et comparer 2 chaînes de texte
Re: tester l'égalité de 2 listes

Publié:
16 Sep 2012 à 11:23
par Michael DELIQUE
eh pas bete ! j'y aurai pas pensé