新規投稿
フォローする

関連レコードの数を取得して、フィールドにセットしたい

いつもお世話になっております。

関連レコード数を取得して、取得した数値をフィールドにセットしたいのですが、ドツボにはまってしまっております。有識者の方、どうかご教授いただけませんでしょうか。

(function() {
'use strict';

// 関連レコードの絞り込みに利用するフィールドコード
var FIELDNAME_A = 'facility_name'; // Aアプリ
var FIELDNAME_B = 'facility_name'; // Bアプリ
var num = "";

kintone.events.on(['app.record.edit.show', 'app.record.detail.show'], function (event){

// var record = event.record;
// record['case_num'].value = num;

// 関連レコードで取得しているアプリの対象レコードを全件取得
function fetchRecords(opt_Field, opt_offset, opt_limit, opt_records) {
var Id = kintone.app.getRelatedRecordsTargetAppId('relation');
var offset = opt_offset || 0;
var limit = opt_limit || 100;
var allRecords = opt_records || [];
var params = {app: Id, query: opt_Field + ' order by レコード番号 asc limit ' + limit + ' offset ' + offset};
return kintone.api(kintone.api.url('/k/v1/records', true), 'GET', params).then(function(resp) {
allRecords = allRecords.concat(resp.records);
if (resp.records.length === limit) {
return fetchRecords(opt_Field, offset + limit, limit, allRecords);
}
return allRecords;
});

}

// 関連レコードの「表示するレコードの条件」に合わせてクエリを作成
var CompanyNameValue = event.record[FIELDNAME_A].value;
var opt_Field = FIELDNAME_B + '=' + '"' + CompanyNameValue + '"';

fetchRecords(opt_Field).then(function(records) {
// スペースフィールドにBアプリのレコード数を反映
num = records.length;
var divTotalAmount = document.createElement('div');
divTotalAmount.style.fontWeight = 'bold';
divTotalAmount.style.textAlign = 'center';
divTotalAmount.style.fontSize = 12;
divTotalAmount.innerHTML = num;
kintone.app.record.getSpaceElement('num').appendChild(divTotalAmount);

return event;
});


var id = event.record["レコード番号"].value;
window.alert(id);
var body = {
'app': kintone.app.getId(),
'id': id,
'record': {
'case_num': {
'value': num
}
}
};

kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', body, function(resp) {
// success
console.log(resp);
}, function(error) {
// error
console.log(error);
});


});


})();

関連レコードの数を取得し、スペースフィールドに表示するところまでは表示されたのですが、その後の処理がわかりません。

色々と調査したところ、PUTを使って更新処理を行わなければいけないとの記事を見たので、見様見真似でそのように入れてみたのですが、

「エラー

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

という表示が出てしまいます。(データは無事に希望するフィールドに登録されていました)

また、kintone.app.record.get / set を利用するというのをよく目にするのですが、これは現在PUTを入れている場所に入れたらいいのでしょうか?

基本的な部分の質問で申し訳ございませんが、よろしくお願いいたします。

0

4件のコメント

Avatar
Ryokke

kintone.app.record.get / setを使うなら以下の部分ですね。

fetchRecords(opt_Field).then(function(records) {
// スペースフィールドにBアプリのレコード数を反映
  var record = kintone.app.record.get().record;
num = records.length;
var divTotalAmount = document.createElement('div');
divTotalAmount.style.fontWeight = 'bold';
divTotalAmount.style.textAlign = 'center';
divTotalAmount.style.fontSize = 12;
divTotalAmount.innerHTML = num;
kintone.app.record.getSpaceElement('num').appendChild(divTotalAmount);

record['case_num'].value = num;
kintone.app.record.set({record: record});
});

 

 

Ryokkeにより編集されました
1
Avatar
Mayuko Yamamoto

Ryokke様

返信が遅くなりまして申し訳ありません。
早速試してみたところ、うまく動作いたしました!
その位置に入れればよかったんですね><
難しく考えすぎておりました。
昨日1日悩んで、本日質問してスピーディに解決できて大変助かりました!

ちなみに、現在はすでに登録されているデータを編集する場合のみ、フィールドのデータが更新されており、
新規データを登録する際は残念ながら登録できません。

新規データの場合は、フィールドデータは「PUTで登録しないと反映されない」との記事をみたのですが、
この認識は正しいでしょうか?

よろしくお願いいたします。

1
Avatar
Ryokke

Mayuko Yamamotoさん

イベントが'app.record.edit.show'の時であれば、保存ボタンをクリックすればそのまま値が保存されますので

PUTは必要ありません。

'app.record.detail.show'の場合は、新規作成画面でも編集画面でもないので

PUTで更新する必要がございます。

 

Mayuko Yamamotoさんがどのようなことを実現されたいのか、私自身ちゃんと把握できていないのであれですが(;'∀')

レコード詳細画面を開く度に、関連レコード数を更新されたいということでしょうか?

1
Avatar
Mayuko Yamamoto

Ryokke様

Mayuko Yamamotoさんがどのようなことを実現されたいのか、私自身ちゃんと把握できていないのであれですが(;'∀')
レコード詳細画面を開く度に、関連レコード数を更新されたいということでしょうか?

説明不足で申し訳ございません。
おっしゃるとおりで、レコードの詳細画面を開く度に、関連レコード数を更新したいと考えておりました。

フィールドではない方(スペースにレコード数を表示サせている方)は、レコード詳細画面を開くと記録が更新されているのですが、フィールドの方は更新されていないため、PUTでの更新が必要なのだろうか?と悩んでいた次第です。

>'app.record.detail.show'の場合は、新規作成画面でも編集画面でもないのでPUTで更新する必要がございます。

こちらの回答を頂き、明確になりました!
今回は詳細画面で関連レコード数を確認したいので、フィールドへの追加ではなく、スペースにレコードを表示する方法で対応しようと思います。

大変参考になりました!ありがとうございました!

1
サインインしてコメントを残してください。