Domino 9 und frühere Versionen > ND6: Entwicklung

Probleme mit GetDocumentByKey

(1/2) > >>

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