Verständnisproblem zum DispatchHelper

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

Moderator: Moderatoren

juetho
******
Beiträge: 617
Registriert: Di, 20.04.2010 15:46
Wohnort: Berlin

Verständnisproblem zum DispatchHelper

Beitrag von juetho »

Hallo,

ich habe noch ein Problem, wie ich DispatchHelper richtig verwende. Meine Situation:
1. Ein Word-Dokument wird im Writer manuell geöffnet.
2. Ein OOo-Makro liest den Inhalt des ersten Dokuments in eine String-Variable.
3. Das Makro öffnet variabel (abhängig vom Inhalt des ersten Dokuments) ein anderes Word-Dokument.
4. Das Makro sucht im zweiten Dokument bestimmte Inhalte und fügt Teile der String-Variablen ein.
Alle Einzelteile sind mir klar; aber der richtige Aufruf des DispatchHelpers bereitet mir Schwierigkeiten.

Punkt 3 wird im wesentlichen so gelöst ("dest" steht für "Destination"):

Code: Alles auswählen

destDoc = StarDesktop.loadComponentFromURL( converttourl(destUrl), "_blank", 0,  myProps() )
Jetzt brauche ich Zugriff auf diese Datei. Aber so klappt es nicht:

Code: Alles auswählen

dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(destDoc, ".uno:GoToStartOfDoc", "", 0, Array())
Das führt zu folgendem Fehler (der übersteigt meine Englisch-Kenntnisse deutlich):
IllegalArgumentException
Message: cannot coerce argument type during corereflection call!
Alle Beispiele, die ich über die Forumssuche oder im Wiki gefunden habe, greifen immer auf das aktuelle Fenster zu:

Code: Alles auswählen

document = ThisComponent.CurrentController.Frame 
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") 
dispatcher.executeDispatch(document, ... )
Aber das aktuelle Fenster ist doch mein erstes Dokument; mit dem dispatcher will ich auf das zweite Dokument zugreifen. Welcher Typ wird als erstes Argument beim executeDispatch verlangt? Welcher Datentyp wird durch loadComponent zurückgegeben? Wie komme ich von diesem Typ zu dem Doc-Typ für den Dispatcher?

Danke für Hinweise und ggf. Erklärungen! Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Verständnisproblem zum DispatchHelper

Beitrag von DPunch »

Aloha
juetho hat geschrieben:

Code: Alles auswählen

destDoc = StarDesktop.loadComponentFromURL( converttourl(destUrl), "_blank", 0,  myProps() )
Jetzt brauche ich Zugriff auf diese Datei.
Auf die neu geöffnete Datei hast Du von nun an über "destDoc" Zugriff.
loadComponentFromURL liefert Dir direkt die Referenz auf das Model des neuen Dokuments.

Sprich dort kannst Du einfach so arbeiten, wie Du es auch im aktuell geöffneten Dokument, dass man sich in der Regel mit thisComponent holt, tun würdest.

Code: Alles auswählen

destDoc = StarDesktop.loadComponentFromURL( converttourl(destUrl), "_blank", 0,  myProps() )
oSearchDescriptor = destDoc.createSearchDescriptor
(...)
juetho
******
Beiträge: 617
Registriert: Di, 20.04.2010 15:46
Wohnort: Berlin

Re: Verständnisproblem zum DispatchHelper

Beitrag von juetho »

Wieder eine neue Arbeitsweise. :mrgreen:
DPunch hat geschrieben:Sprich dort kannst Du einfach so arbeiten, wie Du es auch im aktuell geöffneten Dokument, ...
Aufgrund des Makro-Recorders dachte ich, dass all das mit dem DispatchHelper erledigt würde (gehe an den Anfang, suche Text, gehe ein paar Zeichen nach rechts, einfügen).

Mit dem Stichwort createSearchDescriptor bin ich wenigstens in der [Doku] Editing Text Documents fündig geworden; das sollte mir tatsächlich weiterhelfen. Vermutlich geht das mit dem direkten Aufruf von Methoden auch einfacher als mit dem DispatchHelper und dessen komplexen com.sun.star.beans.PropertyValue-Instanzen.

Bis zum nächsten Problem. Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
Antworten