kintoneと任意のgoogleカレンダーとの連携について教えて下さい

こちらの記事を参考にカスタマイズを行っています。

https://developer.cybozu.io/hc/ja/articles/115005646066-kintoneのイベント-フェアカレンダーの日程をGoogleカレンダーに公開しよう-

<質問>

記事内にあるapi_keyやclient_idをkintoneユーザー情報から取得して利用したいと思っています。そのため、初期化処理のタイミング等が記載通りでないためか、エラーとなっています。

<エラー文言>
Unhandled Promise Rejection: TypeError: undefined is not an object (evaluating 'gapi.client.init')

gapiの処理は読み込み時に行わないと行けないのでしょうか?

function initClient (userInfo) {
gapi.client.init({
'apiKey':userInfo.api_key,
'clientId':userInfo.client_id,
'scope':SCOPE,
'discoveryDocs':DISCOVERY_DOCS,
}, (error) => {
alert('Googleへの認証に失敗しました。: ' + error);
});
};
  
async functionpublishEvent(record) {
// レコードのデータの取得
const userCode = record.code.value;
// user情報取得
const userInfo = awaitgetUserInfo(userCode)

// // APIクライアントとOAuth2ライブラリのロード
gapi.load('client', initClient(userInfo));

〜略〜

}

// レコード登録後イベント
kintone.events.on(['app.record.create.submit.success', 'app.record.edit.submit.success'], (event) => {
publishEvent(event.record);
});

| |
| | |

initClientにuserInfoがundefinedでわたってるかもですね?

パット見はわかりませんが、publishEvent関数はPromiseを返すのに(非同期処理をしてるのに)、 イベントハンドラではpromiseをreturnしてないのは少なくとも直したほうがよさそうです。

現状は処理が終える前にページが遷移することになってしまうのでそれが原因の可能性もあります。

async/awaitで書くとこんな感じです

kintone.events.on([‘app.record.create.submit.success’, ‘app.record.edit.submit.success’], async (event) => {
   await publishEvent(event.record);
   return event;
});

ありがとうございます。

試してみます。