Autor Thema: Dokument ersetzen  (Gelesen 1390 mal)

Offline Freezer

  • Aktives Mitglied
  • ***
  • Beiträge: 161
  • Geschlecht: Männlich
  • Oinr isch emmr dr Arsch!
Dokument ersetzen
« am: 18.11.03 - 15:52:32 »
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

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
Client: R8.5.1 (deutsch)
Server: DOMINO 8.5.1
BS: Win2003

klaussal

  • Gast
Re:Dokument ersetzen
« Antwort #1 am: 18.11.03 - 16:16:45 »
.. aber wenn es doch nur EIN dokument geben soll, wofür brauchst du dann den getnext  ??? ??? ???
ansonsten wieder ein Set doc...= xxx.getFirstDocument
« Letzte Änderung: 18.11.03 - 16:19:59 von klaussal »

Glombi

  • Gast
Re:Dokument ersetzen
« Antwort #2 am: 18.11.03 - 16:23:55 »
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

Offline Freezer

  • Aktives Mitglied
  • ***
  • Beiträge: 161
  • Geschlecht: Männlich
  • Oinr isch emmr dr Arsch!
Re:Dokument ersetzen
« Antwort #3 am: 19.11.03 - 08:20:12 »
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
Client: R8.5.1 (deutsch)
Server: DOMINO 8.5.1
BS: Win2003

klaussal

  • Gast
Re:Dokument ersetzen
« Antwort #4 am: 19.11.03 - 08:29:00 »
.... das feld "SaveOptions" auf "0" setzen.

Offline Freezer

  • Aktives Mitglied
  • ***
  • Beiträge: 161
  • Geschlecht: Männlich
  • Oinr isch emmr dr Arsch!
Re:Dokument ersetzen
« Antwort #5 am: 19.11.03 - 09:25:16 »
Alles klar! Funktioniert ;D

Vielen Dank!!!

Freezer
Client: R8.5.1 (deutsch)
Server: DOMINO 8.5.1
BS: Win2003

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz