Autor Thema: Script-Bibliothek einbinden  (Gelesen 2983 mal)

Offline Bille

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Weiblich
  • Ich kam, sah und ... staunte!
Script-Bibliothek einbinden
« am: 22.08.04 - 14:13:22 »
Hallo!

Ich hab eine Frage zu den Script-Bibliotheken.
Muss das Einbinden der Lib mit
Use "Libname"
in jeder Maske bei den Options vorgenommen werden, oder gibt es eine Möglichkeit, dass die Lib für die ganze Datenbank gilt?

Hintergrund:
Ich habe eine Datenbank mit verschiedenen Formularen (= jeweils separate Maske) und möchte nun in jeder dieser Maske vorhandene Funktionenen verwenden.

Außerdem tritt bei mir gerade das Problem auf, dass Notes mir beim Abspeichern meines Codes den Fehler

Illegal parenthesized reference

auswirft. Und zwar in der Zeile, in der ich erstmals auf die Funktion der Lib zugreifen will.
Ich hab mittlerweile schon den Code mit anderen DB's verglichen, wo's prima funktioniert und finde keinen Unterschied.
Im Forum hab ich gelesen, dass der Fehler auftritt, wenn man eine Funktion ohne Call aufruft.

         doc.Name = DbLookup( "kunden.nsf", "KundenlisteHKT", doc.KdNr(0), "Name" )

So müßte es doch eigentlich passen.

Kann mir bitte jemand auf die Sprünge helfen?

Gruß, Bille
Experience is the name
everyone gives to his mistakes.
                                             (Oscar Wilde)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Script-Bibliothek einbinden
« Antwort #1 am: 22.08.04 - 14:34:08 »
Zu Deiner ersten Frage: Ja, Du musst in jedem Designelement, in der Du bestimmte Libs verwenden willst, deren Verwendung mit dem Use-Statement ansagen.

Die Fehlermeldung beim Aufruf Deiner Function kann leider mehrere Ursachen haben.
Entsprechend des Einsatzes bei Dir müsste es unbedingt eine Function sein und keine Sub. Der Call ist nur erforderlich, wenn Du eine Function aufruft, ohne das Ergebnis zu verwerten.
Wurde das entsprechende Design-Element nach Einbinden der ScriptLib (oder nach Änderung der ScriptLib) ebenfalls neu kompiliert ?
Ein Tip (aus meiner Erfahrung): Verwende keine Namen für Functions und Subs, die von Notes bereits selber verwendet werden - das könnte zumindest bei in der Zukunft erscheinenden  Versionen mal zu Problemen führen. Beispiel: Implode gab es bis R5 nur als @function, ab R6 aber auch als LS-Function ...

Bernhard

Offline Bille

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Weiblich
  • Ich kam, sah und ... staunte!
Re:Script-Bibliothek einbinden
« Antwort #2 am: 22.08.04 - 14:52:28 »
Hallo Bernhard,

vielen Dank für die rasche Hilfe.
Deinen Tipp mit der Namensbezeichnung werde ich künftig beherzigen.
Ich hab meine Funktion jetzt einfach mal in DBLookup2 umgetauft.

Kann mein Problem evtl. damit zusammenhängen, dass ich die Funktion aus dem "Exiting"-Ereignis aufrufe?
(Vielleicht macht diese Frage jetzt Null Sinn, aber ich weiß es halt ned besser.)

Sub Exiting(Source As Field)
     
     Dim w As New NotesUIWorkspace
     Dim doc As NotesDocument
     Set doc = w.CurrentDocument.Document          
     doc.Name = DbLookup2( "kunden.nsf", "KundenlisteHKT", doc.KdNr(0), "Name" )
     
End Sub

Bille
Experience is the name
everyone gives to his mistakes.
                                             (Oscar Wilde)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Script-Bibliothek einbinden
« Antwort #3 am: 22.08.04 - 14:58:53 »
Wo hast Du denn das Use "<DeineScriptLib>" zu stehen ?
Wie sieht das mit der Kompilation von ScriptLib und Maske aus (siehe meine Frage im letzten Posting) ?
Kannst Du die DB ohne Dokumente hier (oder direkt an mich per eMail) zur Verfügung stellen ? Das würde einiges erleichtern ;-)

Bernhard

Offline Bille

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Weiblich
  • Ich kam, sah und ... staunte!
Re:Script-Bibliothek einbinden
« Antwort #4 am: 22.08.04 - 15:40:59 »
Das Use "Utils" steht in den Options der Maske.
Müßte doch richtig sein, oder?

Was das Kompilieren angeht. (Danke übrigens für die Erklärung.)
Ich hab in der Lib den Namen abgeändert und neu gespeichert.
Nachdem das nichts brachte, hab ich das ganze nochmals sauber von vorne erfasst.
Also zuerst Lib eingefügt, Use "Utils" eingetragen, im Exiting-Ereignis auf Funktion zugreifen wollen.
Leider wieder dasselbe.

@Bernhard:
Die Datenbank hab ich Dir geschickt. Es eilt auch gar nicht, reicht bis morgen 8 Uhr *haha*
Nein, im Ernst. Pressiert gar ned. Finds total nett, dass Du drüberschaust. Bestimmt hab ich was total simples falsch gemacht.
Danke schon mal vorab!!!

Bille
Experience is the name
everyone gives to his mistakes.
                                             (Oscar Wilde)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Script-Bibliothek einbinden
« Antwort #5 am: 22.08.04 - 15:45:13 »
Bille, danke für das Zusenden der DB. Die Fehlerursache ist eine ganz simple: In den "Globals" Deiner Maske fehlt unter "Options" schlicht und ergreifend das Einbinden Deiner ScriptLibrary.

Mache bitte folgendes:
In Globals - Options fügst Du folgende Zeile ein:
Use "Utils"
Dann speicherst Du Deine Maske (Strg-S oder wie auch immer  ;D)
Dabei wird der kompilierte Code Deiner Lib in die maske eingebunden.
Anschliessend entfernst Du das Hochkomma, mit dem Du derzeit die Zeile mit dem Aufruf der DBLookup2-Function auskommentierst.

By the way - und m.E. ein fundamentaler Ratschlag: Verwende in jedem LS-Modul unter Options unbedingt das Statement
Option Declare
Damit kannst Du keine Variablen oder Modulbezeichner mehr verwenden, die Du nicht vorher deklariert hast. Auch in dem vorliegenden Fall hättest Du dann eine andere Fehlermeldung bekommen - nämlich hätte Dich der Designer zart darauf hingewiesen, dass er DBLookup2 nicht kennt. So hat er versucht, sich selber zu helfen, indem er annahm, dass DBLookup2 ein Variant sei (und bei dem er mangels Deklaration auch nix mit Klammern anfangen konnte).

HTH,
Bernhard

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Script-Bibliothek einbinden
« Antwort #6 am: 22.08.04 - 15:50:53 »
Uips, da hatten wir jetzt ein Parallel-Posting  :)

Das Use "Utils" steht in den Options der Maske.
Müßte doch richtig sein, oder?

In der DB, die Du mirt zugeschickt hast, fehlte genau das "Use". Warum auch immer ... Vielleicht lag es ja auch an der Reihenfolge des Vorgehens, das ich ja in meinem letzten Posting (parallel zu Deinem, wie gesagt) beschrieben habe:
Erst muss die ScriptLib mit Use eingebunden werden und das Modul (was auch immer: Maske, Buhtong, Ansicht, andere ScriptLib usw. usf.) kompiliert werden. Erst danach kann man auf das via Use eingebundene Modul zugreifen (vulgo: Prozeduren daraus verwenden). Vielleicht war das ja die Ursache ...

Einen schönen Restsonntag wünscht

Bernhard

Offline Bille

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Weiblich
  • Ich kam, sah und ... staunte!
Re:Script-Bibliothek einbinden
« Antwort #7 am: 22.08.04 - 15:56:04 »
Bernhard, I'm so sorry!!!

Ich hatte zwar mein Use "Utils" in den Options eingestellt, allerdings nicht unter Global - sondern unter Maske...

Vielen herzlichen Dank!

Und das mit dem Option Declare werde ich berücksichtigen. Ich bin für solche grundlegenden HInweise immer recht dankbar.

Auch noch einen schönen Sonntag - meiner ist jetzt gerettet ;-)

Bille
Experience is the name
everyone gives to his mistakes.
                                             (Oscar Wilde)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Script-Bibliothek einbinden
« Antwort #8 am: 22.08.04 - 16:06:28 »
Bernhard, I'm so sorry!!!

Oh, don't mention it - you're welcome  ;D

Die Sache ist aber auch durchaus geeignet für Fehlinterpretationen. In Masken hast Du dreimal die Options: Global (gilt für alles innerhalb der Maske und ist daher i.d.R. die allererste Wahl für "Use"), Maske (gilt für maskenbezogene Events) und auf Feldebene. Dein Use hätte also auch in den Options des Feldes KdNr funktioniert, nicht jedoch in den Options der Maske.
Du findest aber sicherlich auch Anwendungsmöglichkeiten für die Options der Maske oder der Felder - wenn diese auch meist nur sehr theoretischen Wert haben ... Normalerweise sollten die globalen Options der Maske vollkommen ausreichen.

Bernhard

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz