Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: Demian am 25.02.07 - 22:17:09

Titel: Scriptbibliotheken
Beitrag von: Demian am 25.02.07 - 22:17:09
Moin,moin,

befasse mich seit eben mit dem Thema Scriptbibliotheken. Diese bieten m. E. die Funtkion, die Agenten nicht bieten, nämlich eine direkte Parameterübergabe.

Jetzt meine Frage: Ist es möglich auf die Scriptbibliotheken anderer Datenbanken zuzugreifen?

Hintergrund ist, dass ich eine zentrale Datenbank mit den gängigen Scriptbibliotheken füllen würde und die Funktionen aus jeder x-beliebigen Datenbank nutzen könnte.

Gruß
Demian
Titel: Re: Scriptbibliotheken
Beitrag von: koehlerbv am 25.02.07 - 22:27:30
Nein
Titel: Re: Scriptbibliotheken
Beitrag von: Demian am 25.02.07 - 22:29:39
Hallo Bernhard,

naja, werde ich halt eine Datenbank machen, in der ich die Bibliotheken pflege und die geänderte Fassung dann jeweils in die Datenbanken reinkopiere.

Geht nicht zufällig per Agent das Kopieren, oder?

Gruß
Demian
Titel: Re: Scriptbibliotheken
Beitrag von: koehlerbv am 25.02.07 - 23:30:47
Doch, das Kopieren geht auch per Agent. ScriptLibraries sind auch "nur" Notes-Dokumente. Wenn Du aber weit genug in diese Regionen vorgestossen bist, wirst Du feststellen: Das wäre dann auch nicht der Weisheit letzter Schluss,

Da Du jetzt gerade erst ScriptLibraries und Subs und Functions entdeckt hast, kann ich mir nicht vorstellen, dass Du damit schon ein logistisches Problem hast. Halt auf dieser Ebene also erstmal den Ball flach.

Als eine einfache Möglichkeit für den Anfang: Denke mal über %INCLUDE nach - und sorge für eines effizientes Verfahren zur zentralen Speicherung Deiner ScriptLib-Exports. Und immer danach denken: Nach einem derartigen Austausch müssen ggf. alle Design-Elemente rekompiliert werden.

Bernhard
Titel: Re: Scriptbibliotheken
Beitrag von: Demian am 26.02.07 - 00:11:34
Moin Bernhard,

das mit %include hatte ich auch schon überlegt. Da es aber recht komplexer Code mit vielen Deklaration für die einzelnen Funktionen ist, würde ich mit Textdateien oder ähnlichem glaube ich wieder den Überblick verlieren. Finde es ja gerade gut, dass man alles schön übersichtlich in den Bibliotheken ordnen kann (bis auf die Tatsache, dass die Funktionen nicht alphabetisch sortiert sind ::)).

Gruß
Demian
Titel: Re: Scriptbibliotheken
Beitrag von: koehlerbv am 26.02.07 - 00:19:12
Hä? Unübersichtlich? Viele Deklarationen? Andererseits aber gerade erst die Möglichkeit der Parameterübergabe entdeckt? Was nun?
Und man exportiert sowieso erst, wenn man den Code robust in einer Test- oder Life-DB verifiziert hat. Den exportierten Code schaut man sich dann niemals an (zumindest nicht in dem Sinn, den Du verstanden hast).

Bernhard
Titel: Re: Scriptbibliotheken
Beitrag von: Demian am 26.02.07 - 00:30:51
das Prinzip der Parameterübergabe kenne ich aus Office. Dachte in Notes gebe es nur die Agenten, denen man nur auf Umwegen Parameter übergeben kann.

die Bibliothek enthält folgenden Code:


Deklarationen
'==========================================================
'Allgemein
Dim s As NotesSession
Dim db As NotesDatabase
'Namenstrennung
Dim Zaehler As Integer
'==========================================================
'Benutzerdaten für Funktion "Benutzer_Auslesen"
Public Benutzer_Vorname As String
Public Benutzer_Nachname As String
Public Benutzer_UnterschriftsName As String
Public Benutzer_UnterschriftsZusatz As String
Public Benutzer_Straße As String
Public Benutzer_Ort As String
Public Benutzer_Telefon As String
Public Benutzer_EMail As String
Public Benutzer_Telefax As String
Public Benutzer_Abteilung As String
'==========================================================
'Arbeitnehmerdaten für Funktion "Arbeitnehmer_Auslesen"
Public Arbeitnehmer_Anrede As String
Public Arbeitnehmer_Vorname As String
Public Arbeitnehmer_Nachname As String
Public Arbeitnehmer_Straße As String
Public Arbeitnehmer_Ort As String
Public Arbeitnehmer_Austritt As String
Public Arbeitnehmer_PersNr As String
'==========================================================



Initialize
Set s = New NotesSession
Set db = s.CurrentDatabase



Function Arbeitnehmer_Auslesen(Arbeitnehmer As String)
  Dim work As New NotesUIWorkspace   
  Dim uidoc As NotesUIDocument      
  Dim view As NotesView
  Dim doc As NotesDocument   
   
  'Keys auslesen
  Set uidoc = work.CurrentDocument
   
  If uidoc.FieldGetText("Mitarbeiter") = "" Then
    Msgbox "Es wurde kein/e Mitarbeiter/in ausgewählt!",,"Musterfirma"
    Exit Function
  End If
   
  'Arbeitnehmername
  Zaehler = Instr ( 1,uidoc.FieldGetText("Mitarbeiter") , "," )
 Arbeitnehmer_Vorname = Right$(uidoc.FieldGetText("Mitarbeiter"),Lenc(uidoc.FieldGetText("Mitarbeiter")) - Zaehler -1)
 Arbeitnehmer_Nachname= Left$(uidoc.FieldGetText("Mitarbeiter"),Zaehler - 1)
   
 'Anschrift
 Set view = db.GetView("Personal - " & uidoc.FieldGetText("Bereich"))
 Set doc = view.GetFirstDocument

 For i = 1 To view.AllEntries.Count
   If Arbeitnehmer_Vorname = doc.Vorname(0) Then
      If Arbeitnehmer_Nachname = doc.Nachname(0) Then            
            Arbeitnehmer_Anrede = doc.Anrede(0)
            Arbeitnehmer_Straße = doc.Straße(0)            
            Arbeitnehmer_Ort = doc.PLZ(0) &  " " & doc.Ort(0)
            Arbeitnehmer_PersNr = doc.PersNr(0)
            Arbeitnehmer_Austritt = doc.Austritt(0)
            Exit For
         End If
      End If
      Set doc = view.GetNextDocument(doc)
   Next i
End Function



Function Benutzer_Auslesen(Benutzername As String)
   '===============================================================================
   'Dieser Code liest die Benutzerdaten aus seinem Personendokument im NAB
   'und speichert diese in globalen Variablen, die in Prozeduren zur Schriftverkehrerstellung
   'benötigt werden.
   '===============================================================================
   'Allgemein
   Dim Quelldb As NotesDatabase
   Dim Quellview As NotesView
   Dim Quelldoc As NotesDocument      
   '===============================================================================
   'Vorbereitungen   
   Set Quelldb = s.GetDatabase("Server","names.nsf")
   Set Quellview = Quelldb.GetView("_Personen")   
   Set Quelldoc = Quellview.GetFirstDocument
   
   'Benutzername
   Zaehler = Instr(Benutzername," ")   
   Benutzer_Vorname = Mid(Benutzername,4,Zaehler - 4)   
   Zaehler = Instr(Benutzername,"/") - Zaehler - 1   
   Benutzer_Nachname = Mid(Benutzername,Len(Benutzer_Vorname)+5,Zaehler)   
   
   'alle weiteren Benutzerdaten
   For i = 1 To Quellview.AllEntries.Count
      If Quelldoc.Firstname(0) = Benutzer_Vorname Then
         If Quelldoc.LastName(0) = Benutzer_Nachname Then
            Benutzer_Straße = Quelldoc.OfficeStreetaddress(0)
            Benutzer_Ort = Quelldoc.OfficeZIP(0) & " " & Quelldoc.OfficeCity(0)
            Benutzer_Telefon = quelldoc.OfficePhoneNumber(0)
            Benutzer_Telefax = quelldoc.OfficeFAXPhoneNumber(0)
            Benutzer_Email = quelldoc.InternetAddress(0)
            Benutzer_Abteilung = quelldoc.Department(0)
            Benutzer_Unterschriftsname = quelldoc.AltFullNameSort(0)
            Benutzer_UnterschriftsZusatz = quelldoc.JobTitle(0)
            Exit For
         End If
      End If
      Set Quelldoc = Quellview.GetNextDocument(Quelldoc)
   Next i
End Function



so untereinander weggeschrieben wird das ganze unübersichtlich finde ich. Zumal es ja sicher nicht weniger Funktionen werden.

Gruß
Demian

PS: Mit dem Thema Telefon und Telefax muss ich mich noch auseinandersetzen, was das Trennen angeht.
Titel: Re: Scriptbibliotheken
Beitrag von: flaite am 26.02.07 - 08:33:55
Agenten haben natürlichen auch zumindest Möglichkeiten der (sagen wir) Wahrnehmung des dynamischen Kontext.
Aus dem Code gestartete Agenten kann eine NoteID übergeben werden: notesAgent.RunOnServer( [ noteID$ ] )
Webagenten können sogar alle per HTTP-GET oder HTTP-POST übergebenen Parameter roh auslesen
(notesSession.DocumentContext).

Für die Zentralisierung von datenbankübergreifenden Skriptbibliotheken kannst du auch an dem - sagen wir - Build und Deployment Prozess über Schablonen einiges schrauben.
Hint: Eine Datenbank kann auch von mehr als einer Schablone Gestaltungselemente beziehen.
Aber: Es ist sehr schwer kohäsive Skriptbibliotheken zu erstellen und über die Zeit zu pflegen. Versuchs mit einem Review Prozess.
Komplexere Build und Deployment Prozesse über Schablonen UNBEDINGT GUT DOKUMENTIEREN.

Das ist ein Thema, für das es unbedingt EINE VERBINDLICHE, ORGANISATIONSWEITE POLITIK geben muss, auf die sich alle commiten. Ist auf der Ebene des IT-Leiters aufgehängt.

Ich bin in diesem Bereich auch stark mit Java beschäftigt und in Vergleich zu Maven, Ant & Eclipse Deployment find ich Notes Deployment nicht besonders selbstdokumentiert. Deshalb unbedingt gut beschreiben wie das Deployment funktioniert. Und nicht zu kompliziert machen.
Titel: Re: Scriptbibliotheken
Beitrag von: Demian am 26.02.07 - 13:03:44
Hallo Axel,

das mit runonserver war das was ich meinte mit "über Umwege". Bin noch ziemlicher Laie, arbeite erst seit gut nem Jahr überhaupt mit Notes, von daher sind deine anderen Anmerkungen für mich etwas verwirrend. Build und Deployment-Prozess habe ich z. B. noch nie gehört.

Gruß
Demian
Titel: Re: Scriptbibliotheken
Beitrag von: Thomas Schulte am 26.02.07 - 13:18:43
Build und Deployment hat überhaupt nichts mit Notes an und für sich zu tun. Sondern einfach nur mit der Frage wie man eine Anwendung baut (Build) und verteilt (Deployed).

Klassisches Fachchinesisch ....  >:D Sorry Axel aber der musste sein.
Titel: Re: Scriptbibliotheken
Beitrag von: Demian am 26.02.07 - 16:46:24
Dann bin ich ja beruhigt...  ;D

Titel: Re: Scriptbibliotheken
Beitrag von: klaussp am 27.02.07 - 10:09:34

andere Idee, damit die Libs in allen DB's immer gleich sind wäre eine zentrale Schablone dafür zu erstellen, die nur Dinge enthält, die in allen Datenbanken vorkommen. Diese Masterschablone ziehst Du dann über jede neue Schablone erstmal drüber und lässt die Funktionen updaten!
Titel: Re: Scriptbibliotheken
Beitrag von: flaite am 27.02.07 - 10:23:17
Klassisches Fachchinesisch ....  >:D Sorry Axel aber der musste sein.
Das sind plattformübergreifende Fach-Begriffe.
Fachbegriffe erleichtern die Kommunikation, indem ein komplexeres Entity EINEN Bezeichner bekommt.
Ich finde diese Begriffe im Umfeld von Ruby on Rails, .NET und Java. Vermutlich auch in PHP. Ich seh keinen Grund, warum sie nicht jedem, der in diesem Bereich arbeitet, geläufig sein sollten.

Titel: Re: Scriptbibliotheken
Beitrag von: Demian am 27.02.07 - 12:19:56
Aber für jemand wie mich, der sich quasi neben dem Hauptberuf mit PRogrammierung befasst und sich nur mit Büchern und eurer Hilfe sein Wissen aneignet, sind diese Begriffe größtenteils unbekannt (gewesen).

Gruß
Demian
Titel: Re: Scriptbibliotheken
Beitrag von: Axel am 27.02.07 - 12:45:13
Warum lagerst du denn nicht alle deine Scriptbibliotheken, die du in mehreren Datenbanken einsetzen willst nicht in ein Template aus und lässt die DB-Templates wiederum auf diese verweisen?

Axel
Titel: Re: Scriptbibliotheken
Beitrag von: Demian am 27.02.07 - 16:10:16
wie geht das denn genau mit dem Verweisen.
Titel: Re: Scriptbibliotheken
Beitrag von: Axel am 27.02.07 - 16:14:03
Ganz normal wie mit allen Templates.

Du erstellst ein DB mit den Scriptbibliotheken und machst ein Template draus.
Alle weiteren Templates (für deine DBs) basieren auf diesem Template.


Axel
Titel: Re: Scriptbibliotheken
Beitrag von: koehlerbv am 27.02.07 - 16:16:56
Wenn es differenzierter sein soll:
- Du kopierst eine ScriptLib aus dem Template in die neue DB. Dabei wirst Du schon gefragt, ob diese Lib weiterhin auf dem Template XY bestehen soll.
- Du öffnest die Propertybox Deiner Lib und trägst dort den Schablonennamen ein.

Bernhard
Titel: Re: Scriptbibliotheken
Beitrag von: Demian am 27.02.07 - 16:36:45
Achso, mit verweisen war die Gestaltungsaktualisierung gemeint. Naja, ist ja eigentlich das wo ich ursprünglich drauf hinaus wollte, dass man die "Quellbibliothek" nur in einer Datenbank hat und ändern muss.

Vielen Dank für die Tipps.

Gruß
Demian
Titel: Re: Scriptbibliotheken
Beitrag von: flaite am 27.02.07 - 17:19:24
Wenn es differenzierter sein soll:
- Du kopierst eine ScriptLib aus dem Template in die neue DB. Dabei wirst Du schon gefragt, ob diese Lib weiterhin auf dem Template XY bestehen soll.
- Du öffnest die Propertybox Deiner Lib und trägst dort den Schablonennamen ein.
Nochmal: Wenn Datenbanken nur bestimmte Gestaltungselemente aus einem Template beziehen sollen (und darauf läuft Bernhards Lösung hinaus), sollte das gut dokumentiert werden. Weil das kann zu sehr viel Verwirrung in der Zukunft sorgen.
Titel: Re: Scriptbibliotheken
Beitrag von: koehlerbv am 27.02.07 - 17:46:52
Oooooh ja!! Damit kann man sich tolle Effekte einfangen, wenn da zum Beispiel später einer beigeht und eine tolle neue Function einbaut und die aus Element ABC aufruft. 14 Tage später macht einer ein Designupdate (oder schmeisst aus Versehen den Designer an) - und das ach so tolle neue Feature bringt nur noch eine kryptische Use LSX-Fehlermeldung. Dann geht das Gesuche los ...

Bernhard
Titel: Re: Scriptbibliotheken
Beitrag von: Demian am 27.02.07 - 18:05:58
Hallo Axel,

der Vorschlag von dir hätte doch aber zufolge, dass Anpassungen dann in jedem Template gemacht werden müssten, oder nicht? Wenn ich ein Template mit den Bibliotheken habe und daraus ein neues Template erstelle, werden ja etwaige Änderungen nicht mehr in das neue übernommen?

Gruß
Demian
Titel: Re: Scriptbibliotheken
Beitrag von: jo am 27.02.07 - 18:31:29
Hallo Demian,

nein! Du hast ein Template1, das alle Scriptbibliotheken enthält, und daraus werden alle anderen Templates oder Datenbanken versorgt. Wenn du in Template1 die Scriptbibliotheken veränderst, gibt der Designer-Task diese Änderungen an alle Templates und Datenbanken weiter, welche die Gestaltung dieses Design-Elements aus "Template1" übernehmen...

Hat nix mit Template oder Datenbank, nix mit NTF oder NSF zu tun. Das Verhalten ist immer so.

Wenn ein Designelement die Gestaltung aus einer anderen Notes-Datenbank beziehen soll, dann tut es das. Diese Eigenschaft ist, wie Axel geschrieben hat, im Designelement der Zieldatenbank festgelegt, über Copy-Paste hast du sogar die Auswahl, ob du dieses Verhalten willst oder nicht.

Ein Template (ntf) übernimmt das auch aus einem anderen Template.

Jo
Titel: Re: Scriptbibliotheken
Beitrag von: flaite am 27.02.07 - 18:54:19
worum es eigentlich geht (so verstehe ich es zumindest) ist, dass es nicht unbedingt eine 1 zu 1 Beziehung zwischen Template und Datenbank gibt.
Z.B. kann eine Datenbank bestimmte Scriptbibliotheken aus Template1 beziehen, die restlichen Gestaltungselemente aber aus Template2.
Titel: Re: Scriptbibliotheken
Beitrag von: jo am 27.02.07 - 19:02:34
schätze, genau darum gehts, NTF und NSF ist (was die Weitergabe von Designelementen angeht), völlig identisch.

Das Vererben von Design-Elementen erfolgt eh unabhängig davon.

@Demian: klar soweit ?!

Jo
Titel: Re: Scriptbibliotheken
Beitrag von: Axel am 27.02.07 - 20:00:49
Z.B. kann eine Datenbank bestimmte Scriptbibliotheken aus Template1 beziehen, die restlichen Gestaltungselemente aber aus Template2.

Hmmm, Da bin ich mir nicht ganz sicher ob das geht. Mit Bernhard's Vorschlag könnte ich mir's vorstellen. Ich hab sowas noch nicht gemacht und werde so was auch wahrscheinlich machen. Die Gefahr dabei den Überblick zu verlieren und ein heilloses Chaos anzurichten ist mir zu groß.

Allgemein verwendete Bibliotheken in ein Template auf dem dann alle weiteren basieren und das wars. Alles andere kommt dann in die entsprechenden DB-Templates.


Axel
Titel: Re: Scriptbibliotheken
Beitrag von: flaite am 27.02.07 - 20:24:34
Hmmm, Da bin ich mir nicht ganz sicher ob das geht.
Doch. Habs eben ausprobiert. Für sowas wie Scriptbibliotheken kann das auch Sinn machen. Nur muss man das eben gut dokumentieren.
Titel: Re: Scriptbibliotheken
Beitrag von: Demian am 28.02.07 - 07:37:24
Moin,moin,

ui, hat sich ja ganz schön was getan, seit gestern. Dachte sowas ginge nicht, weil er alle Gestaltungselemente updated. Ich würde mich dann wohl an Bernhards Vorschlag halten. Diese Vorgehensweise käme für mich auch nur für 2-3 Scriptbibliotheken in Frage. Unten gezeigte Scriptbibliothek zum Beispiel. Bei sowas wie Masken und dergleichen würde ich das nicht machen, hatte bis jetzt auch noch keine 2 Datenbanken, in denen ich die selben Masken gebrauchen könnte. Und wie schon angesprochen, verliert man dann ja  irgendwann wieder den Überblick. Mir gehts wirklich nur um die Scriptbibliothek, zwecks Schriftverkehr.

Vielen Dank euch allen.

Gruß
Demian