[Gelöst] VBA-Funktionen unternehmensweit

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

Moderator: Moderatoren

Kappler
**
Beiträge: 29
Registriert: Mi, 23.01.2013 10:13

[Gelöst] VBA-Funktionen unternehmensweit

Beitrag von Kappler »

Moin,

ich versuche mich gerade darin, eine Funktionalität aus MS-Office, die bei uns im Unternehmen genutzt wird, in LO nachzubilden:


Unser PPS-System arbeitet in der Form mit MS-Office zusammen, dass Steuerdateien geschrieben werden, anschließend ein Makro gestartet wird und daraus dann ein entsprechendes Dokument auf Basis einer Vorlage (in der Steuerdatei ist diese spezifiziert) erstellt wird:
Rechnungen, Angebote, Auftragsbestätigungen...

In Word funktioniert das so, dass ich auf einem Netzwerklaufwerk eine Vorlage gespeichert habe, in der die entsprechenden VBA-Funktionen zur Kooperation abgelegt sind.
Diese Vorlage wird beim Word-Programmstart dadurch geladen, dass ich eine Verknüpfung auf diese Makrovorlage im 'Startup'-Verzeichnis der Office-Installation abgelegt habe.
Wenn sich die Vorlage ändert (Erweiterung von Funktionen), dann werden diese Änderungen durch das erneute Laden der Makro-Vorlage beim nächetn Programmstart automatisch übernommen.


Wie kann ich so etwas in OO/LO nachbilden?

Einfach nur die Vorlage beim Programmstart laden (über die Ereignisse) wird ja wohl nicht ausreichen, wenn ich den letzten Absatz HIER richtig interpretiere...

Eventuell wie HIER beschrieben die Vorlage vom Netzlaufwerk öffnen, die Bibliothek kopieren und die Vorlage wieder schließen?
Wird eine eventuell bereits vorhandene (vom letzten Starten) Bibliothek dann einfach überschrieben oder muss sie zunächst gelöscht werden?

Oder die Funktionalität als Extension exportieren? Kann diese automatisch upgedated werden, wenn sie sich auf dem Netzwerk geändert hat?


Was wäre denn der "sauberste" Weg, um möglichst ohne Interaktion an allen betroffenen Arbeitsplätzen auf benutzerdefinierte Funktionen/Makros zugreifen zu können und diese aktuell zu halten?
Vielleicht hat ja jemand von Euch so etwas mal implementiert und kennt einen passenden Weg dafür...

Danke und schöne Grüße aus dem Schwarzwald,
Andreas
Zuletzt geändert von Kappler am Mo, 31.08.2015 17:16, insgesamt 1-mal geändert.
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: VBA-Funktionen unternehmensweit

Beitrag von Stephan »

Was wäre denn der "sauberste" Weg, um möglichst ohne Interaktion an allen betroffenen Arbeitsplätzen auf benutzerdefinierte Funktionen/Makros zugreifen zu können und diese aktuell zu halten?
Meines Erachtens ist eine Extension der beste Weg.

(möglicherweise sind in bestimmten Fällen Makros in Vorlagendateien pragmatisch besser (z.B. kann hier die Verknüpfung eines Autostartmakros nicht ungewollt verloren gehen) aber nach dem was Du schreibst sind generell Extensions das Mittel der Wahl)
Oder die Funktionalität als Extension exportieren? Kann diese automatisch upgedated werden, wenn sie sich auf dem Netzwerk geändert hat?
Ja, eine Extension kann geupdatet werden, siehe z.B.:
http://www.openoffice.org/specs/appwide ... nsions.odt

im Unternehmenseinsatz macht das aber praktisch wohl niemand so (zumindest ist mir aus meiner Berufspraxis nichts bekannt) weil man dadurch ja faktisch die Kontrolle einbüßt, man würde in Firmen also die Extension-Updates einfach durch Überschreiben (Installation der neueren Extension-Version) der vorhandenen Extension-Version installieren, per unopkg lässt sich das ggf. auch per Script automatisieren.


Am Rande:
(a)
So ganz verstehe ich nicht die Formulierung 'Kann ... upgedated werden, wenn sie sich auf dem Netzwerk geändert hat?'

Wer ändert denn da was und wieso?
Eine Extension in einer Firma würde man doch sicher im Programm- und nicht Anwender-Kontext installieren, dann könnte aber nur der Admin direkt den Extensioncode editieren. Entsprechende Änderungen wäre dann doch aber sofort wirksam und brauchten kein (zusätzliches) Update.
Anders gesagt wäre es doch empfehlenswert die Codeänderungen nur in einer Testumgebung zu machen, dann die Code-Änderungen in eine neue Extensionversion einzupacken und diese Extension dann zum Update auf das Produktivsystem einspielen.

(b)
Obwohl ich mich sehr für Extensions ausspreche, gilt natürlich das Extensions nicht nur Code enthalten können sondern auch Vorlagendateien per Extension verteilt und also auch geupdatet werden können.


Gruß
Stephan
Kappler
**
Beiträge: 29
Registriert: Mi, 23.01.2013 10:13

Re: VBA-Funktionen unternehmensweit

Beitrag von Kappler »

Na, das bringt mich doch schon mal ein ganzes Stück weiter - Danke schön Stephan...
Ja, eine Extension kann geupdatet werden, siehe z.B.:
http://www.openoffice.org/specs/appwide ... nsions.odt
Puh - eine Menge Text...
Beim ersten Überfliegen wäre das aber wohl so, als würde man mit Kanonen auf Spatzen schießen
So ganz verstehe ich nicht die Formulierung 'Kann ... upgedated werden, wenn sie sich auf dem Netzwerk geändert hat?'

Wer ändert denn da was und wieso?
Verändern tue ich den Code von Zeit zu Zeit, und irgendwann soll er dann auf möglichst einfache Weise bei den Anwender-Arbeitsplätzen erscheinen...

Ich stelle mir das so vor (bitte korrigieren, falls ich mich hier irgendwie täusche):
- Ich schreibe den Code an meinem Rechner, die bewusste Bibliothek ist bei mir lokal unter "Meine Makros" abgelegt.
- Wenn ich der Meinung bin, dass die Geschichte "reif" ist, exportiere ich diese Bibliothek als Extension auf einen Netzwerkpfad
- Jetzt installiere ich einmalig diese Extension vom Netzwerkpfad auf jeder Arbeitsstation

Wie gehe ich jetzt vor wenn ich lokal wieder einige Änderungen/Erweiterungen vorgenommen habe und diese "veröffentlichen" will?
Wenn ich die geänderte Bibliothek wieder als Extension exportiere und die "alte" Extension damit überschreibe, dann wird doch wahrscheinlich nicht an allen Arbeitsstationen die neue Extension nachinstalliert, oder?
Dann müsste ich mich wahrscheinlich wieder auf die Wanderschaft begeben und an allen Rechnern die Extension neu installieren (vorher entfernen?)

Oder wäre es sinnvoll immer beim Rechnerstart an den Arbeitsstationen unopkg.exe in einem Skript laufen zu lassen um die jeweilige Extension vom Netzwerkpfad (sei sie geändert oder nicht) mittels "add und Option -f" generell neu zu installieren?

Oder wird die Extension generell beim Start von OO vom ursprünglichen Speicherort (dem Netzwerkpfad) geladen? Dann wäre ja automatisch die jeweils aktuelle Version installiert... (was die weitaus eleganteste Lösung wäre)

Schöne Grüße,
Andreas
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: VBA-Funktionen unternehmensweit

Beitrag von Stephan »

Beim ersten Überfliegen wäre das aber wohl so, als würde man mit Kanonen auf Spatzen schießen
Naja, nicht wirklich denn nicht alles ist obligatorisch, sondern Manches auch optional, im GRundsatz ist diese Art von Update aber dafür gedacht übers Internet zu updaten (also wenn bei OO unter EXtras-OPtionen das automaztische Suchen nach Programmupdates eingeschaltet ist werden auch entsprechende Extensionupdates gefunden) was ja in einem Unternehmen üblicherweise nicht sooo viel Sinn macht, schön man könnte das wohl auch im firmeneigenen Intranet anbieten.
- Ich schreibe den Code an meinem Rechner, die bewusste Bibliothek ist bei mir lokal unter "Meine Makros" abgelegt.
ja. technisch darf das nicht in der Bibliothek Standard sein, sondern Du musst dafür eine eigene Bibliothek anlegen, weil die Bibliothek namens "Standard" nicht (oder nicht ohne Problkeme) per Extension verteilbar ist.
- Wenn ich der Meinung bin, dass die Geschichte "reif" ist, exportiere ich diese Bibliothek als Extension auf einen Netzwerkpfad
Wozu genau?
- Jetzt installiere ich einmalig diese Extension vom Netzwerkpfad auf jeder Arbeitsstation
Mmmh, ja ich dachte bei meiner ersten Antwort das Du die Extension zentral in einem Netztwerkpfad installieren willst worauf dann alle Rechner zugreifen können.
Wenn ich die geänderte Bibliothek wieder als Extension exportiere und die "alte" Extension damit überschreibe, dann wird doch wahrscheinlich nicht an allen Arbeitsstationen die neue Extension nachinstalliert, oder?
Nein, bei dem Vorgehen was Du vorgeschlagen hast nicht.
Dann müsste ich mich wahrscheinlich wieder auf die Wanderschaft begeben und an allen Rechnern die Extension neu installieren


Wenn Du so vorgehen willst wie Du es selbst vorgeschlagen hast, dann ja.
vorher entfernen?)
definitiv nicht nötig, drüberinstallieren funktioniert zuverlässig, es muß nur darauf geachtet werden das der Identifier-String der alten und neuen Extension gleich sind - siehe Datei description.xml in der Extension (genaueres unter: https://wiki.openoffice.org/wiki/Docume ... L_Elements)
Oder wäre es sinnvoll immer beim Rechnerstart an den Arbeitsstationen unopkg.exe in einem Skript laufen zu lassen um die jeweilige Extension vom Netzwerkpfad (sei sie geändert oder nicht) mittels "add und Option -f" generell neu zu installieren?
Naja, es spricht nichts dagegen. "unopkg -h" habe ich mir gerade angesehen und damit sind DEine Parameter richtig, mir ist nur so (ich bin nicht sicher) das "-f" garnicht nötig ist, weil das 'forciertes' Überschreiben meint und unter normalen Umständen wohl schon add reichen sollte - aber bitte probiere es aus, ich will hier nichts Falsches sagen.
Oder wird die Extension generell beim Start von OO vom ursprünglichen Speicherort (dem Netzwerkpfad) geladen?
Nein, nicht so wie Du das vorhast, aber ich verstehe auch den Grund Deines Vorgehens nicht.

Was ich tun würde ist den Pfad für alle uno-packages auf allen lokalen Rechnern in einen Netzwerkpfad zu legen und dort die Extension zu installieren (nicht nur bereitstellen) so sollten alle Rechner auf ein und denselben Pfad zugreifen und die Extension muss immer nur dort geupdatet werden. Dafür gibt es im Netz sogar noch aus SUN-Zeiten Scripte, die aktuell waren als statt unopkg pkgchk genutzt wurde.

Da ich bei mir aktuell nur den Vorlagenpfad für alle Rechner meines Netzwerks in einem Netzwerkpfad zu liegen habe ist die einzig solide Antwort die ich geben kann, probiere es selbst aus, wie man Pfade liest/schreibt lässt sich im netzt finden, zum Einstieg reich wahrscheinlich auch meine Datei die das Benutzerverzeichnis ermittelt:
http://calc-info.de/files/OOo_Benutzerv ... is_1.0.odt


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

Re: VBA-Funktionen unternehmensweit

Beitrag von Stephan »

Was ich tun würde ist den Pfad für alle uno-packages auf allen lokalen Rechnern in einen Netzwerkpfad zu legen und dort die Extension zu installieren (nicht nur bereitstellen) so sollten alle Rechner auf ein und denselben Pfad zugreifen und die Extension muss immer nur dort geupdatet werden. Dafür gibt es im Netz sogar noch aus SUN-Zeiten Scripte, die aktuell waren als statt unopkg pkgchk genutzt wurde.

Da ich bei mir aktuell nur den Vorlagenpfad für alle Rechner meines Netzwerks in einem Netzwerkpfad zu liegen habe ist die einzig solide Antwort die ich geben kann, probiere es selbst aus, wie man Pfade liest/schreibt lässt sich im netzt finden, zum Einstieg reich wahrscheinlich auch meine Datei die das Benutzerverzeichnis ermittelt:
http://calc-info.de/files/OOo_Benutzerv ... is_1.0.odt
Ich ziehe diese Antwort vorerst zurück, denn ich stelle fest das es in:
http://www.openoffice.org/api/docs/comm ... tings.html

garkeine Möglichkeit gibt /user/uno_packages auf diesem Wege anzupassen.

(Ich habe mal an die dev-Mailingliste des Projekts geschrieben, wenn ich dort etwas rauskriege stelle ich es hier rein.)


Es bleibt somit (zunächst) dabei das Dein Vorschlag:

"Oder wäre es sinnvoll immer beim Rechnerstart an den Arbeitsstationen unopkg.exe in einem Skript laufen zu lassen um die jeweilige Extension vom Netzwerkpfad (sei sie geändert oder nicht) mittels "add und Option -f" generell neu zu installieren?"

der Sinnvollste sein dürfte.
(meine Aussage zu "-f" gilt weiter)


Gruß
Stephan
Karolus
********
Beiträge: 7438
Registriert: Mo, 02.01.2006 19:48

Re: VBA-Funktionen unternehmensweit

Beitrag von Karolus »

Es gibt auch die Möglichkeit unterhalb von ...user/uno_packages einfach einen Verzeichnislink nach <netzpfad_zentrale_config>/uno_packages/cache zu legen.
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: VBA-Funktionen unternehmensweit

Beitrag von Stephan »

Es gibt auch die Möglichkeit unterhalb von ...user/uno_packages einfach einen Verzeichnislink nach <netzpfad_zentrale_config>/uno_packages/cache zu legen.
das ist ein prima Hinweis, Danke.


Gruß
Stephan
Kappler
**
Beiträge: 29
Registriert: Mi, 23.01.2013 10:13

Re: VBA-Funktionen unternehmensweit

Beitrag von Kappler »

Na, das geht ja flott hier - vielen Dank für die Hilfe... :D

Zu Unopkg: Es sieht so aus als würde es auch ohne -f funktionieren...

Eine Möglichkeit das uno-packages-Verzeichnis zu verschieben hatte ich auch nicht gefunden, vielleicht findet sich noch eine Mölichkeit...

Aber das mit dem Verzeichnislink klingt interessant...
Nur ist mir (ich stehe bei der OO-Entwicklung noch weit am Anfang) nicht ganz klar, was dann in den Netzwerkordner rein soll bzw. wie ich meine Extension dort installiere...
Einfach eine Kopie des lokalen "/uno_packages/cache" - Verzeichnisses?
Lösche ich dann (nach dem Einfügen des Verzeichnis-Links) die Daten in dem Verzeichnis?

Und nach einem Update der Extension:
Wieder an einer Arbeitsstation die Extension-Installation ausführen? Wir dann gleich in den Netzwerkordner installiert?

Ich habe das gerade mal so ausprobiert wie oben beschrieben:
Es sieht so aus als würde der Verzeichnislink "ignoriert" und das cache-Verzeichnis wird neu erstellt.
In LiO ist dann die vorher installierte Bibliothek verschwunden und es wird eine neue Standard-Bibliothek lokal erstellt.
So einfach geht das wohl nicht - wie dann?
Karolus
********
Beiträge: 7438
Registriert: Mo, 02.01.2006 19:48

Re: VBA-Funktionen unternehmensweit

Beitrag von Karolus »

Hallo
Nur ist mir (ich stehe bei der OO-Entwicklung noch weit am Anfang) nicht ganz klar, was dann in den Netzwerkordner rein soll bzw. wie ich meine Extension dort installiere...
in den Netzwerksordner kopierst du deinen ...uno_packages/cache

dann musst du nur dafür sorgen das Alle Nutzer Leserechte drauf haben.

wenn die Benutzer dann an entsprechender Stelle eine symbolische Verknüpfung haben, sollte das reichen.
Sobald du die "Zentrale" updatest, ist im schlimmsten Fall lediglich ein Neustart von Offoce nötig.
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: VBA-Funktionen unternehmensweit

Beitrag von Stephan »

Eine Möglichkeit das uno-packages-Verzeichnis zu verschieben hatte ich auch nicht gefunden, vielleicht findet sich noch eine Mölichkeit...
ich hatte nur vergessen, das hier ins Forum zu schreiben, auf der Mailingliste bekam ich heute Morgen den Hinweis das in der Datei uno.ini zu ändern da steht nämlich der entsprechende Pfad (UNO_USER_PACKAGES) drin:

Code: Alles auswählen

[Bootstrap]
PKG_BundledUnoFile=$BUNDLED_EXTENSIONS_USER/registry/com.sun.star.comp.deployment.component.PackageRegistryBackend/unorc
PKG_SharedUnoFile=$SHARED_EXTENSIONS_USER/registry/com.sun.star.comp.deployment.component.PackageRegistryBackend/unorc
PKG_UserUnoFile=$UNO_USER_PACKAGES_CACHE/registry/com.sun.star.comp.deployment.component.PackageRegistryBackend/unorc
BAK_EXTENSIONS=${$OOO_BASE_DIR/program/bootstrap.ini:UserInstallation}/user/extensions/bak
BUNDLED_EXTENSIONS=$OOO_BASE_DIR/share/extensions
BUNDLED_EXTENSIONS_PREREG=$OOO_BASE_DIR/share/prereg/bundled
BUNDLED_EXTENSIONS_USER=${$OOO_BASE_DIR/program/bootstrap.ini:UserInstallation}/user/extensions/bundled
TMP_EXTENSIONS=${$OOO_BASE_DIR/program/bootstrap.ini:UserInstallation}/user/extensions/tmp
UNO_SERVICES=${ORIGIN}/services.rdb ${URE_MORE_SERVICES}
SHARED_EXTENSIONS_USER=${$OOO_BASE_DIR/program/bootstrap.ini:UserInstallation}/user/extensions/shared
UNO_SHARED_PACKAGES=$OOO_BASE_DIR/share/uno_packages
UNO_SHARED_PACKAGES_CACHE=$UNO_SHARED_PACKAGES/cache
UNO_TYPES=${ORIGIN}/types.rdb ${URE_MORE_TYPES}
UNO_USER_PACKAGES=${$OOO_BASE_DIR/program/bootstrap.ini:UserInstallation}/user/uno_packages
UNO_USER_PACKAGES_CACHE=$UNO_USER_PACKAGES/cache
URE_INTERNAL_JAVA_CLASSPATH=${URE_MORE_JAVA_TYPES}
URE_INTERNAL_JAVA_DIR=${ORIGIN}/classes
URE_INTERNAL_LIB_DIR=${ORIGIN}
Probiere es aus, ich habs noch nicht probiert.


Gruß
Stephan
Kappler
**
Beiträge: 29
Registriert: Mi, 23.01.2013 10:13

Re: VBA-Funktionen unternehmensweit

Beitrag von Kappler »

Ich habe jetzt beide Varianten ausprobiert - es will nicht...
Es wird weiterhin der lokale Pfad verwendet...
(Bei LibreOffice heißt die Konfigurationsdati übrigens louno.ini).

Ich denke ich werde weiter meine Variante mit der vorgeschlagenen Extension und dem Skript zum Aktualisieren beim Systemstart verfolgen.
Da weiß ich wenigstens was ich tue :D.

Vielen Dank für Eure Bemühungen,
Andreas
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: VBA-Funktionen unternehmensweit

Beitrag von Stephan »

Ich habe jetzt beide Varianten ausprobiert - es will nicht...
Es wird weiterhin der lokale Pfad verwendet...
(Bei LibreOffice heißt die Konfigurationsdati übrigens louno.ini).
Dann ist das aber (wieder einmal) ein Fehler in LibreOffice, sowohl in OOo 3.3.0 als auch in AOO 4.1.1 hatte ich es vor meiner kurzen Antwort an Karolus heute Morgen ausprobiert und es klappte auf Anhieb (unter Windows 7 und mein Netzwerkpfad liegt auf einem NAS das hier im Intranet hängt).


Gruß
Stephan
Kappler
**
Beiträge: 29
Registriert: Mi, 23.01.2013 10:13

Re: VBA-Funktionen unternehmensweit

Beitrag von Kappler »

Hast du das mit der INI-Datei oder dem Verknüpfung positiv getestet?

Falls es die Verknüpfungs-Geschichte war:
Könntest du es mir mal ganz genau (auch für Kappler verständlich 8) ) erklären, was du wohin kopiert / gelöscht und wo genau du eine Verknüpfung auf welches Verzeichnis abgelegt hast? (Ich hoffe, unter Verknüpfung verstehen wir das selbe (Windows): Rechte Maustaste auf den Netzwerk-Ordner, "Verknüpfung erstellen", die erstellte Verknüpfung dann in ein lokales Verzeichnis).

Ich habe nämlich etliche Kombinationen (Ordner uno_packages, Ordner cache) versucht und es wollte nicht.
Aber vieleicht habe ich ja auch was falsch gemacht?

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

Re: VBA-Funktionen unternehmensweit

Beitrag von Stephan »

Also von Verknüpfung ist nirgends die Rede gewesen sondern von einem Verzeichnislink:

z.B.:
http://www.windowspage.de/tipps/021555.html
auch für Kappler verständlich 8)
Du bist aber derselbe der eingangs schrieb:

"ich versuche mich gerade darin, eine Funktionalität aus MS-Office, die bei uns im Unternehmen genutzt wird, in LO nachzubilden:"



Gruß
Stephan
Kappler
**
Beiträge: 29
Registriert: Mi, 23.01.2013 10:13

Re: VBA-Funktionen unternehmensweit

Beitrag von Kappler »

Verknüpfung / Verzeichnislink...
Da musste ich erst mal googeln, was ein Verzeichnislink überhaupt ist :shock:. Nie gehört...
Daher habe ich das wohl für mich gleichgesetzt...
Du bist aber derselbe der eingangs schrieb:
"ich versuche mich gerade darin, eine Funktionalität aus MS-Office, die bei uns im Unternehmen genutzt wird, in LO nachzubilden:"
Doch, schon - ich sehe da auch nicht unbedingt einen Widerspruch...
Man darf halt "das Unternehmen" nicht mit einem größeren Betrieb verwechseln, der sich eine eigene IT-Abteilung oder zumindest dafür abgestellte Mitarbeiter leisten kann.
Bei uns muss das eher so nebenher laufen - und im Großen und Ganzen läuft das auch ganz gut :D.

Auch wenn dabei die eine oder andere Technik (siehe Verzeichnislink) mangels Zeit sich damit auseinanderzusetzen eher auf der Strecke bleibt...

Aber das klingt ganz interessant (auch Danke dafür, dass ihr mich hiermit bekannt gemacht habt), auch für andere Dinge die ich bisher wesentlich uneleganter gelöst bzw. umschifft habe.

Für mein aktuelles Problem habe ich mich für die Extension / Autostart-Skript Lösung entschieden, das lässt mir m.E. die Meiste Flexibilität.

Schöne Grüße,
Andreas
Antworten