Kontexte
Dieser Abschnitt beschreibt, wie PRINT+PLUS zur Laufzeit die Umgebung und die Daten im Speicher enthält.
Ideen
Es gibt grundsätzlich 3 verschiedene Kontexte (von Child-Kontexten können potenziell viele Instanzen vorhanden sein)
PrintContext
Der PrintContext repräsentiert die Ausführungsumgebung. Er enthält u.a.
die cobra-Umgebung (via PrintContext.CobraContext)
Hier ist auch ersichtlich, ob PRINT+PLUS in cobra oder als Task ausgeführt wird.
den Zugriff auf den Waitform-Manager (via PrintContext.WaitFormManager)
die geladene Konfiguration des Ausgabeformats (via PrintContext.Config)
// Zugriff auf aktuellen Benutzer
var user = printContext.CobraContext.UserShortname;
// Eine Messagebo anzeigen, die über dem Wartefenster ist
printContext.WaitFormManager.ShowMessageBox("blub");
// Zur Laufzeit (z.B. BeforeLoadData) noch die Konfiguration verändern
// Dadurch werden die JSON-Files nicht verändert, gilt nur einmalig
printContext.Config.ResultDialogMode = Ruthardt.PrintPlus.Model.Enumerations.ResultDialogModes.OpenLastDocument;
// Abfragen ob PRINT+PLUS als Task ausgeführt wird
if (printContext.CobraContext.IsStandaloneExecution)
{
// Anweisungen die nur im Task ausgeführt werden sollen
}
CurrentContext
Der CurrentContext repräsentiert den Ausgangsdatensatz der aktuellen Ausgabe. Bei Mehrfachausgaben wird für jeden Ausgangsdatensatz ein CurrentContext erzeugt und jede Ausgabe einzeln abgearbeitet.
Der CurrentContext enthält direkt alle Daten des Ausgangsdatensatzes und alle (rekursiv) übergeordneten Datensätze.
// Zugriff auf den aktuellen Datensatz, in diesem Beispiel die Adresse
var adresse = currentContext.Data;
var firma = adresse.GetStringValue("Firma")
// Zugriff auf geladene Parent-Datensätze
var partner = currentContext.ParentDataByPrefix["Partner"];
// Iterieren von Unterdatensätzen
var kontakte = currentContext.ChildContextByPrefix["Kontakte"];
foreach (var kontaktContext in kontakte)
{
// Zugriff auf Daten des Unterdatensatz
var kontakt = kontaktContext.Data;
// Zugriff auf Parent des Unterdatensatzes
var betriffProjekt = kontaktContext.ParentDataByPrefix["BetrifftProjekt"];
}
ChildContext
Wird nur benötigt in Skripten die auf der Child-Ebene aufgerufen werden.
Entspricht dann dem vorigen Beispiel ChildContextByPrefix
Last updated