Das Notes Forum
Domino 9 und frühere Versionen => ND6: Administration & Userprobleme => Thema gestartet von: littleS am 29.03.05 - 09:26:48
-
Hallo zusammen,
ich weiß nicht ob das Problem tatsächlich mit workspace.ViewRefresh zusammenhängt, also schildere ich erstmal den Programmablauf.
Es soll ein neuer Termin angelegt werden über eine Maske, die unter anderem ein RichText Feld enthält. Wenn ich einen neuen Termin anlege oder einen Termin ändere funktioniert alles problemlos, solange ich nichts am RichText Feld ändere. Wenn ich das RT Feld ändere, werden die Änderungen beim Speichern oder nach <ESC> und anschließendem Bestätigen das doch gespeichert werden soll, nicht übernommen.
Im Debugger sieht es dann so aus, daß ich in der Zeile
If Continue Then Call gworkspace.ViewRefresh
die Fehlermeldung "Lotus Error - Specified Command is not available from the workspace" bekomme.
gworkspace ist im (Globals) Abschnitt des Moduls unter (Declarations) deklariert als
Dim gworkspace As NotesUIWorkspace
Continue hat den Wert "-1".
Die Fehlermeldung taucht übrigens nur auf, wenn ich den Debugger benutze, andernfalls gibt es keine Fehlermeldung. Die Änderungen werden halt nur nicht gespeichert.
Viele Grüße
s.
-
die Fehlermeldung kommt, weil beim Debuggen der Debugger im Fokus ist und nicht die Ansicht.
Ein ViewRefresh wirkt sich nur auf Ansichten im FrontEnd aus und nicht auf RT-Felder.
Wo änderst Du das RT-Feld (BackEnd oder FrontEnd)?
-
Wo änderst Du das RT-Feld (BackEnd oder FrontEnd)?
Hmm, weiß ich nicht :-[, woran erkennt man den Unterschied?
Ah okay, ich denke es ist BackEnd.
-
Frontend-Klassen haben immer ein "...UI...".
-
Also ich schreib mal was Code
Dim gworkspace As NotesUIWorkspace
Dim gdoc As NotesDocument
Dim bTerminInfoChanged As Boolean
Dim bSpeichernButton As Boolean
Der User drückt <ESC> -> Aufruf von QueryClose(...)
Source.GotoField("TerminThema") '// Fokus auf ein TextFeld, damit OnChange im
'// RT Feld ausgelöst wird
If gdoc.SaveOptions(0) = "0" Then
Call SaveTest(Continue,bSpeichernButton)
If Continue Then Call gworkspace.ViewRefresh
End If
'// OnChange des RT Feldes TerminInfos
Sub Onchange(Source As Field)
gdoc.SaveOptions = "0" '// verhindert default Dialogbox "Ob gespeichert
'// werden soll"
bTerminInfoChanged=True '// das RichText Feld wurde verändert
End Sub
'// SaveTest
Sub SaveTest(weiter As Variant, DoSave As Boolean)
Dim unterschied As Boolean
unterschied = False
unterschied = bTerminInfoChanged
If unterschied Then
ret = Messagebox("Möchten Sie Ihre Änderungen speichern?",3,"Lotus Notes")
Select Case ret
Case 2:
weiter = False
Exit Sub
Case 6: '// Ja Button
Call SaveDok()
End Select
End If
weiter = true
exit sub
End Sub
'// SaveDok()
Public Sub SaveDok()
Call gdoc.Save(True,True,True)
End Sub
-
Ich würde in den SaveTest den Continue mit aufnehmen und den Variant jeweils auf True bzw. False setzen. Und natürlich Option Declare setzen.
-
Moin,
also mir fehlt ein wenig der Durchblick :)
Wenn ich die Maske über einen "Speichern" Button beende, wird QuerySave() aufgerufen und einige Tests durchgeführt. Danach wird in QueryClose() gesprungen, wo dann das eigentliche Speichern angestossen wird. Wenn ich die Maske über "ESC" verlasse wird sofort in QueryClose() gehopst und wenn ich anschließend bei der Abfrage ob meine Änderungen doch gespeichert werden sollen mit "JA" antworte, taucht die Fehlermeldung bei dem gworkspace.ViewRefresh auf und die Aktualisierung wird nicht gespeichert oder zumindest nicht sichtbar.
Beim direkten Speichern über den Button werden ab QueryClose() fast die gleichen Codezeilen angesprungen und in der Zeile gworkspace.ViewRefresh taucht kein Fehler auf und meine Änderungen werden gespeichert.
Wäre dankbar für Hinweise :)
Viele Grüße
s.
-
Hmm,
ich merke gerade, daß das Thema wohl besser nach "Domino 6: Entwicklung" passen würde :)
-
Ein ViewRefresh wirkt sich nur auf Ansichten im FrontEnd aus und nicht auf RT-Felder.
Wie bekomme ich es denn hin, daß Änderungen an RT Feldern gespeichert werden?
-
vom Prinzip her müsste es so aussehen:
- UI-Dokument speichern
- RT-Feld im BackEnd bearbeiten
- BackEnd-Dokument speichern
- UI-Dokument schließen ohne zu speichern (sonst wird das RT-Feld überschrieben
- Backend-Dokument im UI öffnen (NotesUIWorkSpace.EditDocument(True, NotesDocument)
-
Hallo ;D
das Problem ist scheinbar behoben, vielleicht kann ja mal jemand drüber schauen.
In obiger SaveTest() Funktion habe ich folgendes ersetzt.
Case 6:
'// UI Dokument speichern
guidoc.Save
'// RT Feld im Backend bearbeiten
'// BackEnd Dokument speichern
Call SaveDok()
'// UI Dokument ohne speichern, schließen
guidoc.Close
'// BackEnd Dokument im UI öffnen
Set guidoc = gworkspace.EditDocument(True, gdoc)
guidoc.Close
End Select
Was mich etwas stutzig macht ist die Tatsache, daß das ganze funktioniert, ohne daß ich das Dokument im BackEnd upgedated habe. Ich dachte zum Testen der übrigen Codezeilen laß ich es einfach mal weg, da mir das kopieren des RT Feldes aus dem Frontend Dok in das RT Feld des BackEnd Dokuments zu schwierig war.
Fazit: Problem behoben (vermutlich 5 neue erstellt) und das Problem vorm Bildschirm ist noch verwirrter als zuvor.
s.