kintoneの関連レコードの「さらに絞り込む条件」についてのメモ
関連レコードについて
関連レコード一覧のkintoneヘルプ
https://jp.cybozu.help/k/ja/id/040527.html
kintoneアプリの詳細画面に、自アプリや他のアプリの情報を一覧で表示する機能。
関連レコードのフィールド設定で、参照するアプリを選択して、表示するレコードの条件を設定する。
表示するレコードの条件を自アプリのキーフィールドとして、他アプリに入力したキーフィールドと紐付けるような使い方をする。
例えば、顧客台帳と顧客台帳に紐づいた案件管理のアプリがあるとすると、顧客台帳に顧客ごとのユニークなキー項目(例えば顧客番号)を設定して、案件管理に顧客に紐づいたキー項目(顧客番号)を設定した時に、顧客台帳に関連レコードを設定することで紐づいた情報を関連レコードで一覧表示することができる。
「さらに絞り込む条件」とは
下記参照
例えば、
・顧客管理アプリ
→ 案件管理(関連レコード)
のとき、顧客管理アプリに設置した、案件管理の関連レコードをさらに絞り込みしたいとする。
赤で囲んだ内容など。
関連レコードの「さらに絞り込み」で設定できる条件を確認すると下記のような感じ。
上記の設定を確認すると、「さらに絞り込む」条件に設定できるのは『固定値』になる。
つまり、自アプリのフィールドに入力された値を使うことは基本的にはできない。
条件設定の右辺にフィールドを(フィールドに入力される値)を設定したいが、それができない。
設定できるのは、下記の通り。
- 左辺が数値フィールドの時は、右辺の数値が「等しい・等しくない・以上・以下」
- 左辺が文字列フィールドの時は、右辺の文字列が「等しい・等しくない・次のいずれかと等しい・次のキーワードを含む・次のキーワードを含まない」
- 左辺がドロップダウンフィールドの時は、右辺の項目が「次のいずれかを含む・次のいずれも含まない」
- 左辺が日付フィールドの時は、右辺の日付が「等しい・等しくない・以前・より前・以降・より後」
- 左辺がユーザー選択フィールドの時は、右辺のユーザー・グループ(ロール)・組織が「次のいずれかを含む・次のいずれも含まない」
- 左辺が組織選択フィールドの時は、右辺の組織選択フィールドの組織・優先する組織が「次のいずれかを含む・次のいずれも含まない」
※優先する組織=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\")"