Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
<Row>
  <Label Content="Geschlecht" />
  <RadioButton Id="DocParam.RBGeschlecht" Value="1" Label="Frau" />
  <RadioButton Id="DocParam.RBGeschlecht" Value="2" Label="Mann" />
</Row>

...

ExpandtitleDefinition eines RadioButtons mit einem ComboBox-Element:

In diesem Fall wird der RadioButton im ComboBox-Element gespeichert. Der Value in der ComboBox muss dabei der Value im RadioButton in der View entsprechen. Diese Variante ist geeignet, wenn der Wert im Dokument ausgegeben werden soll, da die Anzeige im Dokument über den Value des ComboBoxNode-Eintrags gesteuert wird. Falls ein RadioButton vorausgewählt sein soll, muss der Value des entsprechenden RadioButtons im SelectedValue-Attribut der ComboBoxNode konfiguriert werden.

ComboBoxNode in der DataNode-Section:

Code Block
<DataNodes>
  <ComboBox Id="DocParam.RBGeschlecht" SelectedValue="2">
    <ListItem Value="1"  DisplayText="Frau" />
    <ListItem Value="2"  DisplayText="Mann" />
  </ComboBox>
</DataNodes>

In der View:

Code Block
<Row>
  <Label Content="Geschlecht" />
  <RadioButton Id="DocParam.RBGender" Value="1" Label="Frau" />
  <RadioButton Id="DocParam.RBGender" Value="2" Label="Mann" />
</Row>

...

Beispiel zur Veranschaulichung der Spalten:

Konfiguration:

Code Block
languagexml
<View Id="main" Label="Startseite">
  <Row>
    <TextBlock Style="h1" ColumnSpan="4">Beispiel-Dokument-Parameter-View</TextBlock>
  </Row>
  <Row>
    <Separator ColumnSpan="4"/>
  </Row>
  <Row>
    <Label Content="Betreff" />
    <TextBox Id="DocParam.Subject" ColumnSpan="3" />
  </Row>
  <Row>
    <Label Content="Datum" />
    <DatePicker Id="DocParam.DateOfWriting" ColumnSpan="3" />
  </Row>
  <Row>
    <CheckBox Id="DocParam.IsConfidential" Label="Vertraulich" ColumnOffset="1" ColumnSpan="3" />
  </Row>
  <Row>
    <Label Content="Gratulationsgrund (1)" />
    <ComboBox Id="DocParam.ReasonForCongratulation1" />
  </Row>
  <Row>
    <Label Content="Gratulationsgrund (2)" />
    <RadioButton Id="DocParam.ReasonForCongratulation2" Value="birthday" Label="Geburtstag" />
    <RadioButton Id="DocParam.ReasonForCongratulation2" Value="employee anniversary" Label="Mitarbeiterjubiläum" />
    <RadioButton Id="DocParam.ReasonForCongratulation2" Value="mother-/fatherhood" Label="Mutter-/Vaterschaft" />
  </Row>
  <Row>
    <Separator />
  </Row>
  <Button Type="Submit" Label="OK" IsDefault="true" />
  <Button Type="Cancel" Label="Abbrechen" />
</View>

Resultat (Spalten wurden markiert):

...


Validierung

Benutzereingaben können, wie erwähnt, validiert werden. Wenn eines oder mehrere Felder dementsprechend markiert werden, kann der Benutzer den Dokument-Parameter-Dialog nicht verlassen, bevor er die Bedingungen erfüllt hat.

Übersicht über alle Validierungsmöglichkeiten:

  • DataNode-Elemente

    • "Text": mit Required oder Regex

    • "CheckBox": mit Required

  • Formularelemente

    • "ComboBox": mit IsInvalidWhenValue

    • "RadioButton": bei Verknüpfung mit Text-Element mit Required. Mittels Attribut ShowRequiredIncicator wird bestimmt, wo das Warnhinweis-Icon angezeigt werden soll.

Beispiel/Aussehen des Dialoges:

...

Beispiel/Konfiguration:

Code Block
languagexml
<?xml version="1.0" encoding="utf-8"?>
<Configuration>
  <CustomContentSection Name="Dokument-Parameter" WindowWidth="750" WindowHeight="450">
    <DataNodes>
      
      <Text Id="DocParam.TextRequired" Required="true" ValidationMessage="Bitte Feld nicht leer lassen" />
      
      <Text Id="DocParam.TextRegexOnlyDigits" Regex="^[0-9]*$" ValidationMessage="Bitte nur Ziffern eingeben">Abc</Text>
      
      <CheckBox Id="DocParam.CheckBoxRequired" Required="true" Tooltip="CheckBox muss zwingend angekreuzt sein" />
      
      <Text Id="DocParam.ComboBoxInViewNotOption1" Tooltip="Bitte nicht Option 1 anwählen">option1</Text>
      
      <ComboBox Id="DocParam.ComboBoxInDataNodesNotOption1" SelectedValue="option1" Tooltip="Bitte nicht Option 1 anwählen">
        <Item DisplayText="Option 1" Value="option1" />
        <Item DisplayText="Option 2" Value="option2" />
        <Item DisplayText="Option 3" Value="option3" />
      </ComboBox>
      
      <Text Id="DocParam.RadioButtonRequired" Required="true" />
      
    </DataNodes>
  </CustomContentSection>
  <Views IsDebug="false">
    <View Id="main" Label="Startseite">
      <Row>
        <TextBlock Style="h1" ColumnSpan="4">Validierungsbeispiel</TextBlock>
      </Row>
      <Row>
        <Separator ColumnSpan="4"/>
      </Row>
      <Row>
        <Label ColumnSpan="2" Content="Textfeld, darf nicht leer sein" />
        <TextBox Id="DocParam.TextRequired" ColumnSpan="2" />
      </Row>
      <Row>
        <Label ColumnSpan="2" Content="Textfeld, darf nur Ziffern enthalten" />
        <TextBox Id="DocParam.TextRegexOnlyDigits" ColumnSpan="2" />
      </Row>
      <Row>
        <Label ColumnSpan="2" Content="CheckBox, muss angekreuzt sein" />
        <CheckBox Id="DocParam.CheckBoxRequired" Label="CheckBox" />
      </Row>
      <Row>
        <Label ColumnSpan="2" Content="ComboBox, Option 1 darf nicht gewählt sein" />
        <ComboBox Id="DocParam.ComboBoxInViewNotOption1" IsInvalidWhenValue="option1">
          <Item Label="Option 1" Value="option1" />
          <Item Label="Option 2" Value="option2" />
          <Item Label="Option 3" Value="option3" />
        </ComboBox>
      </Row>
      <Row>
        <Label ColumnSpan="2" Content="ComboBox, Option 1 darf nicht gewählt sein" />
        <ComboBox Id="DocParam.ComboBoxInDataNodesNotOption1" IsInvalidWhenValue="option1" />
      </Row>
      <Row>
        <Label ColumnSpan="2" Content="RadioButtons, es muss eine Option gewählt werden" />
        <RadioButton Id="DocParam.RadioButtonRequired" Value="option1" Label="Option 1" />
        <RadioButton Id="DocParam.RadioButtonRequired" Value="option2" Label="Option 2" ShowRequiredIndicator="true" ToolTip="Bitte eine Option wählen" />
      </Row>
      <Button Type="Submit" Label="OK" IsDefault="true" />
      <Button Type="Cancel" Label="Abbrechen" />
    </View>
  </Views>  
</Configuration>

...

Bindings

Simple Bindings

Bindings beziehen sich auf andere Werte und können diese als "Wert-Grundlage" und für Abfragen nutzen. Über Bindings können folgende Attribute gesteuert werden:

Mögliche Attribute

Beschreibung

IsEnabled

Gilt für alle Elemente. Definiert, ob das Feld benutzt werden darf (Text erfassen in einer Textbox, CheckBox anklicken, aus einer ComboBox etwas auswählen etc.)

IsVisible

Gilt für alle Elemente. Definiert, ob ein Feld sichtbar ist.

Value

Gilt für alle Elemente, die einen Wert vorweisen, also nicht für Buttons. Indem man es "bindet", kann ein Wert eines Feldes auf ein anderes Feld übertragen werden.

TargetView

Wird bei Buttons eingesetzt zum zur nächsten View zu gelangen.

IsVisible-Beispiel:

Code Block
<Button Bind="IsVisible: $('DocParam.Erweitert') != 'true'" TargetView="Final" Label=">" />
<Button Bind="IsVisible: $('DocParam.Erweitert') == 'true'" TargetView="Notizen" Label="Notizen >" />

Der Button mit der Bezeichnung "Notizen >" wird nur im Dokument-Parameter angezeigt, wenn es einen Wert "DocParam.Erweitert" = "true" (also eine aktivierte CheckBox) gibt. IsEnabled funktioniert gleich.

TargetView-Beispiel:

Code Block
languagexml
<Button Bind="TargetView: $('DocParam.Type')" />

Value-Bind-Beispiel:

Werte können auch an Controls gebunden werden um z. B. bei der letzten Seite eine Übersicht der eingegeben Daten anzuzeigen:

Code Block
languagexml
<Row>
  <Label Content="Notizen aktiv:" />
  <CheckBox IsEnabled="false" ColumnSpan="3" Bind="Value: $('DocParam.Erweitert')" />
</Row>
<Row>
  <Label Content="Notizen:" />
  <TextBlock IsEnabled="false" ColumnSpan="3" Bind="Value: $('DocParam.Notizen')" />
</Row>
<Row>
  <TextBlock>Number Input:</TextBlock>
  <TextBox Id="NumberTest" />
  <TextBlock>Number Output:</TextBlock>
  <TextBlock Bind="IsVisible: $('NumberTest') &gt;= 100">EQUAL OR OVER 100!</TextBlock>
  <TextBlock Bind="IsVisible: $('NumberTest') &lt; 100">BELOW 100!</TextBlock>
</Row>
<Row>
  <TextBlock>Number with Combine:</TextBlock>
  <TextBox Id="NumberTestA" />
  <TextBox Id="NumberTestB" />
</Row>
<Row>
  <TextBlock>Output:</TextBlock>
  <TextBlock Bind="IsVisible: $('NumberTestA') &gt; 100 &amp;&amp; $('NumberTestB') &gt; 100">Both are over 100!</TextBlock>
  <TextBlock Bind="IsVisible: $('NumberTestA') &gt; 100 || $('NumberTestB') &gt; 100">One Is over 100!</TextBlock>
</Row>

Anstatt einzelne Elemente können auch ganze Rows gebindet werden:

Row-Beispiel:

Code Block
<Row Bind="IsVisible: $('DocParam.Erweitert') == 'true'">
  <TextBlock>Nur sichtbar wenn die CheckBox mit Id "DocParam.Erweitert" aktiviert ist.</TextBlock>
</Row>

Vergleichsoperatoren der Bindings:

Operator

Beschreibung

!=

ungleich, gilt für Text und Zahlen.

==

gleich, gilt für Text und Zahlen

&gt; für >

grösser als (XML-Attribute erlauben keine < oder >, daher muss &lt; oder &gt; verwendet werden)

&gt;= für >=

grösser oder gleich

&lt; für <

kleiner als

&lt;= für <=

kleiner oder gleich

Mehrere Bedingungen können mit UND oder ODER verknüpft werden:

  • || für ODER

  • &amp;&amp; für UND (steht für &&) (XML-Attribute erlauben keine "&", daher muss &amp; verwendet werden)

Es können auch mehrere Bindings mit einem , getrennt angegeben werden:

Code Block
languagexml
<TextBlock ColumnSpan="4" Bind="Value: $('DocParam.Notizen'), IsEnabled: 'false'" />

...

Calc": Berechnungen in Bindings

Die Wertgrundlagen für die Bindings können mit mathematischen Funktionen erweitert werden. Das Ansprechen der Felder bleibt dabei gleich ($('DocParam.Xyz')). Um die Felder mathematisch miteinander zu verknüpfen, können die normalen Basisoperatorn (+, -, /, *) verwendet werden.

Übersicht über alle möglichen Operatoren und wie sie verwendet werden:

Operator

Beschreibung

Basis-Operatoren wie +, -, *, /

Basis-Operatoren

Standard-Funktionen wie Quadratwurzel, sin, tan, cos, etc.

Standard-Funktionen

==, !=, <=, etc.

Bool'sche Operatoren

Weitere Funktionen

rnd():
Die rnd()-Funktion wird zum Runden von Zahlen verwendet. Der übergebene Wert wird auf die naheliegendste Ganzzahl gerundet.
Beispiele:
Calc('rnd(10.23 * 10) / 10';'F2') → Rundet 102.3 auf die nächste Ganzzahl (102) und teilt diese wieder durch 10 → 10.20
Calc('rnd(1510 / 100) * 100';'F0')) → Rundet 15.10 auf die nächste Ganzzahl (15) und multipliziert sie mit 100 → 1500.

Jeder Calc-Aufruf enthält als abschliessendes Argument den Formatierungs-String, vom Term separiert durch ein ;. Dieser Wert kann weggelassen werden (die umschliessenden '' jedoch nicht). Das ; ist zwingend.

Formatierung:

  • N2 → Zahl mit zwei Nachkommastellen (Standard)

  • C2 → Währungsformat entsprechend der aktuell ausgewählten Dokumentsprache mit zwei Nachkommastellen

Komplette Liste mit Formatierungscodes: https://docs.microsoft.com/de-de/dotnet/standard/base-types/standard-numeric-format-strings

Syntax:

Code Block
Calc('Term';'Format')  
Calc('$('DocParam.Field1') + $('DocParam.Field2')';'')  
Calc('$('DocParam.Field1') + ($('DocParam.Field2') * $('DocParam.Field2'))';'C2')  
Panel
panelIconIdatlassian-warning
panelIcon:warning:
bgColor#FFBDAD

ACHTUNG

Nach dem ; muss entweder ein Wert oder gar nichts stehen. Calc('Term'; ) führt zu einem Fehler, richtig ist Calc('Term';'') / Calc('Term';'Format').
Wird in der Calc-Funktion ein boolscher Vergleich durchgeführt (Calc('DocParam.Node1 == DocParamNode2';'F0')), dann muss unbedingt beachtet werden, dass die Formatierung auf F0 gesetzt ist, denn der Rückgabewert muss 0 oder 1 sein (für true/false) und wenn als Formatierung nicht F0 angegeben ist, wird der Wert zu 1.00 formatiert, was nicht als Boolsches "true" erkannt wird.
Bei Vergleichen wie Calc('Term';'Format') == 'Value' muss darauf geachtet werden, dass der entsprechende Value mit dem richtigen Format angegeben wird (Standard xx.yy), ansonsten schlägt der Vergleich fehl. 10.00 == 10 wird als "false" ausgewertet.

Die verwendete Library ist fähig, Exponent-vor-Punkt-vor-Strich zu rechnen. → ( a + b * c) == (a + (b * c)) != ((a + b ) * c) . Beim Calc-Schlüsselwort spielt die Gross- und Kleinschreibung keine Rolle.

Beispiele

Value-Bind:

Code Block
languagexml
<Row>
  <Label Content="Addition" />
  <TextBox Id="DocParam.OutputAdd" ColumnSpan="3" Bind="Value: Calc('$('DocParam.Field1') + $('DocParam.Field2')';'C2')" />
</Row> 

IsVisible-Bind:

Code Block
<Row>
  <Label Content="IsVisible" />
  <TextBox Id="DocParam.OutputSubtract" ColumnSpan="3" Bind="IsVisible: Calc('$('DocParam.Field1') - $('DocParam.Field2')';'C2') == 'CHF 20.00'" />
</Row>
<Row>  
  <Label Content="IsVisible" />
  <TextBox Id="DocParam.OutputSubtract" ColumnSpan="3" Bind="IsVisible: Calc('$('DocParam.Field1') - $('DocParam.Field2')';'') == '20.00'" />
</Row>  

Weiter bietet Calc die Möglichkeit, angewählte CheckBoxen zu "zählen":

Code Block
<Row Bind="IsVisible: Calc('$('Checkbox1') + $('Checkbox2') + $('Checkbox3') + $('Checkbox4')';'F0') == '2'">
  <Label Content="Label">
</Row>

Der bool'sche "Checked"-Value der Checkbox wird von Calc in einen Integer mit Wert 0 für false (= nicht angewählt) und 1 für true (= angewählt) umgewandelt, sodass die Werte zusammengerechnet werden können. Das obige Beispiel steht für: "Wenn zwei der Checkboxen 1 bis 4 angewählt sind, dann zeige die Row mit dem Label an." Dabei muss auf die Formatierung geachtet werden: Zwingend ohne Kommastellen, denn 1.00 ist nicht gleich 1, und kann dementsprechend nicht in einen bool'schen Wert zurückgewandelt werden.

Sofern keine Standardwerte in den DataNode-Elementen vorgegeben sind, werden alle Calc-Binding-Werte mit 0 initialisiert. Insbesondere bei "IsEnabled"- und "IsVisible"-Bindings mit "Calc"-Bedingungen sollte man auf valide Standardwerte achten, ansonsten ist die Bedingung initial immer erfüllt.

...

Script – JavaScript

Für Anforderungen, die mit den üblichen Konfigurationen nicht abgedeckt werden können, bietet die Dokument-Parameter-Dokumentfunktion die Möglichkeit, JavaScript zu schreiben.

Grundaufbau mit JavaScript

Das Script-Element wird an folgender Stelle eingefügt:

Code Block
<Configuration>
  <CustomContentSection [...]>
    <DataNodes>
      [...]
    </DataNodes>
  </CustomContentSection>
  <Views>
    <Script>
      <![CDATA[
        // Hier kann JavaScript geschrieben werden.
      ]]>
    </Script>
    <View>
      [...]
    </View>
  </Views>
</Configuration>

JavaScript-Beispiel

Komplettes Beispiel, das die Möglichkeiten der JavaScript-Integration aufzeigt:

Code Block
<?xml version="1.0" encoding="utf-8"?>
<Configuration>
  <CustomContentSection Name="Dokument-Parameter" WindowWidth="750" WindowHeight="450">
    <DataNodes>
      
      <Text Id="DocParam.TextFieldMustContainTest">Etwas</Text>
      
      <Text Id="DocParam.TextFieldInput">Zwölf Boxkämpfer jagen Viktor quer über den großen Sylter Deich.</Text>
      <Text Id="DocParam.TextFieldResultUpperCase" />
      <Text Id="DocParam.TextFieldResultLowerCase" />
      
    </DataNodes>
  </CustomContentSection>
  <Views OnSubmit="validate()">
    <Script>
      <![CDATA[
        
        function validate() {
          var textFieldContainsTest = OO.getValue("DocParam.TextFieldMustContainTest") === "Test";
          
          if (textFieldContainsTest === false) {
            OO.addValidationMessage("DocParam.TextFieldMustContainTest", "Textfeld 1 muss 'Test' sein und nicht '" + OO.getValue("DocParam.TextFieldMustContainTest") + "'");
            return false;
          }
           
          return true;
        }
        
        function textFieldInputChanged() {
          var textOfTextField = OO.getValue("DocParam.TextFieldInput");
          
          var textInUpperCase = textOfTextField.toUpperCase();
          OO.setValue("DocParam.TextFieldResultUpperCase", textInUpperCase);
          
          var textInLowerCase = textOfTextField.toLowerCase();
          OO.setValue("DocParam.TextFieldResultLowerCase", textInLowerCase);
        }
        
      ]]>
    </Script>
    <View Id="main" Label="Startseite">
      <Row>
        <TextBlock Style="h1" ColumnSpan="4">JavaScript-Beispiel</TextBlock>
      </Row>
      <Row>
        <Separator ColumnSpan="4"/>
      </Row>
      <Row>
        <Label Content="Muss &quot;Text&quot; enthalten" />
        <TextBox Id="DocParam.TextFieldMustContainTest" ColumnSpan="3" />
      </Row>
      <Row>
        <Separator ColumnSpan="4"/>
      </Row>
      <Row>
        <Label Content="Eingabe" />
        <TextBox Id="DocParam.TextFieldInput" ColumnSpan="3" OnChange="textFieldInputChanged()" />
      </Row>
      <Row>
        <Label Content="Ausgabe in Grossbuchstaben" />
        <TextBox Id="DocParam.TextFieldResultUpperCase" ColumnSpan="3" IsEnabled="false" />
      </Row>
      <Row>
        <Label Content="Ausgabe in Kleinbuchstaben" />
        <TextBox Id="DocParam.TextFieldResultLowerCase" ColumnSpan="3" IsEnabled="false" />
      </Row>
      <Button Type="Submit" Label="OK" IsDefault="true" />
      <Button Type="Cancel" Label="Abbrechen" />
    </View>
  </Views>  
</Configuration>

Innerhalb des Script-Elements können JavaScript-Funktionen definiert werden. Erlaubt ist gültiges ECMAScript 5.1.
Für die Verwendung dieses Features sind JavaScript-Kenntnisse vorausgesetzt. Die Grundlagen von JavaScript sind in dieser Dokumentation nicht aufgeführt.

Für den Aufruf der Funktionen gibt es zwei Möglichkeiten:

  • Über das OnSubmit-Attribut auf dem Views-Element (siehe Beispiel oben)
    Bei diesen Funktionen muss entweder true oder false zurückgegeben werden:

    • true: Kein Validierungsfehler = Dokument-Parameter-Dialog wird verlassen

    • false: Validierungsfehler, Validierungsübersicht wird angezeigt = Dokument-Parameter-Dialog bleibt offen

  • Über das OnChange-Attribut auf einem View-Wert-Control (z. B. auf einem TextBox-Control; siehe Beispiel oben)
    Bei diesen Funktionen ist kein Rückgabewert nötig.

Für die Interaktion mit DataNode-Elementen kann das OO-Objekt wie folgt verwendet werden:

  • OO.getValue("ANY_ID"): Gibt den Text-Wert des DataNode-Elements mit der entsprechenden Id zurück. Beispiel: var valueFromExampleDocParam = OO.getValue("DocParam.Example");

  • OO.setValue("ANY_ID", "ANY_VALUE"): Setzt den Text-Wert des DataNode-Elements mit der entsprechenden Id. Beispiel: OO.setValue("DocParam.Example", "Neuer Inhalt...");

  • OO.addValidationMessage("ANY_ID", "ANY_VALIDATION_MESSAGE"): Setzt einen Validierungsfehler mit einer Nachricht für das DataNode-Element mit der entsprechenden Id. Hinweis: Alle Validierungsnachrichten werden in der Validierungsübersicht angezeigt. Wenn ein Element mit der angegebenen ID gefunden wird, wird ein Fehlerhinweis angezeigt. Beispiel: OO.addValidationMessage("DocParam.Example", "Wenn X und Y gesetzt wurden, muss im Beispielfeld etwas eingegeben werden.");

...

DataSources

Das DataSources-Feature ist auf dieser Seite dokumentiert.

...

Beispiele über alle Themen auf dieser Seite

Einfacher Dokument-Parameter-Dialog:

Konfiguration eines einfachen Dokument-Parameter-Dialoges:

Code Block
languagexml
<Configuration>
  <CustomContentSection Name="Dokument-Parameter" WindowWidth="750" WindowHeight="750">
    <DataNodes>
      
      <Text Id="DocParam.Subject" />
      <DateTime Id="DocParam.CreationTime" Format="d. MMMM yyyy" />
      
      <CheckBox Id="DocParam.CheckBox1" />
      
      <ComboBox Id="DocParam.ComboBox1" SelectedValue="default">
        <Item DisplayText="Option 1" Value="opt1" />
        <Item DisplayText="Option 2" Value="opt2" />
        <Item DisplayText="Option 3" Value="opt3" />
      </ComboBox>
      
      <Text Id="DocParam.TextNodeForRadio" />
      <ComboBox Id="DocParam.ComboBoxForRadio">
        <Item DisplayText="Option 1" Value="opt1" />
        <Item DisplayText="Option 2" Value="opt2" />
        <Item DisplayText="Option 3" Value="opt3" />
      </ComboBox>
      
    </DataNodes>
  </CustomContentSection>
  <Views IsDebug="false">
    <View Id="main" Label="Startseite">
      <Row>
        <TextBlock Style="h1" ColumnSpan="4">Titel</TextBlock>
      </Row>
      <Row>
        <Separator ColumnSpan="4" />
      </Row>
      <Row>
        <Label Content="Betreff" />
        <TextBox Id="DocParam.Subject" ColumnSpan="3" />
      </Row>
      <Row>
        <Label Content="Datum" />
        <DatePicker Id="DocParam.CreationTime" ColumnSpan="3" />
      </Row>
      <Row>
        <CheckBox Id="DocParam.CheckBox1" Label="CheckBox mit ColumnOffset=1" ColumnOffset="1" ColumnSpan="2" />
      </Row>
      <Row>
        <Label Content="das ist eine Combobox" ColumnSpan="1" />
        <ComboBox Id="DocParam.ComboBox1" ColumnSpan="2" />
      </Row>
      <Row>
        <Label Content="RadioButton Basierend auf einem TextNode" ColumnSpan="4"></Label>
      </Row>
      <Row>
        <Separator ColumnSpan="4" />
      </Row>
      <Row>
        <!-- Konfiguration eines RadioButton über ein DataNode-Element vom Typ Text. Wenn das DataNode-Element vom Typ Text im Dokument verwendet wird, dann wird der Value der ausgewählten Option eingefügt. Die anderen Optionen können im Dokument nicht mehr angewählt werden, nur über den Dokument-Parameter-Dialog. -->
        <RadioButton Id="DocParam.TextNodeForRadio" Value="opt1" Label="Option 1" />
        <RadioButton Id="DocParam.TextNodeForRadio" Value="opt2" Label="Option 2" />
        <RadioButton Id="DocParam.TextNodeForRadio" Value="opt3" Label="Option 3" />
      </Row>
      <Row>
        <!-- Fügt eine leere Row ein, kann so verwendet werden, um Elemente optisch besser zu trennen. -->
        <TextBlock />
      </Row>
      <Row>
        <Label Content="RadioButton basierend auf einem ComboBoxNode" ColumnSpan="4" />
      </Row>
      <Row>
        <Separator ColumnSpan="4" />
      </Row>
      <Row>
         <!-- Konfiguration eines RadioButton über ein DataNode-Element vom Typ ComboBox. Wenn das DataNode-Element vom Typ ComboBox im Dokument verwendet wird, wird das Label der ausgewählten Option angezeigt. Die anderen Optionen können über die ComboBox von Word weiterhin angewählt werden. -->
        <RadioButton Id="DocParam.ComboBoxForRadio" Value="opt1" Label="Option 1" />
        <RadioButton Id="DocParam.ComboBoxForRadio" Value="opt2" Label="Option 2" />
        <RadioButton Id="DocParam.ComboBoxForRadio" Value="opt3" Label="Option 3" />
      </Row>
      <Button Type="Submit" Label="OK" IsDefault="true" />
      <Button Type="Cancel" Label="Abbrechen" />
    </View>
  </Views>
</Configuration>

Der dazugehörige Dialog:

...

Validierung:

Code Block
<Configuration>
  <CustomContentSection Name="Dokument-Parameter" WindowWidth="750" WindowHeight="750">
    <DataNodes>   
      
      <Text Id="DocParam.Subject" Required="true" ValidationMessage="Bitte geben sie einen Betreff ein" />
      <Text Id="DocParam.4NumbersMax" Regex="^[0-9]{1,4}$" ValidationMessage="Die Zahl darf maximal aus vier Ziffern bestehen und muss natürlich sein" />
      
    </DataNodes>
  </CustomContentSection>
  <Views>
    <View Id="main" Label="Startseite">
      <Row>
        <TextBlock Style="h1" ColumnSpan="4">Titel</TextBlock>
      </Row>
      <Row>
        <Separator ColumnSpan="4"/>
      </Row>
      <Row>
        <Label Content="Betreff" />
        <TextBox Id="DocParam.Subject" ColumnSpan="3" />
      </Row>
       <Row>
        <Label Content="Maximal Vierstellige, natürlich Zahl" />
        <TextBox Id="DocParam.4NumbersMax" ColumnSpan="3" />
      </Row>
      <Button Type="Submit" Label="OK" IsDefault="true" />
      <Button Type="Cancel" Label="Abbrechen" />
    </View>
  </Views>
</Configuration>

Verhalten des Dialoges:

https://primesoft.primedocs.io/docs/de/images/system/docfunc/documentparameter/documentParameterExampleValidation.gif

...

Simple Bindings:

Code Block
languagexml
<Configuration>
  <CustomContentSection Name="Dokument-Parameter" WindowWidth="750" WindowHeight="750">
    <DataNodes> 
      
      <CheckBox Id="DocParam.Checkbox1" />
      <Text Id="DocParam.TextNode1" />
      
    </DataNodes>
  </CustomContentSection>
  <Views>
    <View Id="main" Label="Startseite">
      <Row>
        <TextBlock Style="h1" ColumnSpan="4">Titel</TextBlock>
      </Row>
      <Row>
        <Separator ColumnSpan="4"/>
      </Row>      
      <Row>
        <Label Content="Name für CustomLabel"></Label>
        <TextBox Id="DocParam.TextNode1"></TextBox>
      </Row>
      <Row>
        <CheckBox Id="DocParam.Checkbox1" Label="Zeige CustomLabel"></CheckBox>
      </Row>
      <Row>
       <Label Content="CustomLabel: " Bind="IsVisible: $('DocParam.Checkbox1')"></Label>
        <!-- Einfaches, Doppeltes Binding mit einer Bedingung pro gebindetem Attrbut (isVisible, Value) -->
        <TextBlock Bind="IsVisible: $('DocParam.Checkbox1'), Value: $('DocParam.TextNode1')"></TextBlock>
      </Row>
        <!-- Einfaches Value Binding -->
      <Row Bind="IsVisible: $('DocParam.TextNode1') == 'Hello'">
        <TextBlock>CustomLabel hat den Wert 'hello'</TextBlock>
      </Row>
      <!-- IsVisible-Binding mit einer UND Bedingung (&& → &amp;&amp; ) -->
      <Row Bind="IsVisible: $('DocParam.Checkbox1') &amp;&amp; $('DocParam.TextNode1') == 'Hello'">
        <TextBlock Value="">CustomLabel ist sichtbar UND hat den Wert 'Hello'</TextBlock>
      </Row>  
      <!-- IsVisible-Binding mit einer ODER Bedingung -->
      <Row Bind="IsVisible: $('DocParam.Checkbox1') || $('DocParam.TextNode1') == 'hello'">
        <TextBlock>CustomLabel ist sichtbar ODER hat den Wert 'hello'</TextBlock>
      </Row>
      <Button Type="Submit" Label="OK" IsDefault="true" />
      <Button Type="Cancel" Label="Abbrechen" />
    </View>
  </Views>
</Configuration>

Das Verhalten des Dialoges:

https://primesoft.primedocs.io/docs/de/images/system/docfunc/documentparameter/documentParameterExampleBindingsStandard.gif

...

Bindings: Calc

Code Block
<Configuration>
  <CustomContentSection Name="Dokument-Parameter" WindowWidth="750" WindowHeight="750">
    <DataNodes>
      
      <!-- Eingabefelder für die mathematischen Funktionen mit validen Standardwerten -->
      <Text Id="DocParam.Field1">1</Text>
      <Text Id="DocParam.Field2">1</Text>
      
      <Text Id="DocParam.TestNode2" />
      <Text Id="DocParam.OutputAdd" />
      <Text Id="DocParam.OutputSubtract" />
      <Text Id="DocParam.OutputDivide" />
      <Text Id="DocParam.OutputMultiply" />
      <Text Id="DocParam.CB1" />
      <Text Id="DocParam.CB2" />
      <Text Id="DocParam.CB3" />
      <Text Id="DocParam.CB4" />
        
    </DataNodes>
  </CustomContentSection>
  <Views>
    <View Id="main" Label="Startseite">      
      <Row>
        <TextBlock Style="h1" ColumnSpan="4">Titel</TextBlock>
      </Row>
      <Row>
        <Separator ColumnSpan="4"/>
      </Row>
      <Row>
        <Label Content="Wert 1" />
        <TextBox Id="DocParam.Field1" ColumnSpan="3"/>
      </Row>
      <Row>
        <Label Content="Wert 2" />
        <TextBox Id="DocParam.Field2" ColumnSpan="3" />
      </Row>    
      <Row Bind="IsVisible: Calc('$('DocParam.Field1') + $('DocParam.Field2') &gt; 1000';'F0') ">
        <TextBlock>Wert1 + Wert2 Ergeben mehr als 1000</TextBlock>
      </Row>
      <Row>
        <Label Content="Ergebnis Addition" />
        <!-- Simples CalcBinding mit Addition und Formatierung auf zwei Nachkomastellen im Währungsformat -->
        <TextBox Id="DocParam.OutputAdd" ColumnSpan="3" Bind="Value: Calc('$('DocParam.Field1') + $('DocParam.Field2')';'C2')" />
      </Row>
      <Row>
        <Label Content="Ergebnis Subtraktion" />
         <!-- Simples CalcBinding mit Subtraktion und Formatierung auf zwei Nachkomastellen im Währungsformat -->
        <TextBox Id="DocParam.OutputSubtract" ColumnSpan="3" Bind="Value: Calc('$('DocParam.Field1') - $('DocParam.Field2')';'C2')" />
      </Row>
      <Row>
        <Label Content="Ergebnis Division" />
         <!-- Simples CalcBinding mit Divison und Formatierung auf drei Nachkomastellen im Dezimalformat -->
        <TextBox Id="DocParam.OutputDivide" ColumnSpan="3" Bind="Value: Calc('$('DocParam.Field1') / $('DocParam.Field2')';'F3')" />
      </Row>
      <Row>
        <Label Content="Ergebnis Multiplikation" />
         <!-- Simples CalcBinding mit Multiplikation und Formatierung auf zwei Nachkomastellen im Währungsformat -->
        <TextBox Id="DocParam.Outputmultiply" ColumnSpan="3" Bind="Value: Calc('$('DocParam.Field1') * $('DocParam.Field2')';'C2')" />
      </Row>     
      <Row>
        <CheckBox Id="DocParam.CB1" Label="CB1"></CheckBox>  
        <CheckBox Id="DocParam.CB2" Label="CB2"></CheckBox>
        <CheckBox Id="DocParam.CB3" Label="CB3"></CheckBox> 
        <CheckBox Id="DocParam.CB4" Label="CB4"></CheckBox>     
      </Row>  
      <!-- Calc Binding um angewählte Checkboxen zu "zählen" -->
      <Row Bind="IsVisible: Calc('$('DocParam.CB1') + $('DocParam.CB2') + $('DocParam.CB3') + $('DocParam.CB4')';'F0') == '1'">
        <Label Content="Eine Checkbox angewählt"></Label>
      </Row>       
      <Row Bind="IsVisible: Calc('$('DocParam.CB1') + $('DocParam.CB2') + $('DocParam.CB3') + $('DocParam.CB4')';'F0') == '2'">
        <Label Content="Zwei Checkboxen angewählt"></Label>
      </Row>      
      <Row Bind="IsVisible: Calc('$('DocParam.CB1') + $('DocParam.CB2') + $('DocParam.CB3') + $('DocParam.CB4')';'F0') == 3">
        <Label Content="Drei Checkboxen angewählt"></Label>
      </Row>       
      <Row Bind="IsVisible: Calc('$('DocParam.CB1') + $('DocParam.CB2') + $('DocParam.CB3') + $('DocParam.CB4')';'F0') == 4">
        <Label Content="Vier Checkboxen angewählt"></Label>
      </Row>     
      <Button Type="Submit" Label="OK" IsDefault="true" />
      <Button Type="Cancel" Label="Abbrechen" />
    </View>
  </Views>  
</Configuration>

Verhalten des Dialoges:

https://primesoft.primedocs.io/docs/de/images/system/docfunc/documentparameter/documentParameterExampleBindingsCalc.gif

...