kintone は、サイボウズ社が提供しているクラウドデータベースサービスです。自社や部署ごとのニーズに合わせた業務データベースを、作成・運用できます。今回は kintone アプリ上にあるデータを Questetra BPM Suite で取得して、それを元に「選択肢マスタ」を作成する方法を紹介します。

選択肢の一覧を「選択肢マスタ」として保存しておくと、複数の選択型データ項目にて、選択肢のマスタデータとして扱えるようになります。例えば顧客データを「選択肢マスタ」として保存しておけば、任意の選択型データ項目で、顧客データを選択肢とすることができます。

対象とする kintone アプリ

本記事では、kintone アプリ「社員名簿」から取得したデータをもとに「選択肢マスタ」を作成/更新するワークフローアプリを作成します。現在ご利用している kintone アプリを対象にする場合でも、同じ手順で作成できます。

ワークフローアプリの設定

途中、システム管理権限が必要な作業があります。アプリ作成に使用するアカウントがシステム管理権限を付与されているかどうかを確認しておきましょう。
ログイン中のアカウントが所持している権限については、「アカウント設定 > 権限」から確認できます。

ワークフロー図

では、「kintone アプリからデータを取得し、選択肢マスタを更新(作成)する」アプリを作っていきましょう。「kintone: 選択肢取得テスト」という名前でアプリを新規作成してください。

モデラーが起動したら、まずはワークフロー図を作ってしまいましょう。

1つめのヒューマンタスクには「マスターデータ作成」、2つめのヒューマンタスクには「データ確認」と名前を付けています。

自動工程は「kintone:レコード検索」と「選択肢マスタ更新」の2種類を使用します。別途「kintone:レコード取得」がありますが、間違えないように注意して下さい。
また、今回は取得したデータを基に2種類の選択肢マスタを作成/更新しますので、2つの「選択肢マスタ更新」工程を並行するように配置します。

「kintone: レコード検索」と「選択肢マスタ更新」は 自動処理タスクのグループに入っています。

データ項目設定

続けて、使用するデータ項目を用意しましょう。

データ項目名 データ型 フィールド名 「マスターデータ作成」工程 「データ確認」 説明
件名 プロセスの件名です。
レコード ID 文字型(複数行) q_id kintone から取得されたデータ(レコード番号)が格納されます
選択肢ラベル「氏名」 文字型(複数行) q_name kintone から取得されたデータ(氏名)が格納されます
選択肢ラベル「所属チーム」 文字型(複数行) q_team kintone から取得されたデータ(所属チーム名)が格納されます
氏名マスター 選択型(-) q_selectName 文字型データ項目に格納されたを参照する選択型データ項目です。このデータ項目から選択肢マスタが作成されます。(処理画面では非表示なのでデータサブタイプは問われません)
所属チーム情報 選択型(-) q_selectTeam 文字型データ項目に格納されたを参照する選択型データ項目です。このデータ項目から選択肢マスタが作成されます。(処理画面では非表示なのでデータサブタイプは問われません)

2つの選択型データ項目については詳細な設定が必要です。「編集」ボタンをクリックして設定画面を開きましょう。「選択肢種別」で、デフォルトでは「固定の選択肢」が選択されているところを、「文字型データ項目」に変更してください。選択肢 ID と表示ラベルについて、文字型データ項目を指定するプルダウンメニューが表示されるので、「選択肢 ID」には両方のデータ項目で「レコード ID」を指定してください。[表示ラベル]には、「氏名マスター」では[選択肢ラベル「氏名」]を、「所属チーム情報」では[選択肢ラベル「所属チーム」]を指定します。

文字型データ項目である[レコード ID][選択肢ラベル「氏名」][選択肢ラベル「所属チーム」]には、「kintone: レコード検索」によって kintone アプリのデータが 1列ずつ格納されます。[レコード ID][選択肢ラベル「氏名」]の 2つをまとめて選択型データ項目にしたものが「氏名マスター」、[レコード ID][選択肢ラベル「所属チーム」]の 2つをまとめて選択型データ項目にしたものが「所属チーム情報」です。

[kintone: レコード検索]設定

このアプリの重要なモデリング要素である「kintone: レコード検索」の設定をしていきます。

HTTP 認証設定

Questetra BPM Suite が kintone アプリからデータを取得できるように、HTTP 認証設定をする必要があります。「kintone: レコード検索」のプロパティを開いて、「C1: API トークンを設定した認証設定 *」の項目の[設定はこちらから]ボタンをクリックしてください。

[設定はこちらから]ボタンは、システム管理権限を所持しているアカウントでないとクリックできません。この 認証設定は、全ワークフローアプリで共有されます。

ボタンをクリックすると新しいタブで HTTP 認証設定ページが開きます。一覧に他ユーザが作成した設定が表示されている場合であっても[+追加]ボタンを押して新しい HTTP 認証設定を作成しましょう。[+追加]で新しい画面が開くので、一番上[OAuth2]と表示されているドロップダウンから[トークン直接指定]を選択します。画面が切り替わり、[名前]と[トークン]の2項目の設定になります。[名前]には「{kintone ユーザの名前} で接続」など、適当な名前を入力してください。[トークン]には kintone アプリで発行された「API トークン」を入力します。kintone アプリの API トークンの取得のしかたは後述します。

モデラーに戻りページをリロードすると、「C1: API トークンを設定した認証設定 」のプルダウンメニューに作成した HTTP 認証設定名が表示されているはずです。それを選択すれば HTTP 認証設定は完了です。

kintone アプリのトークン

kintone のポータルから対象とするアプリを選択し、[アプリ設定]の[カスタマイズ/サービス連携]>[API トークン]を開きます。

[API トークン]に「API トークンはありません。」と表示されている場合は、[生成する]ボタンをクリックします。表示された文字列をメモして前述の HTTP 認証設定に入力します。[アクセス権]では「レコード閲覧」がチェックされていますので本記事の内容では十分ですが、他の用途で必要な場合はチェックを追加します。

すでに API トークンが発行されていればそれを利用してもいいですし、新たに[生成する]で追加して利用もできます。なお、すでに発行されている API トークンは削除しないよう注意して下さい。他の人が利用している場合それが動作しなくなります。

API トークンをメモできれば、左上の[保存]ボタンをクリックして画面を閉じます。次のアプリ設定画面の[アプリを更新]ボタンを忘れずにクリックしてください。[アプリを更新]しなければ発行した API トークンは機能しません。

ドメイン、アプリ ID

[C3: ドメイン]にはご契約の kintone ドメインを入力します。kintone ドメインは下記の ”XXXXXXXXXXX.cybozu.com” です。(XXXXXXXXXXX.kintone.com の場合もあります。)

[C5: アプリ ID]には対象アプリの ID を入力します。「API トークン」のページに記載されている URL の “app=” の後の数字が対象アプリのアプリ ID です。

https://XXXXXXXXXXX.cybozu.com/k/v1/record.json?app=11&id=1
[C2: Basic 認証設定(kintone で設定されている場合のみ)]や[C4: ゲストスペース ID(ゲストスペース内のアプリの場合のみ)]は該当しないならば空白で構いません。詳しくは「cybozu.com ヘルプ」を参照してください。

レコード ID

kintone に保存されるレコードには1件づつ固有の[レコード ID]が自動的に付与されます。このレコード ID を取得して Questetra の選択肢マスタの 選択肢 ID として利用します。

[C7: レコード ID の一覧を保存するデータ項目]に、文字型(複数行)のデータ項目[選択肢 ID]をプルダウンから指定します。

フィールドコード、データの一覧を保存するデータ項目

kintone アプリでの設定項目の呼称は Questetra BPM Suite のものと似ているものがあります。混同しないように注意して下さい。

設定される項目 kintone Questetra
フォームでの表示名 [フィールド名] [項目名]
アイテムを参照するコード [フィールドコード] [フィールド名]

[C8F: フィールドコード_1][C8V: 値_1 の一覧を保存するデータ項目]には、それぞれ「レコード内で取得の対象とする項目を指定するためのフィールドコード」「取得したデータを保存するデータ項目」をセットで指定します。フィールドコードは、kintone アプリの[フォーム設定]画面を見て確認してください。ここではフィールドコードとして ”staffName” と入力し、保存先を[選択肢ラベル「氏名」]データ項目をプルダウンから指定します。

同様に、2つ目のデータ取得対象「所属チーム名」のフィールドコードを[C9F: フィールドコード_2]、[C9V: 値_2 の一覧を保存するデータ項目]に[選択肢ラベル「所属チーム」]を指定します。

[kintone: レコード検索]設定画面

最後に、C1 項目の上にある「処理失敗時に、トークンをエラー境界イベントに移動」のスイッチをオンにしてください。サービスタスクアイコンが変化し、ピンクの丸のエラー境界イベントが表示されるようになります。[Get data]工程でがエラーが発生した際には、トークンはこのイベントに遷移します。終了イベントに接続してエラー終了となります。

終了イベントを追加してフローを引く

こうすることで、「kintone アプリからデータが取得できなかった」など処理が失敗した際に、選択肢マスタを更新せずにプロセスを終了させることができます。

[選択肢マスタ更新]設定

[選択肢マスタ]とはアプリで使用できるアドオンの一種で、選択型データ項目の選択肢としてアプリから参照することができるものです。この選択肢マスタを[アプリ共有アドオン]として Questetra BPM Suite に登録しておくと、すべてのアプリから登録したマスタデータを参照できるようになります。選択肢マスタの作成/更新には、「選択肢マスタ更新」を用います。

[アプリ共有アドオン]として選択肢マスタをワークフロー基盤に登録/保存できます。また、[アドオン]としてワークフローアプリ内に登録/保存する設定もできますが、以下の点に注意して下さい
  • 他のアプリから参照利用できません
  • アプリのアーカイブ作成時に選択肢マスタはファイルとしてアーカイブに同梱されます
    • 選択肢マスタに機密情報などが含まれる場合は、アーカイブの取り扱いに注意して下さい
設定すべき項目は 4つあります

[更新するアドオンの種別]

[選択肢マスタ(アプリ共有アドオン)]/[選択肢マスタ(アドオン)]のいずれかを指定します。このアプリはテスト用なので[選択肢マスタ(アドオン)]を指定しています。

[選択肢マスタを更新するユーザ]

「Me」ボタンを押して、あなたのアカウントを指定してください。[アプリ共有アドオン]を更新する場合には(モデラーで注釈が付いている通り)システム管理権限が必要です。

[選択肢一覧を保存する選択型データ項目]

[選択肢一覧を保存する選択型データ項目]」を指定します。kintone アプリから取得したデータを格納した、[氏名マスター][所属チーム情報]をそれぞれ選択してください。

[アドオンとして保存する際の名前]

「氏名マスター」「チームデータ」と名前を付けておきましょう。

動作確認

それではアプリを保存・リリースして、実際の動作を確認してみましょう。

[マスターデータ作成]タスクを完了したあと、少し待てば[データ確認]タスクが割り当てられるはずです。表示された文字型データ項目[選択肢 ID][選択肢ラベル「氏名」][選択肢ラベル「所属チーム」]を見て、kintone アプリのデータが取得できているか確認しましょう。問題なさそうであれば、[データ確認]タスクを完了してプロセスの終了を待ちましょう。

保存された「選択肢マスタ」は、[▼アプリ] > [アドオンの管理] > [選択型データ項目で使用する選択肢マスタ]から確認できます。

保存された「選択肢マスタ」の内容は虫眼鏡アイコンから確認できる

正常に動作しなかったら

「確認」タスクが割り当てられないときは、トークンが「エラー境界イベント」に進んでいないか確認しましょう。「ワークフロー > 開始したプロセス」などからプロセスの状態を見ることができます。

トークンが「確認」タスクではなく、「エラー境界イベント」を経て終了イベントに到達してしまっているときは、「選択肢データの一括取得」サービスタスクでどのようなエラーが発生したのか確認しなければなりません。自動処理を行うタスクのログを確認するときは、プロセス詳細やタスク詳細で「管理者モード」を使用します。

「管理者モード」を有効にすると自動処理ログが確認できる

「管理者モード」にチェックを入れると、「処理記録」の項目にそれまで表示されていなかった自動工程も表示されるようになります。「kintone: レコード検索」の「自動処理ログ」が確認できるようになるので、エラー内容を見てみましょう。

フィールドコードが「StaffName」になっている!

メッセージに “Field Code: StaffName does not exist in the app.” とあります。この例ではエラーを発生させるため、わざと誤ったフィールドコード(1文字目が大文字)を入力しています。そのため、データ取得対象を判定できずにこのようなエラーログとなったのです。アプリが正常に動作しないときは「自動工程ログ」を確認してみましょう。


Appendix

氏名が選ばれたら所属チームが自動入力されるように設定

ここまでの工程で2つの選択肢マスタが作成されました。ただ、それぞれの選択肢マスタを参照する選択型データ項目を設定しても[氏名]と[所属チーム名]は別々に選択することになり、誰がどのチームかという情報を利用できません。

ご利用の Questetra BPM Suite が Professional エディションであれば、Questetra Form JavaScript API を利用して、[氏名]を選択すると[所属チーム]が自動的に選択されるようになります。

アプリの変更

前述の動作確認を終えたアプリに設定を追加して、実際の動きを見てみましょう。

アプリのエディタを開いて[スイムレーン]を追加し、下図のようにアイテムを配置します。

データ項目を2つ追加します。1つ目は[選択型(セレクト)]で項目名を「氏名」とします。もうひとつは[選択型(検索セレクト)]で項目名「所属チーム」にします。[選択肢種別]で[選択肢マスタ(アドオン)]を指定するとアドオンファイルを選択できるようになるので、[氏名]には[氏名マスター]を、[所属チーム]には[チームデータ]を指定しましょう。

選択型データ項目は「編集ボタン」からこのように設定
データ項目名 データ型 フィールド名 [選択]工程
氏名 選択型(セレクト) q_nameMaster
所属チーム 選択型(検索セレクト) q_teamMaster
追加したデータ項目以外はすべて非表示に

スクリプト

データ項目の追加を終えたら、データ項目の設定画面の[説明]欄に以下のスクリプトを記述します。追加したデータ項目のどちらでもかまいません。

<script>

// フォーム表示(ready)時に実行される処理
// changeイベントのイベントハンドラを登録する関数を呼び出す
qbpms.form.on('ready', user_eventActivation);


// changeイベント発生時の処理
function user_formSelectSet() {

  // 選択フィールドからの値の取得
  const choice = qbpms.form.get('q_nameMaster');
  //  選択型の 選択肢IDを抽出
  let id = choice[0].value;

  // 「所属チーム」選択肢IDに代入
  qbpms.form.set('q_teamMaster', id);
}


// データ項目「氏名」の Changeイベントのイベントハンドラを登録する関数
function user_eventActivation(){
  qbpms.form.on('change', 'q_nameMaster', user_formSelectSet);
}

</script>

[適用して閉じる]で保存後、[選択]工程の[フォームプレビュー]を見てみましょう。

このように「氏名」を選択すると「所属チームが」自動で表示されます。

%d人のブロガーが「いいね」をつけました。