概念的には、あなたがしようとしていることは、これらのオブジェクトの両方に検証ルールを設定することだと思います。Client_ c の検証ルールは非常に単純です: TEXT(Status _c) == 'Closed' && TEXT(Account_ c.Status _c) == 'Closed'
さらに興味深いのは、アカウントをクローズに移動したときに、関連するアイテムがどれもクローズされていないことを確認する方法です。関連項目のステータスを追跡するフィールド (チェックボックス) をアカウントに作成することを好む傾向があります。これは基本的に、自分のステータスを変更することが有効かどうかを示します。この場合、検証ルールは非常に単純になります。そのブール値を設定するために、クライアントがバッチで変更されているときに基本的にすべてのアカウントを取得するだけの Client__c でトリガーを使用することになります (挿入、アップサート、および削除の両方を考慮に入れます)。
SELECT Account__c.Id FROM Client__c WHERE Id =: Trigger.new OR Id =: Trigger.old
次に、すべての取引先 ID (この例では名前付き取引先) のセットを作成し、それらの ID に関連するすべてのクライアントを取得するクエリを実行します (SOQL の制限に達しないように 1 つのクエリで)。
SELECT Account__c.Id, Status__c FROM Client__c WHERE Account__c.Id =: accounts
この結果から、すべてのエントリを繰り返し処理し、値がクライアントのリストであるアカウント ID をキーとするマップにそれらを投げます。完了したら、クエリを実行して、以前の「アカウント」リスト (実際のアカウントではなく単なる文字列のリスト) に基づいてすべてのアカウントを取得し、その後、そのアカウントに関連付けられているすべてのクライアントを反復処理します。がクローズ済みとしてマークされている場合、それに応じてそのアカウントのメタデータを更新します。クライアントが閉鎖されていない場合、アカウントはそのようにマークされます。完了したら、更新ステートメントを実行して、変更したアカウントのリストを更新します。