はじめに

kintoneの関連レコード一覧は、設定していれば、常に最新の状態のレコードを表示する動きをします。

つまり、関連レコードの元になるアプリのレコード更新があると、関連レコード一覧側の表示時には、最新のレコードの状態で表示されるようになります。


一方、関連レコード一覧では、「表示するレコードの条件」に該当するレコードを表示することはできても、それを元にした値を表示することはできません。


ですので、例えば次のような値をアプリで利用したいならば、あらかじめ値を取得し、別のフィールドに格納しておく必要があります。

・関連レコード一覧に表示されている件数

・関連レコードを集計した結果の値



なお詳細画面を表示した時に、都度関連レコード一覧に表示されているレコードを取得して件数や集計結果を表示したり、フィールドの値として保存することはこちらの方法で可能です。



ですが、これらの方法は「詳細画面を表示」しないと実行されず、レコードを表示しないことには実行されません。


一覧から実行する方法もありますが、これも一覧画面からボタンを押した時や、更新専用の一覧画面を表示するなど、特定の操作を行わないと実行されません。



Job Runnerで定期的に実行する方法もありますが、これも実行されたタイミングの時の内容となりますので、常に最新の状態ということにはなりません。



関連レコード一覧の件数や集計結果をフィールドに保存する際に、常に最新の状態の結果とするには、関連レコード一覧の元になっているアプリのレコードを保存するたびに、関連レコードを表示しているレコードの値も更新する必要があります。


この記事では、そのカスタマイズ方法についてご紹介します。


アプリ構成

顧客管理アプリの関連レコード一覧に、「顧客NO」フィールドの値が等しい案件管理アプリのレコードを表示しているという構成です。



顧客管理アプリには、関連レコード一覧の件数と、関連レコード有無を保存するフィールドを設けました。


※フィールド名とフィールドコードは同じものを指定

フィールド名

フィールドタイプ

備考

関連する案件管理のレコード件数

数値

必須とする

関連レコード有無

チェックボックス

選択肢:有り のみ


カスタマイズ例

案件管理アプリのレコードを保存したら、顧客管理アプリの関連レコード件数も更新するというカスタマイズにしています。

カスタマイズは案件管理アプリに設定します。


2つのパターンに分けてご紹介します。


(基本編)関連レコード一覧の[表示するレコードの条件]に指定しているフィールドの値が変わらない想定の場合

レコード登録する際に入力した[表示するレコードの条件]に指定しているフィールドの値が変わらない想定の運用の場合はこの方法になります。


アプリの動作例


レコード追加・更新の時のカスタマイズ


アクション1で[表示するレコードの条件]に指定している「顧客NO」フィールドをキーに「条件を組み立ててレコードを取得する」でレコードを取得します。

保存が確定してから実施したいので、「レコードを保存した直後(削除後は除く)」を条件としています。


アクション2で取得したレコードを「レコード行数をカウントする」で数えます。


アクション3では「レコードを更新する(キーの値をフィールドで指定)」で「顧客NO」をキーに更新します。

カウントした値を「関連する案件管理のレコード件数」にセットし、カウントした値が1以上の時に「関連レコード有無」チェックボックスを「有り」、それ以外はクリアするようにしました。


レコード削除の時のカスタマイズ

レコードを削除したときは「レコードを保存した直後(削除後は除く)」は当てはまりませんので「レコードを削除する直前」の条件を使います。


削除ボタンを押した後、削除するまでの間にエラーが起きたり、カスタマイズで削除キャンセルの動きを入れていた場合、実際には削除されていないのにこのカスタマイズが動作する可能性もありますので、その点はご注意ください。

(なお「レコードを削除した直後」のような条件はkintoneの仕様により用意されておりません。)


最初の条件以外は、レコード追加・更新の時のカスタマイズ内容と同じのため、説明は省略します。


(応用編)関連レコード一覧の[表示するレコードの条件]に指定しているフィールドの値を変更することが考えられる場合

レコード登録する際に入力した[表示するレコードの条件]に指定しているフィールドの値が変わる場合、”変更前”のキーの値と、”変更後”のキーの値の両方で、関連レコードの内容が変わりますので、2つのレコードに対して更新する必要が出てきます。


アプリの動作例

案件管理アプリのレコード編集画面で「顧客NO」が「1」から「6」になった場合、顧客管理アプリでは、変更後の「顧客NO」である「6」のレコード更新に加え、変更前の「顧客NO」が「1」のレコード更新も必要になります。


カスタマイズ例

変更後の「顧客NO」で更新するカスタマイズ、レコード削除時のカスタマイズは(基本編)のものと同じですので説明やカスタマイズ設定画面は割愛し、変更前の「顧客NO」で更新するカスタマイズのみ説明します。



まず、変更前の値を保存しておくために「編集中のレコードデータを退避する」を「編集画面を表示した時」に実施します。


変更前の値と変更後の値が違う時だけ、このカスタマイズを動作させたいので、アクション12の追加条件に「フィールド値が特定の値ならば」をつけて、保存時の「顧客NO」と退避しておいた変更前の「顧客NO」が等しくない時に動作するように設定します。


また、レコード編集画面の時だけに動作させたいので、追加条件「現在の画面が編集画面ならば」もつけておきましょう。


アクション12の「条件を組み立ててレコードを取得する」やアクション18の「レコードを更新する(キーの値を直接指定)」では退避しておいた変更前の「顧客NO」をキーの値とすることがポイントです。


まとめ

今回は、関連レコード一覧を表示しているレコードを、関連レコードの元になっているアプリのレコード更新をトリガーに更新する方法についてご説明しました。


お試しいただいて、想定通り動作しないなどありましたら、チャットでお問合せください。