見出し画像

invoiceAgent 文書管理 を Power Automate Desktop で操作してみました!

はじめに

はじめまして!
こんにちは、ウイングアーク1stのわっくぼです。

突然ですが、みなさん、invoiceAgent をご存じでしょうか。invoiceAgent は当社ウイングアーク1stが提供する電子帳票プラットフォームになります。
invoiceAgent の詳細につきましては、製品のサイトをご参照ください。
invoiceAgent 製品のサイト <https://www.wingarc.com/product/ia/

さて、私からお客様に invoiceAgent 文書管理の操作の説明を行うと、決まった操作を定期的に行わるため操作を自動化したいとの話をよく伺います。

操作の自動化を行いたい一例
・PDFファイルを自動で invoiceAgent 文書管理にアーカイブしたい。
・OCRした結果を埋め込んだ invoiceAgent 文書管理上にあるファイルから、OCRを行った箇所の値をCSVファイル形式で自動で取得したい。

始めに、「PDFファイルを自動で invoiceAgent 文書管理にアーカイブ」について書きたいと思います。

今回は、Microsoft社 Power Automate Desktop を利用して invoiceAgent 文書管理をブラウザーの操作の自動化ではなく、invoiceAgent 文書管理にて公開している Web APIを利用して invoiceAgent 文書管理を操作を行ってみたいと思います。

注意事項

  • 本手順では、Power Automate Desktop が操作が出来る前提の記載になっています。
    Power Automate Desktop の操作については、説明を省かせて頂きます。

  • サンプルのため、ご利用された方の損害の責任は負いかねますのであらかじめご了承ください。

  • エラーの処理についても省略しています。ご利用された方にて必要に応じて組み込んでください。

今回のフロー

invoiceAgent 文書管理にファイルをアーカイブしてみたいと思います。
大まかなフローは以下になります。

  1. ログインの処理を作成

  2. CSRFトークンの取得
    (クラウド環境、または、CSRFの機能有効化されている環境のみ)

  3. ファイルを invoiceAgent 文書管理にアーカイブ

  4. ログアウト

  5. invoiceAgent 文書管理にアーカイブしたファイルを、ダイレクトプレビューの機能を使ってMicrosoft Edge ブラウザーにてプレビューを表示

  6. Microsoft Edge ブラウザーを使用した invoiceAgent 文書管理のログイン

※本当は5.までの予定でしたが、実際に動作させると、Microsoft Edge ブラウザーにて invoiceAgent 文書管理のURLを開くと、ログイン画面になるため、UIの操作も自動化してみした。

1.ログインの処理を作成

「Webサービスを呼び出します」を使用して、invoiceAgent 文書管理のログインAPIを発行します。

Login の設定 (全般)
  • 「URL」
    設定値: <ログイン時のURL>/service/auth/login

    例: <ログイン時のURL>が http://localhost:44230/spa/ の場合
    http://localhost:44230/spa/service/auth/login

  • 「メソッド」
    設定値: POST

  • 「受け入れる」
    設定値: application/json

  • 「コンテンツ タイプ」
    設定値: application/x-www-form-urlencoded

  • 「要求本文」
    設定値: domain=<ログインするドメイン名>&user=<ログインするユーザー名>&password=<ログインするユーザーのパスワード>

    ※記号の含むユーザー名やパスワードを使用される場合は、URLエンコード変換したユーザー名、および、パスワードの文字列を設定してください。

Login の設定 (詳細、生成された変数)
  • 詳細「接続タイムアウト」
    設定値: 30秒
    タイムアウトが発生する場合は、適切に変更してください。

  • 「リダイレクトに追従します」
    設定値: 有効

  • 「Cookie をクリアします」
    設定値: 無効
    Cookie は、ログイン時に取得した Cookie を継承する必要があるため、クリアは行いません。

  • 「エラー状態で失敗します」
    設定値: 無効

  • 「要求本文をエンコードします」
    設定値: 無効

    有効にすると、要求本文に含まれるパラメーターの区切り文字の &(アンド) や =(イコール) まで URL エンコードを行います。
    よって、「Web サービスを呼び出します」の時にエンコードは行いません。
    事前の変数作成時にエンコードした値を設定します。

  • 「ユーザーエージェント」
    設定値: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.21) Gecko/20100312 Firefox/3.6

  • 「エンコード」
    設定値: utf-8: Unicode (UTF-8)

  • 「信頼されていない証明書を受け入れます」
    設定値: 無効
    オンプレミス版にて、独自で作成したサイト証明書を使用する場合は、有効にしてください。

  • 「HTTP認証」
    設定値: 無効

  • 生成された変数
    変数名を以下の様に変更します。
    なお、応答のHTTPヘッダーは、CSRFトークンを取得する時に使用します。
    応答のHTTPヘッダー: LoginResHeaders
    Web サービスの応答テキスト: LoginResponse
    返された状態コード(HTTPステータス): LoginStatusCode


2.CSRFトークンの取得

クラウド版、および、オンプレミス版でCSRFを有効にした invoiceAgent 文書管理を使用されている場合に、ログイン時に発行された CSRF トークンを取得します。

CSRFトークンの取得の流れは、以下になります。

CSRFトークン取得
  • ログイン時に取得した、応答のHTTPヘッダー(LoginResHeaders)の値を1行ずつ取り出します。

  • 行ごとに取得した応答のHTTPヘッダーの先頭文字列が、「X-XSRF-TOKEN:」 から始まる行であるか確認をします。

  • もし、HTTPヘッダーの先頭文字列が、「X-XSRF-TOKEN:」 から始まる行であれば、変数名 (XSRFToken) に行の文字列を設定します。
    また、リクエストヘッダに、「x-requested-with: XMLHttpRequest」付与するために、変数名 (XSRFToken) に「x-requested-with: XMLHttpRequest」文字列を設定します。

変数名 (XSRFToken) と変数名 (XSRFToken) は、今後の API 発行にて使用します。


3.ファイルを invoiceAgent 文書管理にアーカイブ

ここからが少し難しくなってきます。
ファイルを invoiceAgent 文書管理にアーカイブするフローは、以下の図になります。

アーカイブ処理のフロー

3.1. boundaryのパラメータ値を作成

「ランダムテキストの作成」を使用して、アーカイブのWebAPI発行時に、コンテンツタイプを multipart/form-data 形式で送信するためのパラメータの境界を表す boundary 値をランダムテキストの値を格納します。

boundary値の設定
12文字の小文字と数字からランダムな文字列を値を作ります。

3.2. ファイル内容を Base64 化した文字列情報に変換

「ファイルを Base64 に変換する」を使用して、送信するファイルの内容をBase64 化します。
Power Automate Desktop の 「Webサービスを呼び出し」では、バイナリー形式の転送が意図通りに出来ないため、ファイルの内容を Base64 化した文字列に変換した値を変数 Base64 に設定します。

アーカイブするファイルの Base64 変換

3.3. アーカイブAPIの POST 送信するための要求本文を作成

「変数の設定」を使用して、アーカイブAPIを POST 送信する値を作成します。

要求本文の内容

invoiceAgent 文書管理にアーカイブ先のパスを指定します。

--%boundary%
Content-Disposition: form-data; name="path"

/PAD-Sample

invoiceAgent文書管理にアーカイブする時のファイル名を指定します。

--%boundary%
Content-Disposition: form-data; name="name"

sample.pdf

アーカイブ先にすでにファイルが存在していた場合は、上書きします。

--%boundary%
Content-Disposition: form-data; name="overwrite"

true

PDF形式以外のファイルの時は、強制アーカイブをします。

--%boundary%
Content-Disposition: form-data; name="force"

true

アーカイブ先のフォルダーが存在しない場合は、フォルダーを作成します。

--%boundary%
Content-Disposition: form-data; name="mkdirs"

true

ファイルの内容を送信します。
ファイル名は、sample.pdf
バイナリデータはbase64形式

--%boundary%
Content-Disposition: form-data; name="file"; filename="sample.pdf"
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64

%Base64%
--%boundary%--

3.4. invoiceAgent 文書管理にアーカイブAPIを POST 送信

「Web サービスを呼び出します」を使用して、変数からアーカイブAPIの POST 送信に必要な情報を作成し、実際に Web サービスを呼び出します。

アーカイブAPIの呼び出し(全般)
  • 「URL」
    設定値: <ログイン時のURL>/service/archives_v3

    例: <ログイン時のURL>が http://localhost:44230/spa/ の場合
    http://localhost:44230/spa/service/archives_v3

  • 「メソッド」
    設定値: POST

  • 「受け入れる」
    設定値: application/json

  • 「コンテンツ タイプ」
    設定値: multipart/form-data; boundary=%boundary%
    変数 boundary を使用します。

  • 「カスタムヘッダー」
    設定値:
    %XSRFToken%
    %XReqWith%
    CSRFトークンの変数 XSRFToken と XReqWith を設定します。

  • 「要求本文」
    設定値
    %PostData%
    POST 送信するための要求本文の値を設定した変数 PostData を指定します。

アーカイブAPIの呼び出し(詳細と生成された変数)


  • 「接続タイムアウト」
    設定値: 30秒
    タイムアウトが発生する場合は、適切に変更してください。

  • 「リダイレクトに追従します」
    設定値: 有効

  • 「Cookie をクリアします」
    設定値: 無効
    Cookie は、ログイン時に取得した Cookie を継承する必要があるため、クリアは行いません。

  • 「エラー状態で失敗します」
    設定値: 無効

  • 「要求本文をエンコードします」
    設定値: 無効
    「Web サービスを呼び出します」の時にエンコードは行いません。
    事前の変数作成時にエンコードした値を設定します。

  • 「ユーザーエージェント」
    設定値: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.21) Gecko/20100312 Firefox/3.6

  • 「エンコード」
    設定値: utf-8: Unicode (UTF-8)

  • 「信頼されていない証明書を受け入れます」
    設定値: 無効
    オンプレミス版にて、独自で作成したサイト証明書を使用する場合は、有効にしてください。

  • 「HTTP認証」
    設定値: 無効

  • 生成された変数
    変数名を以下の様に変更します。
    なお、Web サービスの応答テキストは、アーカイブ処理が完了した時の文書番号やブラウザーでアーカイブしたファイルをダイレクトにプレビューするためのURLが格納されています。

    応答のHTTPヘッダー: ArchiveResHeaders
    Web サービスの応答テキスト: ArchiveResponse
    返された状態コード(HTTPステータス): ArchiveStatusCode


3.5. アーカイブ API 送信時の「Web サービスの応答テキスト」に格納された JSON をカスタムオブジェクトに変換

「JSONをカスタムオブジェクトに変換」を使用して、「Web サービスの応答テキスト」に格納された JSON をカスタムオブジェクトに変換します。
Power Automate Desktop では、JSON ファイルを直接操作出来ないため、一旦、変数(ArchiveJSON)として格納します。

アーカイブAPI発行時の応答JSONをカスタムオブジェクトに変換

3.6. JSON のカスタムオブジェクトからダイレクトURLを取得

「変数の設定」を使用して、3.5.にて作成したアーカイブAPI の「応答テキスト」のカスタムオブジェクトを使用して、ブラウザーからのプレビューするためのダイレクトURLを変数(directURL)に格納します。

JSONからDirectURLを取得
%ArchiveJSON['direct_url']%

4.ログアウト

「Webサービスを呼び出します」を使用して、invoiceAgent 文書管理のログアウトAPIを発行します。

Logout の設定
  • 「URL」
    設定値: <ログイン時のURL>/service/auth/logout

    例: <ログイン時のURL>が http://localhost:44230/spa/ の場合
    http://localhost:44230/spa/service/auth/logout

  • 「メソッド」
    設定値: POST

  • 「受け入れる」
    設定値: application/json

  • 「コンテンツ タイプ」
    設定値: multipart/form-data; boundary=%boundary%
    変数 boundary を使用します。

  • 「カスタムヘッダー」
    設定値:
    %XSRFToken%
    %XReqWith%
    CSRFトークンの変数 XSRFToken と XReqWith を設定します。

  • 「要求本文」
    設定値: 未設定
    POST 送信するための要求本文は、未設定です。

詳細は、「Webサービスを呼び出します」をフローに追加した時のデフォルトを使用しています。
生成された変数の「応答のHTTPヘッダー」、「Web サービスの応答テキスト」、「返された状態コード(HTTPステータス)」は、使用する予定はないため、スライダーを未使用に変更しています。


5. invoiceAgent 文書管理にアーカイブしたファイルを、Microsoft Edge にてプレビューを表示

「新しい Microsoft Edge を起動」を使用して、invoiceAgent 文書管理にアーカイブした時に取得した、ダイレクトプレビューの URL を、Microsoft Edge ブラウザーにて表示をします。

※Microsoft Edge ブラウザーに、拡張機能 「Microsoft Power Automate」をインストールおよび拡張機能の有効化する必要があります。

ダイレクトプレビューのURLを Microsoft Edgeにて表示させる設定
  • 「起動モード」
    設定値: 「新しいインスタンスを起動する」

    新しいブラウザーのウィンドウを開きます。

  • 「初期URL」
    設定値: %directURL%

    %directURL% は、3.6.にてアーカイブしたファイルのダイレクト プレビューするため URL を格納した変数 directURLになります。

  • 「ウィンドウ状態」
    設定値: 最大化

    ブラウザーのウィンドウを最大化した状態で表示します。

  • 生成された変数
    設定値: Browser

    今後のブラウザーを操作するための、Microsoft Edge インスタンスです。


6. Microsoft Edgeブラウザーを使用した invoiceAgent 文書管理のログイン

Microsoft Edge ブラウザーにて、invoiceAgent 文書管理にログインをしている状態の場合は、すでにログインしたユーザーのセッションを利用して、ファイルのプレビューが表示されますが、ログインをしていない場合は、ログイン画面が表示されます。

invoiceAgent 文書管理のログイン画面

Power Automate Desktop を利用して、Microsoft Edgeブラウザー操作して、invoiceAgent 文書管理にログインをします。

フローは以下になります。
この先は、ブラウザー画面のUI要素を使ってアクションを設定します。

  1. ログイン画面の確認

  2. 「ユーザー名」テキストボックスのユーザー名の入力

  3. 「パスワード」テキストボックスのパスワードの入力

  4. 「Login」ボタンのクリック

ログイン画面からログインのフロー

使用するUI要素は、ログイン画面から以下になります。
・Input text 'userid': 「ユーザー名」を入力するテキストボックス
・Input text 'password': 「パスワード」を入力するテキストボックス
・Input submit 'submit': 「Login」ボタン

6.1.ログイン画面の確認

「ユーザー名」を入力するテキストボックスが表示されている場合は、ログイン画面が表示されているとします。

ログイン画面の判定
  • Web ブラウザー インスタンス
    設定値: %Browser%

    ダイレクトプレビューのURLを「新しい Microsoft Edge を起動」にて生成された、ブラウザー インスタンスの変数を設定します。

  • Web ページを確認する
    設定値: 要素を含む

    「ユーザー名」を入力するテキストボックスが含まれるが判定材料となるため、要素を含むになります。

  • UI 要素
    設定値: Input text 'userid'

    「ユーザー名」を入力するテキストボックス


6.2. 「ユーザー名」の入力

「ユーザー名」を入力するテキストボックスにユーザー名を Power Automate Desktop を使用して入力します。

「ユーザー名」を入力テキストボックスにユーザー名を入力する設定
  • Web ブラウザー インスタンス
    設定値: %Browser%

    ダイレクトプレビューのURLを「新しい Microsoft Edge を起動」にて生成された、ブラウザー インスタンスの変数を設定します。

  • UI 要素
    設定値: Input text 'userid'

    「ユーザー名」を入力するテキストボックス

  • テキスト
    設定値: ユーザー名


6.3.「パスワード」の入力

「パスワード」の入力するテキストボックスにパスワードを Power Automate Desktop を使用して入力します。

「パスワード」の入力テキストボックスにパスワードを入力する設定
  • Web ブラウザー インスタンス
    設定値: %Browser%

    ダイレクトプレビューのURLを「新しい Microsoft Edge を起動」にて生成された、ブラウザー インスタンスの変数を設定します。

  • UI 要素
    設定値: Input password 'password'

    「パスワード」を入力するテキストボックス

  • テキスト
    設定値: ログインするユーザーのパスワード


6.4.「Login」ボタンのクリック

「Login」ボタンをクリックし、invoiceAgent 文書管理にログインをします。

「Login」ボタンのクリック
  • Web ブラウザー インスタンス
    設定値: %Browser%

    ダイレクトプレビューのURLを「新しい Microsoft Edge を起動」にて生成された、ブラウザー インスタンスの変数を設定します。

  • UI 要素
    設定値: Input submit 'submit'

    「Login」ボタン


実際にフローの実行結果

invoiceAgent 文書管理にアーカイブしたファイルのプレビューが表示されます。

invoiceAgent 文書管理にアーカイブしたファイルのプレビュー(サンプル)


最後に

実際にプログラム言語を使ってコードを記述するよりは簡単ですが、コードを記述すると同じ感覚にはなってきます。
この内容が少しでもお役に立てれば幸いです。


この記事が気に入ったらサポートをしてみませんか?