Webサービス統合を利用してデータベースレコードを1つの印刷ジョブで印刷する方法
概要
おそらく、Webサービス統合を作成して、トリガーファイルの受信状況についてより多くの情報を双方向でやり取りできる機能を活用したいと考えていることでしょう。さらに、印刷したい各ラベルごとにBarTenderで使用する可変データを送信する場合もあるかもしれません。しかし、送信するデータの各レコードごとに個別の印刷ジョブが作成されるのは好ましくない場合もあります。また、お客様によっては、印刷ジョブの合間にプリンターが何らかの作業を行う必要があり、その場合、希望するラベル枚数を印刷するのにかかる全体の時間が大幅に増えてしまうこともあります。
この例では、Webサービス統合のトリガー処理を活用しつつ、印刷したいレコードをまとめてPrint Command Scriptを使って1つの印刷ジョブとして処理する方法をご紹介します。
実装方法
統合を考える際は、少なくとも2つのイベントに分けて考えるのがベストです。1つは統合をトリガーするイベント、もう1つはトリガー受信後に行う処理です。こちらの記事(Webサービス統合で複数のレコードを送信できますか?)では、統合の前半部分について説明しています。記事の通り、POSTのWebサービス統合を設定し、画像のように複数のレコードを送信できます:
これはあくまで一例で、ユーザーが関連データだけでなく、各レコードごとにラベルやプリンターも指定しています。別の方法を試してみても良いでしょう。例えば、私が統合に送信するデータは次のように構成しました:
難しいのは(そしてIntegration Builderが強力な理由でもありますが)、情報を統合に送信した後に何をするかです。この時点では、Webサービス統合はこのデータが何なのか、何に使うのかを知りません。送信したレコードを何らかのレコードセットとしてまとめたいのです。そうすれば、動的に作成したデータベースを使って希望のドキュメントを印刷できます。
サンプルファイル
このチュートリアルに沿って進めるためのサンプルファイルを用意しました。もちろん、ご自身で作成しても構いません。
- ShippingLabel.btw
- TESTDB.txt - ラベルで使用するサンプルデータベース
- Multi-RecordSinglePrintJobExample.btin
サンプルデータベースファイルの作成
まず、統合からどのようにデータを送信するかを反映したサンプルデータベースを作成します。この例では、印刷したい各ラベルごとに「追跡番号」と「シリアル番号」の2つのデータを送信します。そのため、次のようなカンマ区切りのテキストデータベースを作成し、TESTDB.txtとして保存しました:
TrackingNumber,SerialNumber,
T456826,S956845
BarTenderドキュメントの作成
統合を通じて送信する「追跡番号」と「シリアル番号」をラベルで受け取れるように、データベース接続を適切なオブジェクトに関連付けてラベルを準備します。
- ShippingLabel.btwを開きます。
- BarTenderの「データベース接続の設定」オプションを使って、データベース(TESTDB.txt)をBarTenderに接続します(参考:データベース接続のはじめかた(動画・5:20))
- レコードのヘッダーフィールドを、ラベルテンプレート上の希望するオブジェクトに関連付けます(こちらも上記サポート記事で説明されています)
- ラベルを保存します。
統合の作成
次に、統合を作成します。この例ではPOSTリクエストを使用するため、Webサービス統合を作成します。
- Integration Builderを開きます。
- 新しい統合の作成を選択します。
- 統合オプションとしてWebサービスを選択し、OKをクリックします。
- 入力データの項目で、入力データ形式が非構造化になっていることを確認します。
-
レスポンスの項目で、必要に応じて返したいレスポンスを書きます。以下はサンプルのレスポンスです:
Print Job Status = %PrintJobStatus%
Print Job Messages = %PrintJobMessages% - アクションの項目で、「ドキュメントの印刷」アクションを右側の赤いXで削除します。その後、青いプラスボタンをクリックして、統合で実行できるさまざまなアクションを追加します:
- 3つのアクションを追加します:
テキストをレコードセットに変換
ファイルの書き込み
Print Command Script -
テキストをレコードセットに変換コマンドでは、以下のように設定します:
テキストデータベース接続の設定でTESTDB.txtを統合に接続します。
テキストソースは「変数」、%EventData%に設定します。
出力はレコードを%EventData%変数に保存するようにします。 -
ファイルの書き込みコマンドでは、以下のように設定します:
ソースを変数%EventData%に設定します。
これから書き込むデータベースファイルの保存先を希望の場所に指定します。保存先のフォルダに統合がアクセスできる十分な権限があることを確認してください。この例ではC:\testに保存します。
ファイル名は任意で構いません。次のステップでこのファイル名が必要になります。
既に同名のデータベースファイルが存在する場合の動作も選択します。この例では既存ファイルを置き換えるを選択しています。 -
Print Command Scriptコマンドでは、以下のように設定します:
ソースは「埋め込みスクリプト」を選択します。
スクリプトウィンドウに以下を記述します:
印刷オプションの上書きでは、「データ入力を求める」にチェックを入れます。%BTW% /AF="C:\test\ShippingLabelMod.btw" /D="C:\test\TestResult.txt" /P
%END%
統合のテスト
統合を本番環境に展開する前に、きちんと動作するかテストしましょう!Integration Builderの統合のテストオプションを使います。ホームメニューのアイコンをクリックするか、Integration Builderウィンドウ下部の「プロパティ」横の「テスト」タブをクリックしてください。
RESTクライアントの設定
- BarTenderにPOSTリクエストを送信するテストにはRESTクライアントが必要です。お好きなRESTクライアントを使って構いません。この例ではInsomniaを使用しています。ダウンロードはこちら:Insomnia Rest Client
- RESTクライアントをインストールしたら、新しいPOSTリクエストを作成し、テキストフォーマットは「other」を選択します。
- 以下のデータを入力します。リクエストはデータベースのような構造で、各レコードが1行ずつになっています。この例では、5つのラベルを印刷し、各行が「追跡番号」と「シリアル番号」を表しています。TESTDB.txtのサンプルデータベースと同じ形式です。
T456826,S956845,
T456827,S956846,
T456828,S956847,
T456829,S956848,
T456820,S956849 - Webサイトのアドレスを、統合を参照してトリガーするアドレスに編集します。次のようになります:
http://<host>/Integration/WebServiceIntegration/Execute
このアドレスは統合のサービスタブ内で確認できます。<host>はご自身のコンピュータのホスト名です。分からない場合は、コマンドプロンプトを開き、"hostname"(ダブルクォーテーション不要)と入力してEnterを押してください。
ここにホスト名を含めたフルURLを入力します:
統合のテスト
- ホームメニューの統合のテストオプションをクリックします。
- テストウィンドウ右上の開始ボタンをクリックします。統合が開始されます。
- RESTクライアントで「送信」をクリックします。数秒かかりますが、RESTクライアントにレスポンスが返ってくるだけでなく、統合のテストウィンドウにも結果が表示されます:
統合の展開
- Integration Builderのツールバーから、
統合の展開をクリックし、新しい展開ダイアログを開きます。 - 新しい展開ダイアログで、展開の名前と説明を入力します。
-
統合ファイルの設定で、IntegrationFile.btin(または保存した統合ファイル名)がリストされていることを確認します。
- ターゲットサーバーには、統合ファイルを展開したいサーバーを追加します。
- 希望するエラー処理の設定を指定します。
- OKをクリックしてダイアログを閉じ、統合ファイルを展開します。
- 管理コンソールが統合ノードで開き、統合が表示されます。