クラウド型 ワークフロー

業務フローの途中で Google Spreadsheet へデータ出力する方法

Questetra BPM Suite → Google Apps Script → Google Spreadsheet の連携事例です。

 

Questetra BPM Suite は G Suite(旧Google Apps)との様々な連携機能を準備しています。だた、それらの標準機能を超えた高度なご要望・ご相談をいただくこともあります。
※G Suite 連携機能の詳細はこちらをご覧ください。

その中のケースの1つで、
 業務フロー(プロセスモデルの流れ)の途中で Google Spreadsheet にデータ出力したい
というものが過去に何度かありましたので、その設定方法について紹介します。

これまでにあった実際のケースとしては以下がありました。

  • Questetra のプロセスでは個々の案件の進捗を管理していて、全案件の進捗管理をしている Google Spreadsheet に個々の案件状況を反映したい
  • Questetra のプロセスでは個々の稟議を管理していて、当月の稟議決裁された金額を部署ごとにリアルタイムタイムで把握したい(Google Spreadsheet でピボットテーブルを利用)

1. 前提となる知識

Google Apps Script(以下、GAS)の知識が必要になります。プログラミング経験(特に Javascript の経験)がある方であれば、すぐに理解できるレベルです。詳細についてはこちらのサイト等を参考にしてください。

2. 実現方法の概要

処理の仕組みは以下の通りです。
1. Questetra BPM Suite の業務フロー上に、http リクエストでデータ送信する部分を準備する
2. その http リクエストを GAS で準備した Web アプリケーションで受信して、Google Spreadsheet にデータを書き込む
QBPMS_GAS_sheet

3. 実現方法の詳細

3.1 Google Spreadsheet および Google Apps Script(GAS)の準備

Google Spreadsheet を新規作成し、スクリプトエディタを開いて、Google Apps Script(GAS)で以下の処理を準備する。

  • Questetra BPM Suite からの http リクエストを受ける処理
  • 受け取ったリクエストのパラメータ名を列名と解釈して、Google Spreadsheet の一番下の行にデータを書き込む処理

※GAS を Web アプリケーションとして待機させる方法は過去に書いたこちらの記事の「3.2 Google Apps Script 側の準備」を参照

サンプルコード
var SPREADSHEET_ID = "●●●";  //Google SpreadsheetのURLに含まれるIDを入れる
var SHEET_NAME = "シート1";  //シート名を入れる
var SHEET_LOG = "log";  //シート名を入れる

function doGet(e) {
  receive_(e);
  return UiApp.createApplication();
}

function doPost(e) {
  receive_(e);
  return UiApp.createApplication();
}

function receive_(e) {
  var ss = SpreadsheetApp.openById(SPREADSHEET_ID);

  //log 出力
  var sheet_log = ss.getSheetByName(SHEET_LOG);
  sheet_log.appendRow([ logDate(), "received:" + e.toSource() ]);

  var sheet = ss.getSheetByName(SHEET_NAME);
  var rowIndex = sheet.getLastRow() + 1;
  for (var p in e.parameters) {
    var range = sheet.getRange(p + rowIndex);
    if (range) {
      range.setValue(e.parameter[p]);
    }
  }
}

※1行目の「SPREADSHEET_ID」には Google Spreadsheet のアクセス URL「https://docs.google.com/a/example.com/spreadsheets/d/XXXXX/edit#gid=0」の「XXXXX」部分に含まれるものを指定する
※上記サンプルのまま動かす場合には、Google Spreadsheet でシートを追加して、シート名を「log」に変更する必要があります。上記ロジックの18行目の log 出力部分を削除しても処理は動きます。

3.2 Questetra BPM Suite 側の準備

「メッセージ送信中間イベント(HTTP)」(詳しくはこちら)というデータの送信口を準備する。
パラメータの設定は以下の通り。

  • 「通信設定」の「アクセスURL」には、3.1 で決まる Web アプリケーションの URL を指定
  • 「パラメータ」には、Google Spreadsheet のどの列に出力したいか、下記の2つ目の図のように列名をアルファベット大文字で指定(アルファベットが小文字の場合は、Google Apps Script 側でうまく動かないケースがあったので、大文字で指定するようにしてください)

メッセージ送信中間イベントhttp
メッセージ送信中間イベントhttp_送信パラメータ

 

今回は一番下に1行ずつデータ追加するだけのシンプルなサンプルコードを紹介しましたが、GAS のロジックを工夫することで

  • Google Spreadsheet に出力された日時も記録する
  • 行も含めて指定したセル位置にデータを出力する
  • 今回のサンプルでは対応できていない、テーブル型や複数選択ができる選択型(チェックボックス)のデータを正しく出力する

といったことも対応可能です。
それらのケースに対応したロジックについては、またあらためて紹介します。

Kusaka Tsuyoshi の紹介

営業をやってますが、もともとエンジニアなので、プログラミングもやります。
Kusaka Tsuyoshi の投稿をすべて表示

あわせて読みたい
50.Questetra Tips の前の記事 FAQ. 業務プロセス定義に制限事項はありますか?
50.Questetra Tips の次の記事 FAQ. クラウド型ワークフローのサービス稼働率は?
Kusaka Tsuyoshi の他の記事 クラウド SSO サービス「OneLogin」との連携

アーカイブ

 RSS