はじめに
kintoneの関連レコード一覧は、設定していれば、常に最新の状態のレコードを表示する動きをします。
つまり、関連レコードの元になるアプリのレコード更新があると、関連レコード一覧側の表示時には、最新のレコードの状態で表示されるようになります。
一方、関連レコード一覧では、「表示するレコードの条件」に該当するレコードを表示することはできても、それを元にした値を表示することはできません。
ですので、例えば次のような値をアプリで利用したいならば、あらかじめ値を取得し、別のフィールドに格納しておく必要があります。
・関連レコード一覧に表示されている件数
・関連レコードを集計した結果の値
なお詳細画面を表示した時に、都度関連レコード一覧に表示されているレコードを取得して件数や集計結果を表示したり、フィールドの値として保存することはこちらの方法で可能です。
関連レコード一覧に表示されているレコードを取得して件数を表示する方法の例
関連レコードの件数を取得するワザ関連レコード一覧に表示されているレコードを取得して、集計した結果を表示する方法の例
関連レコード一覧を集計する
ですが、これらの方法は「詳細画面を表示」しないと実行されず、レコードを表示しないことには実行されません。
一覧から実行する方法もありますが、これも一覧画面からボタンを押した時や、更新専用の一覧画面を表示するなど、特定の操作を行わないと実行されません。
Job Runnerで定期的に実行する方法もありますが、これも実行されたタイミングの時の内容となりますので、常に最新の状態ということにはなりません。
関連レコード一覧の件数や集計結果をフィールドに保存する際に、常に最新の状態の結果とするには、関連レコード一覧の元になっているアプリのレコードを保存するたびに、関連レコードを表示しているレコードの値も更新する必要があります。
この記事では、そのカスタマイズ方法についてご紹介します。
アプリ構成
顧客管理アプリの関連レコード一覧に、「顧客NO」フィールドの値が等しい案件管理アプリのレコードを表示しているという構成です。

顧客管理アプリには、関連レコード一覧の件数と、関連レコード有無を保存するフィールドを設けました。
※フィールド名とフィールドコードは同じものを指定
カスタマイズ例
案件管理アプリのレコードを保存したら、顧客管理アプリの関連レコード件数も更新するというカスタマイズにしています。
カスタマイズは案件管理アプリに設定します。
2つのパターンに分けてご紹介します。
(基本編)関連レコード一覧の[表示するレコードの条件]に指定しているフィールドの値が変わらない想定の場合
レコード登録する際に入力した[表示するレコードの条件]に指定しているフィールドの値が変わらない想定の運用の場合はこの方法になります。
アプリの動作例

レコード追加・更新の時のカスタマイズ
アクション1
関連レコードの[表示するレコードの条件]に指定している「顧客NO」フィールドをキーにやること「条件を組み立ててレコードを取得する」でレコードを取得します。
保存が確定してから実施したいので、条件「レコードを保存した直後(削除後は除く)」を条件としています。
やること「条件を組み立ててレコードを取得する」
アクション2
取得したレコードをやること「レコード行数をカウントする」条件「他のアクションの実行が完了した時」で数えます。
やること「レコード行数をカウントする」
アクション3
やること「レコードを更新する(キーの値をフィールドで指定)」条件「他のアクションの実行が完了した時」で「顧客NO」をキーに更新します。
カウントした値を「関連する案件管理のレコード件数」にセットし、カウントした値が1以上の時に「関連レコード有無」チェックボックスを「有り」、それ以外はクリアするようにしました。
やること「レコードを更新する(キーの値をフィールドで指定)」
レコード削除の時のカスタマイズ
レコードを削除したときは、条件「レコードを削除する直前」と条件「レコードを削除した直後」を使います。
ただし、条件「レコードを削除した直後」のタイミングでは削除されたレコードの値を参照することができません。

そのため、アクション22でやること「編集中のレコードデータを退避する」条件「レコードを削除する直前」を使って削除対象のレコードを退避しておきます。
その上で、条件「レコードを削除した直後」にアクション1〜3と同様の関連レコードの取得や集計を行います。

アクション23
アクション22で退避したレコードの値を条件としてレコードを取得します。条件「レコードを削除した直後」に実施します。
やること「条件を組み立ててレコードを取得する」
アクション24
アクション23で取得したレコード件数を、やること「レコード行数をカウントする」条件「他のアクションの実行が完了した時」で数えます。
アクション25
アクション22で退避したレコードの値を条件としてレコードを更新します。条件「他のアクションの実行が完了した時」に実施します。
アクション3とは違い、やること「レコードを更新する(キーの値を直接指定)」を利用する点に注意してください。
やること「レコードを更新する(キーの値を直接指定)」
(応用編)関連レコード一覧の[表示するレコードの条件]に指定しているフィールドの値を変更することが考えられる場合
レコード登録する際に入力した[表示するレコードの条件]に指定しているフィールドの値が変わる場合、”変更前”のキーの値と、”変更後”のキーの値の両方で、関連レコードの内容が変わりますので、2つのレコードに対して更新する必要が出てきます。
アプリの動作例
案件管理アプリのレコード編集画面で「顧客NO」が「1」から「6」になった場合、顧客管理アプリでは、変更後の「顧客NO」である「6」のレコード更新に加え、変更前の「顧客NO」が「1」のレコード更新も必要になります。
カスタマイズ例
変更後の「顧客NO」で更新するカスタマイズ、レコード削除時のカスタマイズは(基本編)のものと同じですので説明やカスタマイズ設定画面は割愛し、変更前の「顧客NO」で更新するカスタマイズのみ説明します。

まず、変更前の値を保存しておくために「編集中のレコードデータを退避する」を「編集画面を表示した時」に実施します。
変更前の値と変更後の値が違う時だけ、このカスタマイズを動作させたいので、アクション12の追加条件に「フィールド値が特定の値ならば」をつけて、保存時の「顧客NO」と退避しておいた変更前の「顧客NO」が等しくない時に動作するように設定します。
また、レコード編集画面の時だけに動作させたいので、追加条件「現在の画面が編集画面ならば」もつけておきましょう。
アクション12の「条件を組み立ててレコードを取得する」やアクション18の「レコードを更新する(キーの値を直接指定)」では退避しておいた変更前の「顧客NO」をキーの値とすることがポイントです。
まとめ
今回は、関連レコード一覧を表示しているレコードを、関連レコードの元になっているアプリのレコード更新をトリガーに更新する方法についてご説明しました。
お試しいただいて、想定通り動作しないなどありましたら、チャットでお問合せください。