Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: HarryB am 03.02.05 - 14:34:15
-
Hallo Forum,
habe mal wieder ein Problem bei der Webentwicklung.
Nachdem ein bestimmtes Dokument eingegeben wurde, muss noch ein Feld berechnet werden. Dies ist ein wenig komplex und nur sinnvoll in einem WebQuerySave Agenten. Der funktioniert jedoch nicht richtig. Das Feld wird zwar gesetzt, aber es ist leer.
Um den Feldinhalt zu berechnen, benutze ich eine Funktion aus einer ScriptLibrary. Ist es grundsätzlich ein Problem, eine ScriptLibrary in einem WebQuerySave Agenten einzubinden? Im Notes Kontext funktioniert das einwandfrei, nur halt nicht im Zusammenhang mit dem Browser und WebQuerySave.
Viielleicht hat da ja jemand ne Idee zu.
Viele Grüße
Harry
-
Hi Harry,
also ich lehne mich mal so weit aus dem Fenster, dass ich sage:
Das Einbinden von LS-Bibliotheken in WQS- oder WQO-Agenten funktioniert astrein.
(Nutze ich selber des Öfteren)
Das Problem muss also wo anders zu finden sein. Kann es ein zeitliches Problem sein? (Wann wird denn das Feld gesetzt?)
Thomas
-
Damit wir wissen, worüber wir reden hier mal der Quellcode des Agenten:
Sub Initialize
Dim ses As New NotesSession
Dim doc As NotesDocument
Set doc = ses.DocumentContext
Dim researcherID As String
Dim isInternal As Integer
If doc.IsNewNote Then
isInternal = (doc.GetItemValue("_isInternalResearcher") = "-1")
researcherID = getResearcherID(isInternal)
Call doc.ReplaceItemValue("$researcherID", researcherID)
End If 'doc.IsNewNote
End Sub
Die Funktion 'getResearcherID' kommt aus der Bibliothek, liefert aber scheinbar einen Leerstring oder aber einen Fehler zurück. Ich habe keine Ahnung wieso, da dieselbe Funktion von Notes aus dem QuerySave eines Dokumentes heraus einwandfrei funktioniert.
Viele Grüße
Harry
-
noch interessanter wäre jetzt die getResearcherID-Funktion zu sehen, um zu prüfen, in welchen Fällen sie "" liefert und warum sie das in deinem Beispiel tut
-
Function getResearcherID(isInternal As Integer) As String
Dim ses As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim v As Variant
Dim tmpResearcherID As String
Set db = ses.CurrentDatabase
If isInternal Then
Set view = db.GetView("($internalResearcherIDs)")
tmpResearcherID = "in"
Else 'isInternal
Set view = db.GetView("($externalResearcherIDs)")
tmpResearcherID = "ex"
End If 'isInternal
Call view.Refresh
Set doc = view.GetFirstDocument
If Not (doc Is Nothing) Then
v = doc.GetItemValue("$researcherID")
tmpResearcherID = tmpResearcherID + Format$(Clng(Right(v(0),8)) + 1, "00000000")
Else
tmpResearcherID = tmpResearcherID + Format$(1, "00000000")
End If 'Not (doc Is Nothing)
getResearcherID = tmpResearcherID
End Function
Wie gesagt, bei einem Aufruf direkt aus Notes heraus kein Thema.
Die beiden Views sind jeweils absteigend sortiert und enthalten in der ersten Spalte die bereits vergebenen IDs. Die IDs sind wie folgt aufgebaut: Suffix ('in' für Intern, 'ex' für Extern) + 8 Stellige Zahl. Zum Beispiel: in00002635
Viele Grüße
Harry
-
Hi,
nur mal so als Vorschlag: Mach Dir doch vor dem Funktionsaufruf mal eine msgbox mit dem Übergabewert in den WQS-Agenten, damit Du siehst, ob überhaupt was übergeben wird.
Thomas
-
Wo wird denn die msgBox im WQS dargestellt? An welcher Stelle meinst du denn, soll ich welche Variable prüfen?
Viele Grüße
Harry
-
Hi,
die msgbox wird an sich nicht dargestellt, sondern der Inhalt in die Serverkonsole geprintet, wenn der Agent auf dem Server läuft.
Und ich meine den Wert, den Du an die Funktion aus der Library übergibst (isInternal).
Evtl. wird ja dort schon nix weitergereicht?
obwohl ... Der boolsche Wert dort sollte in jedem Fall erzeugt werden, gell? ::)
Dann mach doch in die Library-Funktion auch noch mal ein paar msg-boxen, dann siehst Du auf jeden Fall, ob das Dingen überhaupt angezogen wird und läuft.
Thomas
-
Hm, ich bekomme irgendwo einen Type Mismatch, aber ich habe keine Ahnung wo... ???
Viele Grüße
Harry
-
isInternal = (doc.GetItemValue("_isInternalResearcher") = "-1")
Fehlerhafte Zeile entdeckt. Korrekt ist:
isInternal = (doc.GetItemValue("_isInternalResearcher")(0) = "-1")
Viele Grüße
Harry