Direkt zum Hauptinhalt

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

PrintContextrepräsentiertdieAusführungsumgebung.Erenthältu.a.:

  • die
  • abgearbeitet.

    Der

    CurrentContext

    Dies

    könnte
    Parameter Beschreibung
    cobra-Umgebung
  • Ausführungsart von PRINT+PLUS (cobra-Addin oder Task)
  • Zugriff auf das Wartefenster (WaitFormManager)
  • Die geladene Konfiguration des Ausgabeformats
  • printContext// 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!");
    }
    Enthält
    CurrentContext
    Informationen

    Der CurrentContext repräsentiert den Ausgangsdatensatz der aktuellen Ausgabe. Bei Mehrfachausgaben wird für jeden Ausgangsdatensatz ein CurrentContext erzeugt und Funktionenjede zumAusgabe gesamteneinzeln Exportvorgang.

    enthält direkt alle Daten des Ausgangsdatensatzes und alle (rekursiv) übergeordneten Datensätze.

    currentContext// 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"];
    }
    Enthält
    ChildContext
    Informationen zum aktuell verarbeiteten Hauptdatensatz.
    childContext

    Enthält Informationen zum aktuell verarbeiteten untergeordneten Datensatz. Dieser Wert ist nur bei Child-Events befüllt, andernfalls null.

    wie im oberen Beispiel z.B. ein Kontakteintrag sein. Die Nutzung ist hier identisch:

    var kontakt = childContext.Data;
    
    var parent = childContext.ParentDataByPrefix["BetrifftProjekt"];