Output Management
Zweck und Einsatz
Über diese Dokumentfunktion kann die generierte Datei an einen konfigurierbaren Endpunkt bzw. Endpunkte übermittelt werden.
Serienbriefe bzw. Serien-Erstellung von mehreren Dokumenten basierend z.B. auf eine Liste von Empfängern ist ebenfalls über diese Funktion konfigurierbar.
Die Definition der einzelnen Aktionen basiert auf den primedocs Connect Commands.
Grundaufbau
<OutputConfiguration DisableDefaultSeriesOutput="true">
<DesktopOutput Name="Test Output 1">
<Fields>
<Text Name="Guid">
<Code>
function main() { return $.util.generateGuid(); }
</Code>
</Text>
<Text Name="GeneratedFileName">
<Code>
function main() {
var RecipientName = $("RecipientName");
return "X:\\documents\\Document_" + $("Guid") + "_" + RecipientName + ".docx"; }
</Code>
</Text>
</Fields>
<Commands>
<SaveFile field-FileName="GeneratedFileName" Overwrite="false" CreateFolder="false">
<Document />
</SaveFile>
</Commands>
</DesktopOutput>
<DesktopOutput Name="Test Output 2">
<Commands>
<SaveFile field-FileName="Forms.FullPath" Overwrite="false" CreateFolder="false">
<Document />
</SaveFile>
</Commands>
</DesktopOutput>
<DesktopSeriesOutput Name="Series Output">
<ForEach>
<SeriesTextReplacer Name="Default">
<Current Text="$current" />
<Total Text="$total" />
</SeriesTextReplacer>
<Commands>
<SaveFile FileName="C:\temp\sample_$current_of_$total.docx" Overwrite="true" replacer-FileName="Default">
<Document />
</SaveFile>
</Commands>
</ForEach>
<ForSeries>
<MergeAsPdf>
<Commands>
<SaveFile FileName="C:\temp\sample.pdf" Overwrite="true">
<Document />
</SaveFile>
<OpenFile FileName="C:\temp\sample.pdf" />
</Commands>
</MergeAsPdf>
</ForSeries>
</DesktopSeriesOutput>
</OutputConfiguration>
Wird innerhalb der Forms-Konfiguration in einer ObjectCollection das Attribut SelectedObjectId konfiguriert, wird implizit eine DesktopSeriesOutput-Konfiguration generiert und ein entsprechender Button im Forms-Dialog angezeigt.
Das optionale Attribut DisableDefaultSeriesOutput kann genutzt werden, um dieses Verhalten zu unterdrücken.
DesktopOutput
Über die DesktopOutput-Elemente kann das resultierende Dokument gezielt an einen bestimmten Endpunkt übermittelt werden.
Ein DesktopOutput kann entweder direkt beim Erstellen über den Forms-Dialog oder nachträglich manuell über das primedocs-Menüband (COM-Add-In) ausgeführt werden.
Attribute:
| Attribut | Pflicht | Beschreibung |
|---|---|---|
Name | ja | Beschriftung des zusätzlichen Buttons im Forms-Dialog bzw. im Add-In-Menüband. |
Tooltip | optional | Tooltip des Buttons. |
Icon | optional | Base64-kodiertes Symbol (z.B. PNG) für den Button. |
HideInForms | optional | Wenn true: Der Output wird im Forms-Dialog nicht angezeigt. |
HideInAddIn | optional | Wenn true: Der Output wird im Add-In-Menüband nicht angezeigt. |
HideSuccessMessageInForms | optional | Wenn true: Die Erfolgsmeldung nach der Ausführung wird im Forms-Dialog unterdrückt. |
HideSuccessMessageInAddIn | optional | Wenn true: Die Erfolgsmeldung nach der Ausführung wird im Add-In unterdrückt. |
Elemente:
Fields: Um dynamische Daten für einen "Output" zu definieren, können ähnlich wie mit der normalen Fields-Funktion, Felder definiert werden.Commands: DieCommandsbestimmen, welche Aktionen ausgeführt werden. Es stehen alle Commands aus der primedocs Connect-Welt zur Verfügung.
Felder in Outputs
Fields im Output werden berechnet, sobald der entsprechende Output aktiviert wird.
Die Output-Fields erlauben eine Untermenge der normalen Feldfunktion in Kombination mit bestimmten API Aufrufen.
<Fields>
<Text Name="Guid">
<Code>
function main() { return $.util.generateGuid(); }
</Code>
</Text>
<Text Name="StaticValue" Value="Test" />
<Text Name="StaticTranslatedValue" translate-Value="Fields.Key.StaticValue" />
<Text Name="GeneratedFileName">
<Code>
function main() {
var RecipientName = $("RecipientName");
return "X:\\documents\\Document_" + $("Guid") + "_" + RecipientName + ".docx";
}
</Code>
</Text>
</Fields>
Erlaubte Kindelemente:
Text: Erlaubt es ein Text-Element zu erzeugen. Als Identifier muss ein Name gesetzt werden.
Der Wert kann über diese Wege gesetzt werden:
- Statisch über
Value - Statisch, aber mit Übersetzung über
translate-Value - Dynamisch über
Code
Das Code-Element nutzt dieselbe Logik wie bei den Fields, allerdings mit einer vereinfachten JavaScript API:
Es können nur Text-Typen in dieser API geholt und zurückgegeben werden. Zugriffe auf Felder mit anderen Typen sind nicht gestattet.
| Funktion | Rückgabetyp |
|---|---|
| $.(…) | Gibt ein Textfeld zurück |
| $.get(…) | Gibt ein Textfeld zurück |
| $.getText(…) | Gibt ein Textfeld zurück |
| $.util.generateGuid() | Generiert eine eindeutige GUID. |
Die generierten Felder können dann über den field-FileName (etc.) Syntax für die Commands benutzt werden.
DesktopSeriesOutput
Über die DesktopSeriesOutput-Elemente kann eine Seriengenerierung gestartet werden.
Diese Option ist nur in Kombination mit einer konfigurierten ObjectCollection samt SelectedObjectId ausführbar, da über eine definierte Liste iteriert werden muss.
Wie ein DesktopOutput kann ein DesktopSeriesOutput direkt beim Erstellen über den Forms-Dialog oder nachträglich manuell über das primedocs-Menüband (COM-Add-In) ausgeführt werden.
Attribute: Es gelten dieselben Attribute wie beim DesktopOutput (Name, Tooltip, Icon, HideInForms, HideInAddIn, HideSuccessMessageInForms, HideSuccessMessageInAddIn).
Elemente:
ForEach: Über dieses Element lassen sich pro Seriendokument Aktionen definieren.- Beispiel: Für jeden Empfänger soll ein Dokument gespeichert werden.
ForSeries: Über dieses Element lässt sich ein zusammengefügtes PDF über die gesamte Serie erstellen.- Beispiel: Es wird ein zusammengefügtes PDF für alle Empfänger benötigt.
ForEach
Über dieses Element lassen sich Aktionen definieren, welche pro Dokument ausgeführt werden sollen.
Elemente:
SeriesTextReplacer: Über dieses Element lassen sich Platzhalter für das aktuelle Element und die Gesamtanzahl der zu generierenden Dokumente abbilden. Damit ist es möglichDokument_26_von_87.docxzu erstellen. Nur dieses Element hat Zugriff auf den aktuellen "Iterator" und die "Gesamtanzahl".<Current Text="$current" />heisst, dass die aktuelle Anzahl durch den Platzhalter$currentausgedrückt wird.<Total Text="$total" />heisst, dass die totale Anzahl durch den Platzhalter$totalausgedrückt wird.- Es können mehrere
SeriesTextReplacerdefiniert werden - diese müssen einen eindeutigenNametragen.
Commands: Ähnlich wie beimDesktopOutputwerden darüber dieCommands(Siehe: Nach der Dokumentgenerierung (Commands)) definiert.- Zusätzlich gibt es hier Zugriff auf den
replacer-FileName="Default"
- Zusätzlich gibt es hier Zugriff auf den
Ähnlich wie beim dynamischen Zugriff über field-FileName, kann man diese Attribute im ForEach Element nochmals durch den replacer-[ATTRIBUTE] durchlaufen lassen.
ForSeries
Über dieses Element ist es möglich, alle Dokumente als ein einzelnes PDF über das Element MergeAsPdf abzubilden.
Innerhalb von MergeAsPdf können wieder Commands definiert werden und das Resultat wird als "PDF"-Dokument weiterverarbeitet.
WebOutput
WebOutput ist das Gegenstück zu DesktopOutput für primedocs Web und die Office Web Add-Ins. Jedes WebOutput erscheint im Web als zusätzliche Schaltfläche beim Generieren. Es stehen ausschliesslich die web-fähigen Commands InvokeUrl, ShowDialog und DownloadFile zur Verfügung.
<OutputConfiguration>
<WebOutput Name="Als PDF herunterladen" Tooltip="Erzeugt ein PDF" HideSuccessMessage="false">
<Commands>
<DownloadFile FileName="Brief.pdf">
<Document Conversion="Pdf" />
</DownloadFile>
</Commands>
</WebOutput>
</OutputConfiguration>
Attribute:
| Attribut | Pflicht | Beschreibung |
|---|---|---|
Name | ja | Beschriftung der Schaltfläche im Web. |
Tooltip | optional | Tooltip der Schaltfläche. |
HideSuccessMessage | optional | Wenn true: Die Erfolgsmeldung nach der Ausführung wird unterdrückt. |
Elemente:
Fields(optional): Felder für diesen Output —TextundGlobalFields(analog zu den Feldern in Outputs, jedoch auf diese beiden Typen beschränkt).Commands: Die auszuführenden Aktionen — nurInvokeUrl,ShowDialogundDownloadFile.
WebSeriesOutput
WebSeriesOutput ist das Gegenstück zu DesktopSeriesOutput für die Seriengenerierung im Web. Wie bei DesktopSeriesOutput ist eine ObjectCollection mit SelectedObjectId erforderlich (siehe DesktopSeriesOutput).
<OutputConfiguration>
<WebSeriesOutput Name="Serie als PDF" Tooltip="Alle Empfänger zusammenführen">
<ForEach>
<SeriesTextReplacer Name="Default">
<Current Text="$current" />
<Total Text="$total" />
</SeriesTextReplacer>
<Commands>
<DownloadFile FileName="Dokument_$current_von_$total.docx">
<Document />
</DownloadFile>
</Commands>
</ForEach>
<ForSeries>
<MergeAsPdf>
<Commands>
<DownloadFile FileName="Serie.pdf">
<Document />
</DownloadFile>
</Commands>
</MergeAsPdf>
</ForSeries>
</WebSeriesOutput>
</OutputConfiguration>
Attribute: Name (Pflicht), Tooltip (optional) und HideSuccessMessage (optional) — analog zu WebOutput.
Elemente:
Fields(optional):TextundGlobalFields.ForEach: Aktionen pro Seriendokument — mitSeriesTextReplacer(Platzhalter$current/$total, optional mitFormat) undCommands.ForSeries: Zusammenführen aller Dokumente als PDF überMergeAsPdf›Commands.
In allen Commands stehen auch hier nur die web-fähigen Commands (InvokeUrl, ShowDialog, DownloadFile) zur Verfügung.
Anders als die übrigen Ausgaben läuft die Seriengenerierung über WebSeriesOutput in einem serverseitigen Hintergrunddienst, da über eine ganze Liste iteriert wird und die Verarbeitung länger dauern kann. Der Fortschritt wird in der Web App angezeigt; das Ergebnis steht anschliessend zum Download bereit.
Dies ist die einzige Stelle, an der primedocs generierte Dokumentdaten serverseitig zwischenspeichert – bewusst nur flüchtig und verschlüsselt:
- Die Ergebnisdatei (z. B. das ZIP der Serie) wird ausschliesslich AES-256-verschlüsselt auf der Platte abgelegt.
- Der Schlüssel wird pro Datei aus der Benutzersitzung (Bearer-Token) abgeleitet – der Download ist daher an den angemeldeten Benutzer gebunden.
- Die Ergebnisse werden automatisch nach spätestens einer Stunde gelöscht (regelmässige Bereinigung), sodass keine nicht abgeholten Dateien auf dem Server verbleiben.
GlobalOutputs
Über GlobalOutputs lässt sich ein zentral abgelegter Satz von Output-Definitionen referenzieren, statt die DesktopOutput-/DesktopSeriesOutput-Elemente in jeder Vorlage zu wiederholen. Die referenzierten Outputs werden zu den lokal definierten hinzugefügt (nicht ersetzt).
<OutputConfiguration>
<GlobalOutputs Key="StandardProjektOutputs" />
<DesktopOutput Name="In Projektordner speichern">
<Commands>
<SaveFile FileName="result.docx" Overwrite="true">
<Document />
</SaveFile>
</Commands>
</DesktopOutput>
</OutputConfiguration>
Der referenzierte Globale Konfigurationseintrag ist vom Typ OutputGlobalOutputs und kann DesktopOutput, DesktopSeriesOutput, WebOutput und WebSeriesOutput enthalten.
| Attribut | Pflicht | Beschreibung |
|---|---|---|
Key | ja | Schlüssel des referenzierten globalen Output-Eintrags. |