Domino 9 und frühere Versionen > ND6: Entwicklung
Probleme mit GetDocumentByKey
Chris_stoff:
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 ...
Semeaphoros:
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
Chris_stoff:
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
Semeaphoros:
Bringt zwar nicht wirklich weiter, aber das muss so aussehen:
temp = view.FTSearch(Chr(34) & user & Chr(34), 0)
Glombi:
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
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln