はじめに

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

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


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


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

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

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



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



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


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



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



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


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


アプリ構成

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



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


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

フィールド名

フィールドタイプ

備考

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

数値

必須とする

関連レコード有無

チェックボックス

選択肢:有り のみ


カスタマイズ例

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

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


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


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

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


アプリの動作例


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


アクション1

関連レコードの[表示するレコードの条件]に指定している「顧客NO」フィールドをキーにやること「条件を組み立ててレコードを取得する」でレコードを取得します。

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


やること「条件を組み立ててレコードを取得する

取得元アプリ

案件管理

検索条件

顧客NO= "${顧客NO}"

最大取得件数

(入力無し)


アクション2

取得したレコードをやること「レコード行数をカウントする」条件「他のアクションの実行が完了した時」で数えます。


やること「レコード行数をカウントする

レコード選択アクション

1

結果をセットするフィールド

(選択無し)


アクション3

やること「レコードを更新する(キーの値をフィールドで指定)」条件「他のアクションの実行が完了した時」で「顧客NO」をキーに更新します。

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


やること「レコードを更新する(キーの値をフィールドで指定)

更新先アプリ

顧客管理

キーとなる更新先のフィールド

顧客NO

キーの値となるこのアプリのフィールド

顧客NO

マッピング

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

関連レコード有無=if($2>0,"有り","")

更新の競合をチェックする

チェックする


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

レコードを削除したときは、条件「レコードを削除する直前」と条件「レコードを削除した直後」を使います。


ただし、条件「レコードを削除した直後」のタイミングでは削除されたレコードの値を参照することができません。



そのため、アクション22でやること「編集中のレコードデータを退避する」条件「レコードを削除する直前」を使って削除対象のレコードを退避しておきます。


その上で、条件「レコードを削除した直後」にアクション1〜3と同様の関連レコードの取得や集計を行います。



アクション23

アクション22で退避したレコードの値を条件としてレコードを取得します。条件「レコードを削除した直後」に実施します。


やること「条件を組み立ててレコードを取得する

取得元アプリ

案件管理

検索条件

顧客NO= "${$22.顧客NO}"

最大取得件数

(入力無し)


アクション24

アクション23で取得したレコード件数を、やること「レコード行数をカウントする」条件「他のアクションの実行が完了した時」で数えます。


アクション25

アクション22で退避したレコードの値を条件としてレコードを更新します。条件「他のアクションの実行が完了した時」に実施します。

アクション3とは違い、やること「レコードを更新する(キーの値を直接指定)」を利用する点に注意してください。

やること「レコードを更新する(キーの値を直接指定)

更新先アプリ

顧客管理

キーとなる更新先のフィールド

顧客NO

キーの値となるこのアプリのフィールド

=$22.顧客NO

マッピング

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

関連レコード有無=if($24>0,"有り","")

更新の競合をチェックする

チェックする


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

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


アプリの動作例


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


カスタマイズ例

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



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



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


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


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


まとめ

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


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