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

# Benutzerdefinierte Eigenschaften

> Benutzerdefinierte Eigenschaften in der FlexiLayout-Sprache: Deklarieren Sie typisierte Variablen im Abschnitt „Externes Feld“, um Hypothesenwerte zwischen Elementen gemeinsam zu nutzen.

Eine **benutzerdefinierte Eigenschaft** ist eine typisierte Variable, die zu einem Element gehört. Diese Eigenschaften werden im Abschnitt **Externes Feld** auf der Registerkarte **Erweitert** definiert.

Verwenden Sie das folgende Format:

```text theme={null}
Type1 Name1;
...
TypeN NameN;
```

wobei `Name` der Name der Variablen und `Type` ihr Typ ist.

Wenn Felder erstellt werden, werden sie automatisch initialisiert. Zum Beispiel werden numerische Felder mit dem Wert null initialisiert, und Rechtecke und Regionen mit leeren Werten.

<div id="field-scope-and-access">
  ## Gültigkeitsbereich und Zugriff von Feldern
</div>

Felder können in dem Element verwendet werden, zu dem sie gehören, sowie in jedem Element, das im Suchbaum darunter liegt. Der Wert eines Felds kann nur in dem Element geändert werden, zu dem es gehört. In anderen Elementen ist er nur lesbar verfügbar.

Um auf ein Feld eines Elements zuzugreifen, verwenden Sie den vollständigen Feldnamen im Format `ElementName.FieldName` (zum Beispiel `SearchElements.StaticText1.x`). Innerhalb eines Elements kann auf das zugehörige Feld über den Namen zugegriffen werden: `x`. Bei einem zusammengesetzten Element können auch seine Subelemente (auf jeder Verschachtelungsebene) über ihre Kurznamen auf seine Felder zugreifen.

Der Wert eines komplexen Ausdrucks, der die Hypothese für ein Element beschreibt, kann berechnet und in eine Eigenschaft geschrieben werden. Auf diesen Wert kann dann von jedem Element weiter unten im Suchbaum zugegriffen werden, ohne ihn jedes Mal neu berechnen zu müssen. Dadurch wird die zum Abgleichen des FlexiLayout erforderliche Zeit reduziert, es ist nicht mehr nötig, einen großen Ausdruck in jedes Element zu kopieren, und der Code wird besser lesbar.

<div id="field-naming-restrictions">
  ## Einschränkungen für Feldnamen
</div>

* Innerhalb eines Elements müssen Feldnamen eindeutig sein.
* Der Name eines Elements innerhalb eines zusammengesetzten Elements darf nicht mit einem Feldnamen seiner Subelemente übereinstimmen (unabhängig von der Verschachtelungsebene).
* Die Feldnamen eines zusammengesetzten Elements dürfen nicht mit den Namen seiner Subelemente übereinstimmen.

<div id="example-speed-up-matching-with-a-user-defined-property">
  ## Beispiel: den Abgleich des FlexiLayouts mit einer benutzerdefinierten Eigenschaft beschleunigen
</div>

In diesem Beispiel wird nach zwei Adresskomponenten gesucht: einer Stadt (Zeichenkette **City**) und einer U-Bahn-Station (Zeichenkette **Station**). Die U-Bahn-Station wird nur dann angegeben, wenn die Stadt Moskau ist. Um den Abgleich des FlexiLayouts zu beschleunigen, definiert das Beispiel für das Element **City** eine Eigenschaft `fromMoscow`. Diese Eigenschaft ist `true`, wenn das Element **City** erkannt wird und den Wert "Moscow" hat, und in allen anderen Fällen `false`.

Code für das Element **City** im Abschnitt **Externes Feld**:

```text theme={null}
logic fromMoscow;
```

Im Abschnitt **Erweiterte Nach-Suchbeziehungen**:

```text theme={null}
if( not IsNull and Value.Find( "Moscow" ) >= 0 ) then fromMoscow = true;
else fromMoscow = false;
```

Das Element **Station** verwendet dann diese Eigenschaft, um nur nach der Station zu suchen, wenn Moskau als Element **City** erkannt wird.

Code für das Element **Station** im Abschnitt **Advanced pre-search relations**:

```text theme={null}
if not City.fromMoscow then dontfind;
```

<Warning>
  Aufgrund der Felder gelten Elemente desselben Typs nicht als identisch.

  Daher ist die folgende Konstruktion verboten:

  ```text theme={null}
  Let e = SearchElements.StaticText1;
  e = SearchElements.StaticText2; // Element desselben Typs
  ```
</Warning>
