外部のコントロールと通信する

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テキストボックスに自動的に転送されます。