私の「Article」ノードには、整数フィールドを含む「Amounts」と呼ばれるフィールドコレクションがあります。フィールドコレクションアイテムを削除した後、更新されていないノードと更新されたノードの整数の合計に基づいて、ノードの作成者からいくつかのユーザーポイントを差し引きたいと思います。
そのために、「Articleタイプの既存のコンテンツを更新した後」というイベントでルールを作成しました。このルールでは、更新されたノードと更新されていないノードの「金額」をループしています。問題は、両方のループが更新されたノードからのデータを使用することです(つまり、フィールドコレクションアイテムが削除された後)。結果として同じ値になります。
最初のアイテムを削除した後、対応する値1、2、および3を持つ3つのアイテムを持つノードのルールの出力は次のとおりです。
更新されていないノード:合計= 5(これは6である必要があります)
更新されたノード:合計= 5。
ルールを実行することは可能ですかbefore必要なデータ値を取得できるようにするために、フィールドコレクションアイテムを削除しますか?削除されたデータを使用する別の方法はありますか?
ルールを使用して削除された値にアクセスしようとする代わりに、「合計」と呼ばれる新しい非表示フィールドに合計を格納する方が簡単です。このようにして、「古い値」はどのルールでも常に使用可能になります。新しいフィールドコレクションアイテムが保存されるか、既存のアイテムが削除されるときは、必ず「合計」を更新してください。これは、別のルールで簡単に実現できます。
あなた自身の答えはあなたのために働く回避策のように見えますが、あなたがあなたの質問で言及した問題の核心、すなわちあなたが「」と述べたものに実際には対処していません問題は両方のループが更新されたノードからのデータ "。
ただし、ルールイベント「Articleタイプの既存のコンテンツを更新した後」を使用する代わりに(質問のように)、ルールイベント「既存のフィールドコレクションアイテムを更新した後 "、一般的なルール条件「エンティティにフィールドがあります」(フィールドコレクションフィールド用)と組み合わせます。そうすることで、変更された(保存後)値と変更されていない(保存前)値の両方にアクセスできるようになります。そのため、削除される前の値についてもかなり確実です。
この「既存のフィールドコレクションアイテムを更新した後」ルールイベントを使用するルールの例については、 私の回答 から " フィールドコレクションの事前保存バージョンを取得する方法)を参照してください。ルールで "。