Autor Thema: Werte, die mit "uidoc.fieldsettext" geändert wurden, werden nicht gespeichert  (Gelesen 2604 mal)

Offline ampfi

  • Frischling
  • *
  • Beiträge: 10
  • Geschlecht: Männlich
Hallo zusammen,

ich habe ein Problem bei folgendem Code:

uidoc.EditMode = True
   
   'Der Auftragsstatus wird geändert:
   If doc.auftragsart(0)<> "Entsperrung" Then   
      Call uidoc.FieldSetText("Status","erfasst")
   Else
      Call uidoc.FieldSetText("Status","erledigt")
   End If
   
   'Ergänzen der Dokumentation:
   a = Cstr(Now) & "     erfasst von " & nam.Common
   Set item  = doc.GetFirstItem("Dokumentation")
   Call item.AppendToTextList(a)
      
   Call uidoc.Save
   Call uidoc.Close(True)

Der geänderte Wert im Feld "Status" wird einfach nicht abgespeichert. Ich habe den Wert über Hilfsvariablen mehrfach ausgelesen: Vor der Änderung, nach der Änderung und nach dem Speichern des Dokuments.  Im Debugger habe ich gesehen, dass nach dem Speichern wieder der alte Wert im Feld ist.

Sieht hier irgendjemand, wo mein Fehler liegt. Ich werde gleich wahnsinnig.

Markus
Markus

Domino 8.0.2 Win2003
Notes Client 8.0.2

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Du änderst im Frontend und im Backend das Dokument (uidoc und doc)
Wird das doc auch noch gespeichert?
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Offline ampfi

  • Frischling
  • *
  • Beiträge: 10
  • Geschlecht: Männlich
Hallo Urs,

äh, nein. Das Doc wird nicht gespeichert, wobei die Werte merkwürdiger Weise übernommen werden.

Gruß

Markus
Markus

Domino 8.0.2 Win2003
Notes Client 8.0.2

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Andere Frage:
Wo wird der Code ausgeführt, gibts evtl. noch anderes was da interferrieren könnte ?
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Offline ampfi

  • Frischling
  • *
  • Beiträge: 10
  • Geschlecht: Männlich
Der Code wird über eine Aktion ausgelöst. Hier mal der gesamte Code:

Sub Click(Source As Button)
   Dim ws As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim doc As NotesDocument
   Dim session As New NotesSession
   Redim ErrorArray(0) As String
   Dim strGotoField As String
   Dim ValidationArray As Variant
   Dim item As NotesItem
   Dim a As Variant
   Dim db As NotesDatabase
   Dim memo As NotesDocument
   Dim rtitem As NotesRichTextItem
   Dim auftragsart As NotesItem
   Dim ersteller As NotesItem
   Dim acl As NotesACL
   Dim entry As NotesACLEntry
   Dim nam As New notesname(session.username)
   
   Set uidoc = ws.CurrentDocument
   Set doc = uidoc.Document
   Set db = session.CurrentDatabase
   Set acl = db.ACL
   Set entry = acl.GetEntry( session.Username)
   
%REM
   
   'Hier wird entschieden, ob validiert werden muss:
   If doc.auftragsart(0)<> "Entsperrung" Then
      
      ValidationArray = doc.ValidationArrayIT   
      If Not ValidateForm(doc, ValidationArray, ErrorArray, strGotoField) Then
         
              'Falls die Validierung nicht erfolgreich war:
         Beep
         Msgbox "Folgender Fehler trat auf:" & Chr$(10) & l_Join(ErrorArray, Chr$(10)),16,"Bitte noch folgende Felder ergänzen:"     
         Call uidoc.GotoField(strGotoField)
      Else
         
         
         'Versenden der Mail:
         Set memo = db.CreateDocument      
         memo.Form = "Memo"
         memo.SendTo = doc.EinreichungPrüfungAn(0)
         memo.Subject = "Neuer Auftrag zur Prüfung."
         Set rtitem = New NotesRichTextItem( memo, "Body" )
         Call rtitem.AppendText( " Bitte klicken Sie auf die Verknüpfung ")
         Call rtitem.AddNewLine( 2 )         
         Call rtitem.AppendText( "Auftrag  ==> " )
         Call rtitem.AppendDocLink( doc, "Link zum Auftrag")         
         Call memo.Send( False )

End If

Else

      'Bei einer Entsperrung wird einfach nur der Antragsteller informiert
      Set memo = db.CreateDocument      
      memo.Form = "Memo"
      memo.SendTo = doc.ersteller(0)
      memo.Subject = "Ihr Entsperrauftrag wurde bearbeitet."
      Set rtitem = New NotesRichTextItem( memo, "Body" )
      Call rtitem.AppendText( " Bitte klicken Sie auf die Verknüpfung ")
      Call rtitem.AddNewLine( 2 )         
      Call rtitem.AppendText( "Auftrag  ==> " )
      Call rtitem.AppendDocLink( doc, "Link zum Auftrag")         
      Call memo.Send( False )
      
   End If
%END REM
   uidoc.EditMode = True
   
   'Der Auftragsstatus wird geändert:
   If doc.auftragsart(0)<> "Entsperrung" Then   
      Call uidoc.FieldSetText("Status","erfasst")
   Else
      Call uidoc.FieldSetText("Status","erledigt")
   End If
   
   'Ergänzen der Dokumentation:
   a = Cstr(Now) & "     erfasst von " & nam.Common
   Set item  = doc.GetFirstItem("Dokumentation")
   Call item.AppendToTextList(a)
   
   'Es wird noch ergänzt, wer den Auftrag erledigt hat:   
   REM Call uidoc.FieldSetText("ErledigtVon", nam.Common)   
   Call uidoc.Save
   Call uidoc.Close(True)
End Sub


Ich habe einige Passagen auskommentiert, damit ich sie als Fehlerquelle ausschliessen kann. Bei dem Dokument gibt es noch ein QuerySave-Ereignis, dass ich aber auch schon herausgenommen habe (Hier geht es nur um eine fortlaufende Nummer für jeden Auftrag).
Das Seltsame ist noch, dass ich eine zweite Aktion erstellt habe, die funktioniert:

Sub Click(Source As Button)
   Dim ws As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim doc As NotesDocument
   Dim session As New NotesSession
   
   Set uidoc = ws.CurrentDocument
   Set doc = uidoc.Document
   
   uidoc.EditMode = True
   
   'und der Auftragsstatus geändert
   Call uidoc.FieldSetText( "Status","erfasst")
   Call uidoc.Save
   Call uidoc.Close(True)
End Sub
Markus

Domino 8.0.2 Win2003
Notes Client 8.0.2

Offline rar

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 856
  • Geschlecht: Männlich
  • Des passt scho
    • click
Versuche mal das Dokument im Backend zu speichern. Dadurch sollte das uidoc auch gespeichert werden. Setz dann das Feld Saveoptions im doc auf "0" und schliess das uidoc.
Vielleicht klappt das ja....
†090620141300

Offline ampfi

  • Frischling
  • *
  • Beiträge: 10
  • Geschlecht: Männlich
Hallo rar,

hat leider auch nicht geholfen. Sonst noch ne Idee? Irgendjemand?

Gruß

Markus
Markus

Domino 8.0.2 Win2003
Notes Client 8.0.2

Offline robertpp

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 940
  • Geschlecht: Männlich
Und warum setzt du das Feld nicht einfach mit:
doc.Status = "erfasst"
dann speicherst du das doc schließen des uidoc und wieder öffnen?
Call doc.Save( True , False )
doc.SaveOptions = "0"
Call uidoc.Close
Set uidoc = ws.EditDocument( True , doc )
Set doc = uidoc.Document
------------------------------------------------------------
1250 Notes User Client von 5.0.5 bis 6.5.4     WIN2000, XP
14 Notes Server von 6.5 bis 6.5.4 WIN2000, XP

32   Notes Server von 5.0.1 bis 6.5.4 in unserer Domain
323 Notes Server weltweit mit 38000 User in einem Adressbuch

Offline ampfi

  • Frischling
  • *
  • Beiträge: 10
  • Geschlecht: Männlich
Das war der richtige Hinweis. ;D

Zunächst hatte ich es so gelöst bekommen, indem ich einfach nach dem Ändern des Feldes das Dokument sofort gespeichert habe.

Aber jetzt habe ich einfach "uidoc.fieldsettext....."  gegen "doc.Status....." ausgetauscht. Und schon funzt es. Typisches Beispiel für "Warum einfach, wenn es auch kompliziert geht".

Vielen, vielen Dank

Markus
Markus

Domino 8.0.2 Win2003
Notes Client 8.0.2

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz