afficher une liste des vues existantes

Publié:
31 Oct 2003 à 09:52
par _ledude_
Bonjour,j'aimerais, dans Notes, dans un champ liste de dialogue afficher une liste des vues disponibles dans la base.Est ce possible?MerciLeDude
Re: afficher une liste des vues existantes

Publié:
31 Oct 2003 à 10:43
par Raziel
Off course et c'est même assez facile...Pour cela il faut passer par du LS.Tu utilise la méthodes views de la classe notesdatabase. Cette m"thode te retourne un tableau contenant la liste des vues de la base.Ne te reste plus ensuite qu'à remplir ton champ en boulant sur le tableau.
Re: afficher une liste des vues existantes

Publié:
31 Oct 2003 à 12:40
par Stephane Maillard
Bonjour,Oui, il suffit de récupérer le champs $TITLE dans la structure.Voici un exemple qui liste les vues de la base en cours pour exporté les sous excel. Vous trouverez ce qu'il vous dans la première partie du code :Sub Initialize Dim Session As New NotesSession Dim db As NotesDatabase Dim sourceview As NotesView Dim sourcedoc As NotesDocument Dim dataview As NotesView Dim dc As NotesDocumentCollection Dim datadoc As NotesDocument Dim maxcols As Integer Dim WS As New Notesuiworkspace Dim ViewString As String Dim Scope As String Dim GetField As Variant Dim C As NotesViewColumn Dim FieldName As String Dim K As Integer Dim N As Integer Dim xlApp As Variant Dim xlsheet As Variant Dim rows As Integer Dim cols As Integer Dim nitem As NotesItem Dim entry As NotesViewEntry Dim vwNav As NotesViewNavigator Dim ShowView() As Variant Dim i As Integer Dim VList As Variant Dim ColVals As Variant '***** Vous pouvez modifier le code pour qu'il fasse appel à une autre base dedocument Set db = session.CurrentDatabase'****** Le code ci-dessous vous permet de récupérer les vues Vlist= db.views ' Récupère les vue de la base K=Ubound(Vlist) ' Récupère le nombre de vue Redim Preserve ShowView(K) N=-1 For i = 0 To K If Len(Vlist(i).Name) >0 Then FieldName=Trim(Vlist(i).Name) If Mid(Fieldname,1,1) <>"(" Then ' On n'affiche pas les vues caché N=N+1 ShowView(N) = FieldName End If End If Next i Redim Preserve ShowView(N) ' Trie les vues par ordre alphabétique For i=0 To N For K=i To N If ShowView(i) > ShowView(k) Then FieldName=ShowView(i) ShowView(i) = ShowView(k) ShowView(k)=FieldName End If Next k Next i'******** Fin du code pour les vues viewstring= ws.Prompt(PROMPT_OKCANCELLIST,"Liste des vues","Choisissez unevue","",ShowView ) If Len(viewstring)=0 Then Exit Sub Set dataview = db.getview(ViewString) ' Ouvre la vue Set vwnav= dataview.createViewnav() rows = 1 cols = 1 maxcols=dataview.ColumnCount ' Récupère le nombre de colonne Set xlApp = CreateObject("Excel.Application")' Lance Excel xlApp.StatusBar = "Création du tableau. Veuillez patienter..." xlApp.Visible = True xlApp.Workbooks.Add xlApp.ReferenceStyle = 2 Set xlsheet = xlApp.Workbooks(1).Worksheets(1) ' On prend la premièrefeuille du classeur ' On met le titre de la vue xlsheet.Cells(rows,cols).Value ="Vue : " + ViewString + ", de la base : " +db.title +", extraction du : " + Format(Now,"mm/dd/yyyy HH:MM") xlApp.StatusBar = "Création des entêtes de colonnes. Veuillez patienter..." rows=2 ' On commence à la deuxième ligne For K=1 To maxcols Set c=dataview.columns(K-1) xlsheet.Cells(rows,cols).Value = c.title cols = cols + 1 Next K Set entry=vwnav.GetFirstDocument rows=3 ' On se place sur la troisième ligne Do While Not (entry Is Nothing) For cols=1 To maxcols colvals=entry.ColumnValues(cols-1) scope=Typename(colvals) Select Case scope Case "STRING" xlsheet.Cells(rows,cols).Value ="'" + colvals Case Else xlsheet.Cells(rows,cols).Value = colvals End Select Next cols xlApp.StatusBar = "Importation des données - Document " & rows-1 '& " sur" & dc.count & "." rows=rows+1 Set entry = vwnav.getnextdocument(entry) Loop xlApp.Rows("1:1").Select xlApp.Selection.Font.Bold = True xlApp.Selection.Font.Underline = True xlApp.Range(xlsheet.Cells(2,1), xlsheet.Cells(rows,maxcols)).Select xlApp.Selection.Font.Name = "Arial" xlApp.Selection.Font.Size = 9 xlApp.Selection.Columns.AutoFit With xlApp.Worksheets(1) .PageSetup.Orientation = 2 .PageSetup.centerheader = "Rapport" .Pagesetup.RightFooter = "Page &P" & Chr$(13) & "Date : &D" .Pagesetup.CenterFooter = "" End With xlApp.ReferenceStyle = 1 xlApp.Range("A1").Select xlApp.StatusBar = "L'importation des données de Lotus Notes est terminé." '***** Vous pouvez activer la ligne ci-dessous si vous voulez enregistrerle document en automatique 'xlapp.ActiveWorkbook.saveas "C:\Vue" + Trim(Format(Now,"yyy")) ' Sauve ledocument dataview.clear Set xlapp=Nothing ' Stop l'automation excel Set db=NothingEnd Sub[%sig%]
Re: afficher une liste des vues existantes

Publié:
31 Oct 2003 à 12:46
par _ledude_
Merci,je n'y avait effectivement pas pensé...sinon on m'a donné aussi une autre solution :Créer une nouvelle vue "Vues", qui sélectionne tous les docs. Une seule colonne avec comme formule $TITLE. Dans la procédure Initialize du masque placer ce code : Dim session As New NotesSession With session.CurrentDatabase With .GetDocumentByUNID(.GetView("Vues").UniversalID) .~$FormulaClass = "8" .Save True, False End With End WithPuis dans le champ en question afficher la vue Vues.Mais ça implique de reconstruire l'index de la vue pour chaque utilisation...
Re: afficher une liste des vues existantes

Publié:
31 Oct 2003 à 12:48
par Raziel
Un peu compliquer pour ce que l'on veux faire... non ?Ne pourrais t'on tout simplement écrite

im Session As New notessessionDim ws As New notesuiworkspaceDim db As NotesDatabaseDim UiDoc As NotesuiDocumentDim AllView As notesitem Set UiDoc = ws.currentdocumentset db = session.currentdatabaseUiDoc.Document.AllView = ""Set AllView = UiDoc.document.getfirstitem("AllView") Forall View In db.views Call AllView.AppendToTextList(View.name)End ForallCall UiDoc.refresh
Re: afficher une liste des vues existantes

Publié:
31 Oct 2003 à 13:14
par Stephane Maillard
Bonjour,Oui, mais j'ai pas eu le temps de regarder plus avant.[%sig%]