Garoonのイベントが取得できない

ガルーンへの予定登録、変更のイベントをキックとして処理を走らせたいのですが、なぜかイベントが発火しません。

以下の記事を参考に、ガルーンで特定のページを開いたり、ボタンをクリックするイベントの処理を試してみましたが、イベントの処理が呼び出せませんでした。

https://developer.cybozu.io/hc/ja/articles/115005042223

以下の挙動は確認しております。

・console.log(0)を通過していること
・console.log(2)を通過していること
・garoon.apiのリクエスト成功、レスポンスは返ってきたこと

どのようなことが原因でイベント発生時の処理を呼び出せていないと考えられますでしょうか。

実行したカスタマイズJSは以下の通りです。

console.log(0);

garoon.events.on('schedule.event.create.show', function(event) {
console.log(1);
window.alert('予定登録画面を開きました');
return event;
});

garoon.api('/api/v1/schedule/events/1', 'GET', {}, function(resp) {
console.log(2);
console.log(resp);
}, function(err) {
console.log(err);
});

— 追記
Garoon パッケージ版 v5.0.0

takedomin さん

はじめまして。ひよこです。

挙動を確認したのは、どの画面に対しどんな操作をおこなったときですか?

console.log(1) が出力されるタイミングは、「予定の登録画面を開いたとき」です。
なぜなら、console.log(1) は schedule.event.create.show (予定の登録画面を開いたときのイベント)のイベントハンドラに登録した処理だからです。
イベントハンドラは、以下の function(event){ … } の部分です。

garoon.events.on('schedule.event.create.show', function(event) {
// ここに予定の登録画面を開いた時に行いたい処理を書く
return event;
});

console.log(0) や console.log(2) は、イベントを指定していないので、
JavaScript ファイルが読み込まれた時(Garoon のスケジュール画面だったらどこでも?)に実行されます。

 

予定を登録したとき(登録ボタンを押した後)であれば、schedule.event.create.submit を使わないといけません。

garoon.events.on('schedule.event.create.submit', function(event) {
// ここに予定の登録ボタンが押されたときに行いたい処理を書く
console.log(1);
return event;
});

他の画面を開いたときやその画面のボタンをクリックしたタイミング、であれば Garoon JavaScript API 一覧 のイベント に載っています。

また、1点別件ですが、コーディングガイドラインにあるように、カスタマイズのコードは即時関数でくくってあげましょう。
上のリンクは kintone のものですが、Garoon も共通です。
理由としては、即時関数の中に書かないと、Garoon やブラウザが持っている変数を上書きしてしまう可能性があって、Garoon が動かなくなる恐れがあるからです。

(function() {
// ここから

garoon.events.on('schedule.event.create.submit', function(event) {
return event;
});

// ここまでの間にコードを書く
})();

 

ひよこさん

ご返信ありがとうございます。記述足らずですみません。

イベントの発火タイミングが

・schedule.event.create.show:予定の登録画面を開いたとき
・schedule.event.create.submit:予定を登録したとき(登録ボタンを押した後)

であることは理解しております。
また、ご指摘の即時関数には入れたり外してみたりいずれもテストしているのですが。。うまくいかず。

仮に以下のような events.js ファイルを作成し、

(function() {
console.log('js start');

garoon.events.on('schedule.event.create.show', function(event) {
console.log('schedule.event.create.show');
return event;
});

garoon.events.on('schedule.event.create.submit', function(event) {
console.log('schedule.event.create.submit');
return event;
});

console.log('js end');
})();

以下のように設定しました。

ここで、スケジュールのペンアイコンをクリックして予定登録画面に遷移すると、 js start, js end はコンソールに出力されますが、イベントの中身は発火していません。
この後登録ボタンを押して予定登録時も同様に発火しません。

なお、Garoon Version は 5.0.0 です。

console logはDOMレンダリング後に出力されているように見えます。もしかすると、イベントが発行された後にgaroon.eventsは実行されているのでしょうか。。

takedomin さん

返信おそくなってすみません。

takedomin さんのコードを貼って実行してみたのですが、それぞれ以下が表示されました。
クラウド版なのですが、この JS API は Garoon v5.0.0 でも存在するので…

・スケジュール登録画面を表示したときは schedule.event.create.show
・スケジュールの登録ボタンを押したときは schedule.event.create.submit
※ 画面遷移を伴うので、Chrome だと「Preserve log」にチェックが必要です。

各イベントのイベントハンドラに debugger を入れると、一時停止すると思うのですがどうでしょうか?

(function() {
garoon.events.on('schedule.event.create.show',function(event) {
 console.log('schedule.event.create.show');
debugger;
 returnevent;
});
})();

 

ひよこ さん

ご返信ありがとうございます。

全体のカスタマイズ “システム管理(基本システム)>カスタマイズ” ではなく、各アプリケーションのカスタマイズから実行することによって、上記イベントを取得することができました。

パッケージ版 (v5.0.0) のみの挙動かもしれませんが、全体では発火しないようです。

 

対応ありがとうございました。

追記:

各アプリケーションのカスタマイズに何らかの設定(空であっても)をしていれば、
全体カスタマイズのJSでもイベントは発火し、取得することができました。

JSの配置をみると、全体カスタマイズを先に読み込んで、
その後にそれぞれのカスタマイズを読んでいるようなので、
イベント内容が上書きされているように見えます。