OK, ich stecke nun mittendrin.
Damit das nun überhaupt noch wer kapiert von was ich rede, hole ich etwas weiter aus:
Wir haben als Aufgabe, Feldänderungen einer Maske in eine History zu schreiben.
Um das zu machen, habe ich
+ alle Feldnamen
+ alle Feldtitel (die ja abweichen können vom Feldnamen, z.B. Titel "Inhalt", Name aber "Sbj1")
+ alle Feldinhalte
jeweils in einem Array.
Um z.B. das Array "Feldinhalte" zu erzeugen, nutze ich eine Function:
Private Function ExtItemValuesToArray(doc As NotesDocument, vFieldList As Variant) As VariantNun sagt Thomas zurecht: Du hast ja da eine ScriptLib, wo Du Felder behandelst, mach doch daraus eine Klasse "Field".
Ein Objekt der Klasse 'Feld' repräsentiert genau ein zu überwachendes Feld aus dem Notesdokument.
D.h., wenn ich drei Felder überwachen will, dann brauche ich drei Objekte. Jedes Objekt kann mir Auskunft darüber
geben, welchen Wert 'sein' Feld hat, welchen es ürsprünglich hatte bzw. worin der Unterschied zwischen den beiden Werten besteht.
Das mache ich auch jetzt dann.
Mein Problem ist jetzt:
Ich muss ja den einzelnen Objekten u.a. Feldinhalte geben.
Bisher mach ich es mir einfach.
Private Function ExtItemValuesToArray(doc As NotesDocument, vFieldList As Variant) As Variant
'**************************************************************************************************
'Purpose: Loops through the provided field list and puts the item values to an Array
'
'In case of RichTextField, it sets a prefix "I_AM_A_RTF" and the last modified date. So we
'are easily able to find out if the array-entry-source was richtext.
'**************************************************************************************************
On Error Goto ERRORHANDLER
Dim item As NotesItem
Dim vItemValues() As Variant
Dim strItemValue As String
Dim i As Integer
'We loop through the field list and set the item values to the HistorySourceArray
Redim vItemValues(Ubound(vFieldList))
For i = 0 To Ubound(vFieldList)
Set item = doc.GetFirstItem( vFieldList(i) )
If item.Type = RICHTEXT Then
vItemValues(i) = "I_AM_A_RTF" & Cstr(item.LastModified)
Else
'--> We find out if the item contains more than one value; if so: we put 'em together in a string
strItemValue = ""
Forall v In item.values
If strItemValue = "" Then
strItemValue = Cstr(v)
Else
strItemValue = strItemValue & " / " & Cstr(v)
End If
End Forall
'<--------------
vItemValues(i) = strItemValue
End If 'item.Type = RICHTEXT Then
Next
ExtItemValuesToArray = vItemValues
EXITSCRIPT:
Exit Function
ERRORHANDLER:
Call AuxErrorHandler("ExtItemValuesToArray")
Resume EXITSCRIPT
End Function
Damit mache ich mir ein Array aus den Feldinhalten eines Dokumentes. Ich sehe dabei auch sofort, ob ein Array-Eintrag aus einem RT-Feld stammt und kann das dann weiterbearbeiten.
Unser Zielanspruch ist aber, mehrere Unterklassen zu haben (FieldText, FieldRTF, etc.).
Wie gebe ich jetzt die Feldinhalte in die Klassen FieldText und FieldRTF?
Ich müsste dann ja im Code abfragen, um was es sich für ein Feld handelt, und dann die entsprechende Klasse erstellen.
Dann habe ich eine Ansammlung an Objekte als Ergebnis: Einige FieldText-Objekte und einige FieldRTF-Objekte (kunterbunt gemischt).
Bisher war die Ausgabe der Reihenfolge in die Historie vorgegeben durch die Reihenfolge im Array. Jetzt muss ich wohl zusätzlich noch einen Zähler mitlaufen lassen um die Reihenfolge zu beizubehalten.
Außerdem blähe ich so den Code auf in dem ich die Objekte erstelle. All das hatte ich mit der Function vermieden.
Fazit:
Mittlerweile sehe ich nicht mehr so ganz den Sinn, eine Field-Klasse zu erstellen um z.B. obengenannte Function abzulösen.
Aber vielleicht kann mir das wer erklären (wenn da jetzt überhaupt noch wer durchsteigt
)
Danke