In der Version 2025.3 wurde für den Berichtsgenerator auf Plattformen .NET und .NET Framework die Möglichkeit hinzugefügt, die C#-Skripte im Interpretationsmodus während der Bericht-Berechnung auszuführen.
Im Skript-Beschreibung können Sie verwenden:
Skripte funktionieren in:
Wenn der Ausdruck den
Beachten Sie! Die Skriptausführung in Ausdrücken hängt ebenfalls von der Eigenschaft „Skripts-Ausführen erlauben“ ab. Wenn die Skriptausführung entweder in den Berichtseigenschaften oder über eine globale Einstellung deaktiviert ist, wird die Eigenschaft „Die Skripte in Ausdrücken erlauben“ ignoriert, da Skripte dann nicht ausgeführt werden.Zusätzlich können Sie den Skript-Timeout (in Sekunden) mit der Eigenschaft Skript-Timeout einstellen. Für eingebettete Komponenten gibt es eine globale Option – StiOptions.Engine.AllowScriptsToRun, die das Ausführen von Skripten im Interpretationsmodus aktiviert oder deaktiviert.
Wenn eine Variable im Bericht deklariert wird, steht sie automatisch in allen Berichtsskripten zur Verfügung, einschließlich, in den Komponenten‑Ereignissen, Ausdrücken, benutzerdefinierten Funktionen und globalen Skripten. Sie können Variablen auch neue Werte zuweisen, beispielsweise:
Dies ermöglicht die Verwendung von vertrauten Konstrukten und Ausdrücken für Berechnungen, Bedingungen und die Arbeit mit Variablen und Typen – genau wie in gewöhnlichem C#. Alle Operatoren folgen den gleichen Prioritäten und Assoziativität-Regeln wie im C#. Komplexe Ausdrücke, Kombinationen von Operatoren und alle Standard-Szenarien – etwa in Bedingungen, Schleifen, Funktionen und beim Arbeiten mit Collections – werden vollständig unterstützt.
Beispiele:
Der Operator
Wenn die Business-Objekte durch die Methode
- Report‑Variablen;
- Datenspalten;
- Funktionen, einschließlich benutzerdefinierte;
- grundlegende C#‑Konstrukte -
if
,else
, ternärer Operator, Schleifen.
Skripte funktionieren in:
- Ereignissen;
- Benutzerfunktionen;
- Berichtsausdrücken;
- Ausdrücken der Komponenten, Variablen, berechneten Spalten.
Wenn der Ausdruck den
return
‑Operator enthält, verarbeitet die Berichts‑Engine ihn als Skript; ohne return
‑Operator – als einfacher Ausdruck.Steuerung der Skriptausführung
Um die vollständige Ausführung von Skripten zu deaktivieren, setzen Sie die Berichts‐Eigenschaft „Skripts-Ausführen erlauben“ auf Falsch.
Wenn Sie nur Skripte in Ausdrücken deaktivieren möchten, setzen Sie die Berichts‐Eigenschaft „Die Skripte in Ausdrücken erlauben“ auf Falsch..
InformationBeachten Sie! Die Skriptausführung in Ausdrücken hängt ebenfalls von der Eigenschaft „Skripts-Ausführen erlauben“ ab. Wenn die Skriptausführung entweder in den Berichtseigenschaften oder über eine globale Einstellung deaktiviert ist, wird die Eigenschaft „Die Skripte in Ausdrücken erlauben“ ignoriert, da Skripte dann nicht ausgeführt werden.Zusätzlich können Sie den Skript-Timeout (in Sekunden) mit der Eigenschaft Skript-Timeout einstellen. Für eingebettete Komponenten gibt es eine globale Option – StiOptions.Engine.AllowScriptsToRun, die das Ausführen von Skripten im Interpretationsmodus aktiviert oder deaktiviert.
...
StiOptions.Engine.AllowScriptsToRun = true;
...
Unten betrachten einige Beispiele der Syntax und grundlegende Konstruktionen. Variable und Typen
In den Skripten können Sie die Variablen mit dem Schlüsselwortvar
deklarieren oder den Typ explizit angeben. Alle grundlegenden C#‑Typen werden unterstützt – einschließlich Zahlen, Zeichenfolgen, Datumswerte, Boolean, Farben, Kollektionen und Objekte. Unten finden Sie einige Beispiele für die Verwendung von Variablen:
...
var number = 10;
var text = "Hello, World!";
var isActive = true;
var price = 19.99m;
var date = DateTime.Today;
var color = Color.Red;
...
Arrays und Kollektionen
Die .NET-Arrays und -Kollektionen sind verfügbar:...
var numbers = new int[3];
var list = new List<string>();
var dict = new Dictionary<string, int>();
...
Spezielle Typen
You Man kann auch solche Typen wie GUID, Color, sowie eigene Business-Objekte, wenn sie im Bericht registriert sind, verwenden....
var id = Guid.NewGuid();
var color = Color.FromArgb(255, 128, 64);
...
In Skripten können Sie Variablen, die im Bericht definiert sind, direkt verwenden sowie deren Werte im Code abrufen oder verändern. Um auf eine Variable zuzugreifen, verwenden Sie einfach ihren Namen – Präfixe sind nicht nötig. Zum Beispiel: var value = MyVariable;
. Wenn eine Variable im Bericht deklariert wird, steht sie automatisch in allen Berichtsskripten zur Verfügung, einschließlich, in den Komponenten‑Ereignissen, Ausdrücken, benutzerdefinierten Funktionen und globalen Skripten. Sie können Variablen auch neue Werte zuweisen, beispielsweise:
MyVariable = 42;
. Auf diese Weise können Sie Variablen verwenden, um Zwischenergebnisse zu speichern, Daten zwischen verschiedenen Teilen des Berichts zu übertragen und die Logik des Bericht-Renderns dynamisch zu steuern. Typumwandlung
Explizite und implizite Typumwandlung werden unterstützt:...
var d = 5.5;
var i = (int)d; // 5
var s = (string)123; // "123"
...
Operatoren in Stimulsoft-Skripten
Stimulsoft-Skripte unterstützen alle Standard-C# Operatoren:- Arithmetisch (+, -, *, /, %);
- Vergleich (==, !=, <, >, <=, >=), Logisch (&&, ||, !);
- Bitweise (&, |, ^, ~, <<, >>);
- Zuweisung (=, +=, -=, *=, /=, %=, etc.);
- Ternärer Operator (? :);
- Inkrement/Dekrement (++, --);
- Typprüfung und Umwandlungsoperatoren (is, as, typeof, GetType).
Dies ermöglicht die Verwendung von vertrauten Konstrukten und Ausdrücken für Berechnungen, Bedingungen und die Arbeit mit Variablen und Typen – genau wie in gewöhnlichem C#. Alle Operatoren folgen den gleichen Prioritäten und Assoziativität-Regeln wie im C#. Komplexe Ausdrücke, Kombinationen von Operatoren und alle Standard-Szenarien – etwa in Bedingungen, Schleifen, Funktionen und beim Arbeiten mit Collections – werden vollständig unterstützt.
Schleifen in Stimulsoft-Skripten
In Skripten können Sie alle grundlegenden Schleifenstrukturen von C# verwenden:for
-Schleife: eine Schleife mit Zähler. Wird meist eingesetzt, wenn Sie im Voraus wissen, wie oft eine Aktion wiederholt werden soll. Zum Beispiel:
...
var sum = 0;
for (var i = 0; i < 5; i++) {
sum += i;
}
// sum = 0 + 1 + 2 + 3 + 4 = 10
...
while
-Schleife: eine Schleife mit Vorbedingung, die solange läuft, wie die Bedingung wahr ist.
...
var count = 0;
while (count < 3) {
count++;
}
// count = 3
...
do...while
-Schleife: eine Schleife mit Nachbedingung, die den Schleifenrumpf mindestens einmal ausführt:
...
var value = 0;
do {
value += 2;
} while (value < 6);
// value = 6
...
foreach
-Schleife: eine Schleife zum Durchlaufen aller Elemente der Sammlung (z. B. Liste, Array usw.).
...
var list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
var total = 0;
foreach (var item in list) {
total += item;
}
// total = 6
...
Innerhalb der Schleifen können Sie break
verwenden, um die Schleife vorzeitig zu beenden, und continue
, um zur nächsten Iteration zu springen. Hier sind einige Beispiele mit break
und continue
:
...
for (var i = 0; i < 10; i++) {
if (i == 5) break;
if (i % 2 == 0) continue;
// This code will only execute for odd i values less than 5.
}
...
Funktionen in Stimulsoft‑Skripten
Sie können verschiedene Arten von Funktionen in Skripten verwenden: integrierte Funktionen, statische Funktionen, Typfunktionen und benutzerdefinierte Funktionen, die entweder direkt im Code definiert oder über den Bericht zugänglich sind.Integrierte Stimulsoft-Funktionen
Die Skripte unterstützen eine Vielzahl integrierter Stimulsoft-Funktionen für die Arbeit mit Daten, Zeichenfolgen, Zahlen, Daten, Farben usw. Diese Funktionen können direkt per Name aufgerufen werden.Beispiele:
...
var empty = IsNullOrEmpty("");
var max = Maximum(3, 5);
var color = RGB(255, 0, 0);
...
Die volle Liste der integrierten Funktionen finden Sie hier.Statische .NET-Funktionen und -Methoden
Sie können statische Methoden der standardmäßigen NET-Klassen verwenden – beispielsweise zum Konvertieren von Datentypen oder zur Arbeit mit Zahlen, Zeichenfolgen und Daten....
var absValue = Math.Abs(-10);
var rounded = Math.Round(2.6);
var parsed = int.Parse("123");
var now = DateTime.Now;
var formatted = string.Format("Value: {0}", 42);
...
Typfunktionen (Objektmethoden)
Die Methoden der standardmäßigen .NET-Typen sind verfügbar, einschließlich, für Zeichenfolgen, Zahlen, Daten und Sammlungen....
var text = "hello";
var upper = text.ToUpper();
var length = text.Length;
var tomorrow = now.AddDays(1);
var exists = list.Contains(2);
...
Benutzerdefinierte Funktionen
Sie können Ihre Funktionen direkt im Skript deklarieren und wie gewohnt aufrufen....
double square(double n) {
return n * n;
}
var result = square(5);
...
Funktionen aus dem Bericht
Wenn benutzerdefinierte Funktionen in einem Bericht definiert sind, können sie nach ihrem Namen aufgerufen werden, wenn sie im Skriptkontext verfügbar sind....
var value = MyReportFunction(10);
...
Typumwandlung und Typprüfung
Stimulsoft-Skripte unterstützen die standardmäßigen C#-Operatoren für die Arbeit mit Typen:as
, is
, and typeof
, sowie explizite und implizite Typumwandlung. Sie können auch die Methode GetType
verwenden, um Informationen über den Typ eines Objekts zu erhalten. Der Operator
is
: der Operator ermöglicht es, zu überprüfen, ob ein Objekt einem bestimmten Typ angehört. Gibt true
oder false
zurück.
...
var result = "hello" is string; // true
var isInt = 123 is int; // true
var isBool = 123 is bool; // false
...
Der Operator as
: der Operator versucht einen Typ umzuwandeln. Wenn die Umwandlung nicht möglich ist, gibt er null
zurück (anstatt eine Ausnahme auszulösen).
...
var obj = "hello";
var str = obj as string; // "hello"
var num = obj as int; // null
...
Der Operator typeof
: Der Operator ermöglicht es, ein Objekt des Typs für weitere Prüfungen oder Reflexion zu erhalten.
...
var obj = "hello";
var str = obj as string; // "hello"
var num = obj as int; // null
...
Der Operator GetType
: die Methode gibt den tatsächlichen Typ des Objekts zur Laufzeit zurück. Dies ist bequem für dynamisches Testen und Debuggen.
...
var value = 123;
var typeName = value.GetType().Name; // "Int32"
var typeFullName = value.GetType().FullName; // "System.Int32"
var text = "abc";
var isString = text.GetType() == typeof(string); // true
...
Der Parser unterstützt die Standard-C#-Syntax für Typumwandlungen, einschließlich Umwandlungen zwischen Zahlen, Zeichenfolgen, booleschen Werten und mehr. Wenn eine Umwandlung unmöglich ist, wird eine Ausnahme ausgelöst, wie in regulärem C#.Verwendung von Datenquellen und Business-Objekten in Stimulsoft-Skripten
In Skripten können Sie direkt auf im Bericht registrierte Datenquellen sowie deren zugehörige Daten und Business-Objekte zugreifen. Um auf eine Datenquelle zuzugreifen, verwenden Sie einfach ihren Namen, zum Beispiel:...
Products.First();
var name = Products.ProductName;
...
Hier wechseln wir zur ersten Zeile der Datenquelle Products und lesen den Wert ihrer Spalte ProductName. Wenn die Beziehungen zwischen Datenquellen eingestellt sind, können wir auf verwandte Daten durch den Punkt zugreifen:
...
var categoryName = Products.Categories.CategoryName;
...
So können Sie den Kategorienamen für das aktuelle Produkt erhalten. Solche Navigationsmethoden wie First()
, Next()
, Previous()
stehen für die Arbeit mit Datenquellen zur Verfügung.
Wenn die Business-Objekte durch die Methode
RegBusinessObject
zu einem Bericht hinzugefügt werden, können sie wie reguläre Objekte nach ihrem Namen aufgerufen werden:
...
var id = Business.Id;
var name = Business.Name;
Business.Name = "NewName";
...
Für verschachtelte Objekte verwenden Sie einen Punkt:
...
var subPrice = Business.Child.SubChild.Price;
...
Alle Eigenschaften und Felder von Business-Objekten sind lesbar und schreibbar, sofern ihr Typ dies erlaubt. Für komplizierte Szenarien können Sie den Zugriff auf Daten, Sammlungen, Berichtskomponenten und Business-Objekte in einer einzigen Anweisung kombinieren.
Zusammenfassend ermöglichen es unsere Skripte, flexibel und bequem mit beliebigen Berichtsdaten, deren Beziehungen und Geschäftslogik zu arbeiten – direkt innerhalb von Ausdrücken und Ereignissen.