> ## 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.

# Propriété Optional d’un élément Group

> Découvrez quand marquer un élément Group comme Optional dans FlexiLayout Studio, comment les hypothèses nulles se comportent et pourquoi les appels aux sous-éléments nécessitent d’abord une vérification IsNull.

Lors de la création d’un élément Group, la case **Optional element** est décochée par défaut, c’est-à-dire que l’élément est obligatoire. Lors de la mise en correspondance FlexiLayout, une hypothèse non nulle est générée pour un élément Group obligatoire, même si des hypothèses nulles sont générées pour tous ses sous-éléments.

Pour vérifier les propriétés des sous-éléments d’une telle hypothèse, appelez leur code dans leurs sections **Advanced**. Si l’élément Group est facultatif, une hypothèse nulle peut être générée pour celui-ci (s’il n’existe aucune hypothèse non nulle dont la qualité est supérieure à celle d’une hypothèse nulle).

<div id="why-calls-to-an-undetected-optional-group-fail">
  ## Pourquoi les appels à un élément Group facultatif non détecté échouent
</div>

Évitez de cocher la case **Optional element** pour les éléments Group.

En effet, si l’élément Group est marqué comme **Optional element** et n’est pas détecté (si sa qualité est inférieure à celle d’une hypothèse nulle, ou si la fonction `Dontfind()` est appelée pour lui), tout appel à l’un de ses sous-éléments entraînera des erreurs. Cela s’explique par le fait que, dans un groupe avec une hypothèse nulle, les hypothèses des sous-éléments ne sont pas générées.

Pour éviter cette erreur, vous devez d’abord vérifier l’élément Group. Si la vérification `IsNull` renvoie `True`, n’accédez à aucun de ses sous-éléments.

<div id="when-an-optional-group-element-is-useful">
  ## Quand un élément Group facultatif est utile
</div>

Un élément Group facultatif et son hypothèse nulle sont nécessaires lorsque tout le groupe de champs n’est pas présent sur l’image et qu’il est donc inutile de les rechercher. Vous pouvez accélérer la recherche des éléments en appelant la méthode `DontFind()` pour l’élément Group.

<Note>
  Ici, « call » signifie écrire du code dans l’une des sections de l’onglet **Advanced** ou dans les propriétés de bloc de la fenêtre **Expression**. Si les propriétés d’un élément Group sont appelées lors de la définition des contraintes de recherche dans **Relations**, la vérification `IsNull` est automatique. Vous pouvez le constater en cliquant sur **Code** dans l’onglet **Advanced**.
</Note>

<div id="the-groupsamplefsp-sample-project">
  ## Le projet d’exemple GroupSample.fsp
</div>

Ce point est illustré dans le projet `GroupSample.fsp` (dossier `%public%\ABBYY\FlexiCapture\12.0\Samples\FLS\Tips and Tricks\Optional Group`).

Dans la boîte de dialogue **Properties** de l’élément Group **InvoiceRequisiteGroup**, la case **Optional element** est cochée.

Dans l’onglet **Advanced**, la section **relations avancées de pré-recherche** contient le code suivant :

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

Ce code vérifie la présence de l’élément qui identifie le type de document. L’élément **FormID**, créé avant l’élément Group **InvoiceRequisiteGroup**, recherche le texte statique ayant une valeur connue ("ID2015").

Si la valeur de l’identifiant dans le document correspond à celle spécifiée dans la section **Texte de recherche**, une hypothèse non nulle est générée pour l’élément **FormID**. Sinon, le texte statique **FormID** n’est pas détecté et FlexiLayout Studio reçoit l’instruction de ne pas rechercher l’élément Group **InvoiceRequisiteGroup**. Dans ce cas, une hypothèse nulle est créée pour l’élément Group facultatif **InvoiceRequisiteGroup**.

Le projet contient un élément **TotalSumHeader** utilisé pour rechercher le nom du champ du total.

Le code suivant est saisi pour l’élément dans la section **relations avancées de pré-recherche** :

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

Ce code signifie que la recherche du nom s’effectuera sous le champ de date décrit par l’élément **InvoiceDateHeader**, lui-même sous-élément de l’élément Group **InvoiceRequisiteGroup**.

<div id="reproduce-and-fix-the-undefined-hypothesis-error">
  ## Reproduire et corriger l’erreur d’hypothèse non définie
</div>

Exécutez la procédure de mise en correspondance FlexiLayout sur les deux pages du batch. Pour la page 1, la procédure s’exécute correctement, mais lorsque le FlexiLayout est appliqué à la page 2, FlexiLayout Studio affiche le message d’erreur suivant :

```text theme={null}
"Page 2: Error in element "SearchElements.TotalSumHeader", Advanced generator parameters section: Attempt to access undefined hypothesis: SearchElements.InvoiceRequisiteGroup"
```

Cela se produit parce que, sur la page 2, la valeur de l’ID du document est 2589. Comme cette valeur est différente de celle spécifiée dans les propriétés de l’élément **FormID**, la fonction `Dontfind()` a généré une hypothèse nulle pour l’élément Group **InvoiceRequisiteGroup**. Par conséquent, le code a tenté d’accéder à une hypothèse inexistante.

Le code correct doit se présenter comme suit.

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

<Note>
  Si vous mettez en commentaire le code dans la section **relations avancées de pré-recherche** et cochez la case à côté de la contrainte de recherche similaire de l’élément **TotalSumHeader** dans la section **Relations**, un clic sur **Code** dans l’onglet **Advanced** montre que le code compilé contient déjà la vérification `IsNull`.
</Note>
