Das Notes Forum

Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: snore am 03.01.17 - 09:03:02

Titel: Hotspot oder Agent mit LotusScript läuft nur wenn Schablone offen ?!
Beitrag von: snore am 03.01.17 - 09:03:02
Hallo Forum.
ich habe mir in eine Maske einen Hotspot mit einem kleinen Script gebaut, welches das zum Lesen geöffnete Dokument im Backend ändert und aktualisiert.
Das Script läuft sowohl über den Hotspot, als auch testweise über einen Agenten problemlos. Nur wenn ich die Datenbankgestaltung verberge "bewegt" sich bei "Klick" darauf nichts mehr ... ??
-> was ist denn das?  ???
Gruß
snore
Titel: Re: Hotspot oder Agent mit LotusScript läuft nur wenn Schablone offen ?!
Beitrag von: Peter Klett am 03.01.17 - 09:14:42
Das kann eigentlich nur passieren, wenn das übersetzte Script abhanden gekommen ist. Ich würde in der offenen Schablone das Script noch einmal editieren. Beim Speichern der Maske erscheint in der Statusleiste des Designers so etwas wie ein "Script wird kompiliert" o.ä.. Nach Aktualisierung der Datenbank mit der geänderten Schablone sollte es auch ohne offene Gestaltung funktionieren.

Möglicherweise hast Du den Hotspot in die Maske kopiert und das Script danach nicht angefasst.
Titel: Re: Hotspot oder Agent mit LotusScript läuft nur wenn Schablone offen ?!
Beitrag von: eknori (retired) am 03.01.17 - 10:45:15
Ja, das ist ein blödes Problem. Bin ich auch schon reingelaufen. Recompile nützt an der Stelle nicht immer etwas.

Lagere den eigentlichen Code in eine ScriptLib aus. In der Maske referenzierst du auf die Lib und hast in deinem Hotspot nur den Aufruf zu der Methode in der Lib.

Wenn das auch nicht funktioniert, und die Schablone muss unbedingt mit geschlossenem design versehen sein, dann musst du ggfs. eine Mischvariation bauen. Grundsätzlich ist der Code verborgen, einige Elemente sind aber sichtbar. Die Elemente sollten dann wie oben beschrieben nur Referenzen und Aufrufe zu verborgenen Funktionen besitzen.
Ist dann auch bei periodischen Agenten ganz nützlich; wie soll der Endanwender bei verborgenem Design die Ausführungsparameter ändern können.

Wenn es darum geht, IP zu schützen, dann würde ich im klassischen Notes Umfeld zu .lss Dateien greifen, die in der Entwicklungsumgebung liegen. Die werden dynamisch eingebunden.
Dann kann das sonstige design offen sein.
Nachteil. Ein recompile seitens des users ist dann nicht mehr möglich. Aber wozu auch. Ein User hat am Design nichts zu suchen.
Titel: Re: Hotspot oder Agent mit LotusScript läuft nur wenn Schablone offen ?!
Beitrag von: thkn777 am 03.01.17 - 11:36:25
...im klassischen Notes Umfeld zu .lss Dateien greifen, die in der Entwicklungsumgebung liegen.

Das war auch mein erster Gedanke.

Noch ein Tip.
Manchmal gehen Notes Designelemente einfach kaputt. Falls ALLES nichts hilft und Du am verzweifeln bist - erstelle eine komplett neue Maske. KEIN Copy&Paste benutzen im NotesClient! Scripte kann man versuchen, direkt über die Zwischenablage zu kopieren (also in Agenten reingehen, kompletten Quelltext kopieren, neuen Agenten anlegen, Quelltext einfügen). Für ganz paranoide: Zwischenschritt über Notepad. (nicht lachen! Ist eher zum Heulen ...).

Dann nochmal versuchen. Hatte schon Probleme, bei denen es dann wie durch ein Wunder ging.

Viel Glück,
Th.
Titel: Re: Hotspot oder Agent mit LotusScript läuft nur wenn Schablone offen ?!
Beitrag von: eknori (retired) am 03.01.17 - 12:26:38
Es gibt da sehr viele Möglichkeiten für das Verhalten.
Auch sowas http://www.eknori.de/2015-07-16/code-quest/ kann möglich sein.

Wir hatten das mal bei Masken und berechneten Feldern. Durch die Abarbeitungsfolge ( von oben links nach unten rechts ) im Notes lief das dann auf einen Fehler und alles nach dem betroffenen Item ging dann auf die Bretter.

Wenn du wirklich den Code schützen möchtest, dann verwende .LSS, und lasse das Design ansonsten offen. Das erspart jede Menge Arbeit im Support und Dev
Titel: Re: Hotspot oder Agent mit LotusScript läuft nur wenn Schablone offen ?!
Beitrag von: Peter Klett am 03.01.17 - 14:34:16
Wir arbeiten in der Produktion auschließlich mit geschlossenen und wieder geöffneten Schablonen (Gestaltungselemente sind sichtbar, Scripte und Formeln sind verborgen), und haben noch nie ein solches Verhalten gehabt, das nicht zu reparieren gewesen wäre.

Änderungen von Agentenlaufzeiten nehmen wir mit separaten Agenten/Routinen vor, die die Steuerung der periodischen Agenten verändern, ansonsten erfolgt die Steuerung der Agenten eher über Dokumente (wenige universelle Agenten mit längeren Laufzeiten anstatt viele individuelle Agenten mit kurzen Laufzeiten).

Bei Auslagerung von Scripten in externe Dateien muss es eine zuverlässige Archivierung der Dateien geben, zusätzlich zu den Schablonen. Bei verteilt sitzenden Entwicklern, die nicht alle auf die physikalisch gleichen Quelldateien zugreifen, müssen die Dateien irgendwie synchronisiert werden.