アプレッソでは様々な「つなぐ」製品を開発しています。
製品単体で「つなぐ」役割は果たしていますが、それら製品同士をつなぐことでさらなる価値を提供できるんじゃないか。
そういったテーマとしているため実験的な内容となっていますが、出来たことをご紹介したいと思います。
使用製品
アプレッソで開発している製品には以下があります。
・DataSpider Servista (以下、「Servista」)
・PIMSYNC
・DataSpider BPM(以下、「BPM」)
・Thunderbus
その内、今回の記事では Servista、PIMSYNC、BPM をつないでみます。
Servista と BPM の連携は双方に機能が提供されているため容易に行えますが、PIMSYNC を連携しようとするのが、実験的な部分になります。
PIMSYNC はグループウェアのスケジュールを同期するソフトウェアのため、Servista や BPM との連携機能は存在しません。
よって今回 PIMSYNC では、PIMSYNC SDK で作成したデバッグ用アダプタ(CSV ファイルを読み取り、スケジュールを登録するアダプタ)を使用して連携したいと思います。
つまり、実際の製品では今回の連携はできないので、ご了承ください。
自動化前のシナリオ
自動化するシナリオは、病気などの急きょ休む必要が出てしまった場合などで、メールにより休暇の連絡を行う場合を想定します。
(メール連絡だけでは NG というところも多いかもしれませんが、比較的ありがちだと思ったのでこのシナリオにしました。筆者が頻繁に休んでいるわけではないので誤解なきよう…)
このシナリオで問題点は、以下の3点です。
・上司からの返信もなく、了承されたものとなんとなく判断し休むことになる
・休んだ人のカレンダーに誰かが休みを登録しなくていけない
・後日、休暇申請をすることになる
これらの問題点を、製品を連携し自動化することで解決したいと思います。
自動化後のシナリオ
自動化することにより、以下のようにします。
「会社へのメール」を行った後は、「上司が承認する」のみ手動となります。
メールをトリガーとして BPM による休暇申請を行います。その休暇申請を上司が承認すると、申請者のスケジュールに休暇予定が登録され、メールにて承認結果が通知されます。
これで、自動化前のシナリオで挙げた3つの問題点は解消されます。
実装概要
では、実際にどのようにして自動化していくかをご説明します。
まずは、処理のフローを示します。
1. 休暇申請者がメールにて会社へ連絡する
2. Servista によりメールを取得し、BPMプロセスを開始する
3. 上司が休暇申請を承認する
4. Servistaによりスケジュール登録用ファイルを作成し、PIMSYNCによりスケジュールに同期される
5. Servistaにより承認結果がメールにて、申請者へ通知される
各ソフトウェア毎に行っている大まかな処理は以下の通りです。
Servista:メールの送受信、BPMプロセス開始、PIMSYNC登録用ファイルの作成
BPM:休暇申請プロセスの実行、Servista のスクリプトを呼び出し
PIMSYNC:登録用ファイルから、スケジュールへ登録
では、それぞれの実装に対して具体的に見ていきましょう。
実装詳細
具体的な実装を、「処理概要」に記載のフローに沿って説明していきます。
Servista の実装(1)
まずは、Servista によりメールを取得し、BPMプロセスを開始します。
1. メール受信(POP3)処理にてメールを受信する
2. 受け取ったデータを、繰り返し処理(データ件数)で1件ずつ読み取る
3. メールの件名が「休暇申請」の場合に、プロセス開始する
Mapperではメール受信(POP3)処理で受け取った「差出人」(メールアドレス)を、プロセス開始処理に渡しています。こうすることで、BPMで処理する際にどのユーザが申請を行ったかを区別します。
また、本スクリプトはスケジュールトリガーにより、一定間隔で実行されるように設定しておきます。
BPM の実装
続いては、Servista により開始される BPM プロセスについてです。
1. (Servistaにより)休暇申請依頼タスクが実行される
2. 休暇申請承認タスクへ渡される。
3. 承認者が承認する(手動)
4. メッセージ送信中間イベントにより、Servistaのスクリプトを実行する
スイムレーンの割当ルールは、「申請」は全社員対象、「承認」は承認者に設定しています。
また、以下の型のプロセスデータ項目を用意します。
ユーザ型:ユーザ情報を Servista と受け渡しするためのフィールド
選択型:承認者が承認するかしないかを選択するためのラジオボタン
読み書き権限は以下のようにします。
プロセスデータ項目 | 休暇申請依頼 | 休暇申請承認 |
承認 | - | 読み書き |
申請ユーザ | 読み書き | 読み込み |
休暇申請承認タスク後のメッセージ中間送信イベントで呼び出す Servista のスクリプトには申請者の情報と、承認結果を渡します。
Servista の実装(2)
BPM のメッセージ中間送信イベントで呼び出させる Servista のスクリプトでは以下を行います。
1. BPM から渡された結果を取得する
2. 承認された場合、PIMSYNC 用の読取データを作成
3. 承認結果をメールで送信する
スクリプト呼び出し先では、以下の処理を行っています。
BPM結果取得:BPM から XML 型でデータが渡されるため、承認結果と申請者の情報を取得
PIMSYNC用読取データ作成:PIMSYNC 読み取り用の CSV ファイルを作成
メール送信には、メールアダプタの1通メール送信処理を使用しています。送信先には、BPM結果取得で取得したメールアドレスを、件名や本文には承認結果を設定します。
これにより休暇申請者宛に承認結果をメールで通知することができます。
PIMSYNC の実装
PIMSYNCでは、Servista で出力した CSV ファイルを同期元に設定し、同期先に連携したいスケジューラを設定します。
この同期設定により Servista で出力した CSV ファイルを読み取り、Google Calendarへスケジュールが登録されます。
やってみた結果
Servista 、BPM および PIMSYNC を連携することにより、メール送信から BPM による休暇申請、スケジューラ登録とメール通知までを自動化することが出来ました。
とはいえ、簡易的なフローとなっておりまだまだ作りこんでいく必要があるので、今後も機会があれば作り込みを進めていければと思います。
また、連携出来ていないものを連携していくということは、新しい価値を生み出すことへつながるのではないかと感じました。
そんな期待を持ちつつ、これからも「つなぐ」をテーマに様々な発想でチャレンジしていきたいと思います。