BASE HEADLESS (ohne gui ) betreiben

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

juergen_w1987
**
Beiträge: 48
Registriert: Fr, 04.02.2011 09:31

BASE HEADLESS (ohne gui ) betreiben

Beitrag von juergen_w1987 »

Hallo ich bräuchte etwas hilfe?

Mein Status: verwende Openoffice 3.2.x BASE mit den Extensions: Reportbuilder und Switchboard
und ein paar Makros (Import/Export)
So mein Wunsch / Problem:

Ich Möchte irgendwie die Datenbank Headless betreiben und zwar so, dass ich beim Öffnen nicht die Standard Base GUI sehe. Möchte nur mein Switchboard sehen und im Hintergrund keine Datenbank GUI wo man direkt auf die Tabellen, Formulare, Abfragen und Berichte zugreifen bzw diese bearbeiten kann.

Mein Status ist: beim Öffnen Started ein Makro die Switchboard-extension :), nur man sieht im hintergrund die Datenbank GUI und die soll für den Endanwender nicht sichtbar sein! :( Sonst kann der durch Bedienfehler etwas ungewollt verstellen. :?

Mir sind Zwei ideen gekommen und zwar:
1.) über Uno-Befehle irgendwie das Switchboard starten (Keine ahnung wie, bin da eine null. gibts da was?)
2.) Switchboard-Formular Exportieren. Problem nach dem Exportieren und einfügen der registrierten Datenbank sehe ich keine Einträge beim Öffnen des exp. Formulars (vermutlich durch switchboard extension bedingt).
3.) Eine andere tolle Lösung von euch.
Oder kann man die Datenbank irgendwie von einem Entwickler in einen User Modus Schalten?

bitte um eure Hilfe mfg
Jürgen
gogo
*****
Beiträge: 207
Registriert: Mi, 10.11.2010 13:11

Re: BASE HEADLESS (ohne gui ) betreiben

Beitrag von gogo »

Hallo!

Das GUI auszublenden ist kein Problem: (Wesentlicher Code und Beispieldatei: viewtopic.php?f=8&t=24675&hilit=extern+starter, bzw. "Makros in OpenOffice.org 3 – Basic/StarBasic" von Thomas Krumbein)

Code: Alles auswählen

sub GUI_ausblenden
	oWin = starDesktop.getCurrentFrame.getContainerWindow()
	oWin.visible = false
end sub
Das Makro wenn das GUI geöffnet ist unter Extras/Anpassen/Ereignisse dem Ereignis "Dokument öffnen" zuweisen, unten unter "Speichern in:" die aktuelle Datenbank einstellen, Speichern, DB neu starten und Du wirst die GUI nicht mehr finden... Es empfiehlt sich in dieser sub auch das Öffnen des Switchboards einzubauen ;)

Erfolg? - ja - ABER: Jetzt beginnen die Probleme!

visible = false kann vom User wieder rückgängig gemacht werden und das ist mehr oder weniger das kleinste Problem:

Erneutes Starten der DB: GUI wieder sichtbar
Formular per UNO öffnen: GUI manchmal wieder sichtbar
...

Ausserdem musst Du den User sehr stringent durch das Programm führen, sonst ist er verloren! Du musst ALLE Fenster-schliessen Befehle aus dem Programm putzen oder sie durch Programm-beenden Befehle ersetzen, sonst sind einmal alle Fenster zu, aber die Datenbank (und OOo) ist noch offen :( (Ich hatte ja schon erwähnt: Erneutes Starten der DB: GUI wieder sichtbar)
Das Erneute Starten zu verhindern ist eigentlich kein Problem (wie im obigen Link beschrieben die Datenbank per Starter starten, und vor dem Öffnen-Befehl für die Datenbank alle aktuell geöffneten Urls oder Applikationen abfragen (über StarDesktop.getComponents oder http://www.starbasicfaq.de/ListOfAllUrls.html#Zweig351) und wenn die von der DB schon offen ist, den Starter abbrechen...)

Es geht auch wenn man die sub GUI_ausblenden wie oben beschrieben auch dem Ereignis "Dokument aktivieren" zuweisen, allerdings solltest Du das NUR machen, wenn Du weisst wie man an Makros die in einer ODB-Datei gespeichert sind rankommt ohne die DB zu öffnen! (entzippen...) denn Du wirst dann feststellen, dass permanent die falschen Fenster ausgeblendet werden und den der Dir den Tipp für diese Funktion gegeben hat dorthin wünschen wo der Pfeffer wächst :).
Noch ein kleiner Tip: Verwende zum Testen dieser Funktion den Befehl "beep" und AUF KEINEN FALL PROMPTS (Msgbox ...)! Denn dabei wird jedesmal beim Klick auf OK das Ereignis "Dokument aktivieren" ausgelöst ...
Du kannst aber dieses Ausblenden der falschen Fenster verhindern, indem Du das GUI eindeutig identifizierst (mit StarDesktop.getComponents und immer weiter hangeln bis Du es gefunden hast) und die Eigenschaft visible dieses Objekts dann immer wieder auf false setzt. Der obige Befehl (starDesktop.getCurrentFrame.getContainerWindow()) ist ja nicht gerade eindeutig was die Fensterauswahl betrifft.

Damit wäre also das GUI weg, und die Datenbank einigermassen sicher. Allerdings scheint die Datenbank dadurch ziemliche Probleme zu bekommen. z.B. funktionieren bei mir dann Befehle wie dieser nicht mehr: ThisDatabaseDocument.FormDocuments.getByName( "Adressen" ).open über das UNO Service DatabaseDocument.FormDocuments.loadComponentFromURL kann man zwar an andere objekte ran, aber es gibt auch andere Probleme wie z.B.: "Es besteht keine Verbindung zur Datenbank!" - und das bei einer ODB die die eingebaute HSQL verwendet!!!

Bevor man also daran denkt, das GUI auszublenden sollte man sich gut überlegen wie interaktiv und dynamisch die DB einmal werden soll (je weniger desto eher kann man sich für's GUI-Ausblenden entscheiden).

Zu Guter Letzt: Da es meines Wissens nach keine Rechteverwaltung für Datenbankobjekte gibt, ausser sie kommt von der Backend Datenbank wird es wohl vorerst das Beste sein das Grafische User Interface (jaja, es ist eine Benutzeroberfläche) auch als solches zu verwenden - d.h. alle Symbolleisten und Menüs entsprechend säubern und den User dann drauf loslassen.

g
g
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5
gogo
*****
Beiträge: 207
Registriert: Mi, 10.11.2010 13:11

Re: BASE HEADLESS (ohne gui ) betreiben

Beitrag von gogo »

ach ja ... das sollte auch funktionieren:

http://wiki.services.openoffice.org/wik ... mmand_line

Der entsprechende Befehl von der Kommandozeile/Terminal aus ist dann (Linux):

soffice -base -headless /home/benutzer/Dokumente/MeineDatenbank.odb

Nachteil: Der Staroffice-Desktop ist auch für alle anderen Komponenten ausgeblendet und vor allem: Es ist NICHT möglich ein Makro zum Programmstart laufen zu lassen, da dieses Ereignis nicht eintritt! Somit ist Base zwar geladen, aber ... man kann nix machen. Abhilfe:

Man kann ein Makro, das die die Datenbank öffnet auch von der Kommandozeile aus laufen lassen, das geht auch im Headless Modus, aber leider kann ich Dir dazu nicht sagen wie man in diesem Makro korrekt eine Datenbank öffnet! Mit folgendem Code von eBayer:

Code: Alles auswählen

 	Dim oDatenbankKontext AS Object
  	Dim oDatenquelle As Object, oDispatch As Object
  	Dim oForm AS Object
  	Dim Args(1) As New com.sun.star.beans.PropertyValue
  	oDatenbankKontext = CreateUnoService ( "com.sun.star.sdb.DatabaseContext" )
	oDatenquelle = oDatenbankKontext.getByName( "TestDB" )
  	oForm=oDatenquelle.DatabaseDocument.FormDocuments.loadComponentFromURL("Formular1","_blank",0,args())

        oForm.DieseMethodeGibtEsNicht '<== Erklärung ganz unten im Post

... kann man zwar das Formular öffnen, es besteht aber KEINE Verbindung zur Datenbank!

Kann hier jemand weiterhelfen???

g

------------------------------------------------------------------------------------------------------------------------------------------------------------------
oForm.DieseMethodeGibtEsNicht <== erzeugt einen Fehler damit sich OOo nicht gleich wieder beendet!
http://www.starbasicfaq.de/KannmaneinMa ... itsta.html
g
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5
juergen_w1987
**
Beiträge: 48
Registriert: Fr, 04.02.2011 09:31

Re: BASE HEADLESS (ohne gui ) betreiben

Beitrag von juergen_w1987 »

danke für die schnellen antworten.

Irgendwie scheint alles nicht ganz perfekt zu sein. Mal schauen, werde mich morgen damit befassen (testen).

mfg
juergen_w1987
**
Beiträge: 48
Registriert: Fr, 04.02.2011 09:31

Re: BASE HEADLESS (ohne gui ) betreiben

Beitrag von juergen_w1987 »

Hy leute,


Bin bis jetzt mit der Lösung sehr zufrieden gewesen:

Code: Alles auswählen

sub GUI_ausblenden
   oWin = starDesktop.getCurrentFrame.getContainerWindow()
   oWin.visible = false
end sub
Nur hab ich jetzt ein problem beim Bericht schließen (siehe viewtopic.php?f=18&t=55212&p=210269#p210269 )

So Jetzt will ich die "GUI" wieder sichtbar machen. Nur wie funktioniert das wenn ich gerade einen Bericht oder ein Formular geöffnet habe?
Ihr könnt die Test.odb vom Link zum testen gerne verwenden

Bitte wieder einmal um eure hilfe

mfg
juergen_w1987
**
Beiträge: 48
Registriert: Fr, 04.02.2011 09:31

Re: BASE HEADLESS (ohne gui ) betreiben

Beitrag von juergen_w1987 »

keiner eine Lösung!!!
Antworten