クラウド型 ワークフロー

Google Spreadsheet を活用して、プロセスを一括削除する

Google Apps Script のカスタム関数から、プロセス削除の API を呼び出します。

 

今回はちょっとした Tips。

Questetra BPM Suite には、特定多数のプロセスを、まとめて削除する機能がありません。全部を削除する方法はあるのですが、ある条件で検索してきた複数のプロセスを削除するには、一工夫が必要になります。検索結果を Google スプレッドシートにエクスポートし、Google スプレッドシートのカスタムファンクションを使って、一気にプロセスの削除を実現する方法を紹介します。

Abstract of bulk delete processes

上の図は、作用時のイメージ図です。

Google スプレッドシートにエクスポートした検索結果の一覧には、削除したいプロセスのIDが、一列にまとまっています。セルのコピーを使って、それぞれに対して、独自に定義した関数(ここでは QBPMS_PROCESS_DELETE)を呼び出します。カスタム関数の中で、Questetra BPM Suite のプロセスを削除する API にアクセスし、指定したプロセスを削除します。

 

それではカスタム関数について説明します。カスタム関数を作成するには、Google スプレッドシートから、以下のようにしてください。

  1. 「ツール>スクリプトエディタ」メニューを選択
  2. 「スクリプトを作成」で、「空のプロジェクト」を選択(他のものでも構わないです)

するとテンプレートとなるスクリプトが作成されていますが、これを以下のようにします。

 

function qbpms_process_delete(pid){
  const EMAIL = 'SouthPole@questetra.com';
  const PASS = 'YsZqzXRzRg5BaUY7PicvXDij2JuF3AlR';
  const API = 'https://online-demo-ja.questetra.net/API/OR/ProcessInstance/delete';

  if (typeof pid != 'number'){
    throw "pid must be a number";
  }

  /* POST で送信する内容 */
  var payload = {
    'processInstanceId': pid.toFixed()
  };

  /* Basic 認証 */  
  var encoded = Utilities.base64Encode(EMAIL + ':' + PASS);
  var headers = {
    'Authorization':'Basic '+ encoded
  };

  /* API に対して、リクエスト送信 */
  var options = {
    'method': 'post',
    'payload': payload,
    'headers': headers,
    'muteHttpExceptions': true
  };
  var response = UrlFetchApp.fetch(API, options);

  /* HTTP のレスポンスコードを、関数の戻り値にする */
  return response.getResponseCode();
}

 

先頭にある 3 つの定数、EMAIL / PASS / API については、利用環境に応じて変更してください。それぞれ、API にアクセスするユーザのメールアドレス、API 用パスワード、プロセスを削除する API を示した定数です。

スクリプトの途中で定義しているオブジェクトについて説明します。payload は POST リクエストの際のパラメータを指定するオブジェクトです。プロセスを削除する API では、プロセス ID のみ渡せばよいので、削除したいプロセスの ID だけを指定しています。プロセスID は、カスタム関数の引数で指定される前提です。

headers は HTTP リクエストのヘッダ部分です。今回は API へのアクセスにおいて、Basic 認証を使用するので、その情報を含めています。なお Basic 認証で使用するパスワードは、Questetra BPM Suite にログインするパスワードとは異なるものですので、注意してください。Basic 認証で使用するパスワードは、「アカウント設定>パスワード>API パスワード」から確認できます。また利用している環境において、Basic 認証による API アクセスが許可されている必要もあります。許可されているかどうか、「システム設定>接続アプリケーション>Basic 認証による API アクセス」から確認できます。

最後にこれら変数を使用して、API に HTTP リクエストを行っています。API のレスポンスコードを、関数の戻り値にしています。先の画像を見ると、400 と表示されています。API のレスポンスとして 400 が返ってきているので 400 と表示されているのですが、プロセスが存在しない(削除済み)場合には 400 が返ってきます。もし正常に削除できれば、HTTP レスポンスは 200 になります。もし認証に失敗すれば、401 になります。API については、マニュアルページを参照してください。

 

カスタム関数の作成はここまでです。これを保存すれば、Google スプレッドシートから呼び出せる状態になります。あとはプロセスIDを引数にして、カスタム関数を呼び出すだけです。

カスタム関数自体は1つ1つのプロセスを削除するだけですが、セルのコピーを使用すれば、複数のプロセスの削除を実現するのも容易です。またアクセスする API を変えることで、まとめて複数のプロセスを強制終了するといったことも、実現可能です。

ただダイアログがでるなど、削除確認のステップはありませんし、カスタム関数は使用すればいきなり実行されます。くれぐれも引数に指定するプロセス ID を間違えないよう、注意してください。

 

なおこの方法には1つ問題があります。カスタム関数はスプレッドシートごとに定義する必要があります。他のスプレッドシートで定義したカスタム関数を使用することはできません。かといって、毎回、カスタム関数を定義するのも面倒です。頻繁に実行するのであるなら、作業用のスプレッドシートを1つ用意し、プロセスIDは他からコピーするのが良いでしょう。

おそらくカスタム関数を Google スプレッドシートの Add-on にできれば、他と共有できるようになると思います。が、その方法がよく解っていません。もし解れば、またの機会に。

あわせて読みたい
50.Questetra Tips の前の記事 重要な報告をスマホですぐに確認できるようにする方法
50.Questetra Tips の次の記事 FAQ. 案件データをダウンロードすることはできますか?
Hatanaka Akihiro の他の記事 Office ドキュメントのプレビューを作る方法

アーカイブ

 RSS