Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: ampfi am 04.01.06 - 12:03:18

Titel: Werte, die mit "uidoc.fieldsettext" geändert wurden, werden nicht gespeichert
Beitrag von: ampfi am 04.01.06 - 12:03:18
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
Titel: Re: Werte, die mit "uidoc.fieldsettext" geändert wurden, werden nicht gespeichert
Beitrag von: umi am 04.01.06 - 12:10:05
Du änderst im Frontend und im Backend das Dokument (uidoc und doc)
Wird das doc auch noch gespeichert?
Titel: Re: Werte, die mit "uidoc.fieldsettext" geändert wurden, werden nicht gespeichert
Beitrag von: ampfi am 04.01.06 - 12:17:48
Hallo Urs,

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

Gruß

Markus
Titel: Re: Werte, die mit "uidoc.fieldsettext" geändert wurden, werden nicht gespeichert
Beitrag von: umi am 04.01.06 - 12:20:19
Andere Frage:
Wo wird der Code ausgeführt, gibts evtl. noch anderes was da interferrieren könnte ?
Titel: Re: Werte, die mit "uidoc.fieldsettext" geändert wurden, werden nicht gespeichert
Beitrag von: ampfi am 04.01.06 - 12:30:11
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
Titel: Re: Werte, die mit "uidoc.fieldsettext" geändert wurden, werden nicht gespeichert
Beitrag von: rar am 05.01.06 - 09:53:53
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....
Titel: Re: Werte, die mit "uidoc.fieldsettext" geändert wurden, werden nicht gespeichert
Beitrag von: ampfi am 05.01.06 - 12:09:24
Hallo rar,

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

Gruß

Markus
Titel: Re: Werte, die mit "uidoc.fieldsettext" geändert wurden, werden nicht gespeichert
Beitrag von: robertpp am 05.01.06 - 13:19:58
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
Titel: Re: Werte, die mit "uidoc.fieldsettext" geändert wurden, werden nicht gespeichert
Beitrag von: ampfi am 05.01.06 - 14:32:20
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