Autor Thema: Gedanken über Lotus Script  (Gelesen 2975 mal)

Offline Gernot Hummer

  • Frischling
  • *
  • Beiträge: 7
  • Ich liebe dieses Forum!
Gedanken über Lotus Script
« 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? ...

Offline eknori

  • @Notes Preisträger
  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: Gedanken über Lotus Script
« Antwort #1 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
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.
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline eknori

  • @Notes Preisträger
  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: Gedanken über Lotus Script
« Antwort #2 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
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Gernot Hummer

  • Frischling
  • *
  • Beiträge: 7
  • Ich liebe dieses Forum!
Re: Gedanken über Lotus Script
« Antwort #3 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.
« Letzte Änderung: 24.06.10 - 15:38:20 von Gernot Hummer »

Offline Gernot Hummer

  • Frischling
  • *
  • Beiträge: 7
  • Ich liebe dieses Forum!
Re: Gedanken über Lotus Script
« Antwort #4 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  ???

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz