Difference between revisions of "IT/Documentation/OOo3 User Guides/Getting Started/Sometimes the macro recorder fails"

From Apache OpenOffice Wiki
Jump to: navigation, search
Line 20: Line 20:
 
Comprendere il funzionamento di OpenOffice.org è importante per capire come e perché il registratore di macro a volte non funziona. La causa primaria è collegata al framework dei comandi e al suo collegamento al registratore di macro.
 
Comprendere il funzionamento di OpenOffice.org è importante per capire come e perché il registratore di macro a volte non funziona. La causa primaria è collegata al framework dei comandi e al suo collegamento al registratore di macro.
  
== Il framework dei comandi ==
+
==Il framework dei comandi==
Lo scopo del framework dei comandi è quello di dare dei componenti di accesso standard (documents) per i comandi che corrispondono di solito alle voci di menu. Posso fare clic su '''File > Salva''' direttamente dal menu, la scorciatoia da tastiera ''Ctrl+S'', oppure fare clic sull'icona '''Salva''' nella barra degli strumenti. Tutti questi comandi sono tradotti nella stessa “richiesta di comando“, che viene mandata al documento corrente.
+
Lo scopo del framework dei comandi è quello di dare dei componenti di accesso standard (documents) per i comandi che corrispondono di solito alle voci di menu. Posso fare clic su '''File > Salva''' direttamente dal menu, utilizzare la scorciatoia da tastiera ''Ctrl+S'', oppure fare clic sull'icona '''Salva''' nella barra degli strumenti. Tutti questi comandi sono tradotti nella stessa “richiesta di comando“, che viene mandata al documento corrente.
  
 +
Il framework dei comandi può anche essere utilizzato per inviare “comandi” direttamente all'interfaccia utente (UI). Per esempio, dopo che si salva il documento, il comando Salva è disabilitato. Non appena si esegue una modifica al documento, il comando viene nuovamente abilitato.
  
 +
Se vedete un comando di richiesta, si tratta di una stringa di testo come <tt>.uno:InsertObject</tt> oppure <tt>.uno:GoToStartOfLine</tt>. Il comando viene inviato al contenitore del documento e il contenitore tralascia il comando fino a quando non trova un oggetto che si può occupare del comando.
  
 +
== Come il registratore macro utilizza il framework dei comandi ==
 +
Il registratore di macro registra le richieste generate. Il registratore è relativamente semplice da implementare e i medesimi comandi che vengono eseguiti sono salvati per un utilizzo successivo. Il problema consiste nel fatto che non tutti i comandi di richiesta sono completi. Per esempio, l'inserimento di un oggetto genera il seguente codice:
  
  
Line 36: Line 40:
  
  
 
Il framework dei comandi può anche essere utilizzato per inviare “comandi” direttamente all'interfaccia utente (UI). Per esempio, dopo che si salva il documento, il comando Salva è disabilitato. Non appena si esegue una modifica al documento, il comando viene nuovamente abilitato.
 
 
Se vedete un comando di richiesta, si tratta di una stringa di testo come .uno:InsertObject oppure .uno:GoToStartOfLine. Il comando viene inviato al contenitore del documento e il contenitore tralascia il comando fino a quando non trova un oggetto che si può occupare del comando.
 
 
== Come il registratore macro utilizza il framework dei comandi ==
 
Il registratore di macro registra le richieste generate. Il registratore è relativamente semplice da implementare e i medesimi comandi che vengono eseguiti sono salvati per un utilizzo successivo. Il problema consiste nel fatto che non tutti i comandi di richiesta sono completi. Per esempio, l'inserimento di un oggetto genera il seguente codice:
 
  
 
  dispatcher.executeDispatch(document, ".uno:InsertObject", "", 0, Array())
 
  dispatcher.executeDispatch(document, ".uno:InsertObject", "", 0, Array())
Line 76: Line 73:
  
  
==The dispatch framework==
 
 
The purpose of the dispatch framework is to provide a uniform access to components (documents) for commands that usually correspond to menu items. I can use '''File > Save''' from the menu, the shortcut keys ''Ctrl+S'', or click on the '''Save''' toolbar icon. All of these commands are translated into the same “dispatch command", which is sent to the current document.
 
 
The dispatch framework can also be used to send “commands" back to the UI (User Interface). 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.
 
  
If we see a dispatch command, it is text such as <tt>.uno:InsertObject</tt> or <tt>.uno:GoToStartOfLine</tt>. The command is sent to the document's frame, and the frame passes on the command until an object is found that can handle the command.
 
  
 
==How the macro recorder uses the dispatch framework==
 
==How the macro recorder uses the dispatch framework==

Revision as of 12:50, 24 August 2010






Pagina in traduzione - translation in progress




Comprendere il funzionamento di OpenOffice.org è importante per capire come e perché il registratore di macro a volte non funziona. La causa primaria è collegata al framework dei comandi e al suo collegamento al registratore di macro.

Il framework dei comandi

Lo scopo del framework dei comandi è quello di dare dei componenti di accesso standard (documents) per i comandi che corrispondono di solito alle voci di menu. Posso fare clic su File > Salva direttamente dal menu, utilizzare la scorciatoia da tastiera Ctrl+S, oppure fare clic sull'icona Salva nella barra degli strumenti. Tutti questi comandi sono tradotti nella stessa “richiesta di comando“, che viene mandata al documento corrente.

Il framework dei comandi può anche essere utilizzato per inviare “comandi” direttamente all'interfaccia utente (UI). Per esempio, dopo che si salva il documento, il comando Salva è disabilitato. Non appena si esegue una modifica al documento, il comando viene nuovamente abilitato.

Se vedete un comando di richiesta, si tratta di una stringa di testo come .uno:InsertObject oppure .uno:GoToStartOfLine. Il comando viene inviato al contenitore del documento e il contenitore tralascia il comando fino a quando non trova un oggetto che si può occupare del comando.

Come il registratore macro utilizza il framework dei comandi

Il registratore di macro registra le richieste generate. Il registratore è relativamente semplice da implementare e i medesimi comandi che vengono eseguiti sono salvati per un utilizzo successivo. Il problema consiste nel fatto che non tutti i comandi di richiesta sono completi. Per esempio, l'inserimento di un oggetto genera il seguente codice:







dispatcher.executeDispatch(document, ".uno:InsertObject", "", 0, Array())

Non è possibile identificare il tipo di oggetto da creare o inserire. Se un oggetto viene inserito a partire da un file, non potete specificare quale file inserire.

Ho registrato una macro, e ho fatto clic su Strumenti > Opzioni per aprire e modificare la configurazione. Il registratore di macro non registra alcun cambiamento di configurazione; infatti, il codice generato è commentato in maniera tale da non poter essere eseguito.

rem dispatcher.executeDispatch(document,
    ".uno:OptionsTreeDialog", "", 0, Array())

Se aprite una finestra di dialogo, è come se la generaste solamente. Ogni azione che eseguite all'interno della finestra di dialogo non verrà registrata. Alcuni esempi includono la finestra di dialogo dell'organizzatore di macro, l'inserimento di alcuni caratteri speciale, ed altri tipi di finestre di dialogo. Altri possibili problemi nell'utilizzo del registratore di macro possono essere azioni come l'inserimento di una formula, l'impostazione dei dati utente o dei filtri in Calc, azioni eseguite nei moduli dei database e l'esportazione di un file in formato PDF criptato. Non sarete comunque mai certi di quello che funziona e quello che non funziona, fino a quando non lo provate. Le azioni eseguite nella finestra di dialogo di ricerca sono registrate correttamente, per esempio.

Altre opzioni

Quando il registratore di macro non è in grado di risolvere uno specifico problema, la soluzione di solito consiste nello scrivere direttamente il codice utilizzando gli oggetti di OpenOffice.org. Sfortunatamente, la curva di apprendimento per gli oggetti di OOo è abbastanza ripida. Di solito la cosa migliore da fare è cominciare con dei semplici esempi, per poi eseguire pian piano compiti sempre più complessi. Un buon punto di partenza consiste nell'imparare a comprendere il codice generato delle macro.

Se registrate delle macro in Calc, ed il registratore può generare correttamente la macro, esiste un'estensione creata da Paolo Mantovani, che converte le macro di Calc quando vengono registrate. Il codice finale manipola gli oggetti di OpenOffice.org invece di generare richieste. Può essere molto utile per imparare il modello a oggetti.

Potete anche scaricare il registratore di macro dal sito web di Paolo o direttamente dal sito OOo Macros. Assicuratevi sempre di confrontare entrambi i siti per vedere quale sia la versione più recente.

http://www.paolo-mantovani.org/downloads/ DispatchToApiRecorder/

http://www.ooomacros.org/user.php







How the macro recorder uses the dispatch framework

The macro recorder records the generated dispatches. The recorder is relatively simple to implement 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.

I recorded a macro and used Tools > Options 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, the command to open the dialog is likely to be generated. Any work done inside the dialog is not likely to be recorded. Examples 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, however. The actions from the search dialog are properly captured, for example.

Other options

When the macro recorder is not able to solve a specific problem, the usual solution is to write code using the OpenOffice.org objects. Unfortunately, there is a steep learning curve for the OOo objects. It is usually best to start with simple examples and then branch out slowly 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 created by Paolo Mantovani, which converts Calc macros when they are recorded. The final code manipulates OpenOffice.org objects rather than generating dispatches. This can be very useful for learning the object model.

You can download the macro recorder from Paolo's web site directly or from the OOo Macros web site. You should check both places to see which contains the latest version.

http://www.paolo-mantovani.org/downloads/DispatchToApiRecorder/

http://www.ooomacros.org/user.php

Content on this page is licensed under the Creative Common Attribution 3.0 license (CC-BY).
Personal tools