HTML-Seiten können Sie mit GuiXT Controls sehr einfach einbinden. Es gibt zwei Möglichkeiten:

  • Sie geben die http-Adresse als ProgID in der controls-Anweisung an. Es wird dann automatisch das Explorer Control mit der angegebenen URL geöffnet. Zum Auslesen von Werten, Setzen von Werten und für automatisierte Benutzeraktionen (Klick auf Drucktasten) können Sie die connectHMTL-Anweisung nutzen.

  • Sie arbeiten direkt mit dem Microsoft Explorer Control progID="Shell.Explorer". Damit haben Sie sowohl die "connectHTML" Schnittstelle im GuiXT Script als auch  die Methoden des Controls (incl. DOM für das angezeigte Dokument) in VBScript zur Verfügung.

Als Beispiel wollen wir in Transaktion SE37 (Funktionsbibliothek) das "Google" Fenster einblenden und den angegebenen Funktionsbaustein im SAP Developer Network "sdn.sap.com" suchen. Wie in Tutorial 4 und 6 blenden wir die Anzeige über eine eigene Drucktaste ein:

 GuiXT

if V[show_se37_sdn=X]
  Box (6,0) (32,90) "Funktionsbaustein in SAP SDN"
  Pushbutton (6,91) "x" process="toggle_se37_sdn.txt" size=(1,2)
  Control (7,1) (32,90) progID="http://www.google.com" name="se37_sdn"
else
  Pushbutton (8,1) "Funktionsbaustein in SAP SDN suchen" process="toggle_se37_sdn.txt" size=(1,62)
endif

 

Damit ist der Ablauf wie folgt:

Der Benutzer drückt die Taste "Funktionsbaustein in SAP SDN suchen":

Das Google-Fenster wird eingeblendet (es ist gerade Halloween).

Wir setzen jetzt noch den angegebenen Funktionsbaustein in das Google-Eingabefeld  und  starten die Suche in "sdn.sap.com", beides mit der connectHTML Anweisung. Da bei Google der Such-Button zunächst "Google-Suche" und dann "Suche" heisst, sehen wir beide Möglichkeiten vor. Den Namen der Felder und Drucktasten in HTML können Sie sich mit connectHTML -showNames anzeigen lassen.

GuiXT
if V[show_se37_sdn=X]
  Box (6,0) (32,90) "Funktionsbaustein in SAP SDN"
  Pushbutton (6,91) "x" process="toggle_se37_sdn.txt" size=(1,2)
  Control (7,1) (32,90) progID="http://www.google.com" name="se37_sdn"

  connectHTML object="&V[se37_sdn]"
 
  Set html[text_q] "&F[Funktionsbaustein] site:sdn.sap.com"
 
  if html[submit_Google-Suche]
    connectHTML click="submit_Google-Suche"
  else
    connectHTML click="submit_Suche"
  endif

else
  Pushbutton (8,1) "Funktionsbaustein in SAP SDN suchen" process="toggle_se37_sdn.txt" size=(1,62)
endif

Die Google-Startseite wird dann automatisch prozessiert (sie flackert allerdings ganz kurz auf) und der Benutzer erhält folgende Anzeige:

Das gleiche führen wir nun direkt mit dem Control "Shell.Explorer durch", und zwar zunächst mit der connectHTML-Anweisung (was die bequemste Möglichkeit ist). GuiXT Script:

GuiXT
if V[show_se37_sdn=X]
  Box (6,0) (32,90) "Funktionsbaustein in SAP SDN"
  Pushbutton (6,91) "x" process="toggle_se37_sdn.txt" size=(1,2)
  Control (7,1) (32,90) progID="Shell.Explorer" name="se37_sdn" initFlag="se37_sdn_init"

if V[se37_sdn_init=X]
  CallVbs ie_init "&V[se37_sdn]" "http://www.google.com"
endif

  connectHTML object="&V[se37_sdn]"
 
  Set html[text_q] "&F[Funktionsbaustein] site:sdn.sap.com"
 
  if html[submit_Google-Suche]
    connectHTML click="submit_Google-Suche"
  else
    connectHTML click="submit_Suche"
  endif

else
  Pushbutton (8,1) "Funktionsbaustein in SAP SDN suchen" process="toggle_se37_sdn.txt" size=(1,62)
endif

Unsere VBScript Funktion "ie_init" benutzt die "Navigate()" Method des Controls, um zu der gewünschten URL zu navigieren:

VBscript

Function ie_init(ie, url)
    ie.Navigate(url)
End Function


Die gleichen Aktionen können wir auch direkt mit dem HTML-DOM (document object model) durchführen. Es sind dabei aber zwei DInge zu beachten:

  • Es ist nach "Navigate()" nötig, zu warten, bis das Dokument geladen ist, was bei "connectHTML" automatisch gemacht wird. Wir fragen den Zustand des Browser Controls ab und rufen "guixtDoEvents()" auf, solange das Dokument noch geladen wird.  Die Funktion "guixt.DoEvents()" wartet einige Millisekunden und verarbeitet dann asynchrone Nachrichten, die das Browser Control an sich selbst schickt.

  • Zum Adressieren der Felder muss man sich den Quellcode anschauen und den Namen oder die Id der Eingabefelder oder Drucktasten in Erfahrung bringen. Das ist nicht immer leicht, und die internen Bezeichnungen können sich auch ändern.

Aus diesem Grund ist das Arbeiten direkt mit dem DOM eher zu empfehlen, wenn die aufgerufene Seite selbst geschrieben wurde (siehe weiter unten).

Das Beispiel ohne connectHTML, mit eigenem Zugriff auf das Control und das HTML-DOM, sieht dann wie folgt aus:

GuiXT
if V[show_se37_sdn=X]
  Box (6,0) (32,90) "Funktionsbaustein in SAP SDN"
  Pushbutton (6,91) "x" process="toggle_se37_sdn.txt" size=(1,2)
  Control (7,1) (32,90) progID="Shell.Explorer" name="se37_sdn" initFlag="se37_sdn_init"

if V[se37_sdn_init=X]
  CallVbs ie_init "&V[se37_sdn]" "http://www.google.com"
endif

 CallVbs ie_google_search "&V[se37_sdn]" "&F[Funktionsbaustein] site:sdn.sap.com"

else
  Pushbutton (8,1) "Funktionsbaustein in SAP SDN suchen" process="toggle_se37_sdn.txt" size=(1,62)

endif

VBScript Funktion "ie_google_search":

VBscript
Function ie_google_search(ie,s)

 ' wait until document is loaded
  Const READYSTATE_LOADING = 1
  
  Do
   guixt.DoEvents()
   Loop While ie.ReadyState = READYSTATE_LOADING


   ' document
   Dim doc
   Set doc = ie.document
  
  ' set search string
  doc.getElementsByName("q")(0).value = s
  
  ' click search button
  doc.getElementsByName("btnG")(0).click()

    
End Function

Eigene HTML-Dateien und Kommunikation mit GuiXT

Falls Sie eigene HTML-Dateien einbinden, ist es zum Datenaustausch zwischen Script-Routinen in der HTML-Datei (VBScript oder JavaScript) und GuiXT nützlich, das "guixt" Objekt auch in den HTML-Script-Routinen zur Verfügung zu haben: Sie können dann Variablen und Langtexte aus GuiXT lesen und schreiben, RFC-Aufrufe durchführen und über guixt.input() SAP-Felder setzen und Aktionen durchführen.

Dazu rufen Sie nach der "Control"-Anweisung connectHTL object="..." auf, wobei Sie die Referenz auf das erzeugte Web Browser Control übergeben. Die connectHTML-Anweisung sorgt dafür, dass Sie html-Variablen aus GuiXT heraus lesen und setzen können. Zusätzlich sieht sie nach, ob es in dem HTML-Code eine Scriptroutine mit dem Namen "guixt_initialize" gibt. Falls ja, wird diese aufgerufen und als Parameter das "guixt" Objekt übergeben. Sie können sich das Objekt in einer globale Variable merken und später in den HTML-Script-Routinen verwenden.

Ein "Hello World"-Beispiel dazu:

GuiXT Script:

GuiXT
Set text[ot] "Hello World!"

Control (20,1) (24,120) progID="file:///C:\temp\gcomm.html" name="wb"

ConnectHTML object="&V[wb]"

Die HTML-Seite liest über das "guixt" Objekt den Langtext "ot" und gibt ihn aus:











 

Ergebnis: