Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Chris_stoff am 12.11.03 - 16:05:33
-
Hallo zusammen,
Ich bin ziemlich neu in der Notesprogrammierung und habe folgendes Problem:
Ich möchte per Onchange in einem Feld innerhalb einer Maske ein Dokument aus einer Ansicht holen und auf einen bestimmten Wert des Objektes zugreifen, welches ich zur Berechnung des nächsten Feldes brauche.
Per Debug LotusScript sehe ich, dass die Zuweisung des Dokumentes per GetDocumentByKey nicht erfolgreich ist.
Hier das Codefragment:
Sub Onchange(Source As Field)
Dim s As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim viewdoc As NotesDocument
Dim user As String
Dim uit As Single
Dim azpt As Single
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document
Set db = s.CurrentDatabase
Set view = db.GetView("BE_Mitarbeiter")
user = s.UserName
Set viewdoc = view.GetDocumentByKey(user) <-- funktioniert nicht ...
uit = doc.GetItemValue("urlaub_in_tagen")(0)
azpt = viewdoc.GetItemValue("azpt")(0) <-- hier schmiert er ab "Object variable not set"
doc.urlaub_in_stunden = uit * azpt
End Sub
Die Hilfe und meine Literatur bringen mich leider nicht weiter ...
Ich hoffe hier weiß jemand rat.
Vielen Dank im Voraus.
Christof Wasser
ps: Ist es eigentlich sinnvoll Workspace, UIDoc etc. in jedem Feld neu zu deklarieren oder kann ich das auch noch anders lösen? Stichwort Globals ...
-
Klar kannst Du in der globalen Section des Formulars globale Parameter deklarieren, besonders für ein onChange macht das eminent Sinn.
Ansonsten: Vermutlich steht in der Var user der Name nicht in demselben Format wie in Deinem View, deshalb findet er das Dokument nicht. Im Debugger kannst Du ja sehen, was in user drinsteht und vergleiche das dann mit der ersten Kolonne Deines Viehs
-
hmm ...
also der user Eintrag in dem Dokument aus dem View wird über ein Adressdialog (d.h. aus dem Directory) erzeugt. Es ist als Namensfeld gekennzeichnet.
In dem Onchange Ereignis wird der aktive User der Variable user zugewiesen. Beide User werden mit CN und O gespeichert ...
Die beiden Namen sind soweit ich erkennen kann identisch. Ich finde keine Erklärung ... wenn ich mit GetFirstDocument auf den View zugreife erhalte ich ohne Probleme ein Dokument, jedoch nicht das was ich gerne hätte.
Ich habe jetzt mal ein FTSearch davor gesetzt und dann versucht mit GetFirstDocument das richtige Dokument zu bekommen ... jedoch kommt hier die Fehlermeldung: "Notes error: Abfrage ist nicht verständlich". Die DB ist volltextindiziert.
Hier der Code:
Sub Onchange(Source As Field)
Dim s As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim viewdoc As NotesDocument
Dim user As String
Dim uit As Single
Dim azpt As Single
Dim temp As Single
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document
Set db = s.CurrentDatabase
Set view = db.GetView("BE_Mitarbeiter")
user = s.UserName
REM Set viewdoc = view.GetDocumentByKey(user)
temp = view.FTSearch(user, 0) <-- hier kommt die Fehlermeldung
Set viewdoc = view.GetFirstDocument()
uit = doc.GetItemValue("urlaub_in_tagen")(0)
azpt = viewdoc.GetItemValue("azpt")(0)
doc.urlaub_in_stunden = uit * azpt
End Sub
Hat vielleicht noch jemand einen Hinweis??
thx
Christof
-
Bringt zwar nicht wirklich weiter, aber das muss so aussehen:
temp = view.FTSearch(Chr(34) & user & Chr(34), 0)
-
Ist die erste Spalte der View, in der die Usernamen stehen, sortiert?
Falls nicht, geht GetDocumentByKey nicht.
Und immer als 2. Parameter true verwenden !!!
Also:
Set viewdoc = view.GetDocumentByKey(user, True)
Das mit dem FTSearch lass mal sein.
Andreas
-
Genau, das dürfte die Lösung sein, das mit dem Sortieren. Und das FTSearch seinlassen war eigentlich auch meine Meinung, auch wenn ichs nicht ausdrücklich gesagt habe ....
-
Danke für den Tipp mit der Sortierung!
Jetzt funktioniert alles reibungslos...
schönen Gruß
Christof
-
Hy versuch doch mal deinen key so zu füllen.
key = uidoc.FieldGetText( "Feldname" )
Wenn da nicht in der Variabelen drin steht, dann hast Du das uidoc nicht im Zugriff.
Wenn was drin steht aber die Ansicht in der erstn Spalte nicht das gleiche Format hat, oder nicht sortiert wird geht es auch nicht.
CU Lancelot
-
Warum soll er das? Es funktioniert doch seit dem Sortieren