背景・実現したいこと
ワークフロー承認後にスケジュール登録をAPIを利用して実施しております。
その際、処理は完了するのですが必ずユーザがログアウトしてしまいます。(ログイン画面が表示される)
ログイン画面を出さずに処理を続ける方法をご教授頂きたくよろしくお願いします。
利用したソースコード
利用しているGaroonのイベントと実際のソースサンプルは以下の通りです。
ちなみに、以下の記載したイベントのタイミング出なくても(コンソールで実施した場合でも)ログアウト処理されてしまいます。
Garoonの登録に利用しているイベント
workflow.request.approve.submit.success
利用しているAPI
/g/api/v1/schedule/events
https://developer.cybozu.io/hc/ja/articles/360000425163#step1
API実行用のクラス(上記イベントで実施するため同期処理で実施しています)
class CommunicationApi {
constructor() {
this.token = garoon.base.request.getRequestToken();
// 完了コード管理
this.ajax_complete = [];
// 時間間隔
this.check_interval = 1000;
}
/**
* JSON取得
* @param method メソッドタイプ(POST, GET)
* @param url APIエンドポイント
* @param param パラメータ
* @param headers ヘッダー(key: ヘッダー名, value: 値)
* @param func_success 成功時コールバック
* @param func_error 失敗時コールバック
* @param add_arg 追加引数
* @param complete_code 完了コード(非同期最終同期処理用)
* @param success_code 成功判定用ステータスコード(デフォルト200, 201を許可)
* @param async 非同期フラグ
*/
get_json(method, url, param, headers, func_success, func_error, add_arg, complete_code, success_code = [200, 201], async = true) {
let xhr = new XMLHttpRequest();
xhr.open(method, url, async);
this.ajax_complete[complete_code] = false;
Object.keys(headers).forEach(key => {
xhr.setRequestHeader(key, headers[key]);
});
xhr.onreadystatechange = () => {
if (xhr.readyState === 4 && success_code.indexOf(xhr.status) >= 0) {
let result = JSON.parse(xhr.response);
func_success(result, add_arg);
if (complete_code != null) {
this.ajax_complete[complete_code] = true;
}
} else if (xhr.readyState === 4 && success_code.indexOf(xhr.status) === 0) {
func_error(xhr, add_arg);
if (complete_code != null) {
this.ajax_complete[complete_code] = true;
}
}
}
if (param !== null) {
xhr.send(JSON.stringify(param));
} else {
xhr.send();
}
}
/**
* 非同期チェック(非同期処理)
* @param after_func 完了後の処理
*/
check_ajax(after_func = null) {
let ajax_check = setInterval(() => {
let complete_flg = true;
Object.keys(this.ajax_complete).forEach(key => {
if (!this.ajax_complete[key]) {
complete_flg = false;
}
});
if (complete_flg) {
clearInterval(ajax_check);
if (after_func !== null) {
after_func();
}
}
}, this.check_interval);
}
}