ルックアップ選択先が複数ある場合にも自動取得がしたい

ルックアップ取得先が複数ある場合にも自動取得をする方法を探しています。

単純なルックアップ自動取得については他の投稿を参考やネットからコピペする等で実装できたのですが、部分一致が引っ掛かってルックアップの選択先が複数ある場合に自動取得ができません。

ルックアップ取得先は重複不可のフィールドですが、型番命名の都合上AAA、AAA-1、AAA-2の様な構成になる為、AAAでルックアップを掛けると部分一致でAAA-1とAAA-2もかかってしまう模様です。

用途としましてはサブテーブル内もルックアップを使用しており、製品AAAのレコードにサブテーブルを設置し、構成部品AAB、AAB-1、AAC、AAD…と並べ、各構成部品の情報を製品AAAレコード編集時に最新の情報に自動取得したいと考えています。
現状はAABの場合は自動取得されない。(AABかAAB-1か選ぶウィンドウが出る)
AAB-1の場合は部分一致がないので自動取得される。の状態です。

ルックアップ取得時の検索機能の部分一致を無効化し完全一致のみにするなど、何か方法がないでしょうか。
現状は(kintoneルックアップフィールドでアクションボタンで入力したにも関わらず”[取得]を押し、参照先からデータを取得してください。”エラーが発生する問題の自動入力拡張で解決した #JavaScript - Qiita)からコピペしてきた下記のプログラムを使用しています。
私自身にはプログラムの知識はほぼありません。ネットで調べたものをつぎはぎしてやっている程度になります。よろしくお願いします。


(function() {
    'use strict';

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

    kintone.events.on(events, function(event) {
        setTimeout(function() {
            // ルックアップフィールドのすべてのinput要素を取得
            var inputFields = document.querySelectorAll('.component-app-lookup-inputlookup .input-text-outer-cybozu input');

            // 各input要素について処理
            inputFields.forEach(function(inputField) {
                if (inputField && inputField.value !== '') {
                    // inputの値が空欄でない場合にのみ、「取得」ボタンをクリック
                    // input要素に最も近い親の.component-app-lookup-inputlookup要素を探す
                    var lookupContainer = inputField.closest('.component-app-lookup-inputlookup');

                    if (lookupContainer) {
                        var lookupButton = lookupContainer.querySelector('.button-simple-cybozu.input-lookup-gaia');
                        if (lookupButton) {
                            lookupButton.click();
                        } else {
                            console.error('Lookup button not found. Make sure the lookup field is visible and the page is fully loaded.');
                        }
                    }
                }
            });
        }, 1000); // タイミングの問題を避けるために少し待つ

        return event;
    });
})();

ルックアップの発火自体は、普通の kintone JavaScript API 経由で操作すれば問題ないと思いますが…… (アクション経由だとちょっと面倒だったんだっけ?そんなことなかった気がするけど……)

画面上でルックアップするときに、ルックアップ先アプリに「AAA」と「AAA-1」があるとき「AAA」だけ入力しても一意に定まらないのは、 kintone の仕様上回避ができないものです。ハイフンが区切り文字になっていて空白と同じ扱いになっているので、「AAA-1」は「AAA」と「1」が入力されている扱いなんですよね。

このあたりの挙動は、サイボウズのヘルプにも記載はありますがジョイゾーさんの記事が分かりやすかったです。

一般的には以下の方法を選択することになると思います。

  • 運用上の型番でのルックアップを諦めて、ルックアップしやすいシステム上の型番 (ex. 桁数固定の連番、ハイフンをアンダーバーに置き換え) を生成してルックアップし、運用上の型番は従属にする
  • ルックアップフィールドを諦めて、文字列(1行)フィールド + カスタマイズでルックアップっぽい何かを実装する
  • 自動ルックアップの時だけレコード選択画面が出たら最適な行を自動で選択して自動取得するカスタマイズを実装する (非推奨なDOM操作)

個人的には1個目で設計することが多いですね。

他の方はどんな解決してるんだろう……?

「いいね!」 1

回答ありがとうございます。
アクション経由のルックアップ自動取得はアクション後に’app.record.create.show’が動く様で、今のところうまく動作してくれています。

ルックアップで部分一致を拾ってしまうのは変更不可なんですね。。。
素人考えですが関連レコードでは完全一致で情報を持ってくるのでルックアップもできそうなものと考えていました。

対策方法もありがとうございます。
とりあえずはルックアップっぽい何かを実装する方向で調べてみます。
ありがとうございました。

「いいね!」 1

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