Pourquoi les appels à un élément Group facultatif non détecté échouent
É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 fonctionDontfind() 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.
Quand un élément Group facultatif est utile
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éthodeDontFind() pour l’élément Group.
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.Le projet d’exemple GroupSample.fsp
Ce point est illustré dans le projetGroupSample.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 :
Reproduire et corriger l’erreur d’hypothèse non définie
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 :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.
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.