代替ライブラリのひとつ Luxon については、kintone カスタマイズでの導入方法の紹介記事があります。
概要
2017年11月のアップデートで追加されたワークフローの承認実行後イベントを使い、ワークフローの申請内容をスケジュールに登録します(予定を登録する部分はGaroon SOAP APIを使用しています)。
前提条件と注意事項
- このカスタマイズには、クラウド版 Garoon または パッケージ版 Garoon 4.10以降の環境が必要です。
- ワークフロー JavaScriptカスタマイズは、JavaScriptを適用した後に申請されたワークフローが対象になります。
それ以前に申請されたワークフローには適用されません。 - サンプルプログラムは、その動作を保証するものではありません。
- サンプルプログラムの技術的なサポート等は行っていません。
- 代理承認時にカスタマイズが動作しない不具合があることを確認しております。(2019/2/21追記)
できること
有給休暇、出張など、申請が必要なイベントについてワークフローとスケジュールを連携させることができます。
ワークフローでは、スケジュールへの自動登録機能が搭載されていますが、対象項目の指定等、より柔軟な連携が可能になります。
完成イメージ
Garoonのワークフローにて承認を行うと、申請内容がスケジュールに登録される流れになります。
- 「承認する」ボタンをクリックすると、ワークフローの内容が申請者のスケジュールに登録されます。
- スケジュールのメモ欄には、承認されたワークフローへのリンクが設定されます。
スケジュール側には特別な設定は不要です。
ワークフローの設定にのみ、JavaScriptファイルを設定しカスタマイズしていきます。
Garoon ワークフローの設定手順
ワークフローの項目の内容は、会社によって異なります。
ここでは、サンプルということで、スケジュールの項目を概ね網羅した申請フォームにJavaScript/CSSカスタマイズを設定する流れをご説明します。
1. ワークフローの申請フォームを作成する
まずは以下の項目を配置して、ワークフローの申請フォームを作成していきます。
申請フォームの作成方法については、Garoon ヘルプ - 申請フォームの作成の流れ クラウド版・パッケージ版をご参照ください。
申請フォームは、スケジュールの項目と対応付けます。それぞれの項目は以下の通り設定してください。
項目コードは、JavaScriptコード内でそれぞれの項目を指定するための一意の文字列になります。
項目名 | 項目タイプ | 項目コード | 必須 | 備考 |
---|---|---|---|---|
開始日時 | 日付(日付と時刻) | From | 〇 | |
終了日時 | 日付(日付と時刻) | To | 〇 | |
予定メニュー | メニュー | Menu | 〇 |
出張/休みをメニュー項目とします。 ※デフォルトの予定メニュー選択肢です。 |
タイトル | 文字列(1行) | Title | 〇 | |
メモ | 文字列(複数行) | Memo | ||
公開方法 | ラジオボタン | Scope | 〇 | 公開/非公開をラジオ項目とします。 |
上記の通り設定が完了したら、土台となる申請フォームの作成は完了です。
2. Javascript/CSSファイルを適用する
申請フォームの作成が完了したので、ここから作成した申請フォームにJavaScriptファイルを適用していきます。
3. 適用ファイルの準備
下記のサンプルコードをエディタにコピーして、ファイル名を「wf_to_sch.js」、文字コードを「UTF-8」で保存します。
※ ファイル名は任意ですが、ファイルの拡張子は「js」にしてください。
ポイント
- request.approve.submit.successイベントに実装することにより、承認が行われた後に起動する処理を作成することができます。
4. JavaScript/CSSファイルとして使用するファイルのおよびリンクの追加
- 「申請フォーム情報」部分の右端にある「JavaScript / CSSによるカスタマイズ」をクリックします。
※ 申請フォームの詳細画面に「JavaScript / CSSによるカスタマイズ」というリンクが表示されない場合、ワークフローのカスタマイズが許可されていない場合はリンクが表示されませんので、こちらをご参照下さい。 - [カスタマイズ] 項目に「適用する」を選択します。wf_to_sch.jsが使用するjQuery、Moment.jsおよび作成した「wf_to_sch.js」ファイルを追加し、「設定する」をクリックします。
本カスタマイズでは、Cybozu CDNの以下のライブラリーを使用します。
- jQuery
https://js.cybozu.com/jquery/3.3.1/jquery.min.js - moment.js
https://js.cybozu.com/momentjs/2.20.1/moment.min.js
※ jQuery、Moment.jsはwf_to_sch.jsより上位に登録してください。
以上ですべての設定は完了です。最初にお見せした完成イメージの通り、動けば成功です。
おわりに
Garoon APIのカスタマイズサンプル ワークフローとスケジュールとの連携方法をご紹介しました。
ワークフローの承認実行のタイミングでGaroon内の別アプリにデータを登録することが簡単にできます。
このTipsは、2018年5月版 Garoonで確認したものになります。
例えば、承認が2段階での承認の際に、2回起動して同じ内容が2件投入されてしまいます。
最終2段目の承認と1段目の承認の見分け(制御)は可能ですか?
倉西様
cybozu developer networkをご活用いただき、ありがとうございます。cybozu developer network事務局です。
ご質問いただいている件ですが、workflow.request.approve.submit.success で、経路ごとに設定している「stepCode(経路ステップコード)」を取得することができます。
https://developer.cybozu.io/hc/ja/articles/115005298746
経路ステップの設定:https://jp.cybozu.help/ja/g/admin/application/workflow/routestep_item
なお記事のコメント欄では、記事に誤りがある、記事通りに動作しない、といった直接記事に関する投稿を受け付けております。
技術的なご質問がある場合は、是非コミュニティもご活用頂けますと幸いです。
今後ともどうぞよろしくお願いいたします。
パッケージ版を使っています。
こちらのソースを参考にコードを書いてみたのですが、404エラーになってしまいます。
おそらくURLの箇所を変更しなければならないというところはわかるのですが、
調べてみても解決策が分かりませんでした。教えて頂ければ幸いです。
Tsutsumi Ayumi 様
お世話になっております。
cybozu developer network 運営局です。
2点ご教示頂けないでしょうか?
また404エラーが発生するときの画面のURLをご教示頂けないでしょうか
(サーバーIPやホスト名などは xxx などの適当な文字列に置き換えて秘匿していただきたいです)
よろしくお願いいたします。
運営局 担当様
迅速な対応ありがとうございます。
詳細を省いてしまい、すみません。
・パッケージ版のバージョンは5.0.1です。
・承認をするときに次の画面に進まないので、コンソールで確認すると、下記のエラーが走りました。
POST http://xxx.xxx.xxx/g/util_api/util/api.csp 404 (Not Found)
以上、よろしくお願いいたします。
Tsutsumi Ayumi 様
お世話になっております。
cybozu developer network 運営局です。
ご教示くださりありがとうございます。
バージョンは問題なさそうです。
先のコメントで頂いたとおり、お使いの Garoon の API のリクエストパスが異なっているためかと思われます。
このコードの SOAP API のパスは、クラウド版に合わせてホスト名のあとのパスが /g/ である前提( Garoon の URL は http(s)://xxx.xxx.xxx/g/)になっています。
ご利用の Garoon URL の ホスト名のあとのパスをご確認いただけないでしょうか。
もし、Garoon の URL が http(s)://xxx.xxx.xxx/grn/ でしたら、
77行目の場合は url: '/g/util_api/util/api.csp', を url: '/grn/util_api/util/api.csp', に修正する必要があります。
なお、url: '/g/util_api/util/api.csp', を url: 'http://xxx.xxx.xxx/grn/util_api/util/api.csp', のような、フルパス指定もできます。
103行目、169行目でも SOAP API のパスを指定しているので、同様に修正が必要です。
また、134行目で、スケジュールのコメント欄に記述する、申請したワークフローのURLがあるのですが、こちらも
'/g/workflow/view.csp?pid=' + request.id + を '/grn/workflow/view.csp?pid=' + request.id + に修正します。
よろしくお願いいたします。
担当者様
ご丁寧な回答ありがとうございます。
GaroonのURLがhttp://xxx.xxx.xxx/scripts/cbgrn/grn.exe/なので、
フルパスでhttp://xxx.xxx.xxx/scripts/cbgrn/grn.exe/util_api/util/api.csp と指定したのですが、
やはり同じエラーになってしまいます。。
Tsutsumi Ayumi 様
お世話になっております。cybozu developer network 運営局です。
度々失礼いたします。
.csp を無くしてリクエストした場合はいかがでしょうか?
なので、url: '/g/util_api/util/api.csp' を url: '/scripts/cbgrn/grn.exe/util_api/util/api', としていただくイメージです。
手元のオンプレ環境で検証したところ、 .csp を外すと正常にリクエストが返却されたことを確認いたしました。
ご担当者様
ご丁寧な回答ありがとうございます。
上記のようにurlを変更したところ、404エラーは消えました。
ただ、特にエラーがないにも関わらず、スケジュールが登録されません。。
申請ボタンを押した瞬間をコンソールで確認したところ、<user id ="underfined">だったので、ここが問題だと思っているのですが、
解決方法を教えて頂けないでしょうか。度々で本当に申し訳ございません。
Tsutsumi Ayumi 様
お世話になっております。cybozu developer network 運営局です。
URLの問題が解決したとのこと、よかったです。
スケジュールが登録されないことについてですが、手元の環境では再現しないので特定が難しいです。
URL以外にコードを変更した箇所はございますか?
秘匿情報は xxx などに置き換えた状態で、カスタマイズで適用しているコードを教えていただけないでしょうか?
担当者様
とりあえずテストで作成しているので、上のコードそのままなのですが。。
URL以外に変更している箇所はありません。
Tsutsumi Ayumi 様
お世話になっております。cybozu developer network 運営局です。
こちらで試してみたところ、エラー出ずスケジュール登録できました。
util_api/util/api.cspの「.csp」はすべて外しましたでしょうか?
.cspは外しました。
下記のコードを利用しているので、確認して頂ければ幸いです。。
Tsutsumi Ayumi 様
頂いたソースコードは問題ないと思います。
>「申請ボタンを押した瞬間をコンソールで確認したところ、<user id ="underfined">だったので...」
また、過去頂いた↑の情報について1点見間違いしたことが分かりました。失礼いたしました。
承認ボタンではなく、申請ボタンを押した時点で、エラーが出ましたよね。
こちらのサンプルプログラムは「申請」ボタンを押下するタイミングで実行されない為、
エラーは他のカスタマイズによるものではないかと思います。
ご確認お願い致します。
ご担当者様
>「申請ボタンを押した瞬間をコンソールで確認したところ、<user id ="underfined">だったので...」
上は申請ボタンではなく承認ボタンの誤りでした。申し訳ございません。。
機能が出来るかどうかの確認なので、特に何のカスタマイズも行っておらずそのままです。上のソースコードと下記のファイルしかありません。
https://js.cybozu.com/jquery/3.3.1/jquery.min.js
https://js.cybozu.com/momentjs/2.20.1/moment.min.js
Tsutsumi Ayumi 様
頂いたソースコード(URLをこちらの環境に合わせて変更しただけ)で確認したところ、ご指摘のエラーが出ずスケジュール登録できました。
環境依存ではないかと思います。
https://developer.cybozu.io/hc/ja/articles/207613916 を参考にデバッグすると原因を特定できるかと思います。
例:ユーザー情報を処理する行にbreakpoint入れてどこで処理止まるか判明できます。
ご担当者様
ご丁寧にありがとうございます。
URLを参考に調べてみたいと思います。