[LS] - Une classe pour les groupes

[LS] - Une classe pour les groupes

Messagepar oguruma » 18 Mars 2005 à 13:44

:evil: étrange... je l'avais posté je crois... et il n'y est plus

Code : Tout sélectionner
Public Class NABGroup
   Private m_session As NotesSession
   Private m_db As NotesDatabase
   Private m_dbNames As NotesDatabase
   Private m_viewGroup As NotesView
   Private m_docGroup As NotesDocument
   Private m_itemMember As NotesItem
   Private m_serverName As String
   Private m_members As Variant
   
       '// Constructeur
   Sub new (groupName As String)
      Set m_session=New NotesSession
      Set m_db=m_session.CurrentDatabase
      m_serverName=m_db.Server
      Set m_dbNames=New NotesDatabase(m_serverName,"names.nsf")
      Set m_viewGroup=m_dbNames.Getview("Groups")
      Set m_docGroup=m_viewGroup.GetDocumentByKey(groupName)
      Set m_itemMember=m_docGroup.GetFirstitem("Members")
      m_members=m_docGroup.Members
   End Sub
   
       '// Vérifie si on a trouvé le groupe
   Property Get isFound As Integer
      If Not m_docGroup Is Nothing Then isFound=True Else isFound=False
   End Property
   
       '// Vérifie si un utilisateur est dans ce groupe
   Public Function isMember(member As String) As Integer
      isMember=m_itemMember.Contains(pCanonicName(member))      
   End Function
   
       '// Ajout d'un membre dans ce groupe
   Public Sub addMember(member As String)
      If Not isMember(member) Then
         Call m_itemMember.AppendToTextList( pCanonicName(member) )         
         Call save
      End If
   End Sub
   
       '// Suppression d'un membre du groupe
   Public Sub deleteMember(member As String)
      If isMember(member) Then pDeleteMember(pCanonicName(member))
      Call save
   End Sub
   
   Public Sub browseMembers()
      Forall m In m_members
         Msgbox m
      End Forall
   End Sub
   
   Public Sub remove()
      Call m_docGroup.Remove(True)
   End Sub
   
       '// procédure de suppression
   Private Sub pDeleteMember(member As String)
      Dim group As Variant   
      Forall m In m_members
         If pCanonicName(m)<>member Then
            Call pAddMemberToArray(group,m)
         End If
      End Forall
      m_docGroup.Members=group
   End Sub
   
       '// procédure d'ajout d'un membre
   Private Sub pAddMemberToArray (group As Variant, m As Variant)
      If Isempty(group) Then
         Redim group(0)
      Else
         Redim Preserve group(Ubound(group)+1)
      End If
      group(Ubound(group))=m
   End Sub
   
       '// Transformation canonique
   Private Function pCanonicName(member As Variant)
      Dim nn As NotesName
      Set nn=New NotesName(member)
      'Msgbox "canonical = " & nn.Canonical
      'Msgbox "abbreviated = " & nn.Abbreviated
      'Msgbox "common = " & nn.Common
      pCanonicName=nn.Canonical
   End Function
   
   Private Function pCommonName(member As Variant)
      Dim nn As NotesName
      Set nn=New NotesName(member)
      pCommonName=nn.Common
   End Function
   
   Private Function pAbbreviatedName(member As Variant)
      Dim nn As NotesName
      Set nn=New NotesName(member)
      pAbbreviatedName=nn.Abbreviated
   End Function
   
   Public Sub save()
      Call m_docGroup.Save(True,False)
   End Sub
   
End Class


à ajouter par exemple une méthode qui renvoie les membres d'un groupe comme

Code : Tout sélectionner
public function getMembers() as variant
     etMembers=m_members
end function


et ensuite exploiter le contenu par un balayage de tableau avec un forall
Bien à vous

http://www.dominoarea.org/oguruma/

Les téléphones PORTABLES dans les TGV y en a MARRRE de ces voyageurs qui ne respectent pas les autres ! ARRET DES PORTABLES SVP - Merci

Fumeurs ! respectez les non fumeurs !!!
Fumeurs ! respectez la loi de février 2007 et les lieux publics !!! (ie. hall de gares)
Avatar de l’utilisateur
oguruma
Super V.I.P.
Super V.I.P.
 
Message(s) : 4086
Inscrit(e) le : 16 Déc 2004 à 08:50
Localisation : LILLE

Messagepar Cyril Niang » 30 Jan 2008 à 15:47

Je me permet de rajouter une méthode permettant de renommer un groupe.

Code : Tout sélectionner

Public Sub renameGroup(newName As String)
   Call m_docGroup.ReplaceItemValue("ListName",newName)
   Call save
End Sub
Cordialement

Image
Cyril Niang
Roi des posts
Roi des posts
 
Message(s) : 719
Inscrit(e) le : 16 Déc 2004 à 11:14
Localisation : Dakar

Messagepar Jérome Deniau » 06 Jan 2009 à 00:09

Je modifierais la ligne suivante

Set m_docGroup=m_viewGroup.GetDocumentByKey(groupName)

par

Set m_docGroup=m_viewGroup.GetDocumentByKey(groupName,true)

dans l'initialize

Pour éviter de récupérer un groupe différent

Exemple
Je rechercher Groupe = "Group"

Si j'ai GroupA
et GroupB uniquement
il me renverra GroupA (ou GroupB) mais pas Group

GetDocumentbykey utilise l'option False par défaut pour la valeur de recherche exacte, donc il faut mieux préciser true...
Jérome Deniau
 


Retour vers NAB