In diesem Tutorial kombinieren wir VB.NET Funktionen (Versenden einer E-Mail) mit dem Aufruf von SAP GUI Scripting.

WIr wollen einige Auftragsdaten (Transaktion VA03) in einer Zusammenfassung als E-Mail versenden:

Wir fügen zunächst einen pushbutton ein, der ein Inputscript aktiviert:

pushbutton (3,22) "@J8\QSend order as e-mail@Per E-Mail versenden " process="send_email_order_va03.txt"

Inputscript send_email_order_va03.txt:

// Kopie der E-Mail an
Set
V[ccRef] "pascal@synactive.com"

// Versende Zusammenfassung des Auftags per E-Mail
callvbasync
tutorials.utilities.send_order_html "&F[Auftrag]" "office@synactive.com" "Synactive Mitarbeiter" "ccRef" "Auftrag &F[Auftrag]"


Hinweis: Wir verwenden für das Einlesen der Positionen des Auftrags die guinet.dll Schnittstelle (SAP GUI Scripting) und müssen daher die asynchron arbeitende Variante von callVB verwenden: callVBAsync

Implementierung der Funktion "send_order":
(Die kompletten Code können Sie hier herunterladen: send_order.txt)

1. Fügen Sie dem VB.NET Projekt eine Referenz auf guinet.dll hinzu. Die Datei wird beim Setup von GuiXT mit installiert.



2. Erstellen Sie ein Objekt vom Typ guinet.guixt:

 ' Create instance of guixt
 
Dim g As New guinet.guixt

3. Lesen Sie die benötigten Daten aus:
(Für eine vollständige Liste aller Befehle siehe Synactive Doku -> GUI Scripting in VB)

 ' Start transaktion VA03
 g.GuiSession.Enter(
"/nVA03")

 ' Enter number of order
 g.GuiSession.SetField("VBAK-VBELN", orderno)
 g.GuiSession.Enter()

' Get some data of order
HTML &= "Nettowert: " & g.GuiSession.GetField("VBAK-NETWR") & " "
HTML &= g.GuiSession.GetField("VBAK-WAERK") & "<br>"

4. Sie können auch komfortabel ganze Tabellen einlesen, wir werden dies mit dem Befehl g.GuiSession.ReadTable für die Positionen des Auftrags tun:

' Define table for ReadTable()
Dim dt As DataTable = New DataTable("Orders")
dt.Columns.Add(
"POSNR")
dt.Columns.Add(
"MABNR")

' Read table with guinet.dll (SAP GUI Scripting)

g.GuiSession.ReadTable(dt)

5. Die eingelesene Tabelle ist vom Typ DataTable und muss für die Anzeige in der E-Mail noch in HTML-Format umgewandelt werden:

' Format table with HTML

For
i = 0 To dt.Rows.Count - 1
  HTML &= "<tr>"
 
HTML &= "<td>" & dt.Rows(i)(0) & "</td>"
 
HTML &= "<td>" & dt.Rows(i)(1) & "</td>"
 
HTML &= "</tr>"
Next

6. Schließlich versenden wir den HTML-String als E-Mail:

' Send e-mail with SMTP
Dim e As New
email
e.send_order(toEmail, toName, ccRef, subject, HTML)

Ergebnis: