他アプリのテーブル情報を取得したい

【実現したいこと】
他アプリにある「部屋工事進捗」テーブル内の「部屋番号」フィールドの情報を、ボタンを押下し同じIDの値が入ってる場合、その部屋番号の情報をすべてダイアログに表示させ、取得できるようにしたい。

【問題】
テーブルの情報が取得できない。
const table = event.record[‘部屋工事進捗’].value; この部分で「Uncaught (in promise) TypeError: Cannot read properties of undefined (reading ‘value’)」とエラーが出ています。

コンソールにはテーブルの情報は出力されています。ですが、このエラーがでて、ボタンが押下できません。
フィールドコードが誤っているわけでもないと思います。。

var dialog = new Kuc.Dialog({
title: ‘部屋を選択してください’
});

(function () {
‘use strict’;
kintone.events.on([‘app.record.create.show’, ‘app.record.edit.show’], async function (event) {
var roomgetbtn = new Kuc.Button({
text: ‘部屋番号取得’,
type: ‘normal’
});
kintone.app.record.getSpaceElement(‘button’).appendChild(roomgetbtn);

    roomgetbtn.addEventListener('click', async clickevent => {
        try {
            var bukkenID = document.querySelector('[id*="8231965"]').value;
        } catch (error) {
            var bukkenID = "";
        }
        var query = '物件ID = "' + bukkenID + '"';
        console.log(query);
        var body = {
            'app': 1246,
            'query': query
        };
        if (bukkenID == "") {
            var msg = "物件に該当する部屋番号がありません";
            var footer = document.createElement('div');
            var closebtn = new Kuc.Button({
                text: '閉じる',
                type: 'nomal', 
                id: 'my_index_button'
            });
            footer.appendChild(closebtn);
            dialog = new Kuc.Dialog({
                title: '部屋を選択してください',
                content: msg,
                footer: footer
            });

            dialog.open();
            closebtn.onclick = function () {
                dialog.close();
            };
        } else {
            
                const resp = await kintone.api(kintone.api.url('/k/v1/records.json', true), 'GET', body);
                var records = resp.records;
                var rooms = "";
				console.log(records);
                if (records.length === 0) {
                    rooms = "物件に該当する部屋番号がありません";
                } else {
                    const table = event.record['部屋工事進捗'].value;
                    table.forEach(function (row) {
                        var roomNumberField = row.value['部屋番号'].value;
                        rooms += "<p><a onclick='roomNoInput(\"" + roomNumberField + "\")'>" + roomNumberField + "</a></p>";
                    }); 
                }
				console.log(rooms);
                var footer = document.createElement('div');
                var closebtn = new Kuc.Button({
                    text: '閉じる',
                    type: 'nomal', 
                    id: 'my_index_button'
                });
                footer.appendChild(closebtn);
                dialog = new Kuc.Dialog({
                    title: '部屋を選択してください',
                    content: rooms,
                    footer: footer
                });

                dialog.open();
                closebtn.onclick = function () {
                    dialog.close();
                };
             (error) => {
                return event;
            };
        }
    });
});

})();

function roomNoInput(no) {
var roomNo = document.querySelector(‘[id*=“8231962”]’);
roomNo.value = no;
dialog.close();
}

他アプリにあるテーブル内のフィールド情報を取得するには、他の書き方があるのでしょうか?
色々調べ参考にしながら書いてみましたが、他アプリのテーブル情報を持ってくる方法がいまいちよくわかりません。
どなたかご教授いただければと思います。
よろしくお願いいたします。

@shiro さん

こんにちは、少しお手伝いできそうだったので回答させて頂きました!
まず、レコード新規・編集イベントで’botton’スペースに’roomgetbtn’ボタンを作成しようとしているとお見受けしました。
ボタンを押したときの動作の中でエラーが出ている状況だと思われますが、ボタンを押したときにevent変数はスコープ外なので…正確に言えば、レコード新規・編集イベント時にボタンを押したときの関数を定義しているだけなので、ボタンを押したときにレコード新規・編集イベントが発火した時のevent変数が使えません。

なので、roomgetbtn.addEventListener(‘click’, async clickevent => {}) の中で

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

を追加してあげればエラーは消えるかなと考えます。

ご回答ありがとうございます。
roomgetbtn.addEventListener(‘click’, async clickevent => {
const event = kintone.app.record.get();
上記、追加し試したのですが、先程と変わらず同じエラーが出ております。

} else {
const table = event.record[‘部屋工事進捗’].value;
table.forEach(function (row) {
var roomNumberField = row.value[‘部屋番号’].value;
rooms += “

” + roomNumberField + “

”;
});
}
この辺りが原因でエラーが出ているようですが、ここらへんを書き換えたり何か追加したりした方が良いのでしょうか。。

なるほど…デバッグツールでブレークポイントで問題の箇所を止めて見て、値とかどうなってますでしょうか?
それか先程のコードを

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

に変えて、問題の箇所を

const table = record[‘部屋工事進捗’].value;

に変えて見たらどうなりますか?

ありがとうございます。
そちらも変更してみましたが同じエラーで詰まっております。。

返事おそくなってしまい申し訳ございません。
ちなみにエラーが出ている部分でブレークポイント使って止めたらrecord変数の中身に‘部屋工事進捗’はございますか?
もしないのであれば、フィールドコードなどもう一度見直す必要があるかと思われます。

追記:
kintone.app.record.get()の配列を勘違いしてました。
下記に変えていただいたら問題ないかと思われます。

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

ここはそのままで問題ないかと思われます。

const table = record[‘部屋工事進捗’].value;

@y_minamitani9534
スクリーンショット 2023-09-05 110114
Monosnap サポ(test) - 新しいレコード - Google Chrome 2023-09-05 11.02.27

ご回答ありがとうございます!
こちらこそ返事遅くなりました申し訳ございません。
上記も試してみたのですが、エラー内容は変わりませんでした。

もしかしたら、こちら

const table = record['部屋工事進捗'].value;

クォーテーションが全角のまま実装されていませんでしょうか…?
最初 @shiro さんのコードをコピペして以来こちらを使わせて頂いていたのですが、
「整形済みテキスト」でしなければどうやらクォーテーションがエスケープ処理で全角になってしまうようで…

また、画像の意味合いとしてですが、

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

では2つのフィールドしか取得できていないのでしょうか?

確認したところ、半角で記載されておりました。

この確認方法であっておりますでしょうか?
ですと、二つしか取得できていないと思います。。

はい、そちらで確認方法はあってますよ!
もしかしてですが、部屋工事進捗サブテーブルはスクリプトを実行しているアプリとは違うアプリサブテーブルなのでしょうか…?
AppNo,1246のアプリにREST APIでGETメソッドを実行されていますが、そちらから取得されたデータを使うのであれば、変数respに格納されていると思うのでそちら利用するしかないですね。

kintone.app.record.get()

は、今開いているレコードの値を取得する関数なので…

@y_minamitani9534
はい、他のアプリにあるサブテーブルになります。
const record = kintone.app.record.get().record;
上記のコードは消して、
const table = resp.record[‘部屋工事進捗’].value;
このように書き換えるということでしょうか…?
一応これで実行しましたが同じエラーになっております。
1246アプリのテーブルデータを取得するためには、どのように記載するのがいいのでしょうか?

もう少しその旨を早く知れたらよかったなと思います。
物件IDでクエリ組んでいるREST APIで取得しているレコードの件数は1件のみになるのでしょうか?
それでしたら、すでに

var records = resp.records;

とされているので利用させてもらうと

const table = records[0]['部屋工事進捗'].value;

という風になるかと思われます。

説明不足で申し訳ございませんでした。

上記試したところ、無事動作いたしました、!

本当にありがとうございました。
とても勉強になりました。

「いいね!」 1

いえ、私も一番最初に書いていることを見落としてましたので申し訳なかったです。
無事解決したようで何よりでございます。

「いいね!」 1

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