Utilisation de "Customize this view"

Messagepar adx60 » 18 Mars 2008 à 12:18

Bonjour à tous,

depuis le temps que vous m'aidez, c'est à mon tour d'apporter une pierre à l'édifice, donc voici ce qui pourrais éventuellement être une "astuce", merci au modérateur de faire le nécessaire s'il pense l'astuce valable.

Demande Original :
- Document principale avec environs 80 champs
- Avoir une vue permettant de sélectionner facilement les champs que l’on veut afficher (ou exporter vers Excel).
- Ne pas utiliser l’outil de vue privée existant sur lotus, car il est très puissant mais trop complexe a prendre en main.

Pré requis :
- Une vue avec tous les champs que l’on veut pouvoir ajouter a notre vue paramétrable, elle s’appellera ici : « flQueryViewDef » (il s’agit dans ce cas d’un « folder »). Cette vue est de type partagé, mais elle n’est pas destinée à être utilisée directement, donc elle n’apparait dans aucun menu ou liste de vues.
- Un masque de paramétrage (ici « CustomizeView »), destiné à être utilisé dans un DialogBox, ce masque ce compose de :
• Un texte a valeurs multiple : TmpFieldList, il est calculé et sa valeur par défaut est « TmpFieldList »
• Une liste box, de type éditable : SelectedCol, sa valeur par défaut est vide, la liste de choix est calculée avec la formule suivante : « TmpFieldList »
• La liste box est dans un lay-out, pour la présentation en DialogBox.
- La vue que l’on veut pouvoir paramétrer, dans mon cas il s’agit d’un folder vide, il est de type « partagé, privé a la première utilisation ». Ce folder dispose d’une action :

« Customize this view » : voici le code de cette action :

Code : Tout sélectionner

Sub Click(Source As Button)
   Dim Session As New NotesSession
   Dim ws As New NotesUIWorkspace
   Dim db As NotesDatabase
   Dim vwDef As NotesView
   Dim vwQuery As NotesView
   Dim col As NotesViewColumn
   Dim docDlg As NotesDocument
   Dim i As Integer, DelCount As Integer
   Dim FieldList() As Variant
   Dim FieldSelect() As Variant
   Dim ActualCols() As String
   
   ' Init
   Set db = Session.CurrentDatabase
   Set docDlg = New NotesDocument(db)
   Set vwDef = db.GetView("flQueryViewDef")
   Set vwQuery = db.GetView("flQueryView")
   
   ' Check if all is define ...
   If Not vwDef Is Nothing And Not vwQuery Is Nothing Then
      ' Get default list of column
      If vwDef.ColumnCount > 0 Then
         i = 0
         Redim FieldList(vwDef.ColumnCount-1)
         Forall c In vwDef.Columns
            FieldList(i) = c.Title
            i = i +1
         End Forall
      Else
         ' Maybe an error message
         Exit Sub
      End If
      
      ' Get selected list of column
      Redim FieldSelect(1)
      If vwQuery.ColumnCount > 0 Then
         i = 0
         Redim FieldSelect(vwDef.ColumnCount-1)
         Forall c In vwQuery.Columns
            FieldSelect(i) = c.Title
            i = i +1
         End Forall
      End If
      
      docDlg.TmpFieldList = FieldList
      docDlg.SelectedCol = FieldSelect
      If ws.DialogBox ("CustomizeView", True, True, False, False, False, False, "Customize inquiry view", docDlg) Then
         ' Delete column not selected in view ...
         If vwQuery.ColumnCount > 0 Then
            Redim ActualCols(vwQuery.ColumnCount-1)
            Forall c In vwQuery.Columns
               ActualCols(c.Position-1) = c.Title
            End Forall
            DelCount = 0
            For i = 0 To Ubound(ActualCols)
               If Isnull(Arraygetindex(docDlg.SelectedCol,ActualCols(i),0))  Then
                  Call vwQuery.RemoveColumn(i+1-DelCount)
                  DelCount = DelCount + 1
               End If
            Next
         End If
         
         ' Add selected column
         i = 0
         Forall c In vwDef.Columns
            If docDlg.SelectedCol(i) = c.Title Then
               ' Add column if needed
               If Isnull(Arraygetindex(FieldSelect,c.Title,0)) Then
                  Set col = vwQuery.CopyColumn(vwDef.Columns(c.Position-1))
               End If
               i = i +1
               If i > Ubound(docDlg.SelectedCol) Then
                  Exit Forall
               End If
            End If
         End Forall
         
         ws.ViewRebuild
      End If
   End If
   
End Sub


Ne pas oublier ce petit bout de code dans la vue elle-même, si on veut un réaffichage correct lorsque l’on revient sur la vue :
Code : Tout sélectionner
Sub Postopen(Source As Notesuiview)
   Dim ws As New NotesUIWorkspace
   ws.ViewRebuild
End Sub



Cette vue paramétrable fonctionne en client lourd, sous lotus version 7 et 8 (serveur en 7 et client en 7, 8 basic, 8 éclipse).

Cordialement.
Avatar de l’utilisateur
adx60
Posteur habitué
Posteur habitué
 
Message(s) : 245
Inscrit(e) le : 14 Jan 2008 à 10:27
Localisation : Le plessis belleville

Retour vers Traitement sur les vues