Japanese (日本語) - Change language

自動処理の例

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

プロジェクトと添付資料をダウンロードします: 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", "http://www.abbyy.com/FlexiCapture/Schemas/Export/FormData.xsd");
var banking = XName.Get("_Banking_eng", "http://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);
  

10.11.2020 12:08:06


Please leave your feedback about this article