Skip to main content
グループ要素を作成すると、オプション要素 ボックスは既定でオフになっており、つまりその要素は必須になります。FlexiLayout のマッチングでは、すべてのサブ要素に対してヌル仮説が生成された場合でも、必須のグループ要素には非ヌル仮説が生成されます。 このような仮説のサブ要素のプロパティを確認するには、それらの Advanced セクションでコードを呼び出します。グループ要素がオプションの場合は、その要素に対してヌル仮説を生成できます (ヌル仮説の品質を上回る品質の非ヌル仮説が存在しない場合) 。

検出されなかったオプションのグループに対する呼び出しが失敗する理由

グループ要素に対して オプション要素 ボックスを選択しないでください。 その理由は、グループ要素が オプション要素 としてマークされ、しかも検出されなかった場合 (その quality がヌル仮説の quality より低い場合、またはその要素に対して Dontfind() 関数が呼び出された場合) 、そのサブ要素のいずれかを呼び出すとエラーが発生するためです。これは、ヌル仮説を持つグループではサブ要素の仮説が生成されないためです。 このエラーを回避するには、まずグループ要素を確認する必要があります。IsNull チェックが True を返した場合は、どのサブ要素にもアクセスしないでください。

オプションの グループ要素が役立つ場合

オプションの グループ要素とそのヌル仮説は、画像上に field グループ全体が存在せず、それらを検索しても意味がない場合に必要です。グループ要素に対して DontFind() メソッドを呼び出すことで、要素の検索を高速化できます。
ここで「呼び出す」とは、Advanced タブ内のいずれかのセクション、または Expression ウィンドウのブロック プロパティにコードを記述することを意味します。リレーション で検索条件を設定する際に グループ要素のプロパティを参照する場合は、IsNull チェックが自動的に行われます。これは、Advanced タブで Code をクリックすると確認できます。

GroupSample.fsp sample プロジェクト

これは、GroupSample.fsp sample プロジェクト (フォルダー %public%\ABBYY\FlexiCapture\12.0\Samples\FLS\Tips and Tricks\Optional Group) で示されています。 グループ要素 InvoiceRequisiteGroupProperties ダイアログで、オプション要素 ボックスが選択されています。 Advanced タブの Advanced pre-search relations セクションには、次のコードがあります。
このコードは、文書タイプを識別する要素が存在するかどうかを確認します。グループ要素 InvoiceRequisiteGroup の前に作成された FormID 要素は、既知の値 (“ID2015”) を持つ静的テキストを検索します。 文書上の識別子の値が Search text セクションで指定された値と一致すると、FormID 要素に対して非ヌル仮説が生成されます。一方、一致しない場合は、静的テキスト FormID は検出されず、FlexiLayout Studio はグループ要素 InvoiceRequisiteGroup を探さないよう指示されます。その場合、オプションのグループ要素 InvoiceRequisiteGroup に対してヌル仮説が作成されます。 プロジェクトには、合計金額fieldの名前を検索するために使用される要素 TotalSumHeader が含まれています。 この要素に対して、Advanced pre-search relations セクションに次のコードを入力します。
このコードは、名前の検索が InvoiceDateHeader 要素で示された日付フィールドの下で実行されることを意味します。さらに、この要素は グループ要素 InvoiceRequisiteGroup のサブ要素です。

未定義の仮説エラーを再現して修正する

バッチ内の両方のページで FlexiLayout のマッチング手順を実行します。ページ 1 では手順は正常に完了しますが、FlexiLayout をページ 2 に適用すると、FlexiLayout Studio に次のエラーメッセージが表示されます。
これは、ページ 2 ではドキュメントの識別子の値が ID 2589 であるために発生します。この値は FormID 要素のプロパティで指定された値と異なるため、Dontfind() 関数によってグループ要素 InvoiceRequisiteGroup に対するヌル仮説が生成されました。その結果、コードは存在しない仮説を呼び出してしまいました。 正しいコードは次のようになります。
Advanced pre-search relations セクションのコードをコメントアウトし、リレーション セクションで TotalSumHeader 要素の類似する search constraint の横にあるチェックボックスをオンにした状態で、Advanced タブの Code をクリックすると、コンパイル済みコードにはすでに IsNull チェックが含まれていることがわかります。