ボタンで他アプリ一括クリア

こんにちは

javascript初心者です

現在ボタンを押した時、他アプリ(スポットアプリ)のすべてのレコードのスポット金額(フィールドコード)、消費税(フィールドコード)、税込価格(フィールドコード)の値を空白にしたいと考えています。

恐らく現在リクエストエラーになっています。2週間ほどかチャレンジしていますが上手くいきません。どなたか詳しい方ご教授お願いします。

以下のものを参考にしました

https://developer.cybozu.io/hc/ja/community/posts/4408894739737-%E4%BB%96%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AE%E6%9B%B4%E6%96%B0 

https://developer.cybozu.io/hc/ja/articles/201941784#step2 

 

(function() {
'use strict';
kintone.events.on('app.record.index.show', function(event) {
if (document.getElementById('my_index_button') !== null) {
return;
}

//テキストボックスの配置
var myIndexButton = document.createElement('button');
myIndexButton.id = 'my_index_button';
myIndexButton.innerText = 'リセット';
myIndexButton.style.fontSize = '28px';
myIndexButton.style.textAlign = 'center';
myIndexButton.style.color = '#3399ff';
kintone.app.getHeaderMenuSpaceElement().appendChild(myIndexButton);

//クリック時
myIndexButton.onclick = function() {
var record = event.record;
var appId = 116;

var paramPut = {
'app': appId,
'records': [
{
//"id": appId,
 "record": {
  "スポット金額": {
  "value": ""
  },
  "税込価格": {
"value": ""
},
"消費税": {
"value": ""
}
}
},
]
};
alert(paramPut);
return kintone.api(
kintone.api.url('/k/v1/record', true), 'PUT', paramPut).then(function(resp) {
return event;
}).catch(function(error){
console.log('post error', error);
return event;
});
};
});
})();

梢さん

お世話になっております。

レコードの更新(1件)「‘/k/v1/record’」とレコードの一括更新「‘/k/v1/records’」が混ざりあったような書き方になってしまっているかと思います。
最終的に一括クリアがしたいかと思いますので、レコードの一括更新「‘/k/v1/records’」を用いると良いかと思います。
43行目あたりで’/k/v1/record’としていると思いますが、'/k/v1/records’に変更するとよいかと思います。

また、26行目あたりでコメントアウトしているparamPut.records[0].idにappIdを指定しようとしているかと思いますが、こちらは存在するレコードのレコード番号を入力すると良いかと思います。

江田様

お世話になっています

 

無事値のクリアできました。本当に助かりました。

更新するレコードはidを1件、1件指定しなければ値のクリアはできませんでしょうか?

kintoneカスタムマイズフォーラム等検索、for文等で作成しましたが、思い通りの動きをしません。

もしできるのであればご教授お願いします。

 

梢さん

お世話になっております。

> 更新するレコードはidを1件、1件指定しなければ値のクリアはできませんでしょうか?
はい、レコード一括更新実行時のパラーメータとして、idは1件ずつ指定する必要があります。
ただし、手入力でパラーメータを作成せずとも、プログラム内で作成することはできます。

レコード一括取得APIで、他アプリに存在するレコード番号を取得し、ループを使ってレコード一括更新用のパラメータを作成するとよいかと思います。
下記などが参考になるかと思います。
https://developer.cybozu.io/hc/ja/articles/201883830
https://developer.cybozu.io/hc/ja/articles/202331474#step2

江田様

お世話になっております。

 

ありがとうございます。レコード番号の取得はできましたが、ループを利用しますとエラーが出ます。

何度かfor文を利用しましたが、多くの場合

return kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘PUT’, paramPut, function(resp) {

または

.catch(function(error){

の部分でエラーが出ます。

何か原因はわかりますでしょうか?

ご教授していただければ幸いです。

(function () {
"use strict";
kintone.events.on('app.record.index.show', function (event) {
if (document.getElementById('my_index_button') !== null) {
return;
}

var myIndexButton = document.createElement('button');
myIndexButton.id = 'my_index_button';
myIndexButton.innerText = 'リセット';
myIndexButton.style.fontSize = '28px';
myIndexButton.style.textAlign = 'center';
myIndexButton.style.color = '#3399ff';

// ボタンクリック時の処理
myIndexButton.onclick = function() {
var appId = 116;

kintone.api('/k/v1/records', 'GET', {app: appId}, function(resp) {
var paramPut = {
"app": appId,
"records": []
};
for (var i = 0; i < resp['records'].length; i++) {
paramPut['records'][i] = {
"id": resp['records'][i]['レコード番号']['value'],
"records": [
{
"id": i,
 "record": {
  "スポット金額": {
  "value": ""
  },
  "税込価格": {
"value": ""
},
"消費税": {
"value": ""
}
}
},
]
}
}

return kintone.api(
kintone.api.url('/k/v1/records', true), 'PUT', paramPut).then(function(resp) {
return event;
}).catch(function(error){
console.log('post error', error);
return event;
});
});
}
kintone.app.getHeaderMenuSpaceElement().appendChild(myIndexButton);
});
})();

梢さん

お世話になっております。

paramPut[‘records’][i]に代入している値に問題があるかと思います。
現状のコードですと、paramPutがrecordsプロパティを入れ子で持つような構造になるかと思います。

 

paramPutをconsole.logなどで出力してみて、下記のリクエストボディの構造と一致しているか確認してみるとよいかと思います。

https://developer.cybozu.io/hc/ja/articles/201941784#step2

江田様

お世話になっております。

 

ありがとうございます。

無事に動作しました。

江田様のおかげでGETやPUTの利用のしかた勉強になりました。

今後ともよろしくお願いします