Autor Thema: Viewcoloumns automatisch erstellen  (Gelesen 2155 mal)

Offline jr

  • Senior Mitglied
  • ****
  • Beiträge: 260
  • Geschlecht: Männlich
  • Bitte keine eierlegenden Wollmilchsäue...
    • Homepage
Viewcoloumns automatisch erstellen
« am: 10.08.06 - 08:46:13 »
Hallo,

immer wieder habe ich das "Problem", dass eine vorhandene Maske erweitert wird. Normalerweise will dann der Kunde die erweiterten Felder auch in einer Ansicht sehen und dann geht das Einfügen neuer Ansichtenspalten los. Wenn das mehr als nur ein paar Felder sind, kann das recht mühsam werden. Ich habe mir eine kleine Funktion geschrieben, die für jedes Feld einer Maske jeweils eine Spalte in einer View erstellt. Hierbei wird überprüft, ob für dieses Feld bereits eine Spalte existiert. Damit bekomme ich dann auch nur für die neuen Felder neue Spalten.
Wenn die Spalten dann existieren, kann man die Überschriften umbennennen und ggf. die Spaltenformel noch ein bischen anpassen. Für's automatische Umbenennen der Titel habe ich auch noch eine kleine Funktion auf die ich hier aber nicht eingehen möchte.


Sub AddNewColumns(viewName As String, formName As String)
     Dim  session   As New NotesSession
     Dim  view      As NotesView
     Dim  form      As NotesForm
     Dim  column    As NotesViewColumn
     Dim  fieldName As String
     Dim  i         As Integer
     Dim  n         As Integer
     Dim  oldN      As Integer
     Dim  colValue  List As Integer

     Set  view      = session.CurrentDatabase.GetView(viewName)
     Set  form      = session.CurrentDatabase.GetForm(formName)

     If (view.ColumnCount > 0) Then
          For i = 0 To Ubound(view.Columns)
               n         = n + 1
               Set  column    = view.Columns(i)
               If (column.IsField) Then
                    colValue(Ucase(column.ItemName)) = 1
               Else
                    colValue(Ucase(column.Formula)) = 1
               End If
          Next
     End If
     oldN = n

     For i = 0 To Ubound(form.Fields)
          fieldName = form.Fields(i)
          If (Not(Iselement(colValue(Ucase(fieldName))))) Then
               n    = n + 1
               Call view.CreateColumn(n, fieldName, fieldName)
               colValue(Ucase(fieldName)) = 1
          End If
     Next

     Msgbox "Es wurden " & (n - oldN) & " neue Spalten hinzugefügt",,"Info"
End Sub


Narülich sollte man sicherstellen, dass die Ansicht "viewName" und die Maske "formName" auch existieren. Außerdem ist die maximale Spaltenanzahl von Ansichten beschränkt. Wenn es also zu viele Spalten werden, funktioniert es nicht mehr. Felder, die nicht rein als Feld in den Spalten stehen (z. B. @Name([CN]; feldName)) werden nicht erkannt und somit als neue Spalte angelegt.

Aber mir hat die Funktion schon eine Menge Zeit gespart. Wen es also interessiert, kann sich die Funktion ja rauskopieren und selbst einmal ausprobieren.

Viel Spaß damit,

Joachim
« Letzte Änderung: 10.08.06 - 08:49:20 von jr »
Wer in den Fußstapfen eines anderen geht, hinterlässt keine Spuren und kommt nie als Erster an.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz