ボタンを押したら他レコードから値を取得し書き換える機能を実装したい

編集画面でスペースフィールドに配置したボタンを押すことをトリガとし、他アプリからフィールドの値を取得し、当該レコードの値を書き換えたいです。

Error: Invalid record object. が出て実現できません。Logを取るとログには正しく参照先アプリのデータが取得できています。

実行したコードをコピー&ペーストしましょう

(function() {
  'use strict';

  var ITEMCODE_FIELD = '番号';
  var COST_FIELD     = '価格';
  var REF_APP_ID     = XXX; // 参照先アプリID
  var SPACE_ELEMENT_ID = 'fetch_space';

  kintone.events.on(['app.record.edit.show', 'app.record.create.show'], function(event) {
    var record = event.record;
    var spaceEl = kintone.app.record.getSpaceElement(SPACE_ELEMENT_ID);
    if (!spaceEl) return event;

    if (spaceEl.children.length === 0) {
      var button = document.createElement('button');
      button.textContent = '価格を取得';
      spaceEl.appendChild(button);

      button.addEventListener('click', function() {
        if (!record[ITEMCODE_FIELD].value) return;
        var queryStr = ITEMCODE_FIELD + ' = "' + record[ITEMCODE_FIELD].value + '" limit 1';
        var param = {
          app: REF_APP_ID,
          query: queryStr,
          fields: [ITEMCODE_FIELD, COST_FIELD]
        };
        kintone.api(kintone.api.url('/k/v1/records', true), 'GET', param).then(function(resp) {
          if (!resp.records || resp.records.length === 0) return;
          record[COST_FIELD].value = resp.records[0][COST_FIELD].value || 0;
          kintone.app.record.set(record);
        });
      });
    }
    return event;
  });
})();

情報が少ないためアバウトな回答で恐縮ですが、

kintone.app.record.set(record);

で書き込むためのレコード情報を

const anyParamName = kintone.app.record.get();

等で取得していないからではないでしょうか。

詳しくはレコードのゲットおよびレコードのセットあたりをご確認ください。

「いいね!」 1

コメントありがとうございます。 イベント発火時点でレコード情報がevent.record にあるので問題ないような気もするのですが一度試してみたいと思います

puppet 様

試してみたところ、無事取得することができました!
ほとほと困っていたため大変助かりました。
重ねて御礼申し上げますm(__)m

「いいね!」 1

kintone.app.record.set(record);の利用方法は私もあまり詳しくなかったのですが、

button.addEventListener('click', function() {})の中身はクリックした時に処理される箇所だからkintone.events.on()の外部の扱い → event.recordがundefinedだった
みたいな感じかもしれませんね!

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。