Dokument bereits durch anderen Benutzer geöffnet

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

urbarobe
**
Beiträge: 25
Registriert: Mi, 08.07.2015 14:30

Dokument bereits durch anderen Benutzer geöffnet

Beitrag von urbarobe »

Hallo,

ich möchte prüfen, ob ein Dokument bereits durch einen anderen Benutzer geöffnet ist.
Zu einem geöffneten Dokument existiert eine Lockdatei. Die Lockdatei lässt sich durch
den Benutzer, der das Dokument nicht geöffnet hat, verändern und löschen. Also fällt
dieser Weg der Prüfung weg. Wenn ich das Dokument direkt über LibreOffice öffne,
dann kommt die Hinweismeldung 'Dokument in Benutzung'. Die Lockdatei ist gelöscht,
nur wo ist jetzt die Information gespeichert, wer das Dokument im Zugriff hat?
Kann hier jemand weiterhelfen?

LibreOffice 5.2.5.1 wird verwendet unter Windows 7.

Viele Grüße
Robert
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Dokument bereits durch anderen Benutzer geöffnet

Beitrag von Stephan »

Die Lockdatei lässt sich durch
den Benutzer, der das Dokument nicht geöffnet hat, verändern und löschen. Also fällt
dieser Weg der Prüfung weg.
Was soll dieserart Einwurf (="Also")? Der Benutzer der das Dokument nicht geöffnet hat ist doch der Benutzer der feststellen will ob es ein Anderer geöffnet hat - WARUM sollte er sich dabei selbst ein Bein stellen indem er eine dafür relevante Info selbst zerstört?

Ansonsten finde ich die gesamte Frage aber interessant, jedoch kann ich darauf nur antworten das die Information ob eine Datei geöffnet ist auch auf Ebene des Betriebssystems existiert, ich aber leider garnicht genau weiß wo.
Ich würde nach entsprechenden Infos dort suchen wo es um Sicherheit von portabler Software gibt, denn es gibt Seiten die sich damit beschäftigen welche Spuren Du auf einem Windows-PC hinterlässt wenn Du dort ein Portables Office benutzt.
Die Lockdatei ist gelöscht,
nur wo ist jetzt die Information gespeichert, wer das Dokument im Zugriff hat?
Auf Ebene LO muss es Infos zur Autowiederstellung geben WENN diese eingeschaltet ist, also auch nicht immer.


Ein universeller Wag schiene mir zu sein (ich habe das gerade nur sehr kurz getestet) die Datei per Makro zu öffnen, dabei sollte LO per Default eine schreibgeschützte Version der Datei öffnen/erzeugen und man kann diuesen Zustand abfragen.
Leider ist auch das nicht 100%ig sicher denn es kann ja Dateien geben bei denen absichtlich das Schreibschutzattribut (nicht auf Betriebssystemebene sondern im XML der Datei) gesetzt ist, z.B. bei Formularen ist das per Default so.

Ich würde aber einmal prüfen wie eine so geöffnet Datei reagiert wenn man per Basic Änderungen zu machen versucht, eine absichtlich schreibgeschützte Datei sollte ein Entfeernen des Schreibschutzes erlauben eine nur temporär geschützte Datei (weil anderweitig geöffnet) nicht. Ich weiß aber nicht wie die konkrete REaktion/Fehlermeldung in diesem Falle ausfällt.

ein kurzer Test mit:

Code: Alles auswählen

url=converttourl("D:\test.odt")
dim myFileProp() as new com.sun.star.beans.PropertyValue
oDocument = StarDesktop.loadComponentFromURL(url, "_blank", 0, myFileProp() )
cur = oDocument.Text.CreateTextCursor
cur.String = "abc"
oDocument.Store
liefert mir bei einer Datei die durch einen anderen Benutzer geöffnet ist bei oDocument.Store eine Fehlermeldung, sonst nicht.

mithin wäre eine LÖsung:

Code: Alles auswählen

Sub test()
url=converttourl("D:\test.odt")
    dim myFileProp() as new com.sun.star.beans.PropertyValue
    oDocument = StarDesktop.loadComponentFromURL(url, "_blank", 0, myFileProp() )
 	cur = oDocument.Text.CreateTextCursor
	cur.String = "abc"
	On Error goto fehler
	oDocument.Store
	Exit Sub
	
	fehler:
	Msgbox "Datei ist in Benutzung"

End Sub
(in Realität würde man natürlich nicht zwecks Prüfung Text ändern, sondern z.B. reine der Eigenschaften unter Datei-Eigenschaften per Basic ändern)


Gruß
Stephan
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Dokument bereits durch anderen Benutzer geöffnet

Beitrag von Stephan »

vergiss das zuletzt Gesagte, es reicht 'einfach so' zu speichern:

Code: Alles auswählen

url=converttourl("D:\test.odt")
    dim myFileProp() as new com.sun.star.beans.PropertyValue
    oDocument = StarDesktop.loadComponentFromURL(url, "_blank", 0, myFileProp() )
	On Error goto fehler
	oDocument.Store
	Exit Sub
	
	fehler:
	Msgbox "Datei ist in Benutzung"
Gruß
Stephan
urbarobe
**
Beiträge: 25
Registriert: Mi, 08.07.2015 14:30

Re: Dokument bereits durch anderen Benutzer geöffnet

Beitrag von urbarobe »

Danke Stephan für Deine Antwort.

Das mit dem Löschen bzw. Verändern der Sperrdatei habe ich openoffice.org Forum gefunden. Nur da hieß es,
das dies nicht funktionieren sollte. Und ich so eine Möglichkeit habe, festzustellen, das ein anderer
Benutzer das Dokument sperrt. Das man die Sperrdatei trotzdem löschen kann, hat mich doch sehr überrascht.
Die Sperrdatei muss doch exklusiv im Zugriff sein. Schließlich, wie Du schreibst, stehen da relevante Informationen,
wer das Dokument im Zugriff hat. Bei Excel kann man die Sperrdatei nicht löschen, solange das Dokument durch einen
anderen Benutzer in Verwendung ist.

Das Dokument zu speichern und den Fehler abzufangen, wenn dies nicht funktioniert, ist eine gute Idee. Nur ich
kann nicht Änderungen am Dokument durchführen, wenn das der Benutzer nicht selbst veranlasst. Änderungen am Dokument
werden auch in einer Datenbank abgelegt. Das läuft dann nämlich auseinander.

Das Dokument liegt im Netz. Die Benutzer greifen von ihren PC's auf das Dokument zu. Wenn die Sperrdatei gelöscht
wurden ist, dann kann doch die Information, dass das Dokument in Benutzung ist, nur im Verzeichnis des Dokumentes liegen.
Vielleicht ein Flag auf Dateisystemebene?

Viele Grüße
Robert
Antworten