Page 1 sur 1

Suppression d'une liste de valeurs d'un champ liste

MessagePublié: 09 Oct 2012 à 09:16
par DomNotes
Bonjour,
J'ai un document avec deux champs liste :

Liste utilisateurs :contient la liste des utilisateurs à supprimer
Liste groupes : contient la liste des groupe dans lesquels il faut chercher les utilisateurs ci-dessus et les supprimer.
le but c'est de supprimer ces utilisateurs des groupes listés du names.

J'ai déja commencer à faire quelque chose mais je ne sais pas si c'est bon ou pas (le code n'est pas complet)

Code : Tout sélectionner
Dim session As NotesSession   
   Dim db, Nab As NotesDatabase
   Dim doc, config,Grpsdoc As NotesDocument
   Dim membersList As Variant
   Dim grpsList As Variant
   Dim grpsmemberslist As Variant
   Dim grpsView As NotesView
   
   Set Session = New NotesSession
   Set db = session.CurrentDatabase
   Set doc = db.currentdocument
   Set Config = DB.GetProfileDocument("Config")
   Set Nab= Session.GetDatabase(Config.srv_name(0),Config.carnet(0))
   
   Set grpsView = nab.GetView("($VIMGroups)" )
   
   membersList=doc.userslist
   grpsList =doc.groupslist
   
   Set grpsDoc = grpsview.GetallDocumentByKey(grpslist, True)
   If Not Doc Is Nothing Then
      grpsmemberList = grpsdoc.GetItemValue( "Members" )
      
      Forall member In grpsmemberList
         Set lkupdoc = grpsView.GetDocumentByKey( "" , True)
         If lkupdoc Is Nothing Then
            
         Else
            
         End If
      End Forall
      
      
      
   End If


Merci pour votre aide

Re: Suppression d'une liste de valeurs d'un champ liste

MessagePublié: 09 Oct 2012 à 10:25
par Michael DELIQUE
salut

regarde ici => viewforum.php?f=33

tu devrais trouver ton bonheur

Re: Suppression d'une liste de valeurs d'un champ liste

MessagePublié: 09 Oct 2012 à 16:10
par DomNotes
Bonsoir,

Merci pour le lien.
J'ai réussi à faire fonctionner la fonction de suppression d'un membre d'une liste. Le problème que j'ai maintenant c'est que moi j'ai deux listes (groupes et utilisateurs) et le code traite une seule valeur. Il cherche un seul user dans un seul groupe.

Merci d'avance

Re: Suppression d'une liste de valeurs d'un champ liste

MessagePublié: 09 Oct 2012 à 16:22
par Michael DELIQUE
il manque une boucle dans ton code !

Re: Suppression d'une liste de valeurs d'un champ liste

MessagePublié: 10 Oct 2012 à 01:54
par roubech
getAllDocByKey ne prend pas plusieurs valeur d'une clé (au mieux il prend des clé multiple, mais basé sur plusieurs colonnes ...)
moi je verrai plutot un truc du genre

Code : Tout sélectionner
forall groupName in GroupList
  set docGroup = viewGroup.getDocumentByKey(groupName, true)
  if not docGroup is nothing then
    needSave = false
    forall userName in UserList
      Set Item = DocGroupe.GetFirstItem("Members")
      if Item.Contains(usreName) then
        arrTmp = ArrayReplace(docGroup.Members, userName, "")
        call docGroup.replaceItemValue("Members", arrTmp)
        needSave = true
      end if
    next
    if needSave then call docGroup.save
  end if
next

Re: Suppression d'une liste de valeurs d'un champ liste

MessagePublié: 12 Oct 2012 à 09:26
par DomNotes
Bonjour,
Merci Roubech pour ton code, ça fonctionne super bien après qlq modifs.
Je reviens vers vous car j'ai rencontré un autre problème.
Certains nom que je veux supprimer dans le carnet d'adresse sont au format [CN] (nom prénom) donc quand je lance la recherche il ne le trouve pas. Il va faloir que je fasse une recherche sur tous les types de nom Abbreviate,CN, et canonical.
malgré que j'ai déclaré Membername en tant que NotesName il ne le formate pas au 3 format et du coup il ne trouve pas la valeur et ne la supprime pas

Merci d'avance

Code : Tout sélectionner
      

        Dim item As NotesItem
   Dim nmUser As NotesName
   Dim arrtmp As Variant
   Dim Membername As NotesName
   
Set viewGroup = nab.GetView("($VIMGroups)" )  'Vue à parcourir dans le names
   
   UserList=doc.userslist
   GroupList =doc.groupslist
   DtDebut=Cstr(Now)     'Date et heure de début de traiment

Set docGroup = viewGroup.getDocumentByKey(groupName, True)
      If Not docGroup Is Nothing Then
         needSave = False
         Forall userName In UserList
            Set nmUser = New NotesName(Trim(userName))
            Set Item = DocGroup.GetFirstItem("Members")
            Membervalue = Item.Values
            Forall value In Membervalue
               
               Set Membername = New NotesName(Trim(value))
            'If Item.Contains(usreName) Then
               If Item.Contains(nmUser.Canonical) = True Or Item.Contains(nmUser.Abbreviated) = True Or Item.Contains(nmUser.Common) = True Then
                  
                  If Membername.Canonical = nmUser.Canonical Then
                     arrTmp = Arrayreplace(docGroup.Members, userName, "")
                     Call docGroup.replaceItemValue("Members", arrTmp)
                     needSave = True
                  End If
               End If
            End Forall
         End Forall

Re: Suppression d'une liste de valeurs d'un champ liste

MessagePublié: 12 Oct 2012 à 09:28
par Michael DELIQUE
salut

je te déconseil de faire une recherche sur le common name, car si tu as des homonymes sur 2 OU différentes tu ne pourra pas faire la différence

Re: Suppression d'une liste de valeurs d'un champ liste

MessagePublié: 12 Oct 2012 à 09:41
par DomNotes
Salut,
J'aimerai bien faire une recherche sur le Abbreviate mais j'arrive pas à mettre le nom que je récupère du document groupe à ce format. vu que dans les groupes il y'a des noms au format CN qui ont été saisie et non pas sélectionné du names.
Malgré que je le déclare en tant que "NotesNames" il ne le formate pas.

Re: Suppression d'une liste de valeurs d'un champ liste

MessagePublié: 12 Oct 2012 à 10:01
par Michael DELIQUE
pour ma part voila comment je ferais


Code : Tout sélectionner
Dim lstGroup List As String
   Dim item As NotesItem
   
   Membervalue = DocGroup.getItemValue("Members")
   ForAll value In Membervalue
      If Trim(CStr(Value)) <> "" Then
         Set nmUser = New NotesName( Trim(CStr(Value)))
         lstGroup(nmUser.Canonical) = nmUser.Canonical
         Set nmUser = Nothing
      End If      
   End ForAll
   
   Set nmUser = New NotesName(Trim("User a retirer"))
   
   If IsElement(lstGroup(nmUser.Canonical)) = True Then
      lstGroup(nmUser.Canonical)= ""
   End If
   
   Set nmUser = New NotesName(Trim("User a ajouter"))
   
   If IsElement(lstGroup(nmUser.Canonical)) = False Then
      lstGroup(nmUser.Canonical)= nmUser.Canonical
   End If
   
   Set Item = Doc.getFirstItem("Members")
   If item Is Nothing Then
      Set Item = New NotesItem(DocGroupe,"Members","",NAMES)
   Else
      Item.values = null
   End If
   ForAll value In lstGroupe
      If Trim(CStr(Value)) <> "" Then
         Set nmUser = New NotesName( Trim(CStr(Value)))
         Call item.Appendtotextlist(nmUser.Canonical)
         Set nmUser = Nothing
      End If      
   End ForAll

Re: Suppression d'une liste de valeurs d'un champ liste

MessagePublié: 12 Oct 2012 à 10:25
par DomNotes
Bonjour,
D'après ce que j'ai compris, dans votre code vous traiter une seule liste celle des membervalue (les noms des membres du groupe).
Alors que moi j'ai deux liste listes :
Liste utilisateurs :contient la liste des utilisateurs à supprimer
Liste groupes : contient la liste des groupes dans lesquels il faut chercher les utilisateurs ci-dessus et les supprimer.
J'ai pas compris aussi pourquoi vous parlez dans cette ligne d'utilisateur à ajouter

Set nmUser = New NotesName(Trim("User a ajouter"))

Cordialement,

Re: Suppression d'une liste de valeurs d'un champ liste

MessagePublié: 12 Oct 2012 à 10:29
par Michael DELIQUE
c'est un code exemple, pour montrer le principe

à toi de l'adapter.

Re: Suppression d'une liste de valeurs d'un champ liste

MessagePublié: 18 Oct 2012 à 15:28
par DomNotes
C'est bon,

Merci pour votre aide