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:
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.