inoue1
(inoue1)
1
アプリA のレコード登録時に、アプリB へレコードを新規登録/更新/削除を行います。
アプリA の利用ユーザーが、アプリB への権限がない場合もあるため、アプリB の APIトークンにレコード閲覧・追加・編集・削除の権限を与えて、kintone.proxy() で REST API を呼んでいます。
新規登録、読み出し、更新は問題なく行えるのですが、削除がどうしてもできません。原因がわかりましたらご教授ください。
const apiUrl = kintone.api.url('/k/v1/records.json', true);
const query = `?app=45&ids[0]=9`;
const header = {
'X-Cybozu-API-Token': API_TOKEN,
'Content-Type': 'application/json',
};
resp = await kintone.proxy(apiUrl + query, 'DELETE', header, {});
上記コードは、
{
“code”: “CB_IL02”,
“id”: “iDrZ2QPcSFbhOc2yFtRS”,
“message”: “不正なリクエストです。”
}
というエラーになります。
試しに、curl で以下を実行すると、正常に削除できます。
curl -X DELETE "https://xxxx.cybozu.com/k/v1/records.json" \
-H 'X-Cybozu-API-Token: API_TOKEN' \
-H 'Content-Type: application/json' -d '{ "app": 45, "ids": [9] }'
こんにちわ。
kintone.proxyはkintone外部のAPIを使う場合に使用します。
外部のAPIを実行する - cybozu developer network
アプリは違えど同じkintoneなら下記のような感じでいかがでしょうか?
(function () {
"use strict";
// レコードの表示イベント
kintone.events.on("app.record.detail.show", async function (event) {
const appId = 45; // アプリID
const recordId = [9, 10, 11]; // 削除するレコードID
const apiToken = 'YOUR_API_TOKEN'; // APIトークン
// kintone APIのURLを取得
const url = kintone.api.url('/k/v1/records', true);
const headers = {
"X-Cybozu-API-Token": apiToken,
"Content-Type": "application/json"
};
// 削除するレコードの情報を設定
const body = {
app: appId,
ids: recordId
};
try {
// レコード削除のリクエストを送信
const response = await fetch(url, {
method: 'DELETE',
headers: headers,
body: JSON.stringify(body)
});
// レスポンスが正常でない場合はエラーをスロー
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
// レスポンスデータを取得
const data = await response.json();
console.log('Record deleted successfully:', data);
} catch (error) {
// エラーメッセージをコンソールに表示
console.error('Error deleting record:', error);
}
});
})();
3 Likes
inoue1
(inoue1)
3
おはようございます
ご教授ありがとうございます。
kintone.api と kintone.proxy しか頭にありませんでした!
早速試してみます。
inoue1
(inoue1)
4
うまくいきました!
ありがとうございました。
しかし、このアプリのJS全体のコードとしては、自アプリの特定のフィールドと相手先アプリの特定のフィールドとの比較により、
レコード追加・レコード更新・レコード削除を行うものですが、
レコード検索・取得(GET)、レコード追加(POST)・レコード更新(PUT)は proxy() で問題なく行えており、レコード削除(DELETE)のみダメだった理由が不明です。
これについては、また自分で調べてみます。
とりあえず、他の 3つの proxy() を fetch() に変えて、問題なければそれで完成とします。
ありがとうございました。
inoue1
(inoue1)
5
補足です。
同じ kintone のゲストスペース内のアプリからも実行する場合があり、
const url = kintone.api.url(‘/k/v1/records’, true);
では、「 /guest/123/ 」が入ってしまうので、やむを得ず
const url = ‘https://xxxxx.cybozu.com/k/v1/records’;
に変えました。
ko_ji
(ko_ji)
6
こんにちは。
解決した後にすみません。
kintone.proxy で DELETE のみダメだった理由についてですが、
リクエストボディを指定しない状態で、“Content-Type” を
指定したことが原因かと思われます。
リクエストヘッダーから “Content-Type” を削除することで、
エラー回避することができるかと思いますよ。
3 Likes
inoue1
(inoue1)
7
ありがとうございます!!
試してみたところ、kintone.proxy() で Content-Type を削除したら正常に削除できました。
盲点でした。
ありがとうございます。
2 Likes
system
(system)
Closed
8
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。