外部のコントロールと通信する
VB.NETの標準ツールを使用して、SAP GUIウィンドウの外で独立したアプリケーションとして実行されている外部のActiveXコンポーネントを呼び出したり管理したりできます。
外部のActiveXコンポーネントの使用例として、Microsoft Wordを用いたGuiXTテキストボックスのスペルチェックを実装します。ユーザーは、ロングテキストに文字を入力し、プッシュボタンでスペルチェックを開始できます。すると、Wordのアプリケーションが起動され、入力されたテキストが渡されてスペルチェックが実行されます。ユーザーは、テキストを修正することができます。このテキストは、GuiXTテキストボックスに自動的に転送されます。
GuiXTスクリプトは、テキストボックス、プッシュボタン、およびこの2つの要素に対するグループフレームを作成します。
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”は、VB.NET関数”spellcheck”を呼び出し、チェックしたいGuiXTロングテキストの名前”iwtext”を渡します。
CallVB msg = utilities.class1.spellcheck “iwtext”
if V[msg=ok]
Message “S: Spellcheck ok” -statusline
else
Message “E: &V[msg]” -statusline
endif
Return
VB.NET関数は、Wordのスペルチェッカーを介してロングテキスト”iwtext”を変更します。技術的なエラーが発生した場合(PCにMS wordがインストールされていないなど)は、VB.NET関数はエラーメッセージを返します。
ここでは、”word”オブジェクトを作成し、GuiXTロングテキストをドキュメントにコピーします。その後、インタラクティブなスペルチェッカーを呼び出します。正しいテキストがGuiXTテキスト変数に戻されますが、このとき、改行に関する問題が生じる場合があります。この問題は、検出されたCRをすべてCRLFに置き換えることで回避できます。Wordは、行末でCR(キャリッジリターン)のみ返しますが、テキストボックスではCRLF(キャリッジリターン + ラインフィード)が必要になります。
| 1 | Imports guinet |
| 2 | Imports Microsoft.Office.Interop |
| 3 | |
| 4 | |
| 5 | Public Class Class1 |
| 6 | |
| 7 | Function spellcheck(ByVal txtname As String) As String |
| 8 | |
| 9 | Dim myguixt = New guixt |
| 10 | Dim mytext = myguixt.GetText(“iwtext”) |
| 11 | |
| 12 | Dim myWord As Word.Application |
| 13 | |
| 14 | ‘ MS Word application |
| 15 | Try |
| 16 | myWord = CreateObject(“Word.Application”) |
| 17 | Catch ex As Exception |
| 18 | Return “Sorry - MS Word not installed” |
| 19 | End Try |
| 20 | |
| 21 | If myWord Is Nothing Then |
| 22 | Return “Sorry - MS Word not installed” |
| 23 | End If |
| 24 | |
| 25 | ‘ text ok? |
| 26 | If myWord.CheckSpelling(mytext) Then |
| 27 | myWord.Quit() |
| 28 | Return “ok” |
| 29 | End If |
| 30 | |
| 31 | |
| 32 | myWord.WindowState = Word.WdWindowState.wdWindowStateMaximize |
| 33 | myWord.Caption = “Spell checking” |
| 34 | myWord.Visible = True |
| 35 | |
| 36 | |
| 37 | Dim doc As Word.Document |
| 38 | doc = myWord.Documents.Add |
| 39 | doc.Activate() |
| 40 | |
| 41 | doc.Content.Text = mytext |
| 42 | |
| 43 | doc.CheckSpelling() |
| 44 | |
| 45 | myguixt.SetText(“iwtext”, Replace(doc.Content.Text, vbCr, vbCrLf)) |
| 46 | |
| 47 | doc.Close(SaveChanges:=False) |
| 48 | |
| 49 | myWord.Quit() |
| 50 | |
| 51 | Return “” |
| 52 | |
| 53 | End Function |
| 54 | |
| 55 | End Class |
ユーザーのイベント順序:

ユーザーは、テキストを入力し、スペルチェックボタンを押します。

スペルに誤りがある場合、Wordのウィンドウが開き、修正案が表示されます。ユーザーは、その提案を受け入れることができます。変更されたテキストは、GuiXTテキストボックスに自動的に転送されます。


