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

# Advanced pre-search relations

> Advanced pre-search relations は、オブジェクト検索の前に FlexiLayout language コードを実行し、検索領域を制限したり、検索をキャンセルしたり、仮説を選択したりします。

Advanced pre-search relations では、[FlexiLayout language](/ja/flexi-capture/fls/code/general-code) を使用して、検索制約と要素のプロパティを設定します。コードを入力するペインは、**Properties** ダイアログの **Advanced** タブにあります。

**Advanced pre-search relations** ペインに入力したコードは、FlexiLayout 要素に対応する画像オブジェクトの検索を実行する直前に実行されます。プログラムはまず、**Advanced** タブの左側にあるタブで指定されたプロパティを使用し、その後でコードを実行します。

特定のパラメーターが、**Advanced** タブの左側にあるタブと **Advanced** タブ上のコードの両方で指定されている場合は、コードで指定された内容が優先されます。パラメーターが **Advanced** タブの左側にあるタブで指定されていても、コード内で指定されていない場合は、該当するタブで設定されたパラメーター値が使用されます。

<Note>
  The `SearchText` function (**Static Text** 要素) は例外です。この function では、**Static Text** タブですでに指定されている検索単語に検索単語が*追加*されます。
</Note>

**Advanced** タブの左側にあるいずれかのタブでプロパティを指定している場合は、**Advanced** タブの **Code** ボタンをクリックして、それらをコードに変換できます。その後、生成されたコードをコピーまたは編集できます。

<Note>
  **Advanced pre-search relations** ペインに入力する追加の制約では、FlexiLayout ツリー内で現在の要素より上にある要素のみを参照できます。唯一の例外は、同じ **繰り返しグループ** 要素内の subelement で、指定された要素より下にある同じグループ内の subelement の前のインスタンスを参照できます。
</Note>

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

<div id="specify-different-values-for-the-same-parameter">
  ### 同じパラメーターに異なる値を設定する
</div>

同じパラメーターに異なる値を設定する必要がある場合があります。その場合は、`if... then` 演算子を使用します。

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

<div id="limit-the-search-area">
  ### 検索領域を制限する
</div>

検索領域は、画像領域を定義する任意の型 (`Rect`、`RectArray`、`Region`) を使って指定できます。また、これらの型のいずれかを返す式を使って指定することもできます。式の計算結果は、`RestrictSearchArea()` function の引数として渡されます。

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

複数の要素の領域を組み合わせた式を渡すこともできます。

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

<div id="cancel-the-search-for-an-object">
  ### オブジェクトの検索をキャンセルする
</div>

文書によっては、画像上にある1つのオブジェクトが存在すると、別のオブジェクトは自動的に除外されることがあります。また、特定の条件が満たされた場合にのみ、特定のオブジェクトを検索したいケースもあります。`DontFind()` command を使うと、特定のオブジェクトを検索しないようプログラムに指示できます。この command が実行されると、プログラムは対応するオブジェクトに対して ヌル仮説 を生成します。

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

<div id="select-a-hypothesis">
  ### 仮説を選択する
</div>

要素で指定された条件を満たす画像オブジェクトが複数見つかることがあります。この場合、プログラムは複数の仮説を生成します。この中から、画像上の別のオブジェクトまたは点に最も近い仮説だけを選択する必要がある場合は、次のいずれかの関数を使用できます。

| 関数                             | 説明                   |
| ------------------------------ | -------------------- |
| `Nearest( [name of element] )` | 最も近い要素の名前を設定します。     |
| `Nearest( x1, y1 )`            | 最も近い点の座標を設定します。      |
| `NearestX( x1 )`               | 最も近い垂直線の X 座標を設定します。 |
| `NearestY( y1 )`               | 最も近い水平線の Y 座標を設定します。 |

<Note>
  複数の `Nearest` 関数を同時に使用することはできません。
</Note>

<div id="search-on-multi-page-documents">
  ### 複数ページ文書での検索
</div>

プログラムは複数ページ文書を1つのまとまりとして扱い、特定のページを指定しなくても、その中の要素を検索できます。

要素を任意のページの下半分で見つけられるように指定するには:

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

詳細については、[PageRect 関数の説明](/ja/flexi-capture/fls/language/global-functions)を参照してください。

要素が文書の最後のページにあることを指定するには (このコードは、FlexiLayout のメイン部分で、**Header** 要素と **Footer** 要素 (存在する場合) の後にのみ記述できます) :

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

要素が、`SearchElements.OtherElement` という名前の要素が開始するページ上にあることを指定するには：

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

各ページで、`SearchElements.RepeatableGroup` という名前の繰り返しグループの仮説の各インスタンスより下に要素を配置できるよう指定するには:

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

`SearchElements.Table` という名前のテーブルの各サブテーブルのボディの下に、各ページで要素を配置できるように指定するには:

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

<div id="related-topics">
  ## 関連トピック
</div>

* [FlexiLayout language](/ja/flexi-capture/fls/code/general-code)
