Intro
PRINT+PLUS bietet eine Skripting-Funktion, mit der der Exportprozess individuell erweitert werden kann. Über eigene C#-Skripte lassen sich beispielsweise Daten vor der Dokumenterstellung anpassen, zusätzliche Platzhalterwerte berechnen, Datensätze überspringen, Dateinamen ändern oder erzeugte Dokumente nach dem Export weiterverarbeiten.
Die Skripte werden an fest definierten Stellen im Exportablauf ausgeführt. Diese Stellen werden als Events bezeichnet. Ein Skript kann je nach Anwendungsfall einem oder mehreren dieser Events zugeordnet werden.
Die Skripting-Funktion richtet sich an erfahrene Anwender, Administratoren oder Entwickler mit C#-Kenntnissen.
Grundaufbau eines Skripts
Ein PRINT+PLUS-Skript ist eine C#-Klasse, die das Interface IScriptAction implementiert. Die eigentliche Programmlogik wird in der Methode Execute hinterlegt.
using Ruthardt.PrintPlus.Model.Interfaces;
public class MeinSkript : IScriptAction
{
public void Execute(IPrintContext printContext, ICurrentContext currentContext, IChildContext childContext)
{
// Eigene Logik hier einfügen
}
}
Die Methode Execute wird von PRINT+PLUS automatisch aufgerufen, sobald das zugeordnete Event im Exportablauf erreicht wird.
Parameter der Execute-Methode
PrintContext
Der PrintContext repräsentiert die Ausführungsumgebung. Er enthält u.a.:
- die cobra-Umgebung
- Ausführungsart von PRINT+PLUS (cobra-Addin oder Task)
- Zugriff auf das Wartefenster (WaitFormManager)
- Die geladene Konfiguration des Ausgabeformats
// Zugriff auf den aktuellen Benutzer
var user = printContext.CobraContext.UserShortname;
// Textboxen über dem Wartefenster anzeigen
printContext.WaitFormManager.ShowMessageBox("Hello World!");
// Konfiguration anpassen (JSON-Dateien werden nicht verändert)
// Hier: Nach Komplementierung wird das zuletzt erzeugte Dokument automatisch geöffnet
printContext.Config.ResultDialogMode = ResultDialogModes.OpenLastDocument;
// Abfragen ob PRINT+PLUS als Task ausgeführt wird
if (printContext.CobraContext.IsStandaloneExecution)
{
printContext.Logger.Info("Ich bin ein Task!");
}
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. Hier: Adresse
var adresse = currentContext.Data;
var firma = adresse.GetStringValue("Firma");
// Zugriff auf geladene Partner-Datensätze
var partner = currentContext.ParentDataByPrefix["Partner"];
// Iteration über Unterdatensätze
var kontakte = currentContext.ChildContextByPrefix["Kontakte"];
foreach(var kontaktContext in kontakte)
{
var kontakt = kontaktContext.Data;
var vorname = kontakt.GetStringValue("Vorname");
// Zugriff auf Parent des Unterdatensatzes
var betrifftProjekt = kontaktContext.ParentDataByPrefix["BetrifftProjekt"];
}
ChildContext
Enthält Informationen zum aktuell verarbeiteten untergeordneten Datensatz. Dieser Wert ist nur bei Child-Events befüllt, andernfalls null.
Dies könnte wie im oberen Beispiel z.B. ein Kontakteintrag sein. Die Nutzung ist hier identisch:
var kontakt = childContext.Data;
var parent = childContext.ParentDataByPrefix["BetrifftProjekt"];
Keine Kommentare vorhanden
Keine Kommentare vorhanden