Frage stellen
0

Formular per Makro aktualisieren: Wie genau

gefragt 2020-11-05 15:48:36 +0100

Frankfurt Gravatar-Bild

updated 2020-11-05 15:49:35 +0100

Hallo, ich versuche ein Makro zu schreiben, das ein Formular aktualisiert (weil z.B. in einer Tabelle, die mit dem Formular verknüpft ist, etwas geändert wurde) ohne dass dabei der aktuelle Datensatz verlassen wird wie bei dem Aktualisierungs-Button in der Menü-Leiste. Meine bisherigen Versuche: Bildbeschreibung führen aber nicht zur Aktualisierung, d.h., das Makro landet zwar auf dem ersten Eintrag (durch wait 200 sichtbar) und springt dann korrekt auf den ursprünglichen Datensatz, aber die Änderungen an den verknüpften Tabellen, auf die zugegriffen wird, werden nicht gezeigt. Das Icon der Menü-Leiste dagegen erreicht die Änderung der Anzeige (bleibt aber auf dem 1. Eintrag stehen). Warum passiert hier nicht das gleiche, wie in der eingebauten Funktion. Ich dachte "reload" bedeutet Aktualisierung?

Bearbeiten Tags ändern Melden schließen vereinen löschen

Kommentare

Was genau meinst Du mit "Änderungen an den verknüpften Tabellen"? Willst Du vielleicht gar nicht das Formular aktualisieren sondern nur den Inhalt z.B. von Listenfeldern?

Das von Dir aufgelistete Makro macht genau das, was es soll: Den ursprünglichen Datensatz nach einem Neuladen wieder anzeigen. Nur Listenfelder, die eventuell geändert wurden, sind davon nicht berührt. Da müsstest Du mit oFeld.refresh nacharbeiten. Alles andere nur mit genauerer Beschreibung.

RobertG Gravatar-BildRobertG ( 2020-11-05 16:04:39 +0100 )Bearbeiten

In der Ausgangsform fülle ich über ein Kombinationsfeld einen Namen in ein Feld der Ausgangsform. Das Kombinationsfeld zieht die Namen aus einer anderen Tabelle. Wenn ich feststelle, dass ein Name in dieser Tabelle noch nicht angelegt ist, wechsle ich (ohne die Ausgangsform zu schließen) auf die Form, mit der ich in der Tabelle neue Einträge anlegen kann und füge den fehlenden Namen in die Tabelle ein. Nach schließen dieser Form lande ich wieder bei der Ausgangsform. In dem Kombinationsfeld ist der neue Eintrag aber nicht zu sehen. Wenn ich auf den "Aktualisieren"-Knopf in der Menüleiste drücke, falle ich auf den ersten Datensatz zurück, aber jetzt ist der neue Name im Kombinationsfeld verfügbar. Mit dem Makro oben komme ich zwar beim richtigen Datensatz wieder an, der neue Name fehlt aber immer noch im Kombinationsfeld.

Frankfurt Gravatar-BildFrankfurt ( 2020-11-05 17:40:43 +0100 )Bearbeiten

2 Antworten

0

geantwortet 2020-11-06 18:00:22 +0100

Frankfurt Gravatar-Bild

Ich hatte gehofft, eine einfachere Lösung zu finden (z.B. das eingebaute Makro aufrufen zu können, das nach dem Button "Aktualisieren" ausgeführt wird), nun also die beschwerliche: Bildbeschreibung Leider nun keine Event-Steuerung mehr (ich muss das gleiche mit 3 weiteren Formen machen, deshalb war das vorher so elegant)

Bearbeiten Melden löschen Link mehr

Kommentare

Alternative vielleicht:

SUB Refresh
dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:Refresh", "", 0, Array())
end sub

Alles mit dem Makrorecorder aufgezeichnet. Der UnoService ist in der Regel umfassender. Nur ein kleines Beispiel: Du kannst den Inhalt eines Formulars mit uno:Save (oder so ähnlich) abspeichern. Damit arbeitet auch der Button. Wenn Du mit den Methoden, die beim Formular zur Verfügung stehen, arbeitest, musst Du zuerst abklären, ob es sich um ein Update oder um ein Insert handelt.

RobertG Gravatar-BildRobertG ( 2020-11-07 08:57:54 +0100 )Bearbeiten

Ausprobiert: Perfekt!!! Mit dem ursprünglichen oEvent-Makro, ergänzt um deine UnoService-Befehle kann ich mit einem Makro 4 verschiedene Formen inkl. der Listen- und Kombinationsfelder aktualisieren.

Frankfurt Gravatar-BildFrankfurt ( 2020-11-07 12:34:10 +0100 )Bearbeiten
0

geantwortet 2020-11-06 17:54:56 +0100

RobertG Gravatar-Bild

updated 2020-11-06 17:55:27 +0100

Wenn der Inhalt von Listenfeldern oder Kombinationsfeldern außerhalb eines geöffneten Formulars geändert wird - auch über ein Nebenformular, das extra nur dazu eingeblendet wird - dann muss das Listenfeld oder Kombinationsfeld anschließend neu geladen werden. Dafür gibt es in der Navigationsleiste auch extra den Button "Steuerelement aktualisieren".

Für Makros heißt das: Das Feld muss angesprungen werden und dann ein oFeld.refresh laufen. Mit einem oForm.reload wirst Du nicht zu diesem Ziel kommen. Wundert mich, dass das mit dem "Aktualisieren"-Button läuft. Da müsste dann inzwischen etwas geändert worden sein, so dass nicht nur das Formular neu eingelesen wird sondern auch alle Listenfelder und Kombinationsfelder mit einem Refresh versehen werden.

Bearbeiten Melden löschen Link mehr

Kommentare

Das wird wohl so sein, denn bei dem Button klappt das gut.

Frankfurt Gravatar-BildFrankfurt ( 2020-11-06 18:02:24 +0100 )Bearbeiten
Registrieren oder einloggen, um zu antworten

Antwortwerkzeuge

1 Beobachter

Statistik

Gefragt: 2020-11-05 15:48:36 +0100

Angesehen: 38 Mal

Aktualisiert: Nov 06 '20