Zum Erzeugen von Diagrammen
steht in .NET die Klasse System.Windows.Forms.DataVisualization.Chart
zur Verfügung.
Wir benutzen
die Klasse zum Einblenden eines Diagramms "Auftragseingang" in
Transaktion VD03 (Anzeige Kunden), Vertriebsbereichsdaten:
Die Implementierung besteht
aus
folgenden drei Schritten:
Einfügen
einer Drucktaste für die Diagrammanzeige, Einblenden der Grafikdatei
Lesen der
Auftragseingangsdaten
Erzeugen
des Diagramms als Bilddatei
Für den ersten Teil reichen
einige Scriptzeilen aus:
GuiXT
// Reset variables if new transaction or new customer
if not V[VD03_transactionid=&V[_transactionid]]
or not V[VD03_kunnr=&F[RF02D-KUNNR]]
Set V[VD03_*] ""
Set V[VD03_transactionid] "&V[_transactionid]"
Set V[VD03_kunnr] "&F[RF02D-KUNNR]"
endif
if Q[transaction=VD03] and Q[Page=Verkauf]
Set V[chartfilename] "&%[TEMP]\saleschart.&V[VD03_kunnr].png"
// display chart?
if V[VD03_display_chart=X]
Box (7,86) (22,135) "Auftragseingang &V[year4] - &V[year0] in Tausend"
Pushbutton (7,137) "x" size=(1,1) process="chart_close.txt"
Image (8,87) "&V[chartfilename]" -noBuffer
else
Pushbutton (7,86) "@NF\QGrafik einblenden@Grafik Auftragseingang" _
process="chart_open.txt"
endif
endif
InputScript "chart_open.txt":
GuiXT
// Generate chart
...
// Display chart
Set V[VD03_display_chart] "X"
Return
InputScript "chart_close.txt":
GuiXT
// Close chart
Set V[VD03_display_chart] ""
Return
Damit kann der Benutzer das
Diagramm über eine Drucktaste abrufen und danach wieder schließen:
Zur Datenbeschaffung
verwenden wir den Funktionsbaustein /guixt/select. WIr lesen eine der
Statistiktabellen des Vertriebsinformationssystems; entweder die
SAP-Standardtabelle S001 oder aus Performancegründen eine Kopie der
S001, in der die Materialnummer aus dem Schlüssel entfernt ist.
Anschliessend rufen wir VB.NET auf zum Erzeugen des Diagramms:
GuiXT
// Determine years
Set V[year0] &V[today_y]
Set V[year1] &V[year0] - 1
Set V[year2] &V[year0] - 2
Set V[year3] &V[year0] - 3
Set V[year4] &V[year0] - 4
// initialize sales figues
Set V[sales0] 0
Set V[sales1] 0
Set V[sales2] 0
Set V[sales3] 0
Set V[sales4] 0
// key values
Set V[kunnr] "&F[RF02D-KUNNR]"
Set V[vkorg] "&F[RF02D-VKORG]"
Set V[vtweg] "&F[RF02D-VTWEG]"
Set V[spart] "&F[RF02D-SPART]"
// leading zeros
Set V[kunnr](1-10) "0000000000&V[kunnr]" -alignRight
// search condition
Set V[c1] "KUNNR = '&V[kunnr]'"
Set V[c2] "and VKORG = '&V[vkorg]'"
Set V[c3] "and VTWEG = '&V[vtweg]'"
Set V[c4] "and SPART = '&V[spart]'"
Set V[c5] "and SPMON GE '&V[year4]01'"
Set V[condition] "&V[c1] &V[c2] &V[c3] &V[c4] &V[c5]"
// read VIS statistics table S001
Call /guixt/select in.table="S951" _
in.Condition="&V[condition]" in.Fields="SPMON,AENETWR" _
table.V1table="r1" table.V2table="r2"
// Build sales figures
Set V[i] 1
label next
CopyText fromText="r1" toString="spmon" line="&V[i]"
if Q[ok]
CopyText fromText="r2" toString="aenetwr" line="&V[i]"
Set V[i] &V[i] + 1
Set V[year] &V[spmon](1-4)
// year0
if V[year=&V[year0]]
Set V[sales0] &V[sales0] + &V[aenetwr]
goto next
endif
// year1
if V[year=&V[year1]]
Set V[sales1] &V[sales1] + &V[aenetwr]
goto next
endif
// year2
if V[year=&V[year2]]
Set V[sales2] &V[sales2] + &V[aenetwr]
goto next
endif
// year3
if V[year=&V[year3]]
Set V[sales3] &V[sales3] + &V[aenetwr]
goto next
endif
// year4
if V[year=&V[year4]]
Set V[sales4] &V[sales4] + &V[aenetwr]
goto next
endif
goto next
endif
// in thousands
Set V[sales0] &V[sales0] / 1000 decimals=0
Set V[sales1] &V[sales1] / 1000 decimals=0
Set V[sales2] &V[sales2] / 1000 decimals=0
Set V[sales3] &V[sales3] / 1000 decimals=0
Set V[sales4] &V[sales4] / 1000 decimals=0
// generate chart
CallVB Chart01.Customer.SalesChart "&V[chartfilename]"
Der VB.NET Routine
übergeben wir dabei den Namen der zu erzeugenden Bilddatei. Die Daten
für das Diagramm (Jahreszahlen und Auftragseingang) entnehmen wir direkt
den GuiXT Variablen:
VB.NET
Imports System.Windows.Forms
Imports System.Data
Imports System.Drawing
Imports System.Windows.Forms.DataVisualization.Charting
Public Class customer
Private guixt As New guinet.guixt
Public Sub SalesChart(ByVal imgfilename As String)
' create chart
Dim Chart1 As New Chart()
Chart1.Size = New System.Drawing.Size(480, 340)
Chart1.BackColor = Color.DeepSkyBlue
Dim ChartArea1 As New ChartArea
ChartArea1.Name = "ChartArea1"
Chart1.ChartAreas.Add(ChartArea1)
Dim Series1 As New Series
Series1.ChartArea = "ChartArea1"
Series1.Palette = ChartColorPalette.Pastel
Series1.XValueMember = "Year"
Series1.YValueMembers = "Sales"
Chart1.Series.Add(Series1)
Dim table As New DataTable
' Create columns in the DataTable
table.Columns.Add("Year", GetType(String))
table.Columns.Add("Sales", GetType(Integer))
' Add sales figures for 5 years, using GuiXT variables
table.Rows.Add(guixt.GetVariable("year4"), _
CInt(guixt.GetVariable("sales4")))
table.Rows.Add(guixt.GetVariable("year3"), _
CInt(guixt.GetVariable("sales3")))
table.Rows.Add(guixt.GetVariable("year2"), _
CInt(guixt.GetVariable("sales2")))
table.Rows.Add(guixt.GetVariable("year1"), _
CInt(guixt.GetVariable("sales1")))
table.Rows.Add(guixt.GetVariable("year0"), _
CInt(guixt.GetVariable("sales0")))
' Chart data
Chart1.DataSource = table
' save chart as .png file
Chart1.SaveImage(imgfilename, ChartImageFormat.Png)
End Sub
End Class