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

# Erweiterte Beziehungen für die Vorsuche

> Erweiterte Beziehungen für die Vorsuche führen Code in der FlexiLayout-Sprache vor der Objektsuche aus, schränken Suchbereiche ein, brechen Suchvorgänge ab oder wählen Hypothesen aus.

Erweiterte Beziehungen für die Vorsuche legen Suchbedingungen und Elementeigenschaften in der [FlexiLayout-Sprache](/de/flexi-capture/fls/code/general-code) fest. Der Bereich, in dem Sie Ihren Code eingeben, befindet sich auf der Registerkarte **Advanced** im Dialogfeld **Properties**.

Der Code, den Sie im Bereich **Erweiterte Beziehungen für die Vorsuche** eingeben, wird unmittelbar vor der Suche nach dem Bildobjekt ausgeführt, das dem FlexiLayout-Element entspricht. Zunächst verwendet das Programm die Eigenschaften, die Sie auf den Registerkarten links von der Registerkarte **Advanced** angegeben haben, und führt dann den Code aus.

Wenn ein bestimmter Parameter sowohl auf einer Registerkarte links von der Registerkarte **Advanced** als auch im Code auf der Registerkarte **Advanced** angegeben ist, hat der Code Vorrang. Wenn ein Parameter auf einer Registerkarte links von der Registerkarte **Advanced** angegeben ist, aber nicht im Code, wird der Parameterwert der entsprechenden Registerkarte verwendet.

<Note>
  Die Funktion `SearchText` (Element vom Typ **Static Text**) ist eine Ausnahme. Diese Funktion wird*zusätzliche*Suchwörter zu den Wörtern hinzufügen, die bereits auf der Registerkarte **Static Text** angegeben sind.
</Note>

Wenn Sie auf einer der Registerkarten links von der Registerkarte **Advanced** Eigenschaften angegeben haben, können Sie diese in Code umwandeln, indem Sie auf der Registerkarte **Advanced** auf die Schaltfläche **Code** klicken. Der generierte Code kann anschließend kopiert oder bearbeitet werden.

<Note>
  Die zusätzlichen Bedingungen, die im Bereich **Erweiterte Beziehungen für die Vorsuche** eingegeben werden, dürfen sich nur auf Elemente beziehen, die sich im FlexiLayout-Baum oberhalb des aktuellen Elements befinden. Die einzigen Ausnahmen sind die Subelemente desselben **wiederholbare Gruppe**-Elements; sie dürfen sich auf vorherige Instanzen von Subelementen beziehen, die sich in derselben Gruppe unterhalb des angegebenen Elements befinden.
</Note>

<div id="examples">
  ## Beispiele
</div>

<div id="specify-different-values-for-the-same-parameter">
  ### Verschiedene Werte für denselben Parameter angeben
</div>

Manchmal müssen Sie demselben Parameter unterschiedliche Werte zuweisen. Verwenden Sie dazu den `if... then`-Operator:

```text theme={null}
if Element1.IsNull then {
MaxErrors: 3, 0.25;
} else {
MaxErrors: 5, 0.5;
}
```

<div id="limit-the-search-area">
  ### Den Suchbereich einschränken
</div>

Der Suchbereich kann mit jedem Typ angegeben werden, der einen Bildbereich definiert: `Rect`, `RectArray`, `Region`. Er kann auch mit einem Ausdruck angegeben werden, der einen dieser Typen zurückgibt. Das Ergebnis der Auswertung des Ausdrucks wird als Argument an die Funktion `RestrictSearchArea()` übergeben:

```text theme={null}
RestrictSearchArea( Rect(Rect( Page( 1 ).RectGlobal.Left, Page( 1 ).RectGlobal.Top+20*mm, Element1.Left.Start, Element2.Ycenter.Start ) );
```

Sie können auch einen Ausdruck übergeben, der die Regionen mehrerer Elemente zusammenführt:

```text theme={null}
let rect1 = Element1.Rect;
let rect2 = Element2.Rect;
RestrictSearchArea( rect1 or rect2 );
```

<div id="cancel-the-search-for-an-object">
  ### Die Suche nach einem Objekt abbrechen
</div>

Bei manchen Dokumenten schließt das Vorhandensein eines Objekts im Bild automatisch ein anderes Objekt aus. In anderen Fällen möchten Sie vielleicht nur dann nach einem bestimmten Objekt suchen, wenn bestimmte Bedingungen erfüllt sind. Sie können das Programm anweisen, nicht nach einem bestimmten Objekt zu suchen, indem Sie den Befehl `DontFind()` verwenden. Sobald der Befehl ausgeführt wird, formuliert das Programm eine Nullhypothese für das entsprechende Objekt:

```text theme={null}
if Element1.IsNull() then DontFind()
```

<div id="select-a-hypothesis">
  ### Eine Hypothese auswählen
</div>

Manchmal erfüllen mehrere Bildobjekte die in einem Element angegebenen Bedingungen. Das bedeutet, dass das Programm mehrere Hypothesen formuliert. Wenn Sie aus dieser Menge nur die Hypothese auswählen möchten, die einem anderen Objekt oder Punkt im Bild am nächsten liegt, können Sie eine der folgenden Funktionen verwenden:

| Funktion                         | Beschreibung                                                       |
| -------------------------------- | ------------------------------------------------------------------ |
| `Nearest( [Name des Elements] )` | Legt den Namen des nächstgelegenen Elements fest.                  |
| `Nearest( x1, y1 )`              | Legt die Koordinaten des nächstgelegenen Punkts fest.              |
| `NearestX( x1 )`                 | Legt die X-Koordinate der nächstgelegenen vertikalen Linie fest.   |
| `NearestY( y1 )`                 | Legt die Y-Koordinate der nächstgelegenen horizontalen Linie fest. |

<Note>
  Sie können nicht mehrere `Nearest`-Funktionen auf einmal verwenden.
</Note>

<div id="search-on-multi-page-documents">
  ### Suche in mehrseitigen Dokumenten
</div>

Das Programm behandelt ein mehrseitiges Dokument als eine einzige Einheit und kann nach einem Element in einem mehrseitigen Dokument suchen, ohne es einer exakten Seite zuzuordnen.

So geben Sie an, dass ein Element in der unteren Hälfte einer beliebigen Seite gefunden werden kann:

```text theme={null}
Below: PageRect.Top + PageRect.Height / 2;
```

Weitere Informationen finden Sie in der [Beschreibung der Funktion PageRect](/de/flexi-capture/fls/language/global-functions).

Um anzugeben, dass sich ein Element auf der letzten Seite eines Dokuments befindet (diesen Code können Sie nur im Hauptteil von FlexiLayout nach den Elementen **Kopfzeile** und **Fußzeile** schreiben, falls vorhanden):

```text theme={null}
RestrictSearchArea( Page( PagesCount ).RectGlobal );
```

Um anzugeben, dass sich ein Element auf der Seite befindet, auf der ein Element namens `SearchElements.OtherElement` beginnt:

```text theme={null}
if SearchElements.OtherElement.IsFound then RestrictSearchArea( WholePage, SearchElements.OtherElement.Pages.Start );
```

Um anzugeben, dass ein Element auf jeder Seite unterhalb der Instanzen der Hypothesen einer wiederholbaren Gruppe namens `SearchElements.RepeatableGroup` positioniert sein kann:

```text theme={null}
Below: SearchElements.RepeatableGroup.AllInstances.PageAreaGlobal( PageNumber ).Region.Bottom;
```

Um festzulegen, dass ein Element auf jeder Seite unterhalb des Tabellenkörpers jeder Untertabelle einer Tabelle namens `SearchElements.Table` liegen kann:

```text theme={null}
Below: SearchElements.Table.AllSubTables.Body.PageAreaGlobal( PageNumber ).Bottom;
```

<div id="related-topics">
  ## Verwandte Themen
</div>

* [FlexiLayout-Sprache](/de/flexi-capture/fls/code/general-code)
