ユーザー選択で選択した名前をもとに、別アプリのレコードを表示したい

Aアプリで山田太郎とユーザー選択した場合、Aアプリにあるボタンをクリックすると、Bアプリにある山田太郎のレコードを開く様にしたい※Bアプリに山田太郎のレコードは1件のみとする

(function () {
    "use strict";

    var events1 = [
        'app.record.create.show',
        'app.record.edit.show',
        'app.record.detail.show'
    ];

    kintone.events.on(events1, function (event) {
        var record = event.record;
        const name = record.氏名.value; // ← フィールドコード「氏名」に合わせてください

        var NewButton1 = document.createElement('button');
        NewButton1.id = 'NewProductButton1';
        NewButton1.innerText = 'TEST';

        NewButton1.style.height = '40px';
        NewButton1.style.display = 'inline-block';
        NewButton1.style.margin = "3px 3px 3px 0";
        NewButton1.style.border = 'solid 1px #212121';
        NewButton1.style.backgroundColor = '#f7f9fa';
        NewButton1.style.color = '#3498db';

        NewButton1.onclick = async function () {
            try {
                
                const fieldCode = '氏名'; // ← 実際のフィールドコードに置き換えてください
                const employeeName = name[0].code;

                console.log('検索する氏名:', employeeName);

                const query = `${fieldCode} = "${employeeName}"`;
                console.log('クエリ:', query);

                try {
                    const resp = await kintone.api(kintone.api.url('/k/v1/records', true), 'GET', {
                        app: 000,
                        query: query
                    });
                    console.log('取得結果:', resp.records);
                } catch (error) {
                    console.error('APIエラー:', error);
                }

                console.log(resp.records);


                if (resp.records.length > 0) {
                    window.open("https://XXXXXXX.cybozu.com/k/000/");
                } else {
                    alert("編集・閲覧出来ません");
                }
            } catch (error) {
                alert("データ取得中にエラーが発生しました。");
            }
        };

        var space = kintone.app.record.getSpaceElement('NewProductButton1');
        if (space) {
            space.appendChild(NewButton1);
        }

        return event;
    });

})();

ぱっと見ですが。。。

全てのコードの解決策ではなく、また誤りがありましたら申し訳ございません。

多分レコード登録、編集画面での動作に関しましてはeventオブジェクトで取得すると、レコード登録、編集画面が開いた時点での情報が取得されるので、レコード詳細画面での動作はeventからでいいとして、レコード登録、編集画面に関しましては、kintone.app.record.get()を使用して、入力途中の値を取得できるようにした方がいいと思います。

つまり関数に与える引数を実行するイベントによって分けるということです。

あと以下のコードだと引数がないので、eventオブジェクト内のrecordかkintone.app.record.get()で取得したrecordを渡す必要があると思います。

NewButton1.onclick = async function () {
↓
NewButton1.onclick = async function (record) {

その他従業員のなども引数で渡したrecord内から取得したり、別途JavascriptAPIなどを使用して取得した方がいいと思います。

ご提示いただいているコードを見ますと生成AIを使用したコードだとは思うのですが、

AIを使うときはkintoneカスタマイズであることの明示や、ES6に則ったコード生成の指示を渡した方が良いかと思います。cybozu developer networkの記事なども活用してみてください。

「いいね!」 1

@roi08 さんのご指摘が私も気になったので、そこは確認していただいたほうが良いと思います。

そのうえで、

このコードが実行されるタイミングでは resp は宣言されていないので、変数スコープを気にしたほうが良いと思います。

あとボタンを押したタイミングでレコードの情報を取得していないように見えるので、詳細画面では問題ないと思いますが、追加画面と編集画面では思った挙動にならないと思います。ボタンを押したタイミングでレコードを取得するようにしたほうがいいですね。

「いいね!」 1