Bibliothek für erweitertes Binding
Diese Dokumentation verwendet der Einfachheit halber für diese Dokumentfunktion den umgangssprachlichen, englischen Begriff "Extended Bindings".
Extended Bindings ermöglichen es, über XSLT den Dokumentaufbau zu beeinflussen. Verglichen mit der Dokumentfunktion "Skripte" sind Extended Bindings in der Lage, nebst dem Textinhalt noch weitere Attribute, wie Textfarbe, Grösse angewandter Style etc. zu verändern. Sie bieten viele Möglichkeiten, sind jedoch anspruchsvoll umzusetzen und zu pflegen und haben eine höhere Ladezeit als Dokumente ohne Extended Bindings. Deswegen sollten Extended Bindings sparsam und wenn möglich gar nicht eingesetzt werden.
Tags
Allgemeine Tags:
Tag | Funktion |
---|---|
<w:sdtContent></w:sdtContent> |
Diese Tags umschliessen das gesamte Extended Binding im Word-Dokument. |
<xsl:stylesheet></xsl:stylesheet> |
Diese Tags umschliessen alle Vorlagen. |
<xsl:template></xsl:template> |
Diese Tags umschliessen eine Vorlage. |
<xsl:param></xsl:param> |
Diese Tags umschliessen einen Parameter. |
<xsl:variable></xsl:variable> |
Diese Tags umschliessen eine Variable. |
<xsl:value-of></xsl:value-of> |
Diese Tags umschliessen eine Variable, die ausgegeben wird. |
<xsl:call-template></xsl:call-template> |
Diese Tags umschliessen einen Vorlagenaufruf. |
<xsl:with-param></xsl:with-param> |
Diese Tags umschliessen einen Parameter, der beim Vorlagenaufruf mitgegeben wird. |
<w:p></w:p> |
Diese Tags umschliessen einen Paragraphen. |
<w:r></w:r> |
Diese Tags umschliessen ein Set von WordprocessingML-Komponenten. |
<w:t></w:t> |
Diese Tags umschliessen reinen Text. |
<w:tbl></w:tbl> |
Diese Tags umschliessen eine gesamte Tabelle. |
<w:tr></w:tr> |
Diese Tags umschliessene eine Tabellenzeile. |
<w:tc></w:tc> |
Diese Tags umschliessene eine Tabellenzelle. |
Caution
Diese Aufzählung ist nicht abschliessend.
Formatierungscontainer-Tags:
Tag | Funktion | Link zu Attributen |
---|---|---|
<w:pPr></w:pPr> |
Innerhalb dieser Tags wird die Formatierung für Paragraphen definiert. | Paragraph Properties |
<w:rPr></w:rPr> |
Innerhalb dieser Tags wird die Formatierung für Runs definiert. | Run Properties |
<w:tblPr></w:tblPr> |
Innerhalb dieser Tags wird die Formatierung für gesamte Tabellen definiert. | Table Properties |
<w:trPr></w:trPr> |
Innerhalb dieser Tags wird die Formatierung für Tabellenzeilen definiert. | TableRow Properties |
<w:tcPr></w:tcPr> |
Innerhalb dieser Tags wird die Formatierung für Tabellenzellen definiert. | TableCell Properties |
<w:t></w:t> |
Reiner Text hat keine Property-Tags, Text wird in den Run-Property-Tags definiert. | Text/Run Properties |
Operatoren
Operator | Funktion |
---|---|
+ |
Addition |
- |
Subtraktion |
* |
Multiplikation |
div |
Division |
= |
Gleich |
!= |
Ungleich |
< / < |
Kleiner als |
> / > |
Grösser als |
<= / >= |
Kleiner Gleich |
>= / <= |
Grösser Gleich |
or |
Logisches Oder |
and |
Logisches Und |
Mod |
Modulus |
$ |
wird verwendet, um eine Variable anzusprechen. |
// |
Doppel-Slash: gibt einen Pfad an mit "Root" als Ausgangspunkt. |
/ |
Einfacher Slash: gibt einen Pfad an mit der jetztigen Position als Ausgangspunkt. |
. |
Einfacher Punkt: spricht das aktuelle Element an. |
.. |
Doppelpunkt: spricht das Elternelement des aktuellen Elements an. |
@ |
spricht Attribute an. |
| |
|-Zeichen: ist ein logisches Und; man kann mehrere Elemente miteinander logisch verbinden. |
not() |
wird für eine Negation verwendet. |
Zugriff auf Daten
Mit Extended Bindings kann man, wie auch mit Skripte, auf Daten zugreifen und diese weiter verwenden. Die Daten werden dabei in einer Variable gespeichert.
Beispiel für eine Variable:
<xsl:variable name="[NAME DER VARIABLE]" select="[REFERNZIERTES OBJEKT]" />
Beispiel für den Zugriff auf ein Textfeld im Dokument-Parameter:
<xsl:variable name="Subject" select="//Text[@id='DocParam.Subject']" />
Das Präfix 'DocParam' ist nicht zwingend nötig. Die OneOffixx-Konventionen schreiben jedoch vor, dass Felder im Dokument-Parameter mit diesem Präfix zu versehen sind.
Beispiel für den Zugriff auf eine CheckBox im Dokument-Parameter:
<xsl:variable name="CheckBox" select="//CheckBox[@id='DocParam.CheckBox']" />
Das Präfix 'DocParam' ist nicht zwingend nötig. Die OneOffixx-Konventionen schreiben jedoch vor, dass Felder im Dokument-Parameter mit diesem Präfix zu versehen sind.
Beispiel für den Zugriff auf eine ComboBox:
<xsl:variable name="ComboBox" select="//ComboBox[@id='DocParam.Combo']/@selectedValue" />
Das Präfix 'DocParam' ist nicht zwingend nötig. Die OneOffixx-Konventionen schreiben jedoch vor, dass Felder im Dokument-Parameter mit diesem Präfix zu versehen sind.
Beispiel für den Zugriff auf ein Skript:
<xsl:variable name="ExampleSkript" select="//Text[@id='CustomElements.ExampleSkript']" />
Anders als beim Zugriff auf den Dokument-Parameter ist hier das Präfix 'CustomElements' zwingend notwendig.
Funktionalitäten
Normalize-Space
Die Funktion "Normalize-Space()" bereinigt Variablen, Eingabefelder, etc. Das heisst, sollte in einem Feld versehentlicherweise ein Leerschlag sein, wird dieses als leer betrachtet.
<xsl:variable name="Subject" select="normalize-space(//Text[@id='DocParam.Subject'])" />
Die obenstehende Variable enthält den Inhalt des Betrefffelds aus dem Dokument-Parameter, bereinigt von überflüssigen Leerschlägen.
If
Die Funktion "If" bietet die Möglichkeit, Aktionen von Bedingungen abhängig zu machen.
<xsl:template name="ConditionedSubject">
<xsl:variable name="Subject" select="//Text[@id='DocParam.Subject']">
<xsl:if test="normalize-space($Subject) != ''">
<w:p>
<w:r>
<w:t>
<xsl:value-of select="$Subject" />
</w:t>
</w:r>
</w:p>
</xsl:if>
</xsl:template>
Die obenstehende Vorlage prüft, ob das Betrefffeld im Dokument-Parameter nicht leer ist. Wenn das zutrifft, wird der Wert ausgegeben, ansonsten geschieht nichts.
Choose
Die Funktion "Choose" ist eine Erweiterung der Funktion If
. Sie bietet zusätzlich die Möglichkeit, eine Anweisung zu machen, wenn die Bedingung nicht zu trifft. Hierfür werden die Tags When
und Otherwise
verwendet. Was zwischen den When
-Tags steht, wird ausgeführt, wenn die Bedingung zutrifft. Was zwischen den Otherwise
-Tags steht, wird ausgeführt, wenn die Bedingung nicht zutrifft.
<xsl:template name="ConditionedSubject">
<xsl:variable name="Subject" select="//Text[@id='DocParam.Subject']" />
<w:p>
<w:r>
<w:t>
<xsl:choose>
<xsl:when test="normalize-space($Subject) != ''">
<xsl:value-of select="$Subject" />
</xsl:when>
<xsl:otherwise>
Subject is empty
</xsl:otherwise>
</xsl:choose>
</w:t>
</w:r>
</w:p>
</xsl:template>
Die obenstehende Vorlage prüft, ob das Betrefffeld im Dokument-Parameter nicht leer ist. Wenn das zutrifft, wird der Wert ausgegeben. Falls das Betrefffeld leer ist, wir der Informationstext 'Subject is empty' ausgegeben.
Substring
Die Funktion "Substring" wird in zwei Unterfunktionen unterteilt; es gibt Substirng-before und Substring-after. Man übergibt der Vorlage einen String (Text) und einen Charakter (Zeichen), bei welchen der Text getrennt werden soll.
<xsl:template name="SubstringBeforeEMail">
<xsl:variable name="E-Mail" select="//Text[@id='DocParam.E-Mail']" />
<xsl:variable name="Charakter">@</xsl:variable>
<w:p>
<w:r>
<w:t>
<xsl:value-of select="substring-before($E-Mail, $Charakter)" />
</w:t>
</w:r>
</w:p>
</xsl:template>
<xsl:template name="SubstringAfterEMail">
<xsl:variable name="E-Mail" select="//Text[@id='DocParam.E-Mail']" />
<xsl:variable name="Charakter">@</xsl:variable>
<w:p>
<w:r>
<w:t>
<xsl:value-of select="substring-after($E-Mail, $Charakter)" />
</w:t>
</w:r>
</w:p>
</xsl:template>
*Die erste Vorlage gibt alles aus, was in der E-Mail vor dem "@" steht. Die zweite Vorlage gibt alles aus, was nach dem "@" steht.
Warning
Das Zeichen, das als Ausgangspunkt verwendet wird – in diesem Fall "@" – wird nicht mitausgegeben.
Concat
Die Funktion "Concat" ist das Gegenteil der Funktion "Substring": sie verbindet Zeichenketten.
<xsl:template name="ConcatEMail">
<xsl:variable name="FirstName" select="//Text[@id='DocParam.FirstName']" />
<xsl:variable name="LastName" select="//Text[@id='DocParam.LastName']" />
<w:p>
<w:r>
<w:t>
<xsl:value-of select="concat($FirstName, '.', $LastName, '@beispiel.com')" />
</w:t>
</w:r>
</w:p>
</xsl:template>
Die obenstehende Vorlage erstellt aus dem Vornamen und Nachnamen eine E-Mail Adresse, zwischen Vornamen und Nachnamen wird ein Punkt gesetzt und nach dem Nachnamen wird noch "@beispiel.com" angehängt.
Beispiele
Empfänger mit Versandart
Die Versandart und der Empfänger haben unterschiedliche Style-Informationen, zudem ist die Versandart eine optionale Eingabe. Wird gewünscht, dass der Empfänger eine Zeile nachrückt, wenn die Versandart nicht ausgefüllt ist, muss das mit einem Extended Binding gelöst werden. Die üblichen Skripte können nicht verschiedene Style-Informationen in einem Skript verwenden.
Beispiel eines Empfängers mit und ohne Versandart |
<!-- Vorlage für Empfänger mit optionaler Versandart. -->
<xsl:template name="OptionalTransmission">
<!-- Variable mit Inhalt der Versandart. -->
<xsl:variable name="Transmission" select="//Text[@id='CustomElements.Versandart']" />
<!-- Variable mit Inhalt des Empfängers. -->
<xsl:variable name="Anschrift" select="//Text[@id='CustomElements.Anschrift']" />
<!-- Condition bei welcher geprüft wird of die Variable für die Versandart Inhalt hat. -->
<xsl:if test="normalize-space($Transmission) = ''">
<!-- Aufruf der Vorlage, welche Spaces durch Umbrüche ersetzt, damit die Empfängerinformationen untereinander angezeigt werden. -->
<xsl:call-template name="StringToList">
<xsl:with-param name="string" select="//Text[@id='CustomElements.Anschrift']" />
</xsl:call-template>
</xsl:if>
<xsl:if test="normalize-space($Transmission) != ''">
<w:p>
<w:pPr>
<w:pStyle w:val="Transmission" />
</w:pPr>
<w:r>
<w:t>
<xsl:value-of select="$Transmission" />
</w:t>
</w:r>
</w:p>
<!-- Aufruf der Vorlage, welche Spaces durch Umbrüche ersetzt, damit die Empfängerinformationen untereinander angezeigt werden. -->
<xsl:call-template name="StringToList">
<xsl:with-param name="string" select="//Text[@id='CustomElements.Anschrift']" />
</xsl:call-template>
</xsl:if>
</xsl:template>
Dynamische Tabellen
Tabellen mit statischer Anzahl Zeilen und Spalten aber optionaler Anzeige der Zeilen und Spalten sind ein weiteres Beispiel für den Einsatz von Extended Bindings. Ob eine Zeile oder Spalte angezeigt wird, kann man im Dokument-Parameter mittels CheckBox definieren.
Beispiel einer Tabelle mit dynamisch angezeigten Zeilen / Spalten |
<!-- Vorlage für dynamisch angezeigte Tabelle -->
<xsl:template name="DynamicTable">
<w:p />
<w:tbl>
<w:tblPr>
<w:tblStyle w:val="Tabellenraster" />
<w:tblW w:w="0" w:type="auto" />
<w:tblLook w:val="04A0" w:firstRow="1" w:lastRow="0" w:firstColumn="1" w:lastColumn="0" w:noHBand="0" w:noVBand="1" />
</w:tblPr>
<w:tblGrid>
<w:gridCol w:w="1701" />
<w:gridCol w:w="1701" />
</w:tblGrid>
<!-- Condition bei welcher geprüft wird ob die erste Zeile angezeigt werden soll [DocParam.Row1 = Erste Zeile anzeigen]. -->
<xsl:if test="//CheckBox[@id='DocParam.Row1'] = 'true'">
<w:tr>
<!-- Condition bei welcher geprüft wird ob die erste Spalte angezeigt werden soll [DocParam.Column1 = Erste Spalte anzeigen]. -->
<xsl:if test="//CheckBox[@id='DocParam.Column1'] = 'true'">
<w:tc>
<w:tcPr>
<w:tcW w:w="1701" w:type="dxa" />
</w:tcPr>
<w:p>
<w:r>
<w:t>
Zeile 1 Spalte 1
</w:t>
</w:r>
</w:p>
</w:tc>
</xsl:if>
<!-- Condition bei welcher geprüft wird ob die zweite Spalte angezeigt werden soll [DocParam.Column2 = Zweite Spalte anzeigen]. -->
<xsl:if test="//CheckBox[@id='DocParam.Column2'] = 'true'">
<w:tc>
<w:tcPr>
<w:tcW w:w="1701" w:type="dxa" />
</w:tcPr>
<w:p>
<w:r>
<w:t>
Zeile 1 Spalte 2
</w:t>
</w:r>
</w:p>
</w:tc>
</xsl:if>
</w:tr>
</xsl:if>
<!-- Condition bei welcher geprüft wird ob die zweite Zeile angezeigt werden soll [DocParam.Row2 = Zweite Zeile anzeigen]. -->
<xsl:if test="//CheckBox[@id='DocParam.Row2'] = 'true'">
<w:tr>
<!-- Condition bei welcher geprüft wird ob die erste Spalte angezeigt werden soll [DocParam.Column1 = Erste Spalte anzeigen]. -->
<xsl:if test="//CheckBox[@id='DocParam.Column1'] = 'true'">
<w:tc>
<w:tcPr>
<w:tcW w:w="1701" w:type="dxa" />
</w:tcPr>
<w:p>
<w:r>
<w:t>
Zeile 2 Spalte 1
</w:t>
</w:r>
</w:p>
</w:tc>
</xsl:if>
<!-- Condition bei welcher geprüft wird ob die zweite Spalte angezeigt werden soll [DocParam.Column2 = Zweite Spalte anzeigen]. -->
<xsl:if test="//CheckBox[@id='DocParam.Column2'] = 'true'">
<w:tc>
<w:tcPr>
<w:tcW w:w="1701" w:type="dxa" />
</w:tcPr>
<w:p>
<w:r>
<w:t>
Zeile 2 Spalte 2
</w:t>
</w:r>
</w:p>
</w:tc>
</xsl:if>
</w:tr>
</xsl:if>
</w:tbl>
<w:p />
</xsl:template>