Operation Manual

Macro recorder failures
Sometimes the macro recorder has a failure and understanding LibreOffice internal workings helps
to understand how and why the macro recorder sometimes fails. The primary offender is related to
the dispatch framework and its relationship to the macro recorder.
Dispatch framework
The purpose of the dispatch framework is to provide uniform access to components (documents)
for commands that usually correspond to menu items. Using File > Save from the main menu bar,
the shortcut keys Ctrl+S, or clicking the Save icon are all of commands that are translated into the
same “dispatch command”.
The dispatch framework can also be used to send “commands” back to the User Interface (UI). For
example, after saving the document, the File Save command is disabled. As soon as the document
has been changed, the File Save command is enabled.
A dispatch command is text, for example .uno:InsertObject or .uno:GoToStartOfLine. The
command is sent to the document frame and this passes on the command until an object is found
that can handle the command.
How the macro recorder uses the dispatch framework
The macro recorder records the generated dispatches. The recorder is relatively simple tool to use
and the same commands that are issued are recorded for later use. The problem is that not all
dispatched commands are complete. For example, inserting an object generates the following
code:
dispatcher.executeDispatch(document, ".uno:InsertObject", "", 0, Array())
It is not possible to specify what kind of object to create or insert. If an object is inserted from a file,
you cannot specify which file to insert.
Recording a macro and using Tools > Options on the main menu bar to open and modify
configuration items, the generated macro does not record any configuration changes. In fact, the
generated code is commented so it will not even be run.
rem dispatcher.executeDispatch(document,
".uno:OptionsTreeDialog", "", 0, Array())
If a dialog is opened, a command to open the dialog is likely to be generated. Any work done inside
the dialog is not usually recorded. Examples of this include macro organization dialogs, inserting
special characters, and similar types of dialogs. Other possible problems using the macro recorder
include things such as inserting a formula, setting user data, setting filters in Calc, actions in
database forms, and exporting a document to an encrypted PDF file. You never know for certain
what will work unless you try it. For example, the actions from the search dialog are properly
captured.
Other options
When the macro recorder is not able to solve a specific problem, the usual solution is to write code
using the LibreOffice objects. Unfortunately, there is a steep learning curve for these LibreOffice
objects. It is usually best to start with simple examples and then increase the scope of macros as
you learn more. Learning to read generated macros is a good place to start.
If you record Calc macros, and the recorder can correctly generate a macro, there is an add-in
available which converts Calc macros when they are recorded. The final code manipulates
352 | Getting Started with LibreOffice 5.0