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:

pushbutton
(20,1) "Translate" process="translate_text.txt"
text
(22,1) "english"
TextBox
(20,13) (25,100) name="translate_this"
text
(27,1) "german"
TextBox
(26,13) (31,100) name="translated_text"

Inputscript "translate_text.txt":

callvb
guixt_translator.translator.translate "translate_this" "en" "translated_text" "de"
return

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.