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