自動処理の例
この例では、銀行口座アプリケーションをサーバーにアップロードする方法、また顧客データをキャプチャする方法を示します。
プロジェクトと添付資料をダウンロードします: Unattended.zip
コード例は以下のステップで実行します:
- サービスへ接続する
- セッションを開く
- プロジェクトを開く
- 新しいバッチを作成する
- 画像をバッチに追加する
- バッチ処理を開始する
- 結果を取得し、キャプチャしたデータを表示する
- セッションを閉じる
この例で処理するには:
- UnattendedExample.fcproj プロジェクトファイルをサーバーにアップロードします。
- Visual Studio 2013 以降のバージョンで、UnattendedExample.sln を開きます。
サービスへの接続
// ウェブサービスクライアントのインスタンスを作成
var service = new FlexiCapture.FlexiCaptureWebServiceSoapClient();
// ======= 基本認証 =======
// service.ClientCredentials.UserName.UserName = "username";
// service.ClientCredentials.UserName.Password = "password";
セッションを開く
// バッチを不正アクセスから守るため、現在のユーザーを指定します
// まず、ユーザー名をシステムに見えるようにします
var username = service.GetCurrentUserIdentity();
// 次に、 FlexiCapture ユーザーの中から自分を探します
var userId = service.FindUser(username.Name);
if (userId <= 0) throw new Exception("現在のユーザーは見つかりません");
// 新しい処理セッションを開きます
const int roleType = 12;//ユーザーのステーションのオペレータロール
const int stationType = 10;//ユーザーのステーション
var sessionId = service.OpenSession(roleType, stationType);
if (sessionId <= 0) throw new Exception("セッションを開けません");
プロジェクトを開く
// プロジェクトを入手
var projects = service.GetProjects();
var projectGuid = "";
if (projects != null && projects.Count > 0)
{
foreach (var project in projects)
{
if (project.Name != "UnattendedExample") continue;
projectGuid = project.Guid;
break;
}
}
if (string.IsNullOrEmpty(projectGuid))
{
throw new Exception("UnattendedExample projectを見つけられません。このプロジェクトがこの例にしたがって作動するよう、サーバーにアップロードしなければなりません。");
}
// UnattendedExample という名前の最初のプロジェクトを開きます。
var projectId = service.OpenProject(sessionId, projectGuid);
if (projectId <= 0) throw new Exception("プロジェクトを開けません");
新しいバッチの作成
// 新しいバッチの名前を指定し、その他のプロパティは変更しないでください
var batch = new FlexiCapture.Batch{Name="サンプル API バッチ"};
var batchId = service.AddNewBatch(sessionId, projectId, batch, userId);
if (batchId <= 0) throw new Exception("バッチを作成できませんでした");
画像をバッチに追加
// 画像を追加するバッチを開きます
service.OpenBatch(sessionId,batchId);
256 KB 以下のファイルのアップロード
service.AddNewImage(sessionId, batchId, new FlexiCapture.File()
{
Bytes = File.ReadAllBytes(filename),
Name = filename
});
大きなファイルのアップロード
Base64 で合計 256 KB 以上のファイルをアップロードするには、以下の難点があります:
- ネットワークの読み込みが33%増加します
- とても大きなリクエストは、IIS またはファイアウォールでブロックされます
- 接続が失われた場合、またはネットワークエラーが生じた場合、ファイルを再送信する必要があります
ファイルサービス API 経由でファイルをアップロードする方が、より効率的です。
var doc = new FlexiCapture.Document { BatchId = batchId };
var file = new FlexiCapture.File { Name = filename };
var documentId = service.AddNewDocument(sessionId, doc, file, false, 0);
UploadFile(service, sessionId, projectId, batchId, documentId, filename).Wait();
ファイルをサーバーにアップロード
ファイル本体と一緒にサーバーへリクエストを送信します
ファイル本体は別にして、サーバーへリクエストを送信します
バッチ処理の開始と終了
// バッチ処理を開始します
service.ProcessBatch(sessionId,batchId);
Console.WriteLine("作成されたタスクの認識を待っています");
// 処理が完了するのを待ちます
var percentCompleted = 0;
while (percentCompleted < 100)
{
Console.CursorLeft = 0;
Console.Write(percentCompleted + "%");
percentCompleted = service.GetBatchPercentCompleted(batchId);
System.Threading.Thread.Sleep(500);
}
Console.CursorLeft = 0;
Console.WriteLine("完了...");
結果を取得し、キャプチャしたデータを表示しています
それぞれの文書から、3つのフィールドだけが表示されます:
- アドレス
- 名前
- 名字
// 結果を取得します
var documents = service.GetDocuments(sessionId, batchId);
if (documents == null) return;
// XML 結果を解析するのに必要な XML 名
var docs = XName.Get("Documents", "https://www.abbyy.com/FlexiCapture/Schemas/Export/FormData.xsd");
var banking = XName.Get("_Banking_eng", "https://www.abbyy.com/FlexiCapture/Schemas/Export/Banking_eng.xsd");
// すべての結果を反復し、スクリーンに表示します
foreach (var document in documents)
{
if (document.Id == 0) continue;
// XML ファイルを認識データと一緒に入手します
var attachedFile = service.LoadDocumentResult(sessionId, batchId, document.Id, "Result.xml");
if (attachedFile.Bytes == null) continue;
// 結果を XML で開きます
var xml = XDocument.Load(new MemoryStream(attachedFile.Bytes));
var docsElement = xml.Element(docs);// 認識データのコンテナ
if (docsElement == null) continue;
var result = docsElement.Element(banking);
if (result == null) continue;
// 必要なデータを入手します
var addressing = result.Element("_Addressing");
var surname = result.Element("_Last_Name");
var name = result.Element("_First_Name");
// データを表示します
Console.WriteLine("- "+
Console.WriteLine("- " +
(addressing == null ? "" : addressing.Value) + " " +
(name == null ? "" : name.Value) + " " +
(surname == null ? "" : surname.Value)
);
}
セッションを閉じています
service.DeleteBatch(sessionId,batchId);
service.CloseProject(sessionId,projectId);
service.CloseSession(sessionId);
12.04.2024 18:16:06