Domino 9 und frühere Versionen > ND8: Entwicklung
Probleme mit Property Get/Set
(1/1)
Jürgen Schomann:
Ich habe folgende Klassenbibliothek zum Testen
Class TestArray
Private vValues As Variant
Property Get Values As Variant
Me.Values = Me.vValues
End Property
Property Set Values As Variant
Me.vValues = Me.Values
End Property
Function GetValues As Variant
Me.GetValues = Me.vValues
End Function
End Class
und dazu folgenden Testagenten
Sub Initialize
Dim ob As New TestArray
Dim v As Variant
Dim v0(1) As Variant
Dim s0(1) As String
v0(0) = "v0"
v0(1) = "v1"
s0(0) = "s0"
s0(1) = "s1"
ob.Values = s0
'Test 1 - Fehler
ForAll e1 In ob.Values
MsgBox DataType(e1),,"Test 1" 'Fehlerhafte Datentyp-Werte z. B. 191, 10800 oder auch 0
End ForAll
'Test 2 - OK
v = ob.Values
ForAll e2 In v
MsgBox DataType(e2),,"Test 2 'Datentyp 8 ok
End ForAll
'Test 3 - OK
ForAll e3 In ob.GetValues
MsgBox DataType(e3),,"Test 3 'Datentyp 8 ok
End ForAll
End Sub
Die Properties erwarten als Typ Variant. Wenn ich ein Feld vom Typ String übergebe und über die Property Get in einer ForAll-Schleife die Werte abrufen will, bekomme ich einen Fehler wegen falschem Datentyp.
Ich habe deshalb über DataType den Datentyp ausgegeben und bekomme je nach Speicherkonstellation die unterschiedlichsten Werte wie oben im Kommentar angegeben. Richtig wäre ja der Wert 8 für String.
Dies ist ein stark abgerüsteter Test. In der eigentlichen Anwendung wird je nach Speicherkonstellation oft leer für den Wert ausgegeben oder Lotus Notes stürzt ab.
Wenn ich wie im 'Test 2' vorher den Wert der Property Get einer Variant-Variablen zuweise oder wie im 'Test 3' eine Funktion verwende ist alles richtig. Auch wenn ich statt eines String-Feldes ein Variant-Feld benutze laufen alle 3 Tests richtig.
Was ist die Ursache dafür, dass die Properties Get/Set den Typ Variant nicht richtig behandeln?
Andrew Harder:
Sorry, der Test läuft bei mir (zugegeben unter Notes 9, habe gerade keinen 8.5er zur Hand) einwandfrei :-:
Mal ein Schuss ins blaue... versuche mal diese Klasse
--- Code: ---Class TestArray
Private vValues As Variant
Property Set Values As Variant
Me.vValues = Values
End Property
Property Get Values As Variant
Values = Me.vValues
End Property
Function GetValues As Variant
GetValues = Me.vValues
End Function
End Class
--- Ende Code ---
Jürgen Schomann:
Vielen Dank für deine Antwort. Auch mit dem Vorschlag der geänderten Klasse bleibt es bei dem Fehler. Allerding ist die Referenz über Me doch sicherer, z. B. wenn man auch eine Property/Method mit gleichem Namen wie ein LotusScript-Schlüsselwort hat. Ich habe z. B. eine Klasse mit der Methode Implode, die aber nicht die Anweisung von LotusScript ist. Hier muss ich unbedingt Me.Implode verwenden.
Übrigens meine Teste sind alle unter Notes 8.5. gelaufen. Notes 9 werden ich in der Firma auch mal probieren und berichten.
Jürgen Schomann:
Sorry, aber bei uns läuft es auch unter Notes 9 nicht richtig.
Navigation
[0] Themen-Index
Zur normalen Ansicht wechseln