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:

|