Domino 9 und frühere Versionen > Entwicklung
Casts in Lotusscript
flaite:
Ich würds so machen:
--- Code: ---
sd As NotesDocument
Sub cNew ( doc As Variant )
Dim ws As New NotesUIWorkspace
If doc Isa "NotesUIDocument" Then
Messagebox "is a NotesUIDocument"
set sd = doc.Document
Else if doc isA "NotesDocument"
set sd = doc
else
' throw some error if u like 2
End If
print "sdoc.form(0)=" & sdoc.form(0)
End Sub
--- Ende Code ---
Habs aber nicht ausprobiert.
cool mit dem isA. Ist ein Operator und der steht nicht unter der Sektion LotusScript Language Referenz. Ich sollte meine Suchstrategie in der Notes Hilfe ändern. Gut zu wissen.
Natürlich funktioniert overloading nicht. Das war Quatsch.
Je nachdem was du vorhast, kann dir isA weiterhelfen.
Das Sinn deines Vorgehens sehe ich aber auch noch nicht (soll nix heissen).
Von einem größeren alten Projekt refaktoriere ich relativ viel hin zu OO-Code. Nur hinterfrage ich immer stärker, wo und vor allem wie OO in LS Sinn macht und wo und wie nicht.
Es stellt sich in der Praxis an einigen Stellen als wirklich sehr sinnvoll heraus. An anderen aber nicht.
Axel
koehlerbv:
War ein Schmarrn, was ich da erzählt habe - klar, geht natürlich doch mit Variante 1. Man muss halt nur sd richtig deklarieren ::)
Bernhard
eknori:
--- Zitat ---sd As NotesDocument
Sub cNew ( doc As Variant )
Dim ws As New NotesUIWorkspace
If doc Isa "NotesUIDocument" Then
Messagebox "is a NotesUIDocument"
set sd = doc.Document
Else if doc isA "NotesDocument"
set sd = doc
else
' throw some error if u like 2
End If
print "sdoc.form(0)=" & sdoc.form(0)
End Sub
--- Ende Zitat ---
würde aber so nicht funktionieren, da doc vom typ Variant ist ( und deshalb set sd = doc
in die Hose geht ).
OK, gehen wir also davon aus, daß bei allen weiteren Methoden nur Backend verwendet wird, dann kann man Axel's code noch weiter eindampfen
sd As NotesDocument
Sub cNew ( doc As Variant )
set sd = doc.Document
print "sd.form(0)=" & sd.form(0)
End Sub
animate:
also ich halte von dieser Überprüfung, welches Objekt da übergeben wurde, wirklich gar nix.
Wenn Vererbung zu umständlich ist, dann würde ich 3 Methoden verwenden, um das Objekt zu initialisieren, nach dem es mit dem Konstruktor erzeugt wurde.
init()
initWithDoc()
InitWithUiDoc()
an der Stelle im Programm, wo das Objekt erzeugt und initialisiert wird ist hoffentlich bekannt, ob ich ein Document oder UiDocument habe. Dort rufe ich dann die entsprechende Methode auf die wiederum die generelle aufruft.
Alles andere sind für mich Stunts, wie Ulrich so schön gesagt hat, und führen zu bekannten Problemen (z. B. Compiler beschwert sich nicht bei falschen Parametern, miserable Erweiterbarkeit)
oz:
Also prinzipiell ist reflection ja ne feine Sache um Dinge zu generalisieren, aber in LotusScript offensichtlich nur mit "Stunts" möglich.
Mal kurz zur Erklärung warum die ganze Wallung.
Ich habe ein releativ komplexes Formular mit einigen Abhängigkeiten zwischen den zahlreichen Feldern. Ich möchte nun einen Wrapper um dieses Formular bauen wo ich die einzelnen Formularfelder nicht direkt über FieldGetText bzw. GetItemValue hole sondern über Getter Methode in einer Klasse eben. Die Felder sind über Properties gemappt. Korrespondierend soll es Setter Methoden geben mit denen die Felder befüllt werden.
Das ganze Formular beeinhaltet Settings, die einmalig von einem Admin angelegt werden. Also über das UIDocument. Zur laufzweit der Applikation werden eben diese Settings aus dem Backend Dokument augelesen. Nun möchte ich mir eben wieder eine Objektstruktur aufbauen, die aus den ganzen feldern besteht. Da es ja die selben Felder sind, egal ob Front- oder Backenddokument, kam mir die Idee für beide also NotesUIDocument und NotesDocument die gleichen Klassen mit den gleichen Properties zu verweden und sie lediglich anders zu initialisieren.
Die Idee mit dem
init()
initWithDoc()
InitWithUiDoc()
ist ja nicht schlecht, hilf mir aber nihct wenn ich auf die Properties zugreife, weil der Zugriffsmethoden auf Felder für Front- und Backend Dokumente unterschiedlich sind.
Ich möchte das ganze deswegen machen, weil ich soweit es geht den Code an einer Stelle haben möchte und in Events lediglich kleine Schnipsel LotusScript code haben möchte, die in diese Klasse rufen.
Ich werde mir das Ganze nochmal durch den Kopf gehen lassen.
Wenn jemand noch ne Idee hat. Nur zu.
Gruß
Oz
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln