新規投稿
フォローする

async/awaitのイベントについてです。

こちらの処理を実装したいと思っています。
内容としては、別アプリと当アプリのappleidが一致している時、Gmailを取得してくる。
取得してきたGmailをGmailBOXに格納したいです。
 
2つ目のawaitのあたりでエラーとなって、赤線が出力されてしまっています。
awaitを外してみると、Uncaught (in promise) KintoneRestAPIError: [404] [GAIA_RE01] 指定したレコードが見つかりません。 と出力されてしまっています。
 
どのようにしたらよろしいでしょうか。
 
ご教授願います。
 
 
(function () {
    'use strict';

 

    kintone.events.on(['app.record.detail.show', 'app.record.create.submit'], async (e) => {

 

        const APP_ID = 5;
        const record = e.record;
        const APPLE = record.lbc_office_id.value;
        const query = 'my_apple_id = "' + APPLE + '"'

 

        // 一致する時、条件を指定する。
        const appleID = {
            'app': APP_ID,
            'query': query,
        };
        console.log(appleID);

 

        // レコード一括取得のために、recordsにする。
        await kintone.api(kintone.api.url('/k/v1/records', true), 'GET', appleID, (resp) => {
            console.log(resp);
            // 当アプリとAPP_IDの条件が一致する時、GmailAddressを取得して来る。
            let Gmail = resp.records[0]['GmailAddress'].value
            window.alert(Gmail + ' を取得しました');

 

            const parameter = {
                app: kintone.app.getId(),
                id: Gmail,
                record: {
                    GmailBox: {
                        value: Gmail
                    }
                }
            }

 

            // 当アプリのフィールドをセットする。
            let GmailBOX = record['GmailBox'].value;

 

            const client = new KintoneRestAPIClient();
            console.log(parameter);

 

            if (!GmailBOX) {
                try {
                    await client.record.updateRecord(parameter);
                    window.alert('Gmailの取得・更新に成功しました。');
                } catch (error) {
                    window.alert('Gmailの取得・更新に失敗しました。');
                } finally {
                    return e;
                }
            } else {
                return e;
            }
        });
    });
})();
1

1件のコメント

Avatar
mls-hashimoto

awaitがエラーになっているのは、async function内で使われていないからです。またAPI処理をasync/awaitで実行する場合は同期的に書いた方が良いでしょう。

        // レコード一括取得のために、recordsにする。
        await kintone.api(kintone.api.url('/k/v1/records', true), 'GET', appleID, (resp) => {

        // レコード一括取得のために、recordsにする。
      let get = await kintone.api(kintone.api.url('/k/v1/records', true), 'GET', appleID);

console.log(get.records);

 

APIがエラーになっているのは

            const parameter = {
                app: kintone.app.getId(),
                id: Gmail,

この部分(リクエストボディ)のidの指定に問題があるのではないかと思います。

idにはレコード番号を指定する必要があるので、Gmailという変数(APIで取得したレコードのGmailAddressというフィールドの値)は恐らく違うのではないかと思います。

リクエストボディについてはこちら を参考にして下さい。

mls-hashimotoにより編集されました
0
サインインしてコメントを残してください。