Informationen über gesperrtes Dokument (.~lock ...) herausfinden

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

Moderator: Moderatoren

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

Informationen über gesperrtes Dokument (.~lock ...) herausfinden

Beitrag von Stephan »

Hallo,

wenn ein Dokument bereits in Benutzung ist bzw. zu einem früheren Zeitpunkt nicht richtig geschlossen wurde, erscheint beim Versuch das Dokument zu öffnen ein Hinweisdialog der folgenden Form:

lock-Meldung.gif
lock-Meldung.gif (14.44 KiB) 6752 mal betrachtet

Sieht jemand eine Möglichkeit wie ich an den Dateinamen der Datei komme, die das betrifft? Im vorstehenden Dialog also der rot unterstrichene Name.

Hintergrund:
ich würde gerne bei völlig beliebigen Öffnen von Dateien (egal ob Doppelklick, Datei-Öffnen im Menü, über Hyperlink, ...) diesen Namen rausfinden, so das ich nach Schließen des Meldungsdialogs, den Namen sofort in einem Makro nutzen kann.
Unter Extras-Anpassen-Ereignisse finde ich für das Öffnen von Dateien auch leider kein Ereignis kein Ereignis das stattfindet bevor der 'lock-Dialog' erscheint, wobei ich ohnehin meine Zweifel habe ob zu einen so frühen Zeitpunkt über das Dokumentobjekt schon die URL auslesbar wäre.

Letztlich geht es mir darum die überflüssige .~lock-Datei möglichst automatisiert löschen zu können, ohne über einen Datei-Auswahldialog nochmals die gesperrte Datei auswählen zu müssen.


Gruß
Stephan
Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Informationen über gesperrtes Dokument (.~lock ...) herausfinden

Beitrag von balu »

Hallo Stephan,
wenn ein Dokument bereits in Benutzung ist
Wenn es sich dabei um eine Benutzung aufm lokalen Laufwerk und lokalem Office handelt, also nicht Netzwerk(*), und nur mit einem Office(**) gearbeitet wird, und ferner wenn die Datei in dem aktiven Office geöffnet ist, dann würde ich den oComponentWalker einsetzen.

(*)
Netzwerk habe ich nicht, kann also nichts weiter dazu sagen ob und wo die '~lock'-Datei angelegt wird.

(**)
Also nicht gleichzeitig AOO und LO aktiv sind. In diesem Falle ist der oComponentWalker nutzlos. Zumindest nach meinen bisherigen Wissen.


zu einem früheren Zeitpunkt nicht richtig geschlossen wurde
Und hier tauchen noch ganz andere Probleme auf, zumindest aus meiner Laienhaften Ansicht.

Nicht immer wird das Fehlerfenster eingeblendet, wenn zu der zu öffnenden Datei eine '~lock-Datei' existiert. Die normale Datei wird also ganz einfach geöffnet.

Hört sich ja im ersten Augenblick ganz harmlos an. Jedoch aufm zweiten Blick sieht dass ein klein wenig anders aus.
Angenommen es gibt ne Möglichkeit den Pfad und den Dateinamen zu extrahieren um die '~lock-Datei' zu löschen, dann müsste ja erstmal überprüft werden ob sich die Datei nicht normal öffnen lässt. Wenn das also möglich ist, das öffnen, dann muss ja gar nicht mehr die '~lock-Datei' gelöscht werden. Also wäre das löschen der '~lock-Datei' per Makro an dieser Stelle überflüssig. Und wenn die geöffnete Datei gespeichert wird, wird dann auch die alte '~lock-Datei' gelölscht, so fern alles gut geht.

Das war das eine Problem.
Und jetzt kommt ein ganz anderes.

Ich hatte bei mir hier einen Ordner gefunden der einige '~lock-Dateien' beinhaltet. Und bei einer hatte ich versucht die dazugehörige normale Datei zu öffnen um zu sehen was 'genau' passieren wird. Und als ich das sah, wollte ich eine Idee von mir in einem kleinen Makro mal testen. Aber dabei bin ich auf ein anderes komisches verhalten gestoßen.

Ich konnte per simplen Makro die betroffene normale Datei nicht öffnen, es geschah einfach gar nix, die Datei wurde also nicht geöffnet, und es gab keine Fehlermeldung.
Hier das simple Makro dazu. Ist von Dannenhöfer und minimal geändert.

Code: Alles auswählen

Sub DateiOeffnen

dim oDocument as Object

    url=converttourl("C:\test.sxw")
    dim myFileProp() as new com.sun.star.beans.PropertyValue
    oDocument = StarDesktop.loadComponentFromURL(url, "_blank", 0, myFileProp() )

end sub
Um sicher zu gehen das dies kleine Makro auch funktioniert, hatte ich aus einem anderen Ordner eine andere Datei die kein '~lock' hat eingetragen. Und was soll ich sagen! Das Makro funktioniert.
Aber warum nicht mit der anderen Datei, die mit einem '~lock' versehen ist?

Also die gewünschte Datei direkt per Doppelklick geöffnet. Und dann sah ich mein Problem.
Die zu öffnende Datei hat wohl eine Dateigröße von 0KB, was normaler weise kein Problem ist.
ABER!!!
Bei dem manuellen öffnen erschien dann als erstes dies Fenster.
ASCII-Filter.jpg
ASCII-Filter.jpg (39.91 KiB) 6692 mal betrachtet
Nanu!?
Wie dat denn!?
Ich vermute das das mit folgendem zusammenhängt.

Ich habe auf der Partition C: das Betriebssystem und einige Programme installiert. Meine selbst erstellten Daten sind aber auf der Partition D: gespeichert. Und die gewünschte Datei wurde vor einer kompletten Neuinstallation vom Beriebssystem und den Programmen auf C: erstellt. Und da ist dann wohl irgendwie die Dateizuordnung, Einträge in der Win-Regestrie oder was auch immer abhanden gekommen. Und wahrscheinlich wird deshalb das 'ASCII FILTER-Fenster' eingeblendet.
Nur zur Info, damit es nicht zu missverständnissen kommt.
Die gewünschte Datei wurde mit dem gleichen Office mit der gleichen Versionsnummer erstellt, wie mit der der ich den jetzigen Test durchgeführt hatte.

Und erst nach einem klick auf "Abbrechen" erscheint dann dies Fenster.
in use.jpg
in use.jpg (48.2 KiB) 6692 mal betrachtet
Mit anderen Worten.
Vor der eigentlichen Meldung ob eine Datei "gelockt" ist, findet noch eine andere Überprüfung vom Office statt.


Aber warum, genauer gesagt was wollte ich denn mit dem kleinen Testmakro überhaupt testen?

In einem früheren Beitrag von dir hatte ich dir ja schon einmal Error-Funktion [Laufzeit] vorgeschlagen, was dir aber nicht geholfen hatte. Und jetzt wollte ich dir das auch wieder vorschlagen, aber erst nach einem Test. Denn so rein theoretisch könnten ja folgende Fehlernummern zurück gegeben werden.

Code: Alles auswählen

54	Dateimodus falsch
70	Zugriff verweigert
75	Pfad/Datei-Zugriffsfehler
Da ich momentan aber keine Datei habe die durch "gelockt" wirklich gesperrt ist, kann ich den Test nicht zu ende führen.



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Informationen über gesperrtes Dokument (.~lock ...) herausfinden

Beitrag von mikeleb »

Hallo,
laut API gibt es ein LockedDocumentRequest ...
https://www.openoffice.org/api/docs/com ... quest.html
Wenn ich jetzt noch wüsste, wie ich die API lesen muss, um mit der Info etwas anzufangen. Außer, dass es das gibt lese ich nichts heraus. Wo und wie anwenden?
Gruß,
mikeleb
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Informationen über gesperrtes Dokument (.~lock ...) herausfinden

Beitrag von Stephan »

Hallo Balu,
Wenn es sich dabei um eine Benutzung aufm lokalen Laufwerk und lokalem Office handelt, also nicht Netzwerk(*), und nur mit einem Office(**) gearbeitet wird, und ferner wenn die Datei in dem aktiven Office geöffnet ist, dann würde ich den oComponentWalker einsetzen.
da habe ich mich wohl falsch ausgedrückt, denn es geht nicht darum ein konkretes Dokument zu identifizieren, weil mehrere geöffnet sind (ja, es können zufällig mehrere geöffnet sein, aber das ist hier nicht mein Problem), sondern darum das ich zum Zeitpunkt wo der Dialog (siehe mein Screenshot) erscheint um welches Dokument es geht.
Dazu müsste ich aber erstens ein Ereignis abfangen das noch vor dem abgeschlossenen Öffnen des Dokuments eintritt (das Ereignis "Dokument öffnen" ist dafür zu spät, denn es tritt erst nach 'Wegklicken' des Dialogs auf) und aber spät genug damit das Dokumentobjekt schon erreichbar ist.

Aber Du hast mich auf eine Idee gebracht, ich kann ja im Dialog die Schaltfläche "schreibgeschützt öffnen" verwenden, die URL auslesen und sofort wieder schließen.
Das deckt zumindest ungefähr ab was ich will, Nachteil bleibt leider das ich so bei großem. langsam öffnenden Dokumenten viel Zeit brauche, denn ich muss ja erst das Laden abwarten.


Also ja, danke das bringt mich schonmal weiter.
Und hier tauchen noch ganz andere Probleme auf, zumindest aus meiner Laienhaften Ansicht.

Nicht immer wird das Fehlerfenster eingeblendet, wenn zu der zu öffnenden Datei eine '~lock-Datei' existiert. Die normale Datei wird also ganz einfach geöffnet.
Ja, dessen bin ich mir bewusst. Das geschieht im Grunde immer dann wenn die lock-Datei zum öffnenden Benutzer 'passt'.

Das ist für meine Frage aber ohne Bedeutung, denn wenn eine Datei trotz lock-Datei geöffnet wird, ist das der Fall wo mein Makro garkeine URL auslösen müsste, also sofort beendet werden kann (bzw. garnicht gestartet werden muss)


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

Re: Informationen über gesperrtes Dokument (.~lock ...) herausfinden

Beitrag von Stephan »

mikeleb hat geschrieben: Mi, 06.03.2019 20:37 Hallo,
laut API gibt es ein LockedDocumentRequest ...
https://www.openoffice.org/api/docs/com ... quest.html
Wenn ich jetzt noch wüsste, wie ich die API lesen muss, um mit der Info etwas anzufangen. Außer, dass es das gibt lese ich nichts heraus. Wo und wie anwenden?
Hallo mikeleb,

ja, das könnte 'es' sein. Mal sehen ob ich damit weiterkomme. Danke.


Gruß
Stephan
Hiker
******
Beiträge: 590
Registriert: Mo, 08.09.2014 21:34
Wohnort: Berlin

Re: Informationen über gesperrtes Dokument (.~lock ...) herausfinden

Beitrag von Hiker »

mikeleb hat geschrieben: Mi, 06.03.2019 20:37 Wenn ich jetzt noch wüsste, wie ich die API lesen muss, um mit der Info etwas anzufangen. Außer, dass es das gibt lese ich nichts heraus. Wo und wie anwenden?
Hallo,
eines fällt noch auf: Es ist als Exception gelistet.
In Basic müsste man also versuchen via ON ERROR den Fehler abzufangen.
Ich befürchte aber, dass man die Exception erst nach dem Dialog mit dem Nutzer bekommt, es Stephan also nicht weiter hilft.

Mfg, Jörn
Libre Office 6.3.1 (Win 10 Pro) / Libre Office 6.0.7 (Win8.1 Pro, Win 7 Pro) / AOO (Win 7)
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Informationen über gesperrtes Dokument (.~lock ...) herausfinden

Beitrag von Stephan »

nur zur Info:
aufgrund der Anregung von Balu habe ich das Ganze vorerst so gelöst:

-der Anwender muss beim Erscheinen des Dialogs (siehe Screenshot erster Beitrag) auf "Schreibgeschütz öffnen" klicken
-nachdem das die Datei schreibgeschützt geöffnet ist startet er (z.B. über einen Menüeintrag) folgendes Makro:

Code: Alles auswählen

Dim doc_addr As String
Dim lock_addr As String
Dim z, zz, z1, z2

Sub Dokument_entsperren()
	On Error Resume Next
	
	If ThisComponent.hasLocation Then
		doc_addr = ThisComponent.URL
		z = Split(doc_addr,"/")
		zz = UBOUND(z())
		z1 = z(zz)
		Redim Preserve z(zz-1)
		z2 = JOIN(z(),"/")
		
		ThisComponent.Close(True)
		
		kill z2 & "/.~lock." & z1 & "#"
		
		StarDesktop.loadComponentFromURL(doc_addr, "_blank", 0, Array())
	Else
		Msgbox "Dieses Makro ist nicht auf ungespeicherte Dokumente anwendbar.", 16, ""
	End If

End Sub

Gruß
Stephan

P.S. mit dem Hinweis von mikeleb habe ich mich noch nicht beschäftigt.
Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Informationen über gesperrtes Dokument (.~lock ...) herausfinden

Beitrag von balu »

Hallo Stephan,
Aber Du hast mich auf eine Idee gebracht
Interessant. Mir war das gar nicht bewusst.

Kennen wir das nicht alle?
Da grübelt man an einem Problem. Und plötzlich kommt aus einer total anderen Richtung ein Gedankenblitz daher, der eigentlich im ersten Augenblick gar nix mit dem eigentlichem Problem zu tun hat.

Ich bin mal sehr gespannt wie es weitergehen wird.
Viel Glück und Erfolg.



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Informationen über gesperrtes Dokument (.~lock ...) herausfinden

Beitrag von Toxitom »

hallo Stepfan,
-der Anwender muss beim Erscheinen des Dialogs (siehe Screenshot erster Beitrag) auf "Schreibgeschütz öffnen" klicken
-nachdem das die Datei schreibgeschützt geöffnet ist startet er (z.B. über einen Menüeintrag) folgendes Makro:
Wirklich mit Makro?? Warum so aufwendig?

Wenn Du das gesperrte Dokument schreibgeschützt öffnest und anschließend den Button "Dokument bearbeiten" anklickst, kannst Du das Dokument "normal" bearbeiten und auch speichern, die Lockdatei wird dabei überschrieben.

Also wozu das Makro? Mit zusätzlicher Einbindung?
Untitled.jpg
Untitled.jpg (26.51 KiB) 6484 mal betrachtet
VG
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Informationen über gesperrtes Dokument (.~lock ...) herausfinden

Beitrag von Stephan »

Also wozu das Makro? Mit zusätzlicher Einbindung?
Weil es unter OpenOffice funktionieren soll.


Gruß
Stephan
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Informationen über gesperrtes Dokument (.~lock ...) herausfinden

Beitrag von Toxitom »

Hab kein OpenOffice mehr... aber gab es da nicht den gleichen Befehl unter "Bearbeiten" oder unter "Datei"?

Gruß
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Informationen über gesperrtes Dokument (.~lock ...) herausfinden

Beitrag von Stephan »

aber gab es da nicht den gleichen Befehl unter "Bearbeiten" oder unter "Datei"?
Reden wir über Dasselbe? Ich habe mich momentan auf Deine Aussage verlassen das LibreOffice das kann was Du schreibst, aber ich habe es jetzt überprüft und auch LibreOffice beherrscht nur das Entsperren schreibgeschützter Dokumente (das kann OO auch) jedoch nicht das Entsprerren einer lock-Datei die Anwenderrechte voraussetzt.

Ich kann momentan "lock-Datei die Anwenderrechte voraussetzt" nicht genauer definieren. Zu Testzwecken habe ich (wie ich glaube) 08/15 lock-Datei erstellt und diese verhält sich so.


unter LO (6.0.3) läuft das hier wie folgt wenn ich es teste:

-erst kommt die Abfrage (siehe mein erster Post hier im Thread)
-öffne ich dann schreibgeschützt, bekomme ich die Schaltfläche aus dem Screenshot in Deinem Post
-klicke ich auf letztere Schaltfläche bekomme ich jedoch:
Meldung_LO.gif
Meldung_LO.gif (11.39 KiB) 6466 mal betrachtet

Das ist somit identisch zu AOO.


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

Re: Informationen über gesperrtes Dokument (.~lock ...) herausfinden

Beitrag von Stephan »

als Info zur lock-Datei die ich zum Testen verwende. Diese enthält Folgendes:

Code: Alles auswählen

Schmixdt,Esprimox935/Internext,Esxprimo7935,05.03.2019 20:57,file:///C:/Users/Internet/AppData/Roaming/OpenOffice.org/3;

und das ist so weil ich nur bei der lock-Datei die OOo 3.3.0 regulär anlegt einige "x" dazwischen geschrieben habe, damit sichergestellt ist das OO meint es versuche jetzt ein anderer Nutzer auf einem anderen PC zuzugreifen.


Gruß
Stephan
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Informationen über gesperrtes Dokument (.~lock ...) herausfinden

Beitrag von Toxitom »

Hallo Stephan,

Du hast wahrscheinlich recht. Ich nehme alle meine Kommentare zurück;)

Hatte das hier auf dem Netzwerk getestet - Datei erzeugt, Inhalt eingegeben, gespeichert. Datei offen gelassen.
Datei dann auf einem anderen Rechner im Netzwerk geöffent. Verhalten siehe oben.

Da man aber zu viel "Wissen" von Comutern etc hat, und ich davon ausging, dass ein Betriebssystem nicht zulässt, eine schon geöffnete Datei von einem anderen System (hier: entfernter Rechner) überschreiben zu lassen, hab ich natürlich zunächst auf Rechner 1 die Datei geschlossen und erstr dann die 2. gespeichert. hat natürlich funktioniert - aber beim korrekten Überlegen wurde beim Schliessen ja auch die Lock-Datei mit gelöscht.
Einen Absturz hab ich nicht simuliert... meine Systeme laufen recht stabil.

Also... wahrscheinlich brauchste doch das Makro:)

VG
Tom

PS: Im Münchener Projekt gab es damals ebenfalls viel Ärger über nicht gelöschte lock-Dateien im Netzwerk. Das wurde damals gelöst durch einen Batchfile, der nachts lief und alle noch zu findenden Lock-files löschte.
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Antworten