In diesem Tutorial verwenden wir einen Übersetzungsdienst in einem Webbrowser-Control. Der zu übersetzende Text wird als URL-Parameter
übergeben, das Ergebnis der Übersetzung wird im Webbrowser-Control und
dort in der DOM Struktur ausgelesen und wieder an GuiXT zurückgeliefert.
Für die Eingabe verwenden wir
eine TextBox und greifen später auf den Inhalt über eine
Langtextvariable zu. Der Pushbutton ruft per InputScript eine VB.NET
Funktion auf, die später das Ergebnis der Übersetzung in die
Langtextvariable der zweiten Textbox stellt:
Inputscript "translate_text.txt": |
Implementierung
der VB.NET Funktion:
Fügen Sie eine Referenz auf die Datei guinet.dll zum Projekt hinzu und
ändern Sie den Typ des Projekts zu Klassenbibliothek (DLL):
Fügen Sie zudem noch eine Referenz auf System.Windows.Forms hinzu. Diese Bibliothek enthält das Webbrowser-Control.
Kopieren Sie bitte
anschließend die erstellte DLL zusammen mit der guinet.dll vom GuiXT Setup in
das Verzeichnis, das sie im GuiXT Profile angegeben haben.
Das VB.NET Coding sieht folgendermaßen aus:
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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | Imports guinet Imports System.Windows.Forms Public Class translator Inherits System.Windows.Forms.WebBrowser Private done As Boolean Public Function translate(ByVal textidIn As String, ByVal LangIn As String, ByVal textidOut As String, ByVal LangOut As String) As String 'Access to GuiXT variables and SAP GUI Session Dim g = New guixt 'Get content of GuiXT text variable Dim translateThis = g.GetText(textidIn) ' Example: ' https://www.deepl.com/translator#en/fr/The%20weather%20is%20nice.%0A ' Build translation URL Dim url = "https://www.deepl.com/translator#" & LangIn & "/" _ & LangOut & "/" & System.Uri.EscapeUriString(translateThis) done = False Navigate(url) ' wait until new document is loaded While Not done Application.DoEvents() End While ' text translation done Dim elems As HtmlElementCollection = Document.GetElementsByTagName("textarea") For Each e As HtmlElement In elems If e.GetAttribute("dl-test") = "translator-target-input" Then For i As Integer = 1 To 10 If e.InnerText Is Nothing Then Application.DoEvents() System.Threading.Thread.Sleep(500) Else If e.InnerText.Trim = translateThis.Trim Then Application.DoEvents() System.Threading.Thread.Sleep(500) End If End If Next g.SetText(textidOut, e.InnerText) End If Next Return "" End Function ' Document completed Public Sub MyDocumentCompleted(ByVal sender As Object, ByVal e As WebBrowserDocumentCompletedEventArgs) _ Handles Me.DocumentCompleted done = True End Sub End Class |
Bemerkungen und
Hinweise:
Zeile 14:
textidIn ist der Name der Langtextvariablen, die den zu
übersetzenden Text enthält. Um auf den Inhalt
zuzugreifen, verwenden wir guixt.getText.
Zeile 31:
Da wir nicht wissen, wie lange das Laden der Seite dauert,
warten wir auf das Ereignis "documentCompleted" des Browser-Controls.
Zeile 39:
Sobald die Seite vollständig geladen ist können wir auf die Elemente der Seite zugreifen. Uns
interessiert hier vor allem das Element mit dem übersetzten Text.
Zeile 57:
Der übersetzte Text wird mit guixt.SetText direkt im SAP GUI Fenster
angezeigt. "textidOut" enthält hierbei den Name der Langtextvariablen,
festgelegt durch name= beim Element TextBox. Dieser Name wird als Parameter an
die VB.NET Funktion übergeben.
Achtung: Aufgrund der Längenbeschränkung der URL, die den zu übersetzenden Text
als Parameter enthält, sollte bei längeren Texten jeweils nur ein Satz übersetzt
werden.