Externe ActiveX-Komponenten, die ausserhalb des SAP GUI Fensters als eigenständige Anwendungen laufen, können mit VBScript Standardmitteln aufgerufen und gesteuert werden.

Als Beispiel für das Benutzen einer externen ActiveX-Komponente implementieren wir eine Rechtschreibprüfung für eine GuiXT-Textbox über Microsoft Word. Der Benutzer gibt einen Langtext ein und kann dann über eine Drucktaste die Rechtschreibprüfung auslösen. Wir starten eine Word-Anwendung, übergeben den Text und führen die Rechtschreibeprüfung durch. Der Benutzer kann den Text korrigieren, der dann automatisch wieder in die GuiXT Textbox zurückgestellt wird.

Das GuiXT Script legt eine Textbox und eine Drucktaste sowie um die beiden Elemente einen Gruppenrahmen an:

Box (15,1) (26,72) "Rückmeldungstext"
Textbox
(16,1) (24,72) name="iwtext"
Pushbutton
(25,2) "Rechtschreibprüfung" process=
"spellcheck.txt"

Das sieht dann wie folgt aus:

Das InputScript "spellcheck.txt" ruft eine VB.NET Funktion "spellcheck" auf und übergibt den Namen des GuiXT Langtextes, der geprüft werden soll, also "iwtext":

CallVB msg = utilities.class1.spellcheck "iwtext"

if
V[msg=ok]
  Message "S: Rechtschreibung korrekt" -statusline
else
  Message
"E: &V[msg]" -statusline
endif

Return

 

Die VB Funktion ändert den Langtext "iwtext" über die Word-Rechtschreibprüfung. Falls ein technischer Fehler auftritt, zum Beispiel MS Word auf dem PC nicht installiert ist, gibt die VB Funktion eine Fehlermeldung zurück.

Wir erzeugten das "Word" Objekt und kopieren dann den GuiXT Langtext in das Dokument. Anschliessend wird die interaktive Rechtschreibprüfung aufgerufen. Der korrigierte Text wird in die GuiXT-Textvariable zurückgestellt, wobei die Zeilenumbrüche ein kleines Problem bereiten, das durch Ersetzen von CR durch CRLF gelöst werden kann: Word liefert nur CR am Zeilenende zurück (Carriage return), die Textbox verlangt aber CRLF (Carriage return + line feed):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Imports guinet
Imports Microsoft.Office.Interop


Public Class Class1

    Function spellcheck(ByVal txtname As String) As String

        Dim myguixt = New guixt
        Dim mytext = myguixt.GetText("iwtext")

        Dim myWord As Word.Application

        ' MS Word application
        Try
            myWord = CreateObject("Word.Application")
        Catch ex As Exception
            Return "Sorry - MS Word not installed"
        End Try

        If myWord Is Nothing Then
            Return "Sorry - MS Word not installed"
        End If

        ' text ok?
        If myWord.CheckSpelling(mytext) Then
            myWord.Quit()
            Return "ok"
        End If


        myWord.WindowState = Word.WdWindowState.wdWindowStateMaximize
        myWord.Caption = "Spell checking"
        myWord.Visible = True


        Dim doc As Word.Document
        doc = myWord.Documents.Add
        doc.Activate()

        doc.Content.Text = mytext

        doc.CheckSpelling()

        myguixt.SetText("iwtext", Replace(doc.Content.Text, vbCr, vbCrLf))

        doc.Close(SaveChanges:=False)

        myWord.Quit()

        Return ""

    End Function

End Class

Der Ablauf für den Benutzer:

Der Benutzer erfasst einen Text und drückt dann auf "Rechtschreibprüfung":

Im Fehlerfall erscheint ein Word-Window mit dem Korrekturvorschlag. Der Benutzer kann die Korrekturen akzeptieren und der geänderte Text wird automatisch in die GuiXT Textbox übernommen: