kintoneアプリからGASへの連携について

何を実現したいのかを書きましょう

kintoneAアプリ更新時にwebhookでGASを起動し、
kintoneAアプリのテーブル項目をKEYに
kintoneBアプリを更新する処理を作成しています。
※外部からの更新があるのでGASを使用する予定です。

発生した問題やエラーメッセージを具体的に書きましょう

★GASのエディター実行では正しく動作するのですが
webhookの処理ではエラーが発生するようで
kintoneB別アプリは更新されません。

・テーブル項目を強制的に固定値に設定すると更新されますので
webhookの処理とAPIは正しく設定されているようです。
・kintoneAアプリのテーブルデータをGAS取込みできるコードが知りたいです。

実行したコードをコピー&ペーストしましょう

コードをここに入力または貼り付け
async function doPost(e) {
  try {
    var requestBody = JSON.parse(e.postData.contents);
    var tableData = requestBody.record['会議状況TBL']['value'];
    console.log('tableData:', tableData);
    Logger.log('** Webフックから送信された 結果 ** ');
    // 役員会議申込DBのアプリID
    var meetingApplicationAppId = XXX; // あなたのアプリのIDに置き換えてください
    const subdomain = "XXXX"; //kintone URLの https://***.cybozu.com における"***"の部分
    const apps_kin = {
      YOUR_APPLICATION_kin: { appid: 1XX, name: "TXX_役員会議申込DB", token: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" }
      //                                        
    };
    const manager_kin = new KintoneManager.KintoneManager(subdomain, apps_kin);

    // すべての非同期処理を待ってから次の処理に進む
    await Promise.all(tableData.map(async (item) => {
     var meetingNumber = item['役員会議申込NO']['value'];
     var attendance = item['参加要否']['value'];
     //var meetingNumber = '091023_0002'
     //var attendance = '参加'
     //var meetingNumber = tableData[0]["役員会議申込NO"]['value'];
     //var attendance = tableData[0]["参加要否"]['value'];
      //"参加要否": { "value": attendance },
      try {
        const resp = await findRecords(manager_kin, 'YOUR_APPLICATION_kin', '役員会議申込NO="' + meetingNumber + '"');

        Logger.log('2. findRecords 成功:', resp);
        if (resp.records.length > 0) {
          const recordId = resp.records[0].レコード番号.value;

          // レコードを更新
          var updateData = [
            {
              "id": recordId, // 更新するレコードのID
              "record": {
                "参加要否": { "value": attendance }
              }
            }
          ];
          
          // レコードを非同期で更新
          await updateMeetingApplicationRecord(manager_kin, 'YOUR_APPLICATION_kin', recordId, updateData);
        }
      } catch (error) {
        // エラーが発生した場合の処理を追加
        Logger.log('findRecords エラー:', error);
      }
    }));

    Logger.log('3. findRecords 後のコード');
  } catch (error) {
    Logger.log('エラー:', error);
  }
}

  function updateMeetingApplicationRecord(manager_kin, appName, recordId, updateData) {
    const res_kinkou = manager_kin.update("YOUR_APPLICATION_kin", updateData);//kintone レコードの更新

    const code = res_kinkou.getResponseCode();
    if (code == 200) {
      Logger.log("TXX_役員会議申込DB");
      Logger.log(code);
      Logger.log(res_kinkou);


    } else {
      Logger.log("TXX_役員会議申込DB NG エラーコード=" + code);
      Logger.log(code);
      Logger.log(res_kinkou);
    }
  }

  async function findRecords(manager_kin, appName, query) {
    try {
      // サブドメイン、アプリID、APIトークンを設定
      const subdomain = 'XXXX'; // あなたのKintoneのサブドメインに置き換えてください
      const appId = XXX; // 対象のアプリケーションのIDに置き換えてください
      const apiToken = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; // あなたのAPIトークンに置き換えてください

      // APIのベースURLを構築
      const baseUrl = `https://${subdomain}.cybozu.com/k/v1`;

      // レコードを取得するためのAPIエンドポイントを構築
      const endpoint = `records.json?app=${appId}&query=${encodeURIComponent(query)}`;

      // APIリクエスト用のオプションを設定
      const requestOptions = {
        method: 'GET',
        headers: {
          'X-Cybozu-API-Token': apiToken,
        },
      };

      // 完成したAPIのURLを構築
      const url = `${baseUrl}/${endpoint}`;

      // APIリクエストを送信
      const response = UrlFetchApp.fetch(url, requestOptions);

      // レスポンスデータを取得
      const responseData = JSON.parse(response.getContentText());


      // コールバック関数を呼び出す
      //options.success(responseData);
      return responseData;

      // レスポンスデータを返す(オプション)
      return responseData;
    } catch (error) {
      // エラーが発生した場合の処理を追加(例: エラーログの出力)
      Logger.log('エラー:', error);
      // エラーを投げる(オプション)
      throw error;
    }
    const response = await UrlFetchApp.fetch(url, requestOptions);

    const responseData = JSON.parse(response.getContentText());

    return responseData;
  }

テーブル項目の設定を下記に変更するとエラーとならなかったので
ご報告させて頂きます。

var meetingNumber = item.value[‘役員会議申込NO’].value;
var attendance = item.value[‘参加要否’].value;

「いいね!」 1

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。