関連レコードの集計値を特定のフィールドに返したい

初心者です。

どなたかご教示いただきたく。。

 

サンプルを用いて、関連レコードを集計して、スペースに表示することは実装できました。

その集計値を「合計」(という)フィールドに返したいのですが、うまくいきません。

集計値を取ってくるまでが以下構文だと理解しているのですが、その後のアクションがわかりません。


(function() {
“use strict”;

//レコードの編集、詳細画面で適用する
var events = [
‘app.record.detail.show’,
‘app.record.edit.show’
]
kintone.events.on(events, function(event) {
var record = event.record;
var client_rid = event.recordId;
var related = kintone.app.getRelatedRecordsTargetAppId(‘関連レコード一覧’);
var offset = 0;
var loop_end_flg = false;
var records = new Array();
while(!loop_end_flg){
var query = ‘顧客情報レコード番号="’ + client_rid +
‘" limit 100 offset ’ + offset;
query = encodeURIComponent(query);
var appUrl = kintone.api.url(’/k/v1/records’) + ‘?app=’+ related + ‘&query=’ + query;

// 同期リクエストを行う
var xmlHttp = new XMLHttpRequest();
xmlHttp.open(“GET”, appUrl, false);
xmlHttp.setRequestHeader(‘X-Requested-With’,‘XMLHttpRequest’);
xmlHttp.send(null);

//取得したレコードをArrayに格納
var resp_data = JSON.parse(xmlHttp.responseText);

if(resp_data.records.length > 0){
for(var i = 0; resp_data.records.length > i; i++){
records.push(resp_data.records[i]);
}
offset += resp_data.records.length;
}else{
loop_end_flg = true;
}
}

var amount = 0;
for (var i = 0; i < records.length; i++) {
amount = amount + parseFloat(records[i].受注金額.value);

}

 

※一部抜粋

**nobuharu1111**さん

非常にベタなやり方ですが、下記の方法でも更新できると思います。

var amount = 0;
for (var i = 0; i < records.length; i++) {
amount = amount + parseFloat(records[i].受注金額.value);

}

var appid = kintone.app.getId();
var recid = kintone.app.record.getId();

var Param = {
“app”:appid,
“id”:recid,
“record”:{
“受注金額”:{
“value”: amount
},
},
};

kintone.api(“/k/v1/record”,
“PUT”,Param,
function(resp){
alert(“登録成功”);
},
function(resp){
alert(“登録エラー”);
}
);

 

追記

更新成功時に画面の再読込が必要かも。。。

amuroさん

ありがとうございます。

早速試します。

amuroさん

ありがとうございます。

データを返すところまで問題なく動きました。

ご推察の通り、再読み込みが必要でした。

そのこと自体は問題がないのですが、レコード編集を行う手順を想定しているため、解消したいです。

方法ございますでしょうか?


エラー

  • レコードを再読み込みしてください。編集中に、ほかのユーザーがレコードを更新しました。
  • (GAIA_UN03 1505999166-113130855)

 

nobuharu1111さん

更新成功時の画面再読込みの場合、そのままだとループするので

下記の方法で試してみて下さい。

 

if ( record.受注金額.value != amount){

var appid = kintone.app.getId();
var recid = kintone.app.record.getId();

var Param = {
“app”:appid,
“id”:recid,
“record”:{
“受注金額”:{
“value”: amount
},
},
};

kintone.api(“/k/v1/record”,
“PUT”,Param,
function(resp){
location.reload(true);
alert(“登録成功”);
},
function(resp){
alert(“登録エラー”);
}
);

};

amuroさん

ありがとうございます。

値チェックがされ、問題なく動きました。

この記事に対して関連質問させてください。

この記事を参考に関連テーブルの数値をJavaScriptで集計し、文字フィールドに表示することができました。

その際、詳細画面で1レコードごとに再読み込みしていますが、アプリごとに一括で更新することは可能でしょうか。

1レコードごとに開くのは過去の分も含め業務的に現実的ではなくなってきました。