Zum Hauptinhalt springen
Version: 4.1 (2026 H2)

Teilnehmerliste als Tabelle

Für eine Sitzungseinladung oder ein Protokoll erfasst der Sachbearbeiter die Teilnehmenden im Forms-Dialog. Im Dokument erscheinen sie als Tabelle mit Name, Kürzel und Rolle. Die Anzahl Zeilen richtet sich nach der Anzahl Teilnehmenden.

Ergebnis​

  • Forms-Dialog: Liste der Teilnehmenden; jeder Eintrag mit Vorname, Name, Kürzel sowie den Rollen Sitzungsleitung und Protokoll.
  • Dokument: Tabelle mit Kopfzeile und einer Zeile pro Teilnehmenden, darunter ein Satz mit der Anzahl.
  • Ohne Teilnehmende wird die Inhaltszeile der Tabelle ausgeblendet.

Bausteine​

BausteinAufgabe in diesem BeispielReferenz
Forms (Inhaltsvorlage)ObjectCollection Participants mit Schema und TrefferlisteForms
Fields (Inhaltsvorlage)WordTableRows-Field ParticipantRows erzeugt die Zeilen; Text-Field ParticipantCount zähltFields, Builder API
Word-InhaltsvorlageTabelle mit Kopfzeile und einer Inhaltszeile; Inhaltszeile und Feld bindenZugriff auf primedocs-Felder

Datenfluss​

Schritt 1: Forms mit der Liste der Teilnehmenden​

In der Inhaltsvorlage die Dokumentfunktion Forms aktivieren:

<FormsConfiguration>
<Elements>
<ObjectCollection Id="Participants" Label="Teilnehmende">
<Schema>
<Text Id="FirstName" Label="Vorname" />
<Text Id="LastName" Label="Name" />
<Text Id="Alias" Label="Kürzel" />
<YesNo Id="IsLead" Label="Sitzungsleitung" />
<YesNo Id="TakesMinutes" Label="Protokoll" />
</Schema>
<Summary>
<Field Id="FirstName" />
<Field Id="LastName" />
<Field Id="Alias" />
</Summary>
</ObjectCollection>
</Elements>
</FormsConfiguration>

Die Beschriftungen stehen direkt im Label, damit die Konfiguration ohne Vorarbeit läuft. Für mehrsprachige Vorlagen stattdessen translate-Label mit einem Schlüssel aus den globalen Übersetzungen verwenden.

Warum eine ObjectCollection: Sie nimmt beliebig viele gleichartige Einträge auf. Jeder Eintrag hat die Felder des Schema; Summary bestimmt, welche davon in der Liste des Dialogs erscheinen.

Schritt 2: Fields für Tabellenzeilen und Anzahl​

In der Inhaltsvorlage die Dokumentfunktion Fields aktivieren:

<FieldsConfiguration>
<Fields>
<WordTableRows Name="ParticipantRows">
<Code><![CDATA[
function main() {
const builder = $.wordTableRows.getBuilder();
const participants = $("Forms.Participants");
for (const participant of participants) {
const roles = $.joinNonEmpty(", ",
participant.IsLead ? "Sitzungsleitung" : "",
participant.TakesMinutes ? "Protokoll" : "");
builder.append(
$.joinNonEmpty(" ", participant.FirstName, participant.LastName),
participant.Alias,
roles
);
}
return builder.build();
}
]]></Code>
</WordTableRows>
<Text Name="ParticipantCount">
<Code>
function main() {
return $("Forms.Participants").length.toString();
}
</Code>
</Text>
</Fields>
</FieldsConfiguration>
  • $("Forms.Participants") liefert ein Array; for … of durchläuft jeden Eintrag. IsLead und TakesMinutes sind Boolean.
  • Jeder Aufruf von append(…) erzeugt eine Zeile. Die Anzahl Argumente entspricht den Zellen der Inhaltszeile aus Schritt 3 und muss bei jedem Aufruf gleich sein.
  • build() ist der letzte Aufruf. Ohne Teilnehmende liefert er keine Zeile, und die Inhaltszeile wird ausgeblendet.
  • ParticipantCount: .length ist eine Zahl, ein Text-Field muss einen String zurückgeben, darum .toString().

Schritt 3: Tabelle in der Word-Vorlage​

  1. In der Inhaltsvorlage eine Tabelle mit zwei Zeilen anlegen: eine Kopfzeile mit den Spaltentiteln Name, Kürzel und Rolle sowie darunter eine leere Inhaltszeile. Die Kopfzeile wird nicht gebunden.
  2. Die Inhaltszeile vollständig markieren, auf «Feld binden» klicken und ParticipantRows wählen. primedocs erzeugt für jeden Eintrag eine Kopie dieser Zeile; ihre drei Zellen entsprechen den drei Argumenten von append(…).
  3. Unter der Tabelle einen Satz schreiben, z. B. «An der Sitzung nehmen … Personen teil.», den Cursor an die Stelle der Anzahl setzen und ParticipantCount binden.

Testen​

  • Vorlage im Vorlageneditor testen. Im Forms-Dialog füllt die Schaltfläche für Testdaten auch die Liste mit Beispieleinträgen. Die Tabelle zeigt eine Zeile pro Eintrag, der Satz die passende Anzahl.
  • Rollen: Bei einem Eintrag beide Rollen setzen. Die Zelle zeigt beide Bezeichnungen, durch Komma getrennt.
  • Leere Liste: Alle Einträge entfernen. Die Inhaltszeile ist im generierten Dokument nicht sichtbar; der Satz zeigt 0.

Varianten​

Teilnehmende aus einer Datenquelle: Der ObjectCollection einen Block DataProviders geben, wie im Beispiel Brief mit Empfänger aus einer Adressdatenquelle. Field und Tabelle bleiben gleich.

Formatierte Zellen: Der Builder nimmt auch FormattedText, WordContent und InlineWordContent an, z. B. den Namen mit fettem Nachnamen: $.formattedText.parse("<p>{{first}} <b>{{last}}</b></p>", { first: participant.FirstName, last: participant.LastName }).

Zeilen in einem Snippet: Enthält ein WordContent-Snippet die Tabelle, erhält die Inhaltszeile dort den Platzhalter primedocs.SnippetTableRowsPlaceholder=<Name>, und das Field übergibt die Zeilen im Mapping von getWordContent. Siehe Platzhalter im WordContent-Snippet.

Liste statt Tabelle: Ein Text-Field, das die Namen mit map() und join(", ") zusammensetzt. Siehe Objects und ObjectCollections im Code.

Stolpersteine​

SymptomUrsacheLösung
Das Field lässt sich nicht bindenNicht genau eine vollständige Tabellenzeile markiertDie ganze Inhaltszeile markieren, nicht einzelne Zellen
Fehler bei der Generierung wegen der Zellenzahlappend(…) wurde mit unterschiedlich vielen Argumenten aufgerufenImmer gleich viele Argumente übergeben, leere Zellen als ""
Tabelle zeigt nur die KopfzeileKeine Teilnehmenden erfasst; die Inhaltszeile wird ausgeblendetGewolltes Verhalten; sonst im Forms-Dialog Einträge erfassen
XML-Fehler beim Speichern der Konfiguration< oder & im Code, z. B. in einem Vergleich a < bCode in <![CDATA[ … ]]> setzen, wie in Schritt 2
Fehlermeldung zum Rückgabetyp bei ParticipantCount.length ist eine Zahl.toString() wie in Schritt 2

Verwandte Seiten​