関連テーブルのレコード件数の取得がうまくいかない。

関連レコードの件数を取得するワザを参考に、取得した件数をスペースではなく数値フィールドにセットするというコードを書いています。

テーブルの検索は正しく動き、値をセットするところに仕込んだconsole.logでも意図した値が出力されているのですが、値がセットされません。

 

/*
* 関連テーブルのレコード件数を取得する
*/
(function() {
'use strict';

// 動作要件をフィールドコード文字列で指定する
var code_of_key = 'schools_code'; // どのフィールドをキーとして検索した
var code_of_table = 'all_schools'; // どのテーブルの行数を
var code_of_target = 'schools_count'; // どのフィールドの値としてセットするのか

// 発動イベントの設定
var create_changed = 'app.record.create.change.' + code_of_key;
var edit_changed = 'app.record.edit.change.' + code_of_key;
var events = [create_changed, edit_changed];

kintone.events.on(events, function(event) {
var record = event.record;
var value_of_key = event.record[code_of_key].value
var query = code_of_key + ' = ' + '"' + value_of_key + '"';

fetchRecords(query).then(function(records) {
// ここでconsole.log(records);とすると正しい値が出力されている
record[code_of_target]['value'] = records.length;
// ここでconsole.log(record[code_of_target]['value']);とすると正しい値が出力されている
return event;
});

// 関連レコードを検索・取得
function fetchRecords(query, opt_offset, opt_limit, opt_records) {
var Id = kintone.app.getRelatedRecordsTargetAppId(code_of_table);
var offset = opt_offset || 0;
var limit = opt_limit || 100;
var allRecords = opt_records || [];
var params = {app: Id, query: query + ' limit ' + limit + ' offset ' + offset};

return kintone.api('/k/v1/records', '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;
});
}
});
})();

デバッグコンソールには520番のエラーが表示されていて、

{"code":"CB_JH01","id":"n3wkYeVVUlJ2vmBG1dJJ","message":"認証に失敗しました。セッション認証には、「X-Requested-With」ヘッダーが必要です。"}

というように表示されています。

他のサンプルコードを元にしたカスタマイズでは特にこんなこと言われたことがない(気づいてないだけかもしれませんが) & ググってもピンと来る情報がなく、どう対処したら良いのか途方に暮れています。どなたか、お力をお貸しいただけないでしょうか。

西川さん

すみません、セッション認証の失敗についてはわかっていませんが、1点気になった部分について指摘させて頂きます。

fetchRecords(query).then(function(records)内で
events.onのeventオブジェクトに対して、変更をかけ、returnしていますが、
提示した頂いたコードですと、変更が反映されません。

反映させるためには
kintone.app.record.get()とkintone.app.record.set(record)を使ってrecordの値を書き換える必要があります。
https://developer.cybozu.io/hc/ja/articles/201942014#step2
こちらを参考に実装してみてください。

ご指摘のアプローチに実装を切り替えたところ、うまく反映されました。ありがとうございます!

実装できたとのことで、よかったです^^