Garoonのワークフロー承認時に自動で施設予約にスケジュール登録する
Garoon のワークフロー承認時に、自動で施設予約にスケジュール登録する方法を紹介します。Garoon JavaScript API および Garoon REST API を使います。
動作イメージ
利用者がワークフローで申請する。
担当者が申請を承認する。
施設予約に自動で追加される。
施設予約の準備
施設予約に施設を準備します。ワークフローやAPIで「施設コード」を使うため、「施設名」と「施設コード」を同一にしておきます。ワークフロー承認者が、施設に予約を追加できる権限も必要です。
ワークフローの準備
予約申請用のワークフローを準備します。
必須項目
申請フォームの項目として、施設予約への登録に使う次の6項目を追加します。APIプログラムから取得するため項目コードを以下の値に設定します。
予約名
施設予約の「タイトル」に転記します。
タイプ | 項目名 | 項目コード | 項目の条件 | |
---|---|---|---|---|
文字列(1行) | 予約名 | Title | 必須項目にする |
開始日時
施設予約の「日時」に登録します。
タイプ | 項目名 | 項目コード | 表示形式 | 初期値 | 項目の条件 |
---|---|---|---|---|---|
日付 | 開始日時 | From | 日付と時刻 | 指定しない | 必須項目にする |
終了日時
施設予約の「日時」に登録します。
タイプ | 項目名 | 項目コード | 表示形式 | 初期値 | 項目の条件 |
---|---|---|---|---|---|
日付 | 終了日時 | To | 日付と時刻 | 指定しない | 必須項目にする |
利用施設
選択した「施設」に予約を登録します。
タイプ | 項目名 | 項目コード | メニュー項目 | 項目の条件 |
---|---|---|---|---|
メニュー | 利用施設 | Facility |
直接入力 対象の施設コードを列挙 |
必須項目にする |
メニュー項目には施設予約で設定した「施設コード」を列挙します。
使用部署
施設予約の「メモ」に転記します。
タイプ | 項目名 | 項目コード | 項目の条件 | |
---|---|---|---|---|
文字列(1行) | 使用部署 | Organization | 必須項目にする |
予約担当者
施設予約の「メモ」に転記します。
タイプ | 項目名 | 項目コード | 項目の条件 | |
---|---|---|---|---|
文字列(1行) | 予約担当者 | Name | 必須項目にする |
追加項目
その他の項目の追加や変更は任意です。施設予約には転記されません。例では次の2項目を追加しています。
補足資料
タイプ | 項目名 | 項目コード | 最大ファイル数 | |
---|---|---|---|---|
ファイル添付 | 補足資料 | 3 |
連絡事項
タイプ | 項目名 | 項目コード | サイズ | |
---|---|---|---|---|
文字列(複数行) | 連絡事項 | 40桁 × 3行 |
項目のアクセス権
承認者が申請内容を変更できるようにします。「項目にアクセス権を設定する」を開き、各項目に編集権限を与えます。
経路設定
「専用経路を設定する」から「承認経路」を追加します。例では次のように設定しています。
経路種別 | 経路変更の許可 | 初期値 | 申請者の初期値変更の許可 |
---|---|---|---|
承認(誰か1人) | 無効 | (適宜) | 無効 |
初期値には、予約を承認する組織やユーザを追加します。
APIプログラムの設置
次の Javascript ファイルを wf_to_booking.js として保存します。文字コードは UTF-8 にします。
/** * ワークフロー承認時に施設予約に登録するスクリプト * * 2024.1.11 申請番号、使用部署、予約担当者をメモに追加
* 2023.12.27 初版
*
* 使用方法
* https://www.cit.t.kyoto-u.ac.jp/ja/tech/blog/tips/wf-to-booking
*/ (function() { 'use strict'; (function($) { // ワークフロー承認イベントで起動 garoon.events.on('workflow.request.approve.submit.success', (event) => { // 申請内容を取得(タイトル、施設コード、開始日時、終了日時、申請番号、使用部署、予約担当者) const request = event.request; const booking_title = request.items.Title.value; const booking_code = request.items.Facility.value; const booking_start = luxon.DateTime.fromISO(request.items.From.value.date + 'T' + request.items.From.value.time + ':00').toUTC().startOf('second').toISO({suppressMilliseconds: true}); const booking_end = luxon.DateTime.fromISO(request.items.To.value.date + 'T' + request.items.To.value.time + ':00').toUTC().startOf('second').toISO({suppressMilliseconds: true}); const booking_memo = "申請番号: " + request.number + "\n使用部署: " + request.items.Organization.value + "\n予約担当者: " + request.items.Name.value;
// 登録データの作成 const booking = { "eventType": "REGULAR", "subject": booking_title, "notes": booking_memo, "visibilityType": "PUBLIC", "start": { "dateTime": booking_start, "timeZone": "Asia/Tokyo" }, "end": { "dateTime": booking_end, "timeZone": "Asia/Tokyo" }, "isStartOnly": "false", "facilities": [{ "code": booking_code }] }; // 施設予約に登録 return new garoon.Promise((resolve, reject) => { garoon.api('/api/v1/schedule/events', 'POST', booking, (resp) => { alert("施設予約に登録しました"); resolve(event); }, (err) => { alert("施設予約への登録に失敗しました"); resolve(event); }); }); }); })(jQuery); })();
上で準備したワークフローの「JavaScript / CSSによるカスタマイズ」を開きます。
カスタマイズの項目は「適用する」を選択します。JavaScriptカスタマイズの項目は、次の2つのURLと上で作成した wf_to_booking.js ファイルを設定します。
https://js.cybozu.com/jquery/3.6.4/jquery.min.js
https://js.cybozu.com/luxon/3.3.0/luxon.min.js
最終的に次のようになります。
動作確認
ワークフローの「承認」ボタンを押した際に「施設予約に登録しました」と表示され、施設予約に登録されていれば正しく設定できています。
「施設予約への登録に失敗しました」と表示される場合は、次の原因が考えられます。
- 該当日時の予約が既に入っている
- 施設に予約を追加する権限がない
- ワークフローに設定した「施設コード」が間違っている
免責
本ページに記載の内容は2023年12月時点のものです。プログラムのご利用等によって生じたいかなる損害についても、当センターは責任を負わないものとします。