Externe ActiveX-Komponenten, die ausserhalb des SAP GUI Fensters als eigenständige Anwendungen laufen, können mit VBScript Standardmitteln aufgerufen und gesteuert werden. Zur Kommunikation mit GuiXT wird beim Laden des VBScript Programms automatisch ein Objekt "guixt" angelegt, das folgende Methoden anbietet:

  • guixt.get() und guixt.set() zum Lesen und Setzen von GuiXT Script Variablen V[xxx]

  • guixt.getText() und guixt.setText() zum Lesen und Setzen von Langtextvariablen text[....]

In den späteren Tutorials werden weitere Methoden des guixt-Objekts besprochen.

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 VBScript Funktion "spellcheck" auf und übergibt den Namen des GuiXT Langtextes, der geprüft werden soll, also "iwtext":

CallVBS msg = spellcheck "iwtext"

if
V[msg]
  Message
"E: &V[msg]" -statusline
else
  Message
"S: Rechtschreibprüfung beendet" -statusline
endif

Die VBScript 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 VBScript Funktion eine Fehlermeldung zurück.

Das Steuern der Word-Applikation wird dadurch etwas kompliziert, da Word ein sehr reichhaltiges Objektmodell mit vielen Methoden anbietet, sodass man in der Regel zunächst im Internet nach einer ähnlichen Lösung Ausschau halten sollte.

Die VBScript-Funktion "spellcheck" erzeugt das "Word" Objekt und kopiert 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):

Function spellcheck(txtname)

    ' MS Word application
    dim myWord 
    
    OnErrorResumeNext
      Set myWord = CreateObject("Word.Application")
    OnErrorGoto0
            
    IfIsEmpty(myWord) Then
        spellcheck = "Sorry - MS Word not installed"
        ExitFunction
    EndIf
    
    Call myWord.Resize(400,300)
    myWord.Caption = "Spell checking"
    
    myWord.Visible = True
    
    dim doc
    Set doc = myWord.Documents.Add
    doc.Activate
    
    doc.Content.Text =  guixt.getText("iwtext")
    
    doc.CheckSpelling
    
    Call guixt.setText("iwtext", Replace(doc.Content.Text, vbCr, vbCrLf))          
        
    doc.Saved = False
    doc.Close (0)
    
    Set doc = Nothing
    myWord.Quit
    Set myWord = Nothing
    
    spellcheck = ""
    
EndFunction

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: