ルックアップ項目の絞り込み条件を動的に変更する

はじめまして、樋口と申します。

現在ルックアップ項目の絞り込み条件として、別フォームの値を参照するような仕組みを作ろうとしています。
しかし以下の問題が発生しており、その対処方法が不明な状態です。
どなたか解決策をご存知であれば教えていただけないでしょうか。

・発生している問題
フォームの設定変更を行うAPI自体は成功しているのですが、変更後設定が画面上に反映されません。
ここではcustomer_idとcategoryによって、動的にルックアップ項目の絞り込み条件を変更しようとしています。

・実際のコード

(function () {
“use strict”;

var app = 29;
var targetApp = 30;

/*
 * 契約一覧を取得
 */
var getDegreeList = function(event) {

    var customer_id = "";
    var category = "";

    var records = event.record;
    if (records) {

        if(records.customer_id.value != undefined) customer_id = records.customer_id.value;
        if(records.category.value != undefined) category = records.category.value;
    }

    if(customer_id == "") return event;
    if(category == "") return event;

    var jsondata = {
        "app":app,
        "properties": {
            "agreement_price": {
                "lookup": {
                    "relatedApp": {
                      "app": targetApp,
                    },
                    "relatedKeyField": "common_value",
                    "filterCond": "common_customer_id = \"" + customer_id + "\" and common_kind_agreement in (\"" + category + "\")",
                    "sort": "common_balance_payable asc, common_agreement_date asc"
                },
                "type": "NUMBER"
            }
        }
    };

    // lookup項目である契約一覧の、絞り込み要素を設定する
    kintone.api(kintone.api.url("/k/v1/preview/app/form/fields", true), "PUT", jsondata)
    .then(
        function(resp) {
            // レコード番号を表示する
            alert("success"); 
        },
        function(error) {
            // エラーの場合はメッセージを表示する
            var errmsg = "レコード取得時にエラーが発生しました。";      
            // レスポンスにエラーメッセージが含まれる場合はメッセージを表示する
            if (error.message !== undefined){
                errmsg += "" + error.message;
            }
            alert(errmsg);
        }
    );

    return event;
};

// 追加画面表示時
kintone.events.on("app.record.create.show", function (event) {

    getDegreeList(event);

    // 顧客変更時に契約一覧を取得
    kintone.events.on("app.record.create.change.customer_id", function (event) {
        getDegreeList(event);
    });
    // カテゴリ変更時に契約一覧を取得
    kintone.events.on("app.record.create.change.category", function (event) {
        getDegreeList(event);
    });
});

// 編集画面表示時
kintone.events.on("app.record.edit.show", function (event) {

    getDegreeList(event);

    // 顧客変更時に契約一覧を取得
    kintone.events.on("app.record.edit.change.customer_id", function (event) {
        getDegreeList(event);
    });
    // カテゴリ変更時に契約一覧を取得
    kintone.events.on("app.record.edit.change.category", function (event) {
        getDegreeList(event);
    });
});

})();

Katsuya Higuchi さん

アプリのデプロイ(変更)APIは、こちらにもありますが、反映のAPIの実行もしくはアプリ設定画面での保存ボタンを押下で本番環境へ反映されます。こちらチェックされていますでしょうか。

ご紹介いただいた反映APIを利用しましたところ、アプリを再実行することで設定が反映されることが確認できました。

有難うございました!

解決されたようで、良かったです。

こちら、よく見るとフィールドの変更時イベントにひっかける用途からすると、ミスマッチですね。標準の画面で値を動的に変更するのは可能ですが、アプリやレコード・フィールドの構造に関係する部分をAPIで動的に制御するのは難しいですね。

追加でのご意見ありがとうございます。
フィールド変更時にフィールド設定を変更するのは難しいとのことでしたので、別方法で逃げ道を模索することにしました!

反映APIについては存在を把握しておりませんでしたので、最初にいただいたご意見も勉強になりました。
ありがとうございました!

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