1
1

More than 1 year has passed since last update.

関連レコードの「さらに絞り込む条件」の設定についてのメモ

Last updated at Posted at 2022-05-31

kintoneの関連レコードの「さらに絞り込む条件」についてのメモ

関連レコードについて

関連レコード一覧のkintoneヘルプ
https://jp.cybozu.help/k/ja/id/040527.html

kintoneアプリの詳細画面に、自アプリや他のアプリの情報を一覧で表示する機能。
関連レコードのフィールド設定で、参照するアプリを選択して、表示するレコードの条件を設定する。
表示するレコードの条件を自アプリのキーフィールドとして、他アプリに入力したキーフィールドと紐付けるような使い方をする。

例えば、顧客台帳と顧客台帳に紐づいた案件管理のアプリがあるとすると、顧客台帳に顧客ごとのユニークなキー項目(例えば顧客番号)を設定して、案件管理に顧客に紐づいたキー項目(顧客番号)を設定した時に、顧客台帳に関連レコードを設定することで紐づいた情報を関連レコードで一覧表示することができる。

「さらに絞り込む条件」とは

下記参照

image.png

例えば、
・顧客管理アプリ
 → 案件管理(関連レコード)
のとき、顧客管理アプリに設置した、案件管理の関連レコードをさらに絞り込みしたいとする。
赤で囲んだ内容など。
image.png

関連レコードの「さらに絞り込み」で設定できる条件を確認すると下記のような感じ。
image.png

上記の設定を確認すると、「さらに絞り込む」条件に設定できるのは『固定値』になる。
つまり、自アプリのフィールドに入力された値を使うことは基本的にはできない。
条件設定の右辺にフィールドを(フィールドに入力される値)を設定したいが、それができない。

設定できるのは、下記の通り。

  • 左辺が数値フィールドの時は、右辺の数値が「等しい・等しくない・以上・以下」
  • 左辺が文字列フィールドの時は、右辺の文字列が「等しい・等しくない・次のいずれかと等しい・次のキーワードを含む・次のキーワードを含まない」
  • 左辺がドロップダウンフィールドの時は、右辺の項目が「次のいずれかを含む・次のいずれも含まない」
  • 左辺が日付フィールドの時は、右辺の日付が「等しい・等しくない・以前・より前・以降・より後」
  • 左辺がユーザー選択フィールドの時は、右辺のユーザー・グループ(ロール)・組織が「次のいずれかを含む・次のいずれも含まない」
  • 左辺が組織選択フィールドの時は、右辺の組織選択フィールドの組織・優先する組織が「次のいずれかを含む・次のいずれも含まない」
     
    ※優先する組織=APIを実行したユーザーの優先する組織。

例えば、案件の「商談担当者」はユーザー選択フィールドで、案件ごとにユーザーを設定することを想定。
顧客管理に表示する案件の関連レコードとして、ユーザーで絞り込みしたい時には「商談担当者」を絞り込みの条件設定に、固定であらかじめ設定しておくしかない。(該当するユーザー、ユーザーが所属する組織・グループロール、又は優先する組織)

まとめ

関連レコードの設定で、自アプリのフィールドを使って絞り込みをすることは基本的にはできない。
カスタマイズ又は下記のプラグインを利用するなどして対応する。

カスタム関連レコードプラグイン (絞り込み条件に自アプリのレコード値利用可)
https://developer.cybozu.io/hc/ja/community/posts/900001067423

クエリ

組織選択フィールドがあるとして、参照するアプリのレコードに存在する組織選択フィールドに含まれる条件で、レコードを絞り込むクエリは以下の通り。

参照するアプリの組織選択 in ("<組織選択フィールドの組織のcode>")

<アプリID>が 1で、
<組織選択フィールドの組織のcode>が "12345" とするとクエリは下記のようになる。

var body = {
    "app": 1,
    "query": "参照するアプリの組織選択 in (\"12345\")"
};

クエリの右辺のカッコに設定するのは、組織の名称ではなく組織のコードになる。
組織のコードは詳細画面を開いている場合は、kintone.app.record.get()関数で取得したJSONの中に入っているので、それを取得する。
組織選択は複数選択が可能となっていて、取得すると配列になっているのでうまいことコードだけを抜き出すようにする。

const record = kintone.app.record.get();
console.log(record);
console.log(record.record.組織選択.value);
console.log(...record.record.組織選択.value);

例えば組織選択のフィールドコードが "組織選択" の場合は下記の通り。

const record = kintone.app.record.get();
const codes = [...record.record.組織選択.value];
const organizationCodes = codes.map(organization => {
    let {code, name} = organization;
    return code;
});
console.log(organizationCodes);

organizationCodesの中身は組織コードの配列なので、配列を展開して組織展開の右辺の形式に変換する。
例えば、下記のようにすれば良い。

"query": "組織選択 in (\"code1\", \"code2\", \"code3\")"
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1