質問
FlexiCapture の文書定義内で利用可能なデータセットのセットアップ方法及び、その使用方法を教えてください。
回答
セットアップ手順
- データセットの設定:
対象の文書定義を開き、文書定義エディタ:「文書定義メニュー>文書定義プロパティ」から表示された画面から、「データセット」タブを選択、「追加」ボタンをクリックします。
新規データセット画面が表示されるので、データセット名を入力、「OK」をクリックします。 - データセット:データベースの指定
「データセット」画面が表示されます。- ソース:「データベース」を選択します。
- 「指定」ボタンをクリックし、「データリンクプロパティ」画面から、ウィザードに従い、設定を実施します。
※Excelファイルをデータベースとして使用しデータセットを作成する例については、「Excelファイルからのデータセット作成」をご参照ください。
正常に、設定が完了すると、「データベースのテーブル」が選択できるようになるので、該当のテーブルを選択、
以下のような、
「データベーステーブルからデータセットテーブルへ列をコピーしますか?」確認画面が表示されるので、「はい」を選択し、テーブルが自動作成されることを確認します。
「OK」ボタンをクリックし、「プロパティ」画面に戻ります。
データセット:登録内容の確認
登録した、データセットを選択(下部画面、青色ハイライト)、「更新」ボタンで、データの取り込みを実施、登録されているレコード数が、「レコードカウント」に反映されることを確認します。
「表示」ボタンで、登録している内容を確認することができます。
データセット情報取得方法
-
前提条件
一例として、FlexiLayoutで作成した文書定義のフィールド:VendorNameを基に、ベンダー情報を取得する方法について記載します。
現在の帳票は、文書定義エディタ内で、以下の様な体裁になっていることを前提に記載します。
- InvoiceNo :請求書番号
- TotalAmount :合計金額
- InvoiceDate :請求書日付
- VendorName:ベンダー名
- VATID :VATID
-
「ベンダー」内容、反映項目の追加
データセットの「ベンダー」情報から、取得した内容を反映するフィールドを作成します。具体的には、上記画面にあるように、「文書構造」のフィールドを選択し、「右クリック > フィールドを作成」を選択し、以下の表の内容のフィールドを作成していきます。
フィールドタイプ
階層+名前
備考
グループ
文書セクション1\Vendor
ベンダー情報グループ(取得結果が判り易いよう、まとめる為、グループ利用してます)
テキスト
文書セクション1\Vendor\ID
データセットのID
(帳票から取得したベーダ―名で、データソースとマッチング後、銀行コードを反映します。)
テキスト
文書セクション1\Vendor\Name
データセットのベンダー名(帳票から取得したベーダ―名は、ここでマッチングをします。)
テキスト
文書セクション1\Vendor\BANKCode
データセットの銀行コード
(帳票から取得したベーダ―名で、データソースとマッチング後、銀行コードを反映します。)
以下のような文書構造になっていることが確認できます。
-
帳票から取得した、ベンダー名をキーにし、データセットからベンダー情報を取得
「文書セクション1\Vendor」(グループ)に、スクリプト処理で、ベンダー情報の取得を実施します。
「文書セクション1\Vendor」のプロパティを開き、「ルール」タブから、「新規ルール」ボタンをクリックします。
「検証ルール:ルールタイプを選択」画面で、「スクリプト」を選択「OK」を実施します。
「新しいスクリプトルール」画面で、任意の名前を設定、「次へ」ボタンをクリックします。
「新しいスクリプトルール」画面で、「追加」ボタンをクリック、
「フィールドを選択」画面で、ベンダー情報を反映する項目を選択後、「選択する」ボタンで、「新しいスクリプトルール」画面に反映させます。
ベンダー情報を反映する為、その値を反映する項目(ここでは、「Vendor」、「ID」、「Name」、「BANKCode」)の読み取り専用チェックを外します。
「編集」ボタンをクリックし、「スクリプトエディタ」を起動し、以下のようなスクリプトを記載します。
// ----- ↓ここから ------------------------------
// get VATID name from image
string sVID = Context.Field("VATID").Text;
sVID = ( string.IsNullOrEmpty(sVID))? "":sVID.Trim();
if (0<sVID.Length && “0”!= sVID){
// make a data set and call the query
IDataSet ds = Context.DataSet( "Vendors" );
IDataSetQuery dsq = ds.CreateQuery();
dsq.AddValue( "VATID", sVID );
// get record
IRecordset rs = ds.GetRecords(dsq);
if(0<rs.Count){
var record = rs.GetRecord(0);
Context.Field("ID").Text = record.GetValue(0).ToString();
Context.Field("Name").Text = record.GetValue(3).ToString();
Context.Field("BANKCode").Text = record.GetValue(9).ToString();
return;
}
}
// get Vendor name from image
sVID = Context.Field("VendorName").Text;
sVID = ( string.IsNullOrEmpty(sVID))? "":sVID.Trim();
if (0<sVID.Length){
// make a data set and call the query
IDataSet ds = Context.DataSet( "Vendors" );
IDataSetQuery dsq = ds.CreateQuery();
dsq.AddValue( "name", sVID );
// get record
IRecordset rs = ds.GetRecords(dsq);
if(0<rs.Count){
var record = rs.GetRecord(0);
Context.Field("ID").Text = record.GetValue(0).ToString();
Context.Field("Name").Text = record.GetValue(3).ToString();
Context.Field("BANKCode").Text = record.GetValue(9).ToString();
}else{
Context.Field("Name").Text = "err rs_cnt=" + rs.Count;
}
}
// ----- ↑ここまで ------------------------------
以上の設定により、認識結果:VendorNameによってデータセットを検索し、該当するベンダー情報を取得・出力する事が可能となります。
注意:今回の例では、ベンダー名を「キー」にデータセットから、ベンダー情報を取得していますが、電話番号等、英数値で表現される情報の方が、「キー」としては、誤認識が起き難く、安全であることを補足します。
コメント
0件のコメント
サインインしてコメントを残してください。