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