自動処理の例

この例では、銀行口座アプリケーションをサーバーにアップロードする方法、また顧客データをキャプチャする方法を示します。

プロジェクトと添付資料をダウンロードします: 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

Please leave your feedback about this article

Usage of Cookies. In order to optimize the website functionality and improve your online experience ABBYY uses cookies. You agree to the usage of cookies when you continue using this site. Further details can be found in our Privacy Notice.