グループ要素の「オプション」プロパティ
グループ要素の作成時、オプション要素ボックスはデフォルトでクリアになっているために要素が必須です。FlexiLayoutの合致では、すべてのサブ要素で帰無仮説が生成されたとしても、必須グループ要素で非帰無仮説が生成されます。このような仮説のサブ要素のプロパティを確認するには、その高度セクションでコードを呼び出します。グループ要素がオプションの場合、その帰無仮説を生成することができます(帰無仮説の質よりも高い質の非帰無仮説が存在しない場合)。
グループ要素のオプション要素ボックスを選択することはやめておいた方がいいです。その理由は、グループ要素がオプション要素で検出されなかった (その質が帰無仮説の質より低く、関数Dontfind()の質が呼び出された)場合、帰無仮説のあるグループではサブ要素の仮説は立っていないため、サブ要素はエラーの原因になります。このエラーを回避するには、最初にグループ要素を確認する必要があります。IsNull確認で真が返されたら、サブ要素を指定してはいけません。
ならば、なぜオプションのグループ要素とその帰無仮説が必要なのでしょうか?これは、フィールドのグループ全体が画像にない場合に必要です。これらを検索することは役に立ちません。また、グループ要素のDontFind()方法を呼び出すことで、要素の検索を迅速にできます。
注意:「呼び出す」とは、高度タブのセクションまたは表現ウィンドウのブロックプロパティでコードを書くことです。関係で検索制限を設定する時にグループ要素のプロパティを呼び出すと、IsNull確認は自動になります。高度タブでコードをクリックすると、これを見ることができます。
説明として、プロジェクトGroupSample.fspを作成しました(フォルダ %public%\ABBYY\FlexiCapture\12.0\Samples\FLS\Tips and Tricks\Optional Group)。
グループ要素InvoiceRequisiteGroupのプロパティダイアログボックスで、オプション要素ボックスを選択しました。セクション高度な検索前関係の高度タブで、以下のコードを書きます:
if FormID.IsNull then Dontfind();
次に、文書種類を識別する要素の可用性を確認します。グループ要素InvoiceRequisiteGroupの前に作成されたFormIDを使用して、既知の値(「ID2015」)のある静的テキストを検索します。文書の識別子の値が検索テキストセクションで指定された値と合致する場合、帰無仮説は要素FormIDで生成されます。そうでなければ、静的テキストFormIDは検出されないため、グループ要素InvoiceRequisiteGroupを探さないよう、すなわちオプションのグループ要素InvoiceRequisiteGroupの帰無仮説を作成するよう、指示することになります。
プロジェクトには、合計フィールドの名前を検索するために使用される要素TotalSumHeaderがあります。以下のコードが高度な検索前関係セクションの要素に入力されます:
Below: SearchElements.InvoiceRequisiteGroup.InvoiceDateHeader, 0 * dot;
このコードは、名前の検索が要素InvoiceDateHeaderによって記述される日付フィールドの下で実行されることを意味し、その要素はグループ要素InvoiceRequisiteGroupのサブ要素です。
バッチの両方のページでFlexiLayoutの合致を実行しましょう。ページ1では成功しましたが、ページ2にFlexiLayoutを適用しようとすると、以下のエラー通知が表示されます:"Page 2:Error in element "SearchElements.TotalSumHeader", Advanced generator parameters section:Attempt to access undefined hypothesis:SearchElements.InvoiceRequisiteGroup".
これは、ページ2で文書の識別子の値がID 2589であるために発生します。この値は要素FormIDのプロパティで指定された値とは異なるため、グループ要素InvoiceRequisiteGroupで関数Dontfind()から帰無仮説が生成されました。従って、コードで存在しない仮説を呼び出しました。
正しいコードは以下の通りです。
if not( SearchElements.InvoiceRequisiteGroup.IsNull ) then
{ Below: SearchElements.InvoiceRequisiteGroup.InvoiceDateHeader, 0 * dot;}
注意:高度な検索前関係セクションのコードにコメントを書いて関係セクションの要素TotalSumHeaderの類似した検索制限近くの旗をアクティブにし、高度タブでコードをクリックすると、コンパイル済みコードには既にIsNull確認が含まれていることが示されます。
12.04.2024 18:16:07