外部のコントロールと通信する
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テキストボックスに自動的に転送されます。


