システム連携ネタでよくブログを書いている日下です。
※ちなみにこれまでの記事はこちら
今回は、システム連携も関係しますが、前回と同様に Questetra の活用方法に関するネタです。
Questetra が関わるマスタデータの管理、というのはよくあるテーマの1つです。
Questetra で、マスタデータの登録/変更/削除の際の承認フローを準備して、マスタデータの変更まで自動で行う、ということもありますし、Questetra では別で管理されているマスタデータの利用(参照)だけする、ということもあります。
そのマスタデータの保持方法としてはいくつかのパターンがあります。どういう方法があるのか、それぞれのメリット・デメリットを整理して、今後検討される際の材料にしてもらえればと考えてまとめました。
マスタデータ管理のパターン
マスタデータのオリジナルを外部(Salesforce/kintone/Google Spreadsheet など)に保持するのかどうか、外部に保持する場合に内部にもコピーを保持するのかどうかによって、パターンが異なります。
-
- パターン1:マスタデータのオリジナルを Questetra 外部に保持、参照は都度行う場合
-
- パターン2:マスタデータのオリジナルを Questetra 外部に保持、定期的に Questetra 内部に同期して参照する場合
-
- パターン3:マスタデータのオリジナルを Questetra 内部に保持する場合
2・マスタに関する複数のデータ項目を保持しやすい
・マスタデータを一覧しやすい(保持する先にもよる)・選択肢の変更がリアルタイムに反映されない
・定期的に同期されるよう作り込み要(API がある場合は Questetra アプリ内のスクリプトで対応できるのでボリューム小さ目)3・選択肢の変更がリアルタイムに反映される
・Questetra だけで実現可能・マスタに関する複数のデータ項目を保持するとなると工夫が必要
・マスタデータを一覧しづらい
パターン | メリット | デメリット |
---|---|---|
1 | ・選択肢の変更がリアルタイムに反映される ・マスタに関する複数のデータ項目を保持しやすい ・マスタデータを一覧しやすい(保持する先にもよる) |
・選択肢を xml 形式で返すよう作り込みが必要(Questetra 外部で作り込み要、ボリューム少し大き目) |
関連マニュアル 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 を指定してください。
また、このような 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通りがあります。前者の場合には「サービスタスク(選択肢マスタ更新)」が使えますが、後者の場合はそれが使えませんのでアプリ化できません。ご留意ください。
まとめ
様々な方法があり、それぞれに向き不向きがありますので、シーンに応じて使い分けてください。
もし、ご質問等がありましたら、お問い合わせフォームからご連絡ください。
ピンバック: Amazon RDS を外部マスタとして使用する(Terraform) – Questetra Support
ピンバック: Amazon RDS を外部マスタとして使用する(AWS コンソール) – Questetra Support
ピンバック: kintone アプリを外部マスタとして使用する – Questetra Support