Makro zum öffnen einer Datei

@Villeroy
Hi
Ich habe den Python-Code ins user.Verzeichnis installiert.

Es funktioniert auch, allerdings war das Verbinden mit dem auszulesendem Pfad in Verbindung mit einer Abfrage (q_Completion) und dem Subform mit Textbox doch etwas mehr als “einfach”.

Was ich allerdings nicht checke:
Was machen die Zeilen:

import uno
from com.sun.star.form.FormButtonType import URL

Ich kann nämlich aus dem sonstigem Code der URLBButton.py nicht ersehen, was das/der Makro/Code macht, weill ich da nur Definitionen sehe.

def FileButton_Approve(oEv):
    openURL(oEv, True)

und was bedeutet die Zeile:

g_exportedScripts = URLButton_Approve, FileButton_Approve,

Danke

Lädt die Konstanten LibreOffice: com::sun::star::form Module Reference, so dass oModel.ButtonType = URL einen Sinn ergibt. URL hätte sonst keine Bedeutung.
Du kannst getrost beide Zeilen löschen und die Eigenschaft "Aktion= “Öffne Dokument oder URL” manuell setzten.

Auch die kannnst du getrost löschen. Wenn du diese Zeile löscht, werden im Makrodialog alle Routinen angezeigt, die das Modul enthält, also auch die dritte routine def openURL(oEv, bConvertToURL):, die aber nur indirekt durch die beiden anderen aufgerufen werden kann. Im Unterschied zu Basic, kann man bei Python-Makros nur die Routinen anzeigen lassen, die auch wirklich in den Makro-Dialogen auswählbar sein sollen. Probiere es aus! Lösche die letzte Zeile, weise openURL einer Schaltfläche zu, und beim Draufklicken fängst du eine Fehlermeldung, die besagt, dass die Anzahl der übergebenen Parameter nicht stimmt (“1 given, expected 2” oder so).

Hi
Danke für die Erklärungen … muss mich noch ein bisschen da reindenken …
z.b. was LibreOffice: com::sun::star::form Module Reference eigentlich ist … und wo das liegt.

Eine Frage stellt sich noch. Wie bringe ich das Makro dazu, relative Pfade zu akzeptieren, also …
statt /mnt/SATA1_H/MeinOfficeBasedat/Kräuter_Indikationen_Docs/ eben ./Kräuter_Indikationen_Docs/
Besten Dank
Libels

Für relative Pfade habe ich das zu simpel gestrickt. Du kannst den Pfad einfach in deiner Abfrage festlegen. Datenbanken wechseln ja nicht jeden Tag den Speicherort.
In meiner Beispieldatenbank kann der Pfad in einer Tabelle abgelegt werden. Du kannst den Pfad aber auch einfach in eine Abfrage schreiben.

SELECT *, '/mnt/SATA1_H/MeinOfficeBasedat/' || "Datei" AS "Pfad" FROM "tabelle"

Wählt die ganze Tabelle aus und zusätzlich ein Feld “Pfad” wo der Feldinhalt von “Datei” mit dem fehlenden Pfad verkettet ist.

Das wird dir auf Anhieb nicht gelingen. Du musst entweder programmieren lernen (für LO Base auf einigermaßen hohem Niveau) oder du musst ein paar Leuten vertrauen, dass sie es nicht darauf anlegen, dein System zu ruinieren.

Hi
Ich habe eine Tabelle (Setup) in welcher der Filepath abgelegt wird - so wie in der Beispieldatenbank.
In der downgeloadeten Beispieldatenbank steht da sogar ein relativer Pfad, nämlich “/temp/test/” der aber natürlich nicht funktioniert, weil es das Verzeichnis nicht gibt.
Wenn ich dort einen relativen Pfad eingebe - relativ zum Verzeichnis in dem die Datenbak befindlich ist, kommt eine Fehlermeldung, dass das entweder keine absolute URL ist oder aber die Datei nicht existiert.
Wenn ich den absoluten Pfad in eine Abfrage schreibe habe ich nichts gewonnen - da kann ich ihn ja gleich in die Tabelle “Setup” schreiben - wie eben jetzt. Ich würde das Makro aber gerne dazu bringen den relativen Pfad zum Datenbankverzeichnis zu akzeptieren :sunglasses: :wink:
lg Libels

Du musst den absoluten Pfad nur ein einziges mal in die Tabelle oder in die Abfrage schreiben und dann vielleicht noch mal falls sich der Pfad der Datenbank ändern sollte. Hast du eine Ahnung wie viele Stunden wir schon in dein Projekt investiert haben? Die einzige Lösung für dieses völlig unwichtige Problem wäre ein Makro, das den Pfad des Datenbankdokuments in die Tabelle schreibt oder in die Abfrage. Ich schreibe das nicht. Punkt.

Ja, gut - wollte niemandem die Zeit stehlen oder nerven.
Vielen Dank für die Erklärungen und Hinweise.

Hi
versuch erstmal so```

SUB Link_oeffnen
DIM oDoc AS OBJECT
DIM oDrawpage AS OBJECT
DIM oForm AS OBJECT
DIM oFeld AS OBJECT
DIM oShell AS OBJECT
DIM stFeld AS STRING
oDoc = thisComponent
oDrawpage = oDoc.Drawpage
oForm = oDrawpage.getForms.getByName(“frm_Anzeige_Art”)
oFeld = oForm.getByName(“int_tbl_Art.Pflanze”)
stFeld = oFeld.Text

ohne Sternchen natürlich, das sollte eigentlich eine Hervorhebung sein. Hat wohl nicht funktioniert :wink:

jetzt hat es doch noch funktioniert

@getobject.de
Ändert leider nichts.

Hi nochmal,

Also bei funzt es.

wichtig:

  1. Den Button mit der Aktion belegen MAKRO: Link_oeffnen
  2. Das Makro über den Button starten. Nicht manuell über F5 oder sonstiges.
    Im letzteren Fall liest du mit ThisComponent ein anderes Objekt womöglich die IDE
oFeld = oForm.getByName("int_tbl_Art.Pflanze")

Mit dieser Zeile stimmt etwas nicht. Liegt hier noch ein Listenfeld? Oder ist das nun wirklich der Name inklusive Punkt?