Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: lotus blue am 24.10.08 - 11:51:14

Titel: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: lotus blue am 24.10.08 - 11:51:14
Hallo und noch eins  ;D ::) ::) :-X
Ein User ist im Lesemodus eines Dokuments.
Gleichzeitig ändert eine andere Person dieses Dok.

Jetzt benötige ich eine Art "Aktualisieren" Button.
Hab in der Hilfe folgendes gefunden:

Sub Click(Source As Button)
   Dim workspace As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Set uidoc = workspace.CurrentDocument
   If Not ( uidoc.IsNewDoc ) Then
      Call uidoc.Reload
   End If
End Sub

Die Reload Methode müßte doch normal funzen? Oder?
Viele Grüße
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: klaussal am 24.10.08 - 11:54:58
Das steht doch alles in der Hilfe:

Zitat
Refreshes the current document with any changes that have been made to the corresponding back-end document. Refreshing the current document updates its representation in memory, as well as visually on the workspace, to reflect the changes that have been made to the back-end document.

PS: Wie soll der User denn die Änderung mitbekommen ? Den blauen Kringel gibt's ja nicht.
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: lotus blue am 24.10.08 - 12:00:25
Das steht doch alles in der Hilfe:

Zitat
Refreshes the current document with any changes that have been made to the corresponding back-end document. Refreshing the current document updates its representation in memory, as well as visually on the workspace, to reflect the changes that have been made to the back-end document.

PS: Wie soll der User denn die Änderung mitbekommen ? Den blauen Kringel gibt's ja nicht.

Ja das hab ich auch gelesen. Oder hab mit meinem Englisch was falsch verstanden?
Im Grunde: Das Dok wird refresht mit allen Änderungen die im Backend gemacht wurden.
Da der User ja die Änderung nicht mitbekommt, benötige ich ja einen Button/eine Aktion.

Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: klaussal am 24.10.08 - 12:04:30
Aber woher soll der User denn wissen, ob und wann er den Knopf drücken soll ?
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: lotus blue am 24.10.08 - 12:08:13
Aber woher soll der User denn wissen, ob und wann er den Knopf drücken soll ?

Sagen wirs mal blöd ausgedrückt-> "Darüber mach ich mir keinen Kopf" da der Kunde diese Funktion halt so will.
Versteh es auch nicht  ::) ;)

Er geht morgens um 6:00 in das Dok und schaut z.B. um 10:00 nochmals rein.
Dann will er den Button um den aktuellsten Stand abrufen zu können.
Bisher geht er immer raus und dann wieder rein.

Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: Glombi am 24.10.08 - 12:09:01
Wenn dann so:

Sub Click(Source As Button)
   Dim workspace As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
dim doc as NotesDocument
   Set uidoc = workspace.CurrentDocument
set doc = uidoc.Document
   If Not ( uidoc.IsNewDoc ) Then
call uidoc.Close
call ws.EditDocument(False,doc)
   End If
End Sub
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: lotus blue am 24.10.08 - 12:17:35
Wenn dann so:

Sub Click(Source As Button)
   Dim workspace As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
dim doc as NotesDocument
   Set uidoc = workspace.CurrentDocument
set doc = uidoc.Document
   If Not ( uidoc.IsNewDoc ) Then
call uidoc.Close
call ws.EditDocument(False,doc)
   End If
End Sub

Danke schon mal.
Hab jetzt nen Termin und darf dann ins WE.
Meld mich am Montag nochmal.
Euch ein schönes WE.
Gruß
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: lotus blue am 27.10.08 - 08:59:07
Sodala,
script läuft durch, aber es ändert nix.

Hab das entsprechende Dok geöffnet im Lesemodus.
Meine Kollegin ändert derweil einen Feldwert und speichert es ab.
Ich lass das Script drüberlaufen, aber der Feldwert ist immer noch der alte.
Benötige deshalb immer noch Eure hilfe bitte.
Mfg

Hier das Script:
Sub Click(Source As Button)
   Dim db As NotesDatabase
   Dim workspace As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim doc As NotesDocument
   Set uidoc = workspace.CurrentDocument
   Set doc = uidoc.Document
   If Not ( uidoc.IsNewDoc ) Then
      Call uidoc.Close
      Call workspace.EditDocument(False,doc)
   End If
End Sub
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: TRO am 27.10.08 - 11:32:30
UNID merken,
dann Set doc = db.GetDocumentByUNID

und dann dieses doc über ws.EditDocument öffnen
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: lotus blue am 27.10.08 - 13:43:06
UNID merken,
dann Set doc = db.GetDocumentByUNID

und dann dieses doc über ws.EditDocument öffnen

Dann muss ich aber in alle bestehenden Doks ein Feld mit der UNID einfügen oder?
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: DAU-in am 27.10.08 - 13:45:58
nein, einfach eine Stringvariable inerhalb des Scriptes damit belegen.

grüsse

Dau-in
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: lotus blue am 27.10.08 - 15:05:13
Sorry aber da komm ich nicht dahinter:

Sub Click(Source As Button)
   Dim db As NotesDatabase
   Dim workspace As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim doc As NotesDocument
   Dim unid As String
   Set doc = db.GetDocumentByUNID (unid )
   Set uidoc = workspace.CurrentDocument
   If Not ( uidoc.IsNewDoc ) Then
      Call uidoc.Close
      Call workspace.EditDocument(False,doc)
   End If
End Sub

Mir fehlt noch was, hab aber keinen Schimmer.
Kann mir bitte jemand helfen?
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: DAU-in am 27.10.08 - 15:15:11
Sub Click(Source As Button)
Dim db As NotesDatabase
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim unid As String

'Set doc = db.GetDocumentByUNID (unid )
Set uidoc = workspace.CurrentDocument
unid = uidoc.document.universalID

If Not ( uidoc.IsNewDoc ) Then
Call uidoc.Close
Set doc = db.GetDocumentByUNID (unid )

Call workspace.EditDocument(False,doc)
End If
End Sub


oder so ähnlich



grüsse

Dau-in
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: m3 am 27.10.08 - 15:16:37
Sodala,
script läuft durch, aber es ändert nix.

Hab das entsprechende Dok geöffnet im Lesemodus.
Meine Kollegin ändert derweil einen Feldwert und speichert es ab.
Ich lass das Script drüberlaufen, aber der Feldwert ist immer noch der alte.
Benötige deshalb immer noch Eure hilfe bitte.
Es könnte natürlich auch sein, dass Kollege und Kollegin jeweils auf eigenen, lokalen Repliken der DB arbeiten. Und solange die nicht ausrepliziert haben, sieht der Kollege nicht die Änderungen der Kollegin.
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: lotus blue am 27.10.08 - 15:51:58
Es könnte natürlich auch sein, dass Kollege und Kollegin jeweils auf eigenen, lokalen Repliken der DB arbeiten. Und solange die nicht ausrepliziert haben, sieht der Kollege nicht die Änderungen der Kollegin.

Ist definitiv nicht der Fall. Hab ich gleich am Anfang überprüft.

Bastle noch an dem Script vom DAU-in --> danke Dir schon mal für Deine Hilfe.

Momentan sind wir beim "Object variable not set".

Gruß
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: DAU-in am 27.10.08 - 16:39:11
dann solltest du das entsprechende Objekt setzen?
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: lotus blue am 28.10.08 - 13:33:40
So hab jetzt folgendes Script:


Bei Set doc = db.GetDocumentByUNID (unid )
kommt der object variable not set.
Aber ist doch gesetzt. :-: :'(


Sub Click(Source As Button)
   Dim db As NotesDatabase
   Dim workspace As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim doc As NotesDocument
   Dim unid As String
   
   Set uidoc = workspace.CurrentDocument
   unid = uidoc.document.universalID
   
   If Not ( uidoc.IsNewDoc ) Then
      Call uidoc.Close
      Set doc = db.GetDocumentByUNID (unid )
      
      Call workspace.EditDocument(False,doc)
   End If
End Sub

Macht es eigentlich einen Unterschied ob ich das Script in einer Ansichtsaktion laufen lass oder muss die Schaltfläche im Dok sein.

Mfg Jason
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: dirk_2909 am 28.10.08 - 13:39:46
Ich kann aber nirgendwo sehen, dass db gesetzt ist  ^-^ ..


Also noch die Datenbank db initialisieren. Dann sollte es gehen
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: DAU-in am 28.10.08 - 13:42:28
Und die Frage nach der Ansichtsaktion beantwortet die Hilfe:

Set notesUIDocument = notesUIWorkspace.CurrentDocument
Return value: notesUIDocument
Represents the current document. If there is no document currently open on the workspace, this method returns Nothing.
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: lotus blue am 28.10.08 - 13:52:50
Ähmmmm ja  8) ::) die session und db.
Jetzt geändert und schon paßt es fast, nur dass ich jetzt "invalid universial id" bekomme.  :-: :-: :-:
Sub Click(Source As Button)
   Dim session As New notessession
   Dim db As notesdatabase
   Dim workspace As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim doc As NotesDocument
   Dim unid As String
   
   Set db = session.currentdatabase
   Set doc = db.GetDocumentByUNID (unid )
   Set uidoc = workspace.CurrentDocument
   unid = uidoc.document.universalID
   
   If Not ( uidoc.IsNewDoc ) Then
      Call uidoc.Close
      Set doc = db.GetDocumentByUNID (unid )
      
      Call workspace.EditDocument(False,doc)
   End If
End Sub

Wegen meiner Frage:
Sorry mein Fehler.
Hab mich verschrieben. Meinte statt Ansichtaktion die Maskenaktion.
Aber das dürfte ja wieder gleich sein.
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: dirk_2909 am 28.10.08 - 14:04:17
 O0

Deine Variable "unid" ist zu dem Zeitpunkt auch leer, wenn Du versuchst das Dokument zu holen.

Erst später im Script weist Du ihr einen Wert zu .

…. :-X
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: DAU-in am 28.10.08 - 14:05:53
benutzt du eigentlich den Debugger?

Grüsse

Dau-in
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: lotus blue am 28.10.08 - 14:10:54
benutzt du eigentlich den Debugger?

Grüsse

Dau-in

Natürlich , da liegt ja mein Prob. Es kommt die Fehlermeldung ohne jemals den Debugger zu sehen.
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: DerAndre am 28.10.08 - 14:11:52
Und eine Fehlerbehandlung bitte auch.

Nach Set db = kommt ein GetDocumentBy...
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: dirk_2909 am 28.10.08 - 14:15:22
Warum siehst Du den Debugger nicht? In welchem Context rufst Du das Script denn auf.

Und wie mein Vorredner ähhh -Schreiber schon sagte: Eine ordentliche Fehlerbehandlung :D

Dazu gehört auch mögliche Fehler vorher abzufangen ;-)

if ( unid = "" ) Then
 msgbox "Uuuups....." , 16 , ""
end if

oder

if db is Nothing Then
 msgbox "Sch*******" ,16, "Dummer Fehler"
end if
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: lotus blue am 28.10.08 - 14:23:17
Hallöchen.
Also den Debugger gestartet und die Maskenaktion ausglöst-> Pustekuchen. Nix zu sehen.

Hab jetzt nochmals das Script umgebaut:
Keine Fehler, aber auch leider keine Änderung der Feldwerte :-:
Sub Click(Source As Button)
   Dim session As New notessession
   Dim db As notesdatabase
   Dim workspace As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim doc As NotesDocument
   Dim unid As String
   
   Set db = session.currentdatabase
   Set uidoc = workspace.CurrentDocument
   unid = uidoc.document.universalID
   Set doc = db.GetDocumentByUNID (unid )
   If Not ( uidoc.IsNewDoc ) Then
      Call uidoc.Close
      Set doc = db.GetDocumentByUNID (unid )
      Call workspace.EditDocument(False,doc)
   End If
End Sub


Gruß
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: DerAndre am 28.10.08 - 14:31:43
Dirks Post hat Du gelesen?

Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: lotus blue am 28.10.08 - 14:41:44
Dirks Post hat Du gelesen?

Ja natürlich. Aber bin wohl auf dem Holzweg und versteh was vollkommen falsch.

Ich weise doch zuerst den Wert zu
"unid = uidoc.document.universalID"

und dann erst hol ich das Dok ::) ::).
"db.GetDocumentByUNID (unid )"
 ???
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: dirk_2909 am 28.10.08 - 14:46:06
Was genau ist eine Maskenaktion?


Ich vermute mal, dass Du dein Script in einem Button eingefügt hast ?!

Folgendes habe ich mal nachgebaut und positiv getetstet:

Code
Dim s As New notessession
	Dim db As notesdatabase
	Dim ws As New NotesUIWorkspace
	Dim uidoc As NotesUIDocument
	Dim doc As NotesDocument
	Dim unid As String
	
	On Error Goto ERROR_ME
	
	Set db = s.currentdatabase
	Set uidoc = ws.CurrentDocument
	
	If uidoc.IsNewDoc  Then
	' Msgbox "Sie können diese Aktion nicht von neuen Dokumenten aus ausführen!" ,64, "Hinweis"
		Exit Sub
	End If	
	
	If uidoc.Editmode Then
		Msgbox "Das aktuelle Dokument befindet sich im Bearbeitungsmodus!" ,64, "Abbruch"
		Exit Sub
	End If
	
	unid = uidoc.document.universalID
	
	If unid = "" Then
		Msgbox "Das aktuelle Dokument ist nicht gespeichert oder defekt!" ,64, "Hinweis"
		Exit Sub
	End If
	
	Set doc = db.GetDocumentByUNID (unid )
	
	
	If Not doc Is Nothing Then
		Call uidoc.Close
		Call ws.EditDocument(False,doc)
	Else
		Msgbox "Das Kontextdokument konnte nicht initialisiert werden!" , 16 , "Fehler"
	End If
	
	
EXIT_OK:
	Exit Sub
	
ERROR_ME:
	Msgbox "Fehler aufgetreten: " & Error & " (" & Err & ") - Zeile " & Erl
	Err = 0
	Resume EXIT_OK
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: dirk_2909 am 28.10.08 - 14:49:18
zu #27:

Ist soweit richtig. Aber warum 2 mal:


Set doc = db.GetDocumentByUNID (unid )
   If Not ( uidoc.IsNewDoc ) Then
      Call uidoc.Close
      Set doc = db.GetDocumentByUNID (unid )




Aber wenn der Wert sich nicht ändert, kann es auch an einer anderen Stelle liegen?!
Wie verhält es sich denn, wenn Du das Dokument (UI) normal schließt (z.B. mit ESC) und sofort danach wieder
öffnest?
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: lotus blue am 28.10.08 - 14:59:16
@dirk_2909
Danke für Deine Mühen. Bei mir funzt es aber leider nicht. Keine Fehelermeldung und auch keine Änderung.
Script ist natürlich in einem Button "Aktionsschaltfläche".

Tja warum zweimal  :o >:D >:D >:D Mann bin ich blöd

Ändert aber auch nix.
Wenn ich das Dok offen habe, der Kollege was ändert, ich mit ECS schließe und in der Ansicht gleich wieder öffne per Dopelklick, dann ist der Wert richtig (geändert).
Gruß

Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: DAU-in am 28.10.08 - 15:16:40
springt der Debugger denn an, wenn du die Aktion aufrufst???
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: Glombi am 28.10.08 - 15:36:28
Wird denn eigentlich dasselbe Dokument geöffnet, wenn es über die Ansicht aufgemacht wird?

Es könnte ja bspw. sein, dass beim Speichern eine neue Version angelegt wird.

Du solltest mal als erstes prüfen, ob die Dok-ID der Dokumente, die über die View und die per Script geöffnet werden, gleich ist.

Andreas
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: lotus blue am 28.10.08 - 15:43:49
springt der Debugger denn an, wenn du die Aktion aufrufst???

Ja aber komischer Weise erst nach zweimaligem Drücken.
Gruß
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: DAU-in am 28.10.08 - 16:21:50
Und findet der Debugger dann Dokumente,
ist doc dann ein 'IsNewDoc'?
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: WildVirus am 28.10.08 - 19:50:47
Eigentlich Basics - aber hast Du "option declare" gesetzt ?

Schönen Abend noch
Axel
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: lotus blue am 29.10.08 - 07:49:55
Morgäääääähn.
Option Declare ist ausnahmsweise  ;D gesetzt. War gleich das erste.

Also die ID des neuen Doks ist eine andere wie des alten Doks.OK.
--> ISNEWDOC-> False
 :-: ???
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: DAU-in am 29.10.08 - 08:10:13
Natürlich hat das Dokument eine andere UNID, es ist ja auch ein anderes Dokument !?!?

IsNewDoc: du führst die Aktion in einem frisch erstellten Dokument durch oder in einem alten?


Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: lotus blue am 29.10.08 - 08:30:59
Natürlich hat das Dokument eine andere UNID, es ist ja auch ein anderes Dokument !?!?
Ja mir auch klar, so hab ich es auch geschrieben.
IsNewDoc: du führst die Aktion in einem frisch erstellten Dokument durch oder in einem alten?
In einem alten.
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: dirk_2909 am 29.10.08 - 09:08:21
So. Langsam blick ich jetzt nicht mehrdurch  >:(

Also:
Du brauchst die Funktion nicht bei neuen Dokumenten. - Klar! -> ergo: Aktion verbergen...
Du willst ein geöffnetes Dokument "refreshen", damit die Änderungen des Backenddokumentes
angezeigt werden -> dafür ist das o.g. Script ok!! ..

Meine Tests ( …) waren soweit OK.
Die UNID muss dieselbe sein, wie die des Backenddokumentes!

Wenn nicht läuft bei Dir schon was grundlegendes Falsch!

Ich weiß jetzt nicht mehr weiter  :-:
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: lotus blue am 29.10.08 - 09:18:06
Hallo hier nochmal mein Aufgabenprob:

Michael Test öffnet um 8:00 Uhr aus einer Ansicht ein Dokument im Lesemodus. In den Bearbeitenmodus geht er gar nicht rein.
Das Dok bleibt den ganzen Vormittag auf.

Anna Meier öffnet um 9:00 das gleiche Dokument und ändert jedoch zwei Feldwerte.

Damit nun Michael Test am Nachmittag die Änderungen sieht, muss er logischerweise das Dokument (das er ja seit dem Vormittag auf hat) schließen, die Ansicht aktualisieren und das Dokument wieder öffnen.
So sind alle Änderungen sichtbar.

Meine Aufgabe ist es, einen Button/Aktion zu machen, damit sich Michael Test den Schritt -->"muss er logischerweise das Dokument (das er ja seit dem Vormittag auf hat) schließen, die Ansicht aktualisieren und das Dokument wieder öffnen"
spart.

Macht Euch bitte keine Gedanken über die Notwendigkeit dieser Aktion (das hat keinen Sinn >:D >:D >:D >:D >:D). Reg mich eigentlich immer noch drüber auf.

Gruß

Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: DAU-in am 29.10.08 - 09:32:20
Aber wenn du auf einem alten Dok stehst, die UNID ausliest und dann über die UNID wieder dasselbe Dokument holst, dann bekommst du doch wieder das dasselbe alte Dokument?

Oder arbeitet ihr mit Kopien?
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: Thomas Schulte am 29.10.08 - 09:39:28
Kinderkram Aufgabe ...


Sub Click(Source As Button)
   Dim wksp As New NotesUIWorkspace
   Dim session As New NotesSession
   Dim db As notesdatabase
   Dim uidoc As notesuidocument
   Dim doc As notesdocument
   Dim docunid As String
   
   Set db = session.CurrentDatabase
   Set uidoc = wksp.CurrentDocument
   Call uidoc.Save()
   Set doc = uidoc.Document
   docunid = uidoc.Document.UniversalID
   Call uidoc.Close(True)
   Set doc =db.GetDocumentByUNID(docunid)
   Call wksp.EditDocument(False,doc)
End Sub
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: lotus blue am 29.10.08 - 10:13:42
Danke Thomas für Deine Hilfe.
Leider bekomm ich ein "Dokumentbefehl nicht verfügbar".
Liegt wohl daran dass ich nicht in den Editmode gehe oder?
Aber da will ich ja nicht rein :-:

Gruß
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: DAU-in am 29.10.08 - 10:15:37
an welcher Stelle springt der Debugger raus?
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: lotus blue am 29.10.08 - 10:19:45
an welcher Stelle springt der Debugger raus?

Sorry immer wieder das gleiche Prob, dass ich nicht gleich alles schreibe.
Also bei Betätigen des Buttons in der Aktionsleiste-> Dokumentbefehl nicht verfügbar
Als Schaltfläche im Dok
springt der Debugger bei Call UIdoc save () raus.

Gruß
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: DAU-in am 29.10.08 - 10:25:15
uidoc ist im Lesemodus und du versuchst zu speichern, richtig?

Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: lotus blue am 29.10.08 - 10:30:59
uidoc ist im Lesemodus und du versuchst zu speichern, richtig?

 :o ::) :-\ :-\ Richtig. Hab halt leider ohne große nochmalige Überprüfung den Kinderkram Code von Thomas eingesetzt.
Mein Fehler.
Muss dann ein False rein oder ganz raus lassen?
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: DAU-in am 29.10.08 - 10:34:05
SAve und das erste 'set doc' auskommentieren, wie weit kommst du dann?
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: lotus blue am 29.10.08 - 10:41:57
SAve und das erste 'set doc' auskommentieren, wie weit kommst du dann?
Dann läuft er durch und ändert wieder nix.
Post gleich mal ein Bild der Debugger-Ergebnisse
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: DAU-in am 29.10.08 - 10:49:44
ähh, nur noch mal nachfragen:

Michael Test öffnet um 8:00 Uhr aus einer Ansicht ein Dokument im Lesemodus. In den Bearbeitenmodus geht er gar nicht rein.
Das Dok bleibt den ganzen Vormittag auf.

Anna Meier öffnet um 9:00 das gleiche Dokument und ändert jedoch zwei Feldwerte.



Anna Meier speichert auch sofort?

wenn Frau Meier das Dokument einfach auch nur offen hat,  ändert sich ja im Backend gar nichts?

Und dann wäre es doch auch korrekt, wenn Michael Test keine Änderung sieht?
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: lotus blue am 29.10.08 - 10:55:46
Anna Meier speichert auch die Änderungen.


Hier das Debugger Ergebnis:

CURRENTDOKUMENT  ["Neuer Eintrag",False,False ....]
Editmode False

UIDOC
Dokument UniversialID   die gleiche wie die
DOC
UniversialID
und die DOC UNID

Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: dirk_2909 am 29.10.08 - 11:07:49
Irgndwie drehen wir uns im Kreis.

Die Lösung wird hier x-fach gepostet ( siehe z.B. #26 und  #42).
Mehr geht nicht.

Es muss was anderes sein.

Ich klinke mich dann aus und were Projektarbeit machen...  :-X
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: lotus blue am 29.10.08 - 11:13:48
Irgndwie drehen wir uns im Kreis.

Die Lösung wird hier x-fach gepostet ( siehe z.B. #26 und  #42).
Mehr geht nicht.

Es muss was anderes sein.

Ich klinke mich dann aus und were Projektarbeit machen...  :-X
Tja nur das die Lösung nicht funzt.
#26 und #42 wurden ja bereit sangewendet. Zb. bei 42 ist ja das Save angegeben obwohl ich ja im Lesemodus bin.
Entfernt und trotzdem tut es nicht usw.
Natürlich dreh ich mich im Kreis und zieh Euch mit in den Kreis. Sorry falls ich jemand nerve.
Aber durch das Kreisdrehen wird es leider nicht besser.

Danke trotzdem für Deine Hilfe.
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: DAU-in am 29.10.08 - 11:51:55
Und die DokID des Dokumentes von Frau Meier?

Ist das diesselbe wie von Herrn Test?

nicht dass ihr auf verschiedenen Dokumenten arbeitet.
ihr seid auf der gleichen DB auf demselben Server?
die DBs sind nicht lokal oder so?

da muss was ganz anderes dahinterstecken.

mich macht eine Bemerkung vorhin mit 'neuem und altem' Dokument einfach stutzig.

Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: Thomas Schulte am 29.10.08 - 12:12:39
Hier kriegst du jetzt Code der genau so geschrieben ist wie es funktionieren muss wenn du das über eine Aktion in der Maske ausführen willst. Ohne Save und ohne Wechsel in den Edit Mode.

Sub Click(Source As Button)
   Dim wksp As New NotesUIWorkspace
   Dim session As New NotesSession
   Dim db As notesdatabase
   Dim uidoc As notesuidocument
   Dim doc As notesdocument
   Dim docunid As String
  
   Set db = session.CurrentDatabase
   Set uidoc = wksp.CurrentDocument
   docunid = uidoc.Document.UniversalID
   Call uidoc.Close(True)
   Set doc =db.GetDocumentByUNID(docunid)
   Call wksp.EditDocument(False,doc,False,,True,True)
End Sub

Wenn das nicht funktioniert, dann solltest du ganz von vorne anfangen und alle möglichen Fehlerquellen die dir bereits genannt wurden, wie

- Arbeiten mit lokaler Replik oder auf unterschiedlichen Servern.
- Hat der andere das Dokument denn wirklich geändert und gespeichert.
Und so weiter, ich spare es mir das jetzt noch einmal aufzuzählen.

SYSTEMATISCH der REIHE nach untersuchen und als Fehlerursache ausschließen. Mit besonderer Berücksichtigung des Hinweises den dir der letzte Post vorher gibt.
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: TRO am 29.10.08 - 12:47:24
Schmeiß mal zwischendurch das doc weg und/oder setze mit GetDocumentByUNID ein anderes NotesDocument.

Sub Click(Source As Button)
   Dim wksp As New NotesUIWorkspace
   Dim session As New NotesSession
   Dim db As notesdatabase
   Dim uidoc As notesuidocument
   Dim doc As notesdocument
   Dim Ndoc As notesdocument
   Dim docunid As String
   
   Set db = session.CurrentDatabase
   Set uidoc = wksp.CurrentDocument
   docunid = uidoc.Document.UniversalID
   Call uidoc.Close(True)
   ' Achtung: manche berichten hier von einem Crash (auch in 6.5.5), der
   ' vermieden wird, wenn uidoc.close ohne True-Parameter aufgerufen wird
   Delete uidoc
   Set Ndoc =db.GetDocumentByUNID(docunid)
   Call wksp.EditDocument(False, Ndoc,False,,True,True)
End Sub
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: DAU-in am 29.10.08 - 12:52:15
Schmeiß mal zwischendurch das doc weg und/oder setze mit GetDocumentByUNID ein anderes NotesDocument.


äääääääääää

wo schmeisst du hier das doc weg?
und warum brauchst du ein NDoc bzw. warum deklarierst du ein doc zum NDoc dazu?
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: lotus blue am 29.10.08 - 13:40:34
Hallo Mädels :-P

also zunächst (zwar schon mal gemacht aber doppelt hält besser) nochmal alles kontrolliert.
Der selbe Server, die gleiche DB, nichts auf Lokal oder der gleichen.
Und sonst auch nix. Der zweite Benutzer ändert was und speichert es auch.
............usw.

Dann nochmal das Script von Thomas ausprobiert-> es tut sich nix. Script läuft ohe Fehler durch, ändert aber nix.

Zu guter letzt das Script von TRO ausprobiert und --> 
 :love: :love: :love: :knuddel: :knuddel: es funzt.

Danke TRO
auch wenn ich momentan gar nix mehr kapier und der Kopf raucht
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: TRO am 29.10.08 - 14:04:59
Hallo DAU-in,

mit der Zeile Delete uidoc wird das Frontend- und damit auch das Backend-Doc verworfen.

Bei dem GetDocumentByUNID wurde offensichtlich auf das BE-Doc im Cache/Hauptspeicher zurückgegriffen, was nach dem Delete unmöglich wurde.

Das mit dem Ndoc ist in diesem Fall überflüssig (bei mir brauch ich das schon, da ich meist parallel zum setzen des Frontend-Doc auch das BE-Doc in einer Variable ablege).
Titel: Re: Call uidoc.Reload - Aktualisieren eines Doks im Lesemodus
Beitrag von: DAU-in am 29.10.08 - 14:10:54
aber das doc bzw. das Ndoc ist zu diesem Zeitpunkt doch noch gar nicht belegt?

Ich verstehe das jetzt nicht.