外部のコントロール: Word

外部のActiveXコンポーネント、すなわち、SAP GUIの外の独自のウィンドウで実行されるアプリケーション(または可視ウィンドウを持たないアプリケーション)は、VBScriptの標準関数”CreateObject”を用いて呼び出すことができます。VBScript関数におけるパラメーターや戻り値の受け渡しに加え、GuiXTと通信を行うための専用のオブジェクト”guixt”を使用します。これは、VBScript関数が呼び出される前に、GuiXTにより自動的に作成されます。特に、”guixt”では以下のメソッドが用意されています。

  • guixt.get()およびguixt.set()。GuiXTスクリプト変数V[xxx]の内容を設定/取得します。
  • guixt.getText()およびguixt.setText()。GuiXTロングテキスト変数text[….]の内容を設定/取得します。

この後のチュートリアルで、”guixt”オブジェクトのその他のメソッドについて説明します。

外部のActiveXコンポーネントを呼び出す例として、MS Wordを用いたGuiXTテキストボックスのスペルチェックを実装します。ユーザーは、SAP GUIトランザクションにおいてテキストボックスにテキストを入力し、”Spell check”(スペルチェック)ボタンをクリックします。すると、MS Wordが起動され、インタラクティブなスペルチェックが実行されます。このスペルチェック実行中、ユーザーはスペルが間違っている単語を修正できます。修正されたテキストは、GuiXTテキストボックスに反映されます。

今回のGuiXTスクリプトは、グループボックスで囲まれたテキストボックスとプッシュボタンを作成します。

Box (15,1) (26,72) “Text (Demo GuiXT Controls)”
Textbox
 (16,1) (24,72) name=“iwtext”
Pushbutton
 (25,2) “Spell check” process=“spellcheck.txt”

このように表示されます。

InputScriptの”spellcheck.txt”は、VBScript関数”spellcheck”を呼び出し、チェックしたいGuiXTロングテキストの名前(今回の場合は”iwtext”)を渡します。

CallVBS msg = spellcheck “iwtext”

if V[msg]
Message
 “E: &V[msg]” –statusline
else
  Message
 “S: Spell check done” -statusline
endif

VBScript関数は、MS Wordのスペルチェックを介してロングテキスト”iwtext”を変更します。技術的なエラーが発生した場合(PCにMS wordがインストールされていないなど)は、VBScript関数はエラーメッセージを返します。

MS Wordでは、数多くの属性やメソッドを持つ非常に豊富なオブジェクトモデルが用意されているため、Wordとの通信は複雑です。インターネット上で同様のタスクやサンプルプログラムがないか検索することを常に推奨します。インターネット上には、一般的に使用されているコントロール(WordのコントロールやExcelのコントロールなど)を用いたタスクやサンプルプログラムが数多く用意されています。

今回のVBScript関数”spellcheck”は、”Word.Application”オブジェクトを作成し、GuiXTロングテキストをWordドキュメントにコピーします。その後、MS Wordに内蔵されているインタラクティブなスペルチェックを呼び出します。そして、修正されたテキストでGuiXTロングテキスト変数を更新します。このとき、Wordは各行末でCR(キャリッジリターン)を使用しますが、GuiXTのテキストボックスは”CRLF”(キャリッジリターン + ラインフィード)が必要だということを考慮する必要があります。ここでは、Replace(doc.Content.Text,vbCr,vbCrLf)コマンドを使用して、テキストの行の構造を維持します。

Function spellcheck(txtname)

‘ MS Word application
dim myWord

On Error Resume Next
      Set myWord = CreateObject(“Word.Application”)
On Error Goto 0

If IsEmpty(myWord) Then
spellcheck = ”Sorry - MS Word not installed”
Exit Function
    End If
    
    Call myWord.Resize(400,300)
myWord.Caption = ”Spell checking”

myWord.Visible = True

dim doc
Set doc = myWord.Documents.Add
doc.Activate

doc.Content.Text =  guixt.getText(“iwtext”)

doc.CheckSpelling

Call guixt.setText(“iwtext”, Replace(doc.Content.Text, vbCr, vbCrLf))

doc.Saved = False
doc.Close (0)

Set doc = Nothing
myWord.Quit
Set myWord = Nothing

spellcheck = ””

End Function

ユーザーの視点からの機能全体:

ユーザーは、テキストを入力し、”Spell check”ボタンを押します。

スペルに誤りがある場合、Wordのスペルチェックウィンドウが開き、修正案が表示されます。ユーザーは、インタラクティブに修正を行います。修正されたテキストは、最終的にGuiXTテキストボックスに反映されます。