Difference between revisions of "L'enregistreur de macro OpenOffice.org et les appels UNO (dispatch)"

From Apache OpenOffice Wiki
Jump to: navigation, search
m (The OpenOffice.org recorder and UNO dispatch calls moved to L'enregistreur de macro OpenOffice.org et les Appels UNO (dispatch): Traduction de la page: The OpenOffice.org recorder and UNO dispatch calls)
(L'enregistreur de macro OpenOffice.org et les Appels UNO (dispatch) (checkpoint save))
Line 1: Line 1:
'''The OpenOffice.org recorder and UNO dispatch calls'''  
+
'''L'enregistreur de macro OpenOffice.org et les Appels UNO (dispatch)'''  
  
OpenOffice.org provides a recorder, to record a series of actions, in '''Writer and Calc only''', to produce some code. The recorder produces a series of UNO dispatch calls, which are not particularly useful for learning the OpenOffice.org API model. I personally find the code that the recorder produces to be a little hard to follow. It is generally considered preferable to use OpenOffice.org API calls but sometimes the only way or most convenient way is to use UNO dispatch calls.
+
OpenOffice.org fourni un enregistreur, pour enregistrer une série d'actions, dans '''Writer et Calc seulement''', pour produire du code. L'enregistreur produit une série d'appels UNO (dispatch), qui ne sont pas particulièrement pratique pour apprendre le modèle API d'OpenOffice.org. Je trouve personnelement que le code que produit l'enregistreur est un peu dur à suivre. Il est généralement préférable d'utiliser les appels API d'OpenOffice.org mais parfois le dispatcheur d'appels UNO reste la seule la méthode (ou la plus facile) de trouver les routines dont on a besoin.
  
For a list of dispatch calls see: http://www.openoffice.org/files/documents/25/2570/commandsReference.html
+
Pour une liste des appels du dispatcheur, voir : http://www.openoffice.org/files/documents/25/2570/commandsReference.html
  
Below are three versions of the same macro:  
+
Ci-dessous, trois versions de la même macro :  
  
*Recorded example
+
*L'exemple produit par l'enregistreur
*Tidied UNO dispatch calls
+
*Ré-arrangement des appels UNO (dispatcheur)
*API Calls
+
*Macro avec les appels API
  
The series of steps recorded were:  
+
La séquence des opérations enregistrées sont :  
  
Type "Some text" ; Press '''Enter'''; Type "A new paragraph with a "; '''Format > Character… > Bold > OK'''; Type "bold"; '''Format > Character… > Regular> OK'''; Type " word in it".  
+
Taper "Some text" ; Appuyer '''Entrée'''; Taper "A new paragraph with a "; '''Format > Character… > Bold > OK'''; Type "bold"; '''Format > Character… > Regular> OK'''; Taper " word in it".  
  
 
{| border="1"
 
{| border="1"
Line 82: Line 82:
 
</code>
 
</code>
  
==Tidied UNO dispatch calls==
+
==Ré-arrangement des appels UNO (dispatcheur)==
 
(This heading is linked to from [[ UNO Dispatch]], so if you change it change the link as well.)  
 
(This heading is linked to from [[ UNO Dispatch]], so if you change it change the link as well.)  
  
Line 117: Line 117:
 
</code>
 
</code>
  
==API calls==
+
==Macro avec les appels API==
Finally the same example using API calls:  
+
Finalement le même exemple en utilisant les appels API :  
  
 
<code>
 
<code>

Revision as of 14:22, 23 June 2009

L'enregistreur de macro OpenOffice.org et les Appels UNO (dispatch)

OpenOffice.org fourni un enregistreur, pour enregistrer une série d'actions, dans Writer et Calc seulement, pour produire du code. L'enregistreur produit une série d'appels UNO (dispatch), qui ne sont pas particulièrement pratique pour apprendre le modèle API d'OpenOffice.org. Je trouve personnelement que le code que produit l'enregistreur est un peu dur à suivre. Il est généralement préférable d'utiliser les appels API d'OpenOffice.org mais parfois le dispatcheur d'appels UNO reste la seule la méthode (ou la plus facile) de trouver les routines dont on a besoin.

Pour une liste des appels du dispatcheur, voir : http://www.openoffice.org/files/documents/25/2570/commandsReference.html

Ci-dessous, trois versions de la même macro :

  • L'exemple produit par l'enregistreur
  • Ré-arrangement des appels UNO (dispatcheur)
  • Macro avec les appels API

La séquence des opérations enregistrées sont :

Taper "Some text" ; Appuyer Entrée; Taper "A new paragraph with a "; Format > Character… > Bold > OK; Type "bold"; Format > Character… > Regular> OK; Taper " word in it".

Note: This would be best handled with autotext, but this simple example demonstrates the point.


Recorded example

   sub Example
   rem ----------------------------------------------------------------------
   rem define variables
   dim document   as object
   dim dispatcher as object
   rem ----------------------------------------------------------------------
   rem get access to the document
   document   = ThisComponent.CurrentController.Frame
   dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    
   rem ----------------------------------------------------------------------
   dim args1(0) as new com.sun.star.beans.PropertyValue
   args1(0).Name = "Text"
   args1(0).Value = "Some text"
    
   dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args1())
    
   rem ----------------------------------------------------------------------
   dispatcher.executeDispatch(document, ".uno:InsertPara", "", 0, Array())
    
   rem ----------------------------------------------------------------------
   dim args3(0) as new com.sun.star.beans.PropertyValue
   args3(0).Name = "Text"
   args3(0).Value = "A new paragraph with a "
    
   dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args3())
    
   rem ----------------------------------------------------------------------
   dim args4(0) as new com.sun.star.beans.PropertyValue
   args4(0).Name = "Bold"
   args4(0).Value = true
    
   dispatcher.executeDispatch(document, ".uno:Bold", "", 0, args4())
    
   rem ----------------------------------------------------------------------
   dim args5(0) as new com.sun.star.beans.PropertyValue
   args5(0).Name = "Text"
   args5(0).Value = "bold"
    
   dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args5())
    
   rem ----------------------------------------------------------------------
   dim args6(0) as new com.sun.star.beans.PropertyValue
   args6(0).Name = "Bold"
   args6(0).Value = false
    
   dispatcher.executeDispatch(document, ".uno:Bold", "", 0, args6())
    
   rem ----------------------------------------------------------------------
   dim args7(0) as new com.sun.star.beans.PropertyValue
   args7(0).Name = "Text"
   args7(0).Value = " word in it."
    
   dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args7())
    
   end sub

Ré-arrangement des appels UNO (dispatcheur)

(This heading is linked to from UNO Dispatch, so if you change it change the link as well.)

Now the same example having been tidied using a function for calling the UNO dispatch calls (some UNO Dispatch calls return a value so using a function makes it more generically useful than a sub):

   sub Example
       fnDispatch("InsertText", array("Text","Some text"))
       fnDispatch("InsertPara")
       fnDispatch("InsertText", array("Text","A new paragraph with a "))
       fnDispatch("Bold", array("Bold",true))
       fnDispatch("InsertText", array("Text","bold"))
       fnDispatch("Bold", array("Bold",false))
       fnDispatch("InsertText", array("Text"," word in it."))
   end sub


   function fnDispatch(sCommand as string, optional mArgs)
       oFrame = ThisComponent.getCurrentController.getFrame
       oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
       'on error resume next
       if isMissing(mArgs) then
           fnDispatch = oDispatcher.executeDispatch(oFrame, ".uno:" & sCommand, "", 0, array())
       else
           nArgs = uBound(mArgs) \ 2
           dim Args(nArgs) as new com.sun.star.beans.PropertyValue
           for i = 0 to nArgs
               Args(i).name = mArgs(i * 2)
               Args(i).value = mArgs(i * 2 + 1)
           next
           fnDispatch = oDispatcher.executeDispatch(oFrame, ".uno:" & sCommand, "", 0, Args())
       end if
   end function

Macro avec les appels API

Finalement le même exemple en utilisant les appels API :

   sub Example
       oVC = thisComponent.getCurrentController.getViewCursor
       oText = oVC.text
       oText.insertString(oVC, "Some text", False)
       oText.insertControlCharacter(oVC, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False)
       oText.insertString(oVC, "A new paragraph with a ", False)
       oVC.setPropertyValue("CharWeight", com.sun.star.awt.FontWeight.BOLD)
       oText.insertString(oVC, "bold", false)
       oVC.setPropertyValue("CharWeight", com.sun.star.awt.FontWeight.NORMAL)
       oText.insertString(oVC, " word in it.", false)
   end sub

Personal tools