フィールドへのデータ挿入につきまして

品目、数量、価格というフィールドがある別アプリから、品目と数量で検索したらマッチしたレコードを取得してテーブルに反映させたいのですがうまくいきません。
return eventでテーブルのフィールドに反映されるという認識なのですが間違っていますでしょうか?
どうかご教授ください。

(function($) {
"use strict";
//品目と数量が変わったら別アプリからデータ取得
kintone.events.on(['app.record.create.change.品目','app.record.create.change.数量'], function(event) {
var record = event.record;
var table_row = event.changes.row;

//品目と数量をもとに検索
var hinmoku = table_row["value"]['品目']["value"];
var suryou = table_row["value"]['数量']["value"];
var query = '品目 in ("' +hinmoku+ '") and 数量 in ("' +suryou+ '")';

var params = {
"app":18,
"query": query
};


kintone.api(
kintone.api.url('/k/v1/records', true),
'GET',
params,
function(resp) {

var readdata = resp["records"];

for (var i = 0; i < readdata.length; i++) {

table_row["value"]['価格']["value"] = readdata[0]['価格']["value"];

//値は取れているのですが、フィールドに反映されません。
//console.log(table_row["value"]['価格']["value"]);
return event;
}
}
);
});
})(jQuery);

abe さん

はじめまして。ひよこです。

change イベントでREST API を利用するときは、Promise オブジェクトや非同期処理での return eventが効きません。

そのため、 kintone.app.record.get で編集中のレコードのデータを取得し、値を書き換えた後、kintone.app.record.set を利用してフィールドの値を変更します。
kintone.app.record.get https://developer.cybozu.io/hc/ja/articles/201942014#step1
kintone.app.record.set https://developer.cybozu.io/hc/ja/articles/201942014#step4

こんな風にしたら、テーブルに反映できました。

(function($) {
"use strict";
// 品目と数量が変わったら別アプリからデータ取得
kintone.events.on( ["app.record.create.change.品目", "app.record.create.change.数量"], function(event) {
var table_row = event.changes.row;

// 品目と数量をもとに検索
var hinmoku = table_row["value"]["品目"]["value"];
var suryou = table_row["value"]["数量"]["value"];
var query = '品目 in ("' + hinmoku + '") and 数量 in ("' + suryou + '")';

var params = {
app: 18,
query: query
};

// 変更行の行番号を取得する
var index = getRowIndex(event, "Table");

kintone.api(kintone.api.url("/k/v1/records", true), "GET", params, function(resp) {

var readdata = resp["records"];

// 検索結果が0件なら書き換えしない
if (readdata.length === 0) {
return event;
}

// フィールドの値を書き換える
var rec = kintone.app.record.get();
rec.record.Table.value[index]["value"]["価格"]["value"] = readdata[0]["価格"]["value"];
kintone.app.record.set(rec);

return event;
}
);
}
);

// 変更行を取得する関数
// table_field は テーブルのフィールドコードを文字列で指定する
function getRowIndex(event, table_field) {
var row = event.changes.row;
var tbl = event.record[table_field].value;
for (var i = 0; i < tbl.length; i++) {
if (row === tbl[i]) {
return i;
}
}
return -1;
}
})(jQuery);

ひよこ様

ご返答いただきありがとうございます。
お教えいただいた方法で見事に希望する形で動きました。
kintone.app.record.getとkintone.app.record.setをしなければならないこと勉強になりました。
テーブルの場合は行番号を指定しなければならないことも勉強になりました。
kintone学習駆け出しですが楽しんで学んでいけてます。
この度はありがとうございました。