Domino 9 und frühere Versionen > ND9: Entwicklung
Client hängt sich im QuerySave auf
koehlerbv:
Du hast natürlich wahr, Peter - ich habe zu oberflächlich gelesen.
Bernhard
schroederk:
--- Zitat von: Gutierrez am 19.09.18 - 10:32:51 ---Set doc = view.GetNextDocument(doc)
--- Ende Zitat ---
Danke Dir. Das ist mir mittlerweile auch aufgefallen, nachdem ich das zum Testen in einen Agenten gepackt habe.
Da konnte ich dann auch wenigstens den Debugger starten.
Im Agenten funktioniert jetzt alles und übertragen in das QuerySave hängt der Notes Client jetzt auch nicht mehr.
Allerdings war raum immer leer. Offenbar ist das Feld erst nach dem Speichern (durch den RnrMgr?) gepflegt.
Daher dann "RoomToReserve". Das musste vor dem Vergleich noch umkonvertiert werden.
Soweit so gut, aber... sobald auch nur irgendetwas nicht passt... sei es Zugriffsberechtigung auf die DB oder View nicht gefunden oder sonstwas... hängt der Client sich weg.
Ich hab daher noch ein ErrorHandling eingebaut, der im Falle eines Fehlers meinigen Code einfach überspringt.
Natürlich ist es an sich unsinnig, per Schleife durch alle Einträge zu laufen, auch wenn bereits einmal gefunden wurde. Man könnte hier theoretisch eine Suche einbauen oder zumindest die Schleife (vorzeitig) beenden, aber bei maximal 10 Einträgen wird es wohl keinen spürbaren Unterschied machen.
Der aktuelle Code-Schnipsel:
--- Code: --- Dim nam As NotesName
raumname = source.Document.GetItemValue("RoomToReserve")(0)
Set db = session.GetDatabase("server/SRV/Gruppe", "Database.nsf", False)
If Not db.IsOpen Then Call db.Open("", "")
Set view = db.GetView("MyView")
Set doc = view.GetFirstDocument
Set nam = session.createName(raumname)
raum = nam.Abbreviated
While Not (doc Is Nothing)
raum2 = doc.Getitemvalue("RoomName")(0)
Print raum & " = " & raum2
If raum = raum2 Then
mytext = doc.RoomInformation
If source.Document.HasItem("Body") Then
Call source.Document.RemoveItem("Body")
End If
Call source.Document.AppendItemValue("Body", mytext)
Call source.Document.Save(True, False, False)
End If
Set doc = view.GetNextDocument(doc)
Wend
--- Ende Code ---
Peter Klett:
Bei 10 Dokumenten ist das vielleicht nicht das Problem, aber ...
Das Teil funktioniert dann ganz gut und ist für die nächste Änderung die Kopiervorlage, da enthält die Ansicht plötzlich ganz viele Dokumente. Oder Ihr kauft ein Hotel und verwaltet die Räume davon über das gleiche Tool.
Außerdem hat man doch eine gewisse Ehre zu verteidigen, oder?
Zwei Ansätze zur Optimierung:
Wenn die Ansicht nicht geändert werden kann, suche über eine NotesDocumentCollection
--- Code: ---Dim col As NotesDocumentCollection
Set col = db.Search (|Form = "deineMaske" & RoomName = "| & raumname & |" & !@IsAvailable ($CONFLICT)|, Nothing, 0)
If col.Count = 1 Then
Set doc = col.GetGirstDocument
...
End If
--- Ende Code ---
Schneller ist eine Ansicht, erste Spalte enthält RoomName, sortiert. Selbstverständlich ist solch eine Ansicht versteckt, damit nicht irgendjemand die sichtbare Ansicht geändert haben möchte, wodurch die Anwendung hinten herunterfällt
--- Code: ---Set doc = view.GetDocumentByKey (raumname, True)
--- Ende Code ---
Navigation
[0] Themen-Index
[*] Vorherige Sete
Zur normalen Ansicht wechseln