何を実現したいのかを書きましょう
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;
}