BOX API でファイル管理を全自動化する
クラウド型ワークフローで自動生成された「見積書 PDF」を、さらに全自動で BOX にアップロードしされるようにしたい。

 

見積書管理の改善

営業部長の業務改善奮闘記『見積業務を自動化する』では、

  • 営業部長によって、見積申請が承認されると同時に、
  • 自動的に、「見積書PDFファイル」が生成される

仕組みを作りました。が、ここからは、どちらかというと営業部長(私のこと)自身の不満を解消するためのものです。具体的には、生成された「見積書 PDF ファイル」がクラウド型ストレージ(オンラインストレージ)である Box に自動保存される仕組み、について考察しています。(小出し発表してきた改善奮闘記を1記事にまとめました)

 

目次
1. 見積書PDFがBoxに保存されることの価値
(1-1) クラウド型ストレージのメリット
(1-2) 「見積承認フロー」の改善の方向性

2. Questetra から Box へのファイル連携設定を行う
(2-1) Boxで保存先フォルダを作る
(2-2) Box/Questetra間のセキュア通信設定を行う
(2-3) Questetraのサービス工程を追加(アドオン)する
(2-4) Questetraのサービス工程を設定する
(2-5) 自動アップロードの動作確認

3. Boxを使ったドキュメントファイルの提出を考える
(3-1) Boxのダウンロード管理機能
(3-2) Box API によるファイル共有設定のコントロール
(3-3) 「見積承認フロー」の “更なる改善” の方向性

4. 見積書PDFをBoxからダウンロードしてもらえるようにする
(4-1) 見積書提出ワークフローの仕様整理
(4-2) アップロード時にパスワードがセットされる自動工程を自作する
(4-3) 自作したアドオンファイルの内容
(4-4) 自作した自動工程の配置とその設定
(4-5) ダウンロード制限機能の動作確認

5. 更なる業務改善アイデア
(5-1) ダウンロード方法をお客様に伝える業務
(5-2) 実際にダウンロードされたこと確認する業務

 

1. 見積書PDFがBoxに保存されることの価値

(1-1) クラウド型ストレージのメリット

もちろん、クラウド型ワークフロー Questetra BPM Suite に、ファイルを保存しておくことは可能です。しかも「ファイル型データ項目」に格納されたファイルの閲覧権限は高度に制御できます。

しかし、クラウド型ストレージ Box には「データの保管庫ならでは」の数多くの機能があります。

  • 多くの種類のファイルの中身を見ることができるビューワを持つ
  • ファイルの中身を連続して見ることができる
  • ファイルの中身を検索の対象にすることができる
  • ファイルを関係者とシェアしたり、公開することができる

もちろん、これら以外にも非常にたくさんの機能があるのですが、いずれにせよ「Box の優れた機能(今後の追加機能を含む)が利用できるようになっていること」が大きな価値だと考えています。

ちなみに、営業部長である私(矢作)の場合、保存された見積書 PDF ファイルを連続して確認したいことが多く、Box のファイルビューワ機能を利用したいと思いました。Questetra に保存されている「見積書PDFファイル」は、「社名」や「金額」など他のデータと同列に扱われており、PDFファイルだけを見たい場合には少し不便なのでした。また Questetra 仕様では、PDFファイルはダウンロードしたうえでしか表示できない点も不便です。(2018年5月現在)

 

(1-2) 「見積承認フロー」の改善の方向性

この記事では『見積業務を自動化する』の記事で作成した「見積承認フロー」を改良していく形で説明を進めます。

まず最初に「見積承認フロー」について簡単に説明すると、

  1. 営業マンは「1.見積申請」の工程で、社名や金額を入力する
  2. 営業部長は「2.見積承認」の工程で、承認判断(もしくは再提出判断)を行う
  3. 営業マンは「3.提出結果入力」で見積書提出と手応えなどを記録する

というヒューマン工程が並んでおり、第3工程の直前で自動的に「見積書 PDF ファイル」が生成される仕組みとなっています。なお、フロー図を見て頂ければわかるように、部長承認が不要な見積書(定価で作成された見積書等)は「2.見積承認」の工程を経由しません。

 

最初の改善は「PDF ファイルが自動的にアップロードされる自動工程」の配置です。

 

2. Questetra から Box へのファイル連携設定を行う

(2-1) Boxで保存先フォルダを作る

Box にログインして、見積書 PDF ファイルを保存するフォルダを作成します。

ここで設定する「フォルダ名」は適当なもので構いませんが、その結果「割り振られたフォルダID」は以降の設定で重要となります。

具体的には、フォルダを作成したら、そのフォルダをクリックしてフォルダの中身を表示させ、Web ブラウザに表示されている URL の xxxxxxxxxxx の部分(フォルダID)をメモしておきます。後述の「(2-4) Questetraのサービス工程を設定する」で使うことになります。

https://YourSubdomain.app.box.com/folder/xxxxxxxxxxx

 

(2-2) Box/Questetra間のセキュア通信設定を行う

事前に Questetra から Box へのアクセスを許可(認可)しておく必要があります。

(「OAuth2.0 Authorization Code 認可方式」と呼ばれるサーバ間のセキュア通信です)

(2-2-1) Box で「アプリ」を作成する

まずは Box にログインし、次のURLにアクセスします。この URL にアクセスすると「Box Platformにようこそ!」という画面が表示されます。

https://YourSubdomain.app.box.com/developers/console

 

「アプリの新規作成」ボタンを押すと、3種類のうちどのタイプの Box アプリを作成するのか選ぶ画面が表示されます。ここでは一番右の「パートナーの統合」を選びます。

 

「次へ」を押すとアプリの名前を入力する画面が表示されるので適当な名前を入力します。画面では「file-operation-by-questetra」としていますが、お好きな名称で構いません。入力したら「アプリの作成」を押します。

 

完了画面が表示されたら、「アプリの表示」ボタンを押します。

 

Box アプリの詳細が表示されます。この画面で OAuth2.0 設定に関する情報の入力と、確認(メモ)を行います。

まずは、「OAuth2.0 リダイレクトURI」(「コールバック URL」とも言われる)を入力するのですが、有償版(ビジネスプラン)の Questetra を利用している場合は、 “https://s.questetra.net/oauth2callback” を、無償版(スタータープラン)の Questetra を利用している場合は、 “https://f.questetra.net/oauth2callback” を入力します。(後述の Questetra OAuth 2.0 設定の画面でも確認できます)(参照マニュアル:「M225自動イベント業務データを組み込んだHTTPリクエストが、自動的に送信されるように設定する」)

 

もし、「OAuth2.0 リダイレクトURI」がどこにあるのか分からなくなってしまった場合には、次の手順で「OAuth2.0 リダイレクトURI」を入力する場所を見つけてください。(1) URL https://YourSubdomain.app.box.com/developers/console へアクセス。 (2) 作成したアプリをクリック。 (3) 左のメニューにある「構成」をクリック。 (4) 「認証方法」で標準OAuth 2.0 (ユーザー認証)が選ばれていることを確認。選ばれていない場合にはクリック。 ここまで進めると、「OAuth 2.0リダイレクトURI」が表示されます。

 

そして、「OAuth 2.0リダイレクトURI」の一つ上にある「OAuth2.0資格情報」という所に書かれている「クライアントID」と「クライアント機密コード」(Questetra からアクセスする際のカギとなる情報)をそれぞれどこかにメモしておきます。これは次節の「(2-2-2) Questetra のワークフローアプリで「OAuth2.0 設定」を行う」で使います。

 

(2-2-2) Questetra のワークフローアプリで「OAuth2.0 設定」を行う

次に Questetra にログインし、連携させるワークフローアプリの設定を行います。

少しわかりにくいのですが、「▼アプリ」というメニューにある「OAuth 2.0 設定」をクリックします。(当該ワークフローアプリの「アプリ管理権限」が必要です)

もし、ワークフローアプリを新規作成する場合は、システム管理特権のひとつである「アプリ作成権限」を持つユーザでログインし、右上の名前をクリックして表示される「アプリ設定」をクリックします。次の画面で「新規作成」ボタンを押して、ワークフローアプリを新規作成します。

 

そして表示された画面の左上の方にある「+追加」をクリックし、表示された画面で次のように入力を行います。

  • 名前
    • なんでもOKです。ここでは “box” としました。(これは「(2-4) Questetraのサービス工程を設定する」で使います)
  • 認可エンドポイントURL
    • https://account.box.com/api/oauth2/authorize
  • トークンエンドポイントURL
    • https://api.box.com/oauth2/token
  • スコープ
    • 空のままでOK
  • クライアントID
    • Boxアプリで “メモ” した「クライアントID」(OAuth2.0資格情報)
  • クライアントシークレット
    • Boxアプリで “メモ” した「クライアント機密コード」(OAuth2.0資格情報)

 

入力を終えたら保存ボタンを押し、「OAuth 2.0 設定」画面に戻ります。この画面で、「トークンの取得」ボタンを押します。

 

すると次のような Box の画面が表示されますので、「Boxへのアクセスを許可」をクリックします。(BoxへログインするためのIDとパスワードが求められる場合があります)

 

うまく処理がされると次のような画面になりまず。これで、セキュア通信(OAuth2.0)に関する設定は全て終了ということになります。

 

(参考:Box API の OAuth2.0 ドキュメント

 

(2-3) Questetraのサービス工程を追加(アドオン)する

ワークフロー設計画面(プロセスモデラ)の標準機能には、「Box にファイルをアップロードするサービス工程」といった自動工程はありません。

そこでまず、「Box にファイルをアップロードするサービス工程」を使えるようにします。具体的には、アドオンファイル(アドオンXML)を配布している公式ページから「Box-upload.xml」といったアドオンファイルをダウンロードし、入手したアドオンファイルを「アドオンの管理」メニューからアップロードします。(「アドオンの管理」は「▼アプリ」のメニューにあります。)(参照マニュアル:「M415自動工程業務プロセス定義で利用可能な自動工程を追加する」)

 

 

保存ボタンを押すと、画面の一番下にある「サービスタスク定義ファイル (ベータ版) 最大10」という所に、いま入力した名前の行が追加されます。

 

これで、モデリング画面(フロー図を編集する画面)にて、「Box にファイルをアップロードするサービス工程」が使えるようになります。

 

(2-4) Questetraのサービス工程を設定する

画面下の「詳細へ戻る」でワークフローアプリの詳細画面に戻り、「編集」ボタンを押して編集画面(モデリング画面)を表示します。

まずは「Box にファイルをアップロードするサービス工程」(サービスタスクアドオン)をフロー図上に配置します。(advanced 内のタスクメニューにマウスカーソルを合わせると選ぶことができます)

 

 

この状態で「Box にファイルをアップロードするサービス工程」のプロパティを開くと

  • A: OAuth2通信許可設定名
  • B: boxのフォルダIDが格納されている文字列型or選択肢型データを選択してください
  • C: アップロードファイルが格納されているファイル型データを選択してください

を設定しなければない事が分かります。

しかし、これまでの「見積承認フロー」では、(Box 連携が考慮外であったため)、「Box 側の フォルダ ID の情報」をもっていません。すなわち「B: boxのフォルダIDが格納されている文字列型or選択肢型データを選択してください」については、選択すべきデータ項目がありません。

そこで、文字型のデータ項目「Box フォルダID」を新規追加します。更に、「(2-1) Boxで保存先フォルダを作る」でメモしたフォルダID(前述した xxxxxxxxxxx のこと)が初期値としてセットされるように設定します。(いずれにヒューマン工程でも編集されないように、各工程の「データ編集許可設定」は全て「表示なし」のままで良いです)

その上で、あらためてプロパティを開き、設定を行います。

  • A: OAuth2通信許可設定名
    • 「(2-2) Box/Questetra間のセキュア通信設定を行う」で設定した OAuth2.0 設定の名称(”box”)を入力します。
  • B: boxのフォルダIDが格納されている文字列型or選択肢型データを選択してください
    • 追加したプロセスデータ項目「BoxフォルダID」を選びます。
  • C: アップロードファイルが格納されているファイル型データを選択してください
    • 「見積書PDF」を選びます。

 

(2-5) 自動アップロードの動作確認

後はワークフローアプリを「リリース」して動作確認するだけです。

新しくリリースされた「見積承認フロー」で適当なデータを入力して申請を行うと、生成された見積書PDFファイルが無事に Box に自動保存されていることが確認できました。

 

今回の改良で、生成された「見積書 PDF ファイル」が自動的に Box にアップロードされるようになりました。これにより、Box の持つファイルを操作する強力な機能を利用できるようになり、ミスの防止や業務効率の向上に繋がると思います。

 

改良を加えたワークフローアプリはこちらからダウンロードできます。ご興味ある方はダウンロードおよび解凍のうえ、Questetra BPM Suite にインポートしてお試しください。ただし、Box 側の設定やセキュア通信設定(OAuth2.0 設定)などは改めて行って頂く必要があります。

 

3. Boxを使ったドキュメントファイルの提出を考える

(3-1) Boxのダウンロード管理機能

実際に Box を毎日のように使っていると、次のようなことを実現できることが分かりました。

  • Box に保存したファイルを、Box を利用していないユーザにも公開することができる。
  • ファイルをダウンロードするには、パスワードを求めるような設定もできる。
  • ファイルの公開期限を設定することができる。

 

良く考えれば、これら3つの機能を組み合わせると、「Box にアップロードしたファイルを安全にお客様に提出」できるようになります。つまり、URLとパスワードを知っている人にしかダウンロードできないファイルを簡単に作ることができます。しかも、定められた期限内にしかダウンロードできません。

上手く使えば、十分に安全な形でお客様にファイル(見積書)を提出する仕組みを構築できそうです。

  • Box にドキュメントファイルをアップロードし、期限付きで公開する。
  • ダウンロード用 URL とパスワードをお客様に案内する。
  • お客様は、期限内にパスワードを入力してドキュメントファイルを受け取る。

 

(3-2) Box API によるファイル共有設定のコントロール

ただ「パスワード」や「期限」を Box 画面で手動設定していたのでは効率が悪いと言わざるを得ません。またミスオペレーションも心配です。

そこで、これらのファイル共有設定(ダウンロード制限)についての設定も自動化したいな、と考えました。具体的には、

  1. Box にドキュメントファイルをアップロードする
  2. ドキュメントファイルをダウンロードできるようにする
  3. ダウンロード時にパスワードが求められるようにする
  4. ダウンロードの有効期限を設定する

を自動的にできたらいいな〜、API があるかな〜、とワクワクしながら Box API リファレンスを…やはりありました!

1番目の「ファイルをアップロードする」には次の API を使用します。この段階で、2〜4番目に関する設定もできるとプログラミングが楽になるのですが、ここではアップロードだけです。(参考: Box API リファレンス “Upload File” )

Upload File: https://upload.box.com/api/2.0/files/content (POST)

 

2~4番目の「アップロードしたファイルに対して何らかの設定を行う」には次の API を使用します。(参考: Box API リファレンス “Upload File Info” )

Update File Info: https://api.box.com/2.0/files/file_id (PUT)

 

(3-3) 「見積承認フロー」の “更なる改善” の方向性

ということで「自動生成された見積書PDF」が

  • 自動的に Box にアップロードされ
  • さらに自動的に、お客様がダウンロードできる状態になる(パスワード・有効期限付)

を実現したいと思います。

 

4. 見積書PDFをBoxからダウンロードしてもらえるようにする

(4-1) 見積書提出ワークフローの仕様整理

これまでの見積承認フローを拡張し、お客様が「見積書 PDF ファイル」を安全に受け取れる仕組み(ダウンロードできる仕組み)を追加します。大まかな流れとしては、

  • (「見積書 PDF ファイル」の自動生成後)、営業マンは「ダウンロード期限」と「ダウンロード用パスワード」を指定する。
  • その後、自動的に「見積書 PDF ファイル」が Box にアップロードされ、ダウンロード期限とダウンロード用パスワードが設定される。
  • 営業マンは見積書 PDF ファイルのダウンロード用 URL を取得し、お客様に案内する。
  • お客様は、期限までにダウンロード URL にアクセスし、パスワードを入力して見積書 PDF をダウンロードする。

となります。

 

このフロー図にある「Box へ」と書かれた自動工程では、

  • 見積書 PDF ファイルを自動的に Box にアップロード
  • ダウンロード期限、パスワードを設定
  • ダウンロード URL を取得

が行われます。

 

(4-2) アップロード時にパスワードがセットされる自動工程を自作する

Questetra BPM Suite の自動工程には「スクリプト工程」と「サービス工程」があります。また「サービス工程」には

  • 標準で組み込まれているもの(例:「PDF自動生成」)と、
  • アドオンファイルで機能追加(アドオン)することで初めて利用できるもの

があります。アドオンファイルは、(「(2-3) Questetraのアドオンを追加する」では入手しましたが)、自作することも可能です。(参照マニュアル:「M416自動工程業務プロセス定義で利用可能な自動工程を自作する」)

つまり「自社オリジナルのサーバサイド処理」を実現する自動工程は、以下の2つの方法で実現(実装)できます。

  • 「スクリプト工程」を配置し、プロパティにスクリプトを貼り付ける
  • 「サービス工程アドオン」を自作し、インポートし、配置し、設定する

ここでは、他業務への展開を視野に、後者の「サービス工程アドオン」の自作を選択します。

 

(4-3) 自作したアドオンファイルの内容

今回は、

  • 見積書 PDF ファイルを自動的に Box にアップロード
  • ダウンロード期限、パスワードを設定
  • ダウンロード URL を取得

を行うスクリプトが書かれたアドオンファイル(Addon XML)を作りました。(この節はプログラミング知識が必要となります)

(Addon XML ファイルの作成方法そのものについては、マニュアル「M416自動工程業務プロセス定義で利用可能な自動工程を自作する」に譲ります。実際に作成したアドオンファイルはコチラです。)

このファイルの大きな構成は、次のとおりとなります。

  • <configs>…</configs> (14〜43行)でサービス工程のプロパティ要素を定義。
    • ダウンロード期限、パスワードを設定
    • ダウンロード URL を取得
  • <script>…</script>(45〜128行)で処理内容を定義。

 

(4-3-1) サービス工程のプロパティ定義

14〜43行では、ワークフローアプリ設計者に設定してもらう内容が定義されています。

一つ目の <config> 「A: OAuth2通信許可設定名」は、ワークフローアプリ設計者に「テキストの入力」を求めます。二つ目以降の <config> では、ワークフローアプリ設計者に「データ項目の選択」を求めます。

 

(4-3-2) 「サービス工程プロパティ」の参照と「業務データ」の参照

49〜66行では、サーバサイド処理に必要な Input 情報が変数代入されています。

変数 oauth2 には固定的な値が代入されます。つまり、サービス工程に案件が到達する度に、同じ「OAuth2通信許可設定」が利用されることになります。

一方で、変数 file、 download_limit、 download_password には、サービス工程に案件が到達する度に、業務データが動的に参照され、代入されることになります。

 

(4-3-3) 具体的な処理(演算や通信)の内容

69〜88行では、演算や通信が定義されています。

ここでは、格納されているファイル(見積書PDF)が Box にアップロードされる処理が書かれています。(通信許可設定 oauth2 を使って access token を取得し、案件にファイルデータが格納添付されている場合にマルチパートで POST します)

 

98〜105行では、アップロードしたファイルに「ダウンロード期限」と「ダウンロードパスワード」をセットする準備 (JSON オブジェクトの生成)を行っています。

 

107〜119行では、アップロードしたファイルに「ダウンロード期限」と「ダウンロードパスワード」を設定しています。

 

(4-4) 自作した自動工程の配置とその設定

アドオン定義ファイル(Addon XML)が完成したので、ワークフローアプリにアップロードします。基本的には「(2-3) Questetraのサービス工程を追加(アドオン)する」で記述した手順と同じです。

 

この例では、「見積承認フロー」でのみ利用できるように当該ワークフローアプリの「アドオンの管理」画面からアップロードしています。

 

ワークフロー基盤上の全てのワークフローアプリから共通参照させることも可能です。(要システム管理権限)

 

追加したサービス工程が利用可能であることを確認します。

 

サービス工程を配置します。

 

プロパティの設定を行います。

 

(4-5) ダウンロード制限機能の動作確認

動作確認のポイントとしては、次の 3 つです。

  • 文字型「ダウンロードURL」にセットされたURLに、Box にログインしていない状態でダウンロードできるか?
  • その際、文字型「ダウンロードパスワード」に指定したパスワードを入力することでダウンロードできるか?
  • 日付型「ダウンロード期限」で指定した日付が、公開期限として設定されているか?

 

第3工程「3.提出準備」で、「ダウンロード期限」と「ダウンロードパスワード」を入力します。

 

生成された見積書 PDF ファイルが自動的に Box にアップロードされ、それをダウンロードするための URL が「ダウンロードURL」という項目にセットされました。

 

Box にログインしていない Web ブラウザで「ダウンロードURL」のURLにアクセスしてみます。パスワードを求められる画面が表示されるので、不正なパスワードを入力するとダウンロードできませんが、正しいパスワードを入力すると見積書PDFファイルがダウンロードできました。

 

次に、アップロードされたファイルにダウンロード期限が設定されているかを確認します。

Box にログインして、アップロードされたファイルをクリックすると、次の図のように「この共有リンクは YYYY/MM/DD に無効になります。」と入力したダウンロード期限が設定されたことを示すメッセージが表示されました。

 

改良を加えたワークフローアプリはこちらからダウンロードできます。ご興味ある方はダウンロードおよび解凍のうえ、Questetra BPM Suite にインポートしてお試しください。ただし、Box 側の設定やセキュア通信設定(OAuth2.0 設定)などは改めて行って頂く必要があります。

 

5. 更なる改善アイデア

業務の改善サイクルは「エンドレス」です。

まさに、ビジネスプロセス管理活動(Business Process Management 活動)なのですが、まだまだ改善アイデアがあります。たとえば「他のクラウドとの連携」(API エコノミーの考察)だけでも、無数のアイデアが湧いてきます。パスワードの自動生成も、サーバサイドで行われるようにする/入力フォームのデコレーションで代入ボタンを作るなどあるでしょう。

ただ、この記事については、最後に2つのアイデアを書いて終わりたいと思います。

 

(5-1) ダウンロード方法をお客様に伝える業務

営業マンは、見積書 PDF ファイルの「ダウンロード URL (ダウンロード期限)」や「パスワード」について、お客様に案内しなければなりません。(第4工程「お客様への案内」)

そこで、Box アップロード直後に、メール案内がお客様に届くようにします。(あまりにも機械的・システム的すぎると、それはそれでリスクにもなります)。なお、メールの送信先である「提出先メールアドレス」という文字型のデータ項目を追加しています。

 

メールを送信する部品は、左メニューの advanced の中にあります。次の図のように、マウスカーソルを合わせると “メッセージ送信中間イベント(メール)” と表示される部品です。

 

2つのメール送信イベントを配置したので、それぞれの設定を行います。

 

 

提出先メールアドレスを入力すると、

 

届きました。

 

 

(5-2) 実際にダウンロードされたこと確認する業務

「Box ファイルのダウンロード数を取得するサービス工程」を使えば、見積書PDFが閲覧されたか、について確認できます。

たとえば「ダウンロード期限」を迎えた瞬間に、「ダウンロード数」と「プレビュー数」が自動的に記録される仕組みを構築することも可能となります。

 

業務プロセスの改善は、ほんとうに奥が深いです。今回はここまで!

 

コメントを残す

This site uses Akismet to reduce spam. Learn how your comment data is processed.