> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Die Eigenschaft Optional eines Gruppenelements

> Erfahren Sie, wann ein Gruppenelement in FlexiLayout Studio als Optional markiert werden sollte, wie sich Nullhypothesen verhalten und warum Aufrufe von Subelementen zuerst eine IsNull-Prüfung benötigen.

Beim Erstellen eines Gruppenelements ist das Kontrollkästchen **Optional element** standardmäßig deaktiviert, d. h. das Element ist erforderlich. Beim Abgleich des FlexiLayouts wird für ein erforderliches Gruppenelement eine Nicht-Null-Hypothese erzeugt, selbst wenn für alle seine Subelemente Nullhypothesen erzeugt werden.

Um die Eigenschaften der Subelemente einer solchen Hypothese zu prüfen, rufen Sie den Code in deren **Advanced**-Abschnitten auf. Wenn das Gruppenelement optional ist, kann dafür eine Nullhypothese erzeugt werden (wenn es keine Nicht-Null-Hypothesen mit einer höheren Quality als der Quality einer Nullhypothese gibt).

<div id="why-calls-to-an-undetected-optional-group-fail">
  ## Warum Aufrufe eines nicht erkannten optionalen Gruppenelements fehlschlagen
</div>

Vermeiden Sie es, für Gruppenelemente das Feld **Optional element** zu aktivieren.

Der Grund dafür ist: Wenn das Gruppenelement als **Optional element** markiert ist und nicht erkannt wird (seine Quality ist niedriger als die Quality einer Nullhypothese oder für es wird die Funktion `Dontfind()` aufgerufen), führen Aufrufe seiner Subelemente zu Fehlern. Das liegt daran, dass in einer Gruppe mit einer Nullhypothese keine Hypothesen für Subelemente gebildet werden.

Um diesen Fehler zu vermeiden, müssen Sie zuerst das Gruppenelement prüfen. Wenn die `IsNull`-Prüfung `True` zurückgibt, greifen Sie auf keines der Subelemente zu.

<div id="when-an-optional-group-element-is-useful">
  ## Wann ein optionales Gruppenelement nützlich ist
</div>

Ein optionales Gruppenelement und seine Nullhypothese werden benötigt, wenn die gesamte Gruppe von Feldern auf dem Bild nicht vorhanden ist und eine Suche danach daher keinen Zweck hat. Sie können die Suche nach den Elementen beschleunigen, indem Sie für das Gruppenelement die Methode `DontFind()` aufrufen.

<Note>
  Hier bedeutet „aufrufen“, Code in einem beliebigen Abschnitt auf der Registerkarte **Advanced** oder in den Blockeigenschaften im Fenster **Expression** zu schreiben. Wenn beim Festlegen der Suchbedingungen in **Beziehung** auf die Eigenschaften eines Gruppenelements zugegriffen wird, erfolgt die `IsNull`-Prüfung automatisch. Das sehen Sie, wenn Sie auf der Registerkarte **Advanced** auf **Code** klicken.
</Note>

<div id="the-groupsamplefsp-sample-project">
  ## Das Beispielprojekt GroupSample.fsp
</div>

Dies wird im Projekt `GroupSample.fsp` veranschaulicht (Ordner `%public%\ABBYY\FlexiCapture\12.0\Samples\FLS\Tips and Tricks\Optional Group`).

Im Dialogfeld „Eigenschaften“ des Gruppenelements **InvoiceRequisiteGroup** ist das Kontrollkästchen **Optional element** aktiviert.

Auf der Registerkarte **Advanced** enthält der Abschnitt **Advanced pre-search relations** den folgenden Code:

```text theme={null}
if FormID.IsNull then Dontfind();
```

Dieser Code prüft, ob das Element vorhanden ist, das den Dokumenttyp bestimmt. Das Element **FormID**, das vor dem Gruppenelement **InvoiceRequisiteGroup** erstellt wurde, sucht nach dem statischen Text mit einem bekannten Wert ("ID2015").

Wenn der Wert des Bezeichners im Dokument mit dem im Abschnitt **Search text** angegebenen Wert übereinstimmt, wird für das Element **FormID** eine Nicht-Null-Hypothese erzeugt. Andernfalls wird der statische Text **FormID** nicht erkannt, und FlexiLayout Studio wird angewiesen, nicht nach dem Gruppenelement **InvoiceRequisiteGroup** zu suchen. In diesem Fall wird für das optionale Gruppenelement **InvoiceRequisiteGroup** eine Nullhypothese erstellt.

Das Projekt enthält ein Element **TotalSumHeader**, das verwendet wird, um nach der Bezeichnung des Summenfelds zu suchen.

Der folgende Code wird für das Element im Abschnitt **Advanced pre-search relations** eingegeben:

```text theme={null}
Below: SearchElements.InvoiceRequisiteGroup.InvoiceDateHeader, 0 * dot;
```

Dieser Code bedeutet, dass die Suche nach dem Namen unterhalb des Datumsfelds ausgeführt wird, das durch das Element **InvoiceDateHeader** definiert ist, das wiederum ein Subelement des Gruppenelements **InvoiceRequisiteGroup** ist.

<div id="reproduce-and-fix-the-undefined-hypothesis-error">
  ## Den Fehler mit der undefinierten Hypothese reproduzieren und beheben
</div>

Führen Sie den Abgleich des FlexiLayouts für beide Seiten im Batch aus. Für Seite 1 wird das Verfahren erfolgreich ausgeführt, doch wenn das FlexiLayout auf Seite 2 angewendet wird, zeigt FlexiLayout Studio folgende Fehlermeldung an:

```text theme={null}
"Seite 2: Fehler in Element "SearchElements.TotalSumHeader", Abschnitt „Advanced generator parameters": Versuch, auf eine undefinierte Hypothese zuzugreifen: SearchElements.InvoiceRequisiteGroup"
```

Das passiert, weil auf Seite 2 der Wert des Dokument-Bezeichners 2589 ist. Da dieser Wert von dem in den Eigenschaften des Elements **FormID** angegebenen Wert abweicht, hat die Funktion `Dontfind()` eine Nullhypothese für das Gruppenelement **InvoiceRequisiteGroup** erzeugt. Dadurch hat der Code auf eine nicht vorhandene Hypothese zugegriffen.

Der korrekte Code muss wie folgt aussehen.

```text theme={null}
if not( SearchElements.InvoiceRequisiteGroup.IsNull ) then
{ Below: SearchElements.InvoiceRequisiteGroup.InvoiceDateHeader, 0 * dot;}
```

<Note>
  Wenn Sie den Code im Abschnitt **Advanced pre-search relations** auskommentieren und das Kontrollkästchen neben der ähnlichen Suchbedingung des Elements **TotalSumHeader** im Abschnitt **Beziehungen** aktivieren, zeigt ein Klick auf **Code** auf der Registerkarte **Advanced**, dass der kompilierte Code die Prüfung `IsNull` bereits enthält.
</Note>
