Top > OOoBasic > Generic > dispatch

コマンドによる作業 Edit

OpenOffice.org 2.0 からスロット ID (slot-URL) による作業は推奨されなくなりました。その代わりにコマンドによる作業を使うことが推奨されています。

コマンドによる作業とは Edit

コマンドによる作業とはどのようなものでしょうか。これは,OpenOffice.org Basic でオブジェクトを利用して行うこととは少し性質が違います。すでに用意された作業を行わせるというものです。マクロの記録機能で使われているものと同じです。メニューからできる作業のほとんどがこのコマンドによる作業で行うことができます。

OpenOffice.org Basic を用いてマクロを書く際にこのコマンドによる作業は必要ないと思われるかもしれませんが,API 関数からアクセスできない作業にはこのコマンドによる作業は必要です。たとえば,クリップボードによるコピーや貼り付け,切り取りといった作業には必要です。

コマンド Edit

コマンドによる作業を行うには作業に対応したコマンド名を知る必要があります。

OpenOffice.org 2.0 系のコマンドは

http://www.openoffice.org/files/documents/25/2570/commandsReference.html

を参照してください。

また,OpenOffice.org 1.1 系のコマンドは

http://framework.openoffice.org/files/documents/25/1042/commands_11beta.html

を参照してください。

このコマンド一覧の見方を説明します。

実際に使用するコマンド名が表の一番左側の "commands" の列に並んでいます。この commands の項目に書かれているものの前に ".uno:" を付け加えて使用します。

DispatchHelper サービス Edit

実際にコマンドを使用して操作を行うときには DispatchHelper サービスの助けを借りて行います。このサービスのメソッド executeDispatch によりコマンドの操作を実行します。

サービスのインスタンス化は次のようにして行います。

Dim oDispatch As Object
  oDispatch = createUnoService("com.sun.star.frame.DispatchHelper")

コマンド作業の実行 Edit

コマンドの作業を実際に実行させるには前出の DispatchHelper サービスの executeDispatch メソッドにより行います。このメソッドの引数は 5 つあります。

  1. コマンドを実行するフレームオブジェクトを指定します。
  2. コマンド名 (".uno:コマンド名" の形式で指定する)
  3. ターゲットのフレーム名
  4. フレームを探すためのフラッグ
  5. コマンドのオプション引数の配列

実際の例で見てみることにします。

Calc で範囲全体を選択 (全て選択) してコピーさせる作業をコマンドにより行わせて見ます。この作業は二つとも API 関数から行うことができません。

使うコマンド名は次の二つです。

  • ".uno:SelectAll" 全て選択
  • ".uno:Copy" コピー
Sub SelectCopy
Dim oDoc As Object, oController As Object, oFrame As Object
Dim aEmptyArr()
Dim oDispatch As Object
  oDoc = ThisComponent
  oController = oDoc.getCurrentController()
  oFrame = oController.getFram()
  oDispatch = createUnoService("com.sun.star.frame.DispatchHelper")
  With oDispatch
    .executeDispatch(oFrame, ".uno:SelectAll", "", 0, aEmptyArr() )
    .executeDispatch(oFrame, ".uno:Copy", "", 0, aEmptyArr() )
  End With
End Sub

コマンドを実行するフレームオブジェクトはドキュメントオブジェクトの CurrentController から getFrame メソッドで取得します。

  oController = oDoc.getCurrentController()
  oFrame = oController.getFram()

コマンドを実行させる DispatchHelper サービスをインスタンス化したらコマンドを実行させます。

  oDispatch = createUnoService("com.sun.star.frame.DispatchHelper")

コマンドの実行の際の executeDispatch メソッドの一つ目の引数にはともにコマンドを実行したいドキュメントのフレームオブジェクトを指定しています。二つ目の引数にコマンド名を,三つ目の引数は殻の文字列を,四つ目の引数には 0 を指定しています。最後の引数には空の配列を指定しています。

  With oDispatch
    .executeDispatch(oFrame, ".uno:SelectAll", "", 0, aEmptyArr() )
    .executeDispatch(oFrame, ".uno:Copy", "", 0, aEmptyArr() )
  End With

このようにしてコマンドによる作業を実行させます。

どうしてもコマンドによる作業でしかできないことがあるのでコマンドによる作業は時々必要になってきます。

フレームとコントローラ Edit

DispatchHelper は実際ヘルパーサービスで普通はフレームまたはコントローラから queryDispatch を行います。

Sub SelectCopy_frame_1
Dim oDoc As Object, oController As Object, oFrame As Object
Dim oDispatch As Object
  oDoc = ThisComponent
  oController = oDoc.getCurrentController()
  oFrame = oController.getFram()
  
  aURL = CreateUnoStruct("com.sun.star.util.URL")
  aURL.Complete = ".uno:SelectAll"
  CreateUnoService("com.sun.star.util.URLTransformer")._
     parseStrict(aURL)
  oDisp = oFrame.queryDispatch(aURL, "_self", 0)
  If Not IsNull(oDisp) Then
    oFrame.queryDispatch( aURL, Array() )
  End If
End Sub

コントローラから行う場合には oFrame をコントローラに変えます。


Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes