ルックアップの自動取得処理が動きません。

以下のコードは「レコードの自動採番・特定フィールドの初期値設定・アクション機能でレコードを新規作成した際のルックアップ自動取得」の3つを目的としたものです。
自動採番・初期値設定までは問題なく動作するのですが、最後のルックアップ自動取得だけがなぜか動作しません。
コンソールにエラーはありませんでした。

色々と関連記事を見ましたが、解決せず…。
ご教授のほど、どうぞよろしくお願い致します。

kintone.events.on('app.record.create.show',(event)=>{

   //最初に自動採番の処理
        const body ={
            'app': アプリID,
            'query':'CreateTime = THIS_YEAR() order by CreateTime desc limit 1',
        }

        //同じアプリの最新レコードから「作成日時」を抽出。
        kintone.api(kintone.api.url('/k/v1/records', true),'GET', body,(Resp)=>{

            const kar = kintone.app.record;
            const Get = kar.get();
            const Record = Get.record;
            let autoNumber = ' ';

            const Day = Resp.records[0].Number82.value;

            //一番最初のレコード専用の分岐処理
            if (Resp.records.length > 0){

                //「Number」オブジェクトで取得したデータを数値化
                const Day00 = Number(Day);
                autoNumber = Day00 + 1;

            } else {

                autoNumber = 2300001;
            }

            Record.Number82.value = autoNumber;

            //「フィールドA」と「フィールドB」の初期値設定の処理--------------

            if(Record.フィールドA.value === undefined){

                Record.フィールドA.value = "初期値A";
            }

            if(Record.フィールドB.value === undefined){

                Record.フィールドB.value = "初期値B";
            }

            kar.set(Get);
        });

   //ここまで問題なく動きます。----------------

        //ここからのルックアップ自動取得が動きません。-----------------

        if (event.record.Customer.value !== ' '){

            event.record.Customer.lookup = true;
        }

        return event;
    });
「いいね!」 1

一番楽なアンサー

フィールドAを変更して kar.set(Get)とやっているのと同じ感覚で、 Record.Customer.lookup = true してから kar.set(Get) をすれば動くと思います。


その他補足

  • kintone.app.record.get/setとeventオブジェクトのrecordとreturn eventの使い分けに悩まれているようですが、大きく分けてイベントに対して非同期的に処理するかどうかで使い分けます。
    • 使い分け
      • eventオブジェクトのrecordとreturn event: 同期的に処理する場合(後述するPromiseも含む
      • kintone.app.record.get/set: 独自のボタンに設定するイベントや、非同期的に処理する場合
  • 今回のように「レコード作成画面表示イベントで他のレコードのデータを参照して初期値をいれる」ものに関してはPromiseをつかって同期的に書くことができますので、基本的にはeventオブジェクトのrecordとreturn eventで表現できるとおもいます。
    • Promiseに関して説明するとながいのでこちらあたりをご覧ください。。
「いいね!」 2

ご返信ありがとうございます。
Record.Customer.lookup = true; の後に kar.set(Get); を試してみましたが
動作しませんでした…。

1つのコード内で通信が必要な処理と、そうでない処理が混合していましたので、理解しづらかった部分があるかと思います。申し訳ありません。

1:レコードの自動採番 ⇒ 通信を必要とする処理
2:特定フィールドの初期値設定 ⇒ 通信不要な処理
3:ルックアップ自動取得 ⇒ 通信不要だが、アクション機能により、ルックアップフィールドに値が入るのを待つ必要がある。

現状、if の条件を満たしている(ルックアップフィールドに値が入っている)にも関わらず、自動取得だけはされない状態です。⇐※修正しました。
(コンソールで確認したところ、lookup : true となっていました…)

そもそも、この3つの処理をまとめて1つにしている事自体が良くないでしょうか?

「いいね!」 1
 if (event.record.Customer.value !== ' '){

            event.record.Customer.lookup = true;
        }

条件にスペースは入っていますが、意図的でしょうか。

「いいね!」 1

はい。そこは少しでも見やすいようにと、空けただけですね。
実際のコードでは詰めています。
また、’ ’ ⇒ undefined に変更しても特に変わりませんでした…。

皆様、大変お騒がせ致しました…。
本件、自己解決に至りました。
結果から申しますと、取得するレコードが複数あったために動作していませんでした…。

この動作条件につきましては最初から知っていたのですが、自動取得する際にアプリ側の
ルックアップフィールドの「絞り込み条件の設定」までは考慮してくれないということを
今回初めて知りました。

自分では何度も手動で取得していましたので、最初から絞り込み条件が適用されており、
レコードが複数存在している事に気づくのが遅れてしまいました。

しかしながら、ご教授頂いた同期処理・非同期処理につきましては、まだ理解が足りていないと
感じましたので、今後しっかりと消化しておこうと思います。
ありがとうございました!

「いいね!」 2

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