Skip to main content
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).

Warum Aufrufe eines nicht erkannten optionalen Gruppenelements fehlschlagen

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.

Wann ein optionales Gruppenelement nützlich ist

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

Das Beispielprojekt GroupSample.fsp

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

Den Fehler mit der undefinierten Hypothese reproduzieren und beheben

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