Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: Gernot Hummer am 24.06.10 - 15:12:20

Titel: Gedanken über Lotus Script
Beitrag von: Gernot Hummer am 24.06.10 - 15:12:20
Hallo.

Ich habe mir zuletzt einige Gedanken bezüglich Lotus Script Designansätze gemacht un in dem Zuge für mich ein kleines toolkit erstellt, in dem unter anderem ArrayList, HashMap, Server und Systemobjekte, Logger und ähnliche Dinge soweit möglich abgebildet sind. Ich möchte auch gerne dynamisches handling von UI Events realisieren, jedoch schlägt mir hier ein Generec LSE Error ein Schnippchen.

Hat jemand hier im Forum umfangreiche Erfahrung in Bezug auf OOP (haha) mit Lotus Script der mal einen Blick darauf werfen möchte?
Ich habe das ganze ähnlich wie in Java zu realisieren versucht:

Im QueryOpen einer Maske wird ein DocumentController geladen, der sich aus einem BaseDocumentController ableitet. In diesen DocumentController werden EventListener für Query* und Post* Events registriert. Die Idee dabei wäre, dass sämtlicher Lotus Script code (bis auf den initialen Aufruf des Controllers im QueryOpen) aus den Forms und Views komplett herausgezogen und in Lotus Script Libraries gepackt werden könnte. Ich habe auch einen Testfall erstellt. Der gesamte Code kompiliert einwandfrei. Leider liefert der generische Fehler keine weitere Info und der IBM Support nimmt nur Lotus Script Anfragen bis 15 Zeilen (mE. lächerlich wenn OOP zum Einsatz kommen soll) an. Hat jemand Muse, sich meinen Ansatz mal anzusehen? Der bereits vorhandene Code der vorher genannten Funktionalitäten darf natürlich von diesen Personen (so gewünscht) auch anderweitig genutzt werden.

Grüße,
Gernot.

P.S.: Weil ich schon mal da bin: Hat jemand jemals in Lotus Script einen vernünftigen Singleton designt? ...
Titel: Re: Gedanken über Lotus Script
Beitrag von: eknori am 24.06.10 - 15:16:47
Gucke dir mal an, was Peter Presnell da so mit .dominoframework veranstaltet http://www.bleedyellow.com/blogs/dotdomino/tags/.dominoframework?lang=de_de (http://www.bleedyellow.com/blogs/dotdomino/tags/.dominoframework?lang=de_de)
denke, du kannst dir eine menge Arbeit sparen und musst das Rad nicht neu erfinden.
Auch Thomas Bahn von assono.de hat ein solches Framework anzubieten.  und unter http://www.foconis.de wirst du ein weiteres Framework finden.
Titel: Re: Gedanken über Lotus Script
Beitrag von: eknori am 24.06.10 - 15:22:02
Zum Singleton findest du bei Julian Robichaux was ( mit weiteren verseisen ) http://www.nsftools.com/blog/blog-12-2005.htm#12-26-05
Titel: Re: Gedanken über Lotus Script
Beitrag von: Gernot Hummer am 24.06.10 - 15:36:21
Hab ich mir angesehen, und besonders das Event Handling bezüglich UI gefällt mir *überhaupt* nicht. Die On Event calls sind hart mit funktionen in derselben Bibliothek verdrahtet (bspw: http://www.bleedyellow.com/blogs/dotdomino/entry/oop_part_2_responding_to_an_inviewedit_event17?lang=de):

Code
 Case "NOTESUIVIEW": On Event InViewEdit From Source Call OnInviewEdit

Statt dessen möchte ich einen objektorientierten Ansatz, in dem der DocumentController sich an das UI Event "hängt", und dann beliebige registrierte EventHandler durchläuft, wenn das Event auftritt.

Das erste Problem dabei ist, dass das Event Binding nur direkt mit einer Funktion gemacht werden darf, nicht mit einer Funktion eines untergeordneten Objektes. Folgerichtig geht das hier  bspw. nicht:

Code
On Event InViewEdit From Source Call Me.listeners("InViewEdit").listen()

Infolgedessen habe ich das EventBinding direkt in die Listener gekapselt. Dabei wird das NotesUIDocument über den Controller in die Listener während dem Registrieren mit dem Controller weitergegeben. Damit hätte der Controller im weitesten Sinne sämtliche Listener, und in denen wiederum findet das Event Binding statt. Wird nun die Maske geöffnet, erhalte ich einen lapidaren "Generic LSE Failure".

Warum will ich das so haben?
Weil ich dann Code, der in unterschiedlichen Events benötigt wird, in jeweils einem Listener kapseln kann und durch das Registrieren von n Handlern zu einem Event die lose Kopplung erhöht wird.

Edit:
Ich kenne diese Singleton Variante und habe sie für eine Datenbank global nicht zum Laufen gebracht. Ich kann an keiner Stelle dieses Ding zentral laden und dann in allen Views/Forms/Agenten/usw. verwenden.
Titel: Re: Gedanken über Lotus Script
Beitrag von: Gernot Hummer am 24.06.10 - 20:28:03
Habs doch noch hinbekommen. Jetzt funktioniert der Ansatz.

Falls jemand Interesse hat:
Ich habe im DocumentController das NotesUIDocument als Klassenvariable instanziert und das On Event statement damit gemacht. Das scheint der nicht zu mögen. Wenn mans direkt mit dem Methodenparameter macht, funktionierts.

Also anstatt:

Code
On Event PostOpen From Me.uiDoc Call listen

das hier:

Code
On Event PostOpen From Source Call listen

Die Klassenvariable für das NotesUIDocument hab ich verworfen, weil ich die eigentlich nur in den On Event statements verwendet habe und hier jetzt ja der lokale Parameter der Funktion verwendet wird. Komisch, ich dachte immer, dass die Variablen lediglich Referenzen zu den Objekten beinhalten. Offensichtlich ist das On Event Konstrukt hier ein Spezialfall  ???