Domino 9 und frühere Versionen > Entwicklung
Dokument ersetzen
Freezer:
Hallo!
Folgende Situation:
Ich habe eine Maske zum Erstellen von Dokumenten.
Beim Speichern eines Dokumentes möchte ich abfragen, ob es bereits ein Dokument mit einem bestimmten Feldwert bereits gibt.
Falls nein, wird gespeichert, falls ja, wird der User über eine Messagebox gefragt, ob er das vorhandene Dokumnet überschreiben will, oder nicht. Klickt er ja an, so soll das neue Dokument das alte überschreiben.
Ich wollte das dadurch lösen, dass das alte Dok gelöscht und das neue gespeichert wird:
--- Code: ---Sub Querysave(Source As Notesuidocument, Continue As Variant)
Dim s As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim altWoche As Variant
Dim aktWoche As Variant
Dim boxType As Long, answer As Integer
boxType& = MB_YESNO + MB_ICONQUESTION
Dim msg As String
msg = |Es ist bereits Dokument vorhanden!
Möchten Sie das bestehende Dokument überschreiben?|
Set db = s.CurrentDatabase
Set view = db.GetView("vw_All")
Set doc = view.GetFirstDocument
While Not (doc Is Nothing)
altWoche = doc.GetItemValue( "Woche" )
aktWoche = source.FieldGetText( "Woche" )
If (altWoche(0) = aktWoche) Then
value% = Messagebox(msg, boxType&, "Fortsetzen?")
If (value% = 6) Then
Call doc.remove(True)
continue = True
Else
continue = False
End If
End If
Set doc = view.GetNextDocument(doc)
Wend
End Sub
--- Ende Code ---
Dabei habe ich jetzt aber das Problem, dass bei
Set doc = view.GetNextDocument(doc)
die Referenz zum letzten (gelöschten) Doc fehlt.
Wie kann man denn sowas am besten lösen?
Danke und Gruß,
Freezer
klaussal:
.. aber wenn es doch nur EIN dokument geben soll, wofür brauchst du dann den getnext ??? ??? ???
ansonsten wieder ein Set doc...= xxx.getFirstDocument
Glombi:
Wo prüft Du denn ab, ob nicht das gleiche Dokument gefunden wird? Wenn Du das aktuelle Dokument einmal speicherst, findet es sich immer auch selbst.
Generell gibt es für derartige Fälle 2 Ansatzpunkte
1) Du deklarierst noch ein zweites Document
dim nextdoc as NotesDocument
und setzt das dann in der While-Schlefe immer so
set nextdoc = view.GetNextDocument(doc)
If (altWoche(0) = aktWoche) Then
value% = Messagebox(msg, boxType&, "Fortsetzen?")
If (value% = 6) Then
Call doc.remove(True)
continue = True
Else
continue = False
End If
End If
Set doc = nextdoc
oder besser, da performanter -
2) Du mmachst Dir eine View, die nach dem Key sortiert ist, hier also nach "Woche".
Dann bildest Du eine NotesDocumentCollection mit
view.GetAllDocumentsByKey( uidoc.FieldGetText("Woche"), true )
und löscht dann die Dokumente aus der Colleciton mit
Call notesDocumentCollection.RemoveAll( true )
Andreas
Freezer:
Guten Morgen!
Danke für die Lösungsvorschläge. Ich hab´s jetzt folgendermaßen gemacht
...
Set doc = view.GetFirstDocument
While Not (doc Is Nothing)
Dim docTemp As NotesDocument
altWoche = doc.GetItemValue( "Woche" )
aktWoche = source.FieldGetText( "Woche" )
altJahr = doc.GetItemValue( "JahrWoPl" )
aktJahr = source.FieldGetText( "JahrWoPl" )
If (altWoche(0) = aktWoche) And (altJahr(0) = aktJahr) Then
value% = Messagebox(msg, boxType&, "Fortsetzen?")
If (value% = 6) Then
Set docTemp = doc
Set doc = view.GetNextDocument (doc)
Call docTemp.remove(True)
continue = True
Else
continue = False
End If
End If
Set doc = view.GetNextDocument(doc)
Wend
End Sub
Funktioniert soweit auch, aber... ???
...ich hab´ einen Button "Speichern & Schließen" und wenn dabei bei der Messagebox auf "Nein" (Dok nicht ersetzen, s.o.) geklickt wird, so kommt danach vor dem Schließen die Notes-Meldung "Möchten Sie dieses Dokument speichern?".
Kann man diese Meldung irgendwie unterdrücken, da sich der User ja bereits vorher entschieden hat, nicht zu speichern?
Gruß,
Freezer
klaussal:
.... das feld "SaveOptions" auf "0" setzen.
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln