新規投稿
フォローする

フィールド値変更イベントで、他のアプリのフィールドの値を書き換えたい

タイトルに有ります様にフィールド値の変更で他のアプリの該当レコードを参照し
フィールドの値を変更しようとしています。
コミュニティの記事等を拝見させて頂いたのですが、
以下のエラーがconsoleに表示され解決できないでいます。

------------------------------------------------------------------
Uncaught (in promise) Error: Invalid record object.
------------------------------------------------------------------

初歩的な内容と思われ、恐縮ですが
アドバイスを頂戴できましたら幸いです。

よろしくお願いいたします。
(function() {
    "use strict";
    var events = [
      'app.record.edit.change.reptypeno',
      'app.record.create.change.reptypeno',
      'app.record.index.edit.change.reptypeno'
    ];
    kintone.events.on(events, function(event) {
      var record = event.record;
      var rep_no = record['reptypeno'].value;
      var params = {app: 4,
          query: 'reptypeno = "' + rep_no + '"'};

      // REST API発行
      kintone.api(kintone.api.url('/k/v1/records', true), 'GET', params).then(function(resp) {
        // データ更新
        var record = kintone.app.record.get();
        record['本文'].value = resp.record['サンプル文章'].value;
        kintone.app.record.set(record);
  
        }, function(resp) {
          event.error = 'レコードの取得に失敗しました';
          kintone.app.record.set(record);
          return event;
      });
    });
  })();
0

3件のコメント

Avatar
江田篤史

syu-heiさん

お世話になっております。

kintone.app.record.get();の返り値は、

{
  本文: {
    value: 'hoge'
  }
}

のような構造ではなく

{
  record: {
    本文: {
      value: 'hoge'
    }
  }
}

のような構造になります。
https://developer.cybozu.io/hc/ja/articles/201942014#step2

ご提示いただいたコード18行目の左辺を「record.record['本文'].value」のようにすると良いかと思います。

0
Avatar
syu-hei

江田篤史 さま

早速コメント頂きありがとうございます。

record.record['本文'].value = resp.record['サンプル文章'].value;

に修正したところ以下のエラーとなりました。
------------------------------------------------------------------
Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'サンプル文章')
------------------------------------------------------------------
queryでの取得ができていないのでしょうか?


 

0
Avatar
T.H

syu-hei さん

このスクリプトはレポートタイプ番号を設定したときに、
レポートタイプマスタからサンプル文章を持ってくるような感じでしょうか。
自分のところで作ってみて試してみました。

1.detail(詳細画面)では以下のコードでサンプル文章の取得ができました。

(function() {
"use strict";
/*詳細画面*/
var events = [
'app.record.edit.change.reptypeno',
'app.record.create.change.reptypeno'
];
kintone.events.on(events, function(event) {
var record = event.record;
var rep_no = record['reptypeno'].value;
var params = {app: 4,
query: 'reptypeno = "' + rep_no + '"'};

// REST API発行
kintone.api(kintone.api.url('/k/v1/records', true), 'GET', params).then(function(resp) {
var set_text = "";
// フィールドを取得
var record = kintone.app.record.get();

// データ更新
if(resp.records.length === 0){
set_text = "該当サンプルなし";
}else{
var resp_record = resp.records[0]; //reptypenoに重複が無く1件のみ取得が前提
set_text = resp_record['サンプル文章'].value;
}
record.record['本文'].value = set_text;
kintone.app.record.set(record);

}, function(resp) {
event.error = 'レコードの取得に失敗しました';
kintone.app.record.set(record);
});
});
})();

2.index(一覧画面)ではうまく行きませんでした。

これはindex.changeイベントの特性のようで、
・changeイベントはPromise(async/awaitも同様)はつかえない
→これはreturnの代わりにkintone.app.record.set()なら回避可能
・index.changeイベントはreturnで設定する
の二つによって不可能な構造のようです。

詳細画面で取得するような導線(手順書)にするのは如何でしょう。

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