システム連携ネタでよくブログを書いている日下です。
※ちなみにこれまでの記事はこちら

今回は、システム連携も関係しますが、前回と同様に Questetra の活用方法に関するネタです。

 

Questetra が関わるマスタデータの管理、というのはよくあるテーマの1つです。

Questetra で、マスタデータの登録/変更/削除の際の承認フローを準備して、マスタデータの変更まで自動で行う、ということもありますし、Questetra では別で管理されているマスタデータの利用(参照)だけする、ということもあります。

そのマスタデータの保持方法としてはいくつかのパターンがあります。どういう方法があるのか、それぞれのメリット・デメリットを整理して、今後検討される際の材料にしてもらえればと考えてまとめました。

 

マスタデータ管理のパターン

マスタデータのオリジナルを外部(Salesforce/kintone/Google Spreadsheet など)に保持するのかどうか、外部に保持する場合に内部にもコピーを保持するのかどうかによって、パターンが異なります。
 

  • パターン1:マスタデータのオリジナルを Questetra 外部に保持、参照は都度行う場合
  • パターン2:マスタデータのオリジナルを Questetra 外部に保持、定期的に Questetra 内部に同期して参照する場合
  • パターン3:マスタデータのオリジナルを Questetra 内部に保持する場合
 
パターン メリット デメリット
1 ・選択肢の変更がリアルタイムに反映される
・マスタに関する複数のデータ項目を保持しやすい
・マスタデータを一覧しやすい(保持する先にもよる)
・選択肢を xml 形式で返すよう作り込みが必要(Questetra 外部で作り込み要、ボリューム少し大き目)
2 ・マスタに関する複数のデータ項目を保持しやすい
・マスタデータを一覧しやすい(保持する先にもよる)
・選択肢の変更がリアルタイムに反映されない
・定期的に同期されるよう作り込み要(API がある場合は Questetra アプリ内のスクリプトで対応できるのでボリューム小さ目)
3 ・選択肢の変更がリアルタイムに反映される
・Questetra だけで実現可能
・マスタに関する複数のデータ項目を保持するとなると工夫が必要
・マスタデータを一覧しづらい

 

※選択肢 xml の書式については、以下を参照ください。
 関連マニュアル M319: 複数の業務プロセス定義から参照される選択肢XMLを登録する

※Questetra で保持するマスタデータは選択肢の id と表示データという2項目のみとなるため、マスタに関する複数のデータ項目を管理したい場合には、表示データ部分にセパレータを含めてデータを入れておいて参照側で分割する、といった工夫が必要となります(例えば、管理したいのが社名とURLだとしたら、表示データ部分を「株式会社ほげほげ;https://hogehoge.com」としておいて、参照側でセミコロンで分割してデータ項目に設定する処理を持たせる、といった形となります)

※プロセス(案件)によって選択肢の内容を変えたいというケースがありますが、今回とは少し異なるテーマとなります。以下を参考にしてください。
 関連マニュアル M208: 下流工程で利用する選択肢を、上流工程で列挙できるように設定する

※複数の選択データ項目による親子連動というケースがありますが、今回とは少し異なるテーマとなります。以下を参考にしてください。
 関連マニュアル M410: 選択肢 “商品分類” を選べば “商品名” の一覧表示が絞り込まれるように設定する

 

それぞれのパターンの詳細

 

パターン1:マスタデータのオリジナルを Questetra 外部に保持、参照は都度行う場合

外部データの参照は、http アクセスして選択肢 xml を返してもらう形となります。
例えば、外部データを Google Spreadsheet で保持して、 Google Apps Script(GAS)で Web アプリを準備し、選択肢 xml を生成して返す、といった実現方法があります。

 

この方法によるサンプル Google Spreadsheet を以下に準備して公開しました。
 Google Spreadsheet サンプル:世界の国のマスタデータ管理
またこのサンプル Google Spreadsheet に選択型データから HTTP アクセスする場合には以下の図のように下記 URL を指定してください。

https://script.google.com/macros/s/AKfycbwyCl0DTV_d348j7mKXZKYFAPqUUjq4QcL0V5G77Naw12rcEte2/exec

 

また、このような Google Spreadsheet を作成するための GAS のサンプルコードは以下となります。

var SHEET_ID = "xxxxx"; //input Google Sheet id
var SHEET_NAME = "Sheet1"; //input Sheet name

function doGet(e) {
  return  receive_(e);
}

function doPost(e) {
  return  receive_(e);
}

function receive_(e) {

  var search_key = e.parameter['query'];
  if (search_key == undefined) {
    search_key = "";
  }

  var out = ContentService.createTextOutput(buildXml(search_key));
  Logger.log(out.getContent());

  return out;
}

function buildXml(search_key) {
  var sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName(SHEET_NAME)

  var startRow = 2;
  var numRows = sheet.getLastRow() - 1;
    
  var dataRange = sheet.getRange(startRow, 1, numRows, 2);
  var data = dataRange.getValues();
  var out_string = '';

  out_string += '\n';
  for ( var i = 0; i < data.length; ++i) {
    var row = data[i];
    
    var select_value = row[0];
    var select_display = row[1];

    if ((search_key == "") || (select_display.indexOf(search_key) >= 0)) {
      out_string += '\n';
    }
  }
  out_string += '';
  Logger.log(out_string);

  return out_string;
}

GAS で Web アプリを準備する方法については、「Google Apps Script web アプリ」で検索すると多数の記事がヒットしますので、それらを参考にしてください。

 

パターン2:マスタデータのオリジナルを Questetra 外部に保持、定期的に Questetra 内部に同期して参照する場合

 

Questetra から外部のサービスの API をたたいて、取得データ(たいていは JSON 形式)を「スクリプトタスク」で加工して取り込む形となります。また、そういった処理をアドオン化したものも準備しています。

外部データを Salesforce で保持する場合には以下の実現方法の記事を参考にしてください。
 ブログ「Salesforce の顧客データを選択肢として使用する」
Google Spreadsheet の場合には以下のサンプルを参考にしてください。
 ワークフローサンプル「第502話:ユラギを無くすには「マスター参照」でしょ!」
kintone の場合には以下のサンプルを参考にしてください。
 ワークフローサンプル「第503話:ユラギを無くすには「マスター参照」でしょ!(kintone編)」

 

パターン3:マスタデータのオリジナルを Questetra 内部に保持する場合

選択肢 xml ファイルを自作してアップロードすることも可能ですが、いちいちファイルを作るのは手間ですし、メンテナンス記録も残りません。アプリ化しておくととても楽です。

※選択肢 xml ファイルはシステム共通で保持するパターンと、あるアプリ専用で保持するパターンの2通りがあります。前者の場合には「サービスタスク(選択肢マスタ更新)」が使えますが、後者の場合はそれが使えませんのでアプリ化できません。ご留意ください。

 

まとめ

様々な方法があり、それぞれに向き不向きがありますので、シーンに応じて使い分けてください。
もし、ご質問等がありましたら、お問い合わせフォームからご連絡ください。