4

誰かが私が今しばらくの間対処しようとしていた問題で私を助けてくれることを願っています。作成プラグインと更新プラグインがあります。テストの目的で、私の作成プラグイン(Pre-Operation)は簡単な計算を行い、保存後に結果をフィールドに配置します。

アップデートプラグインは、操作前に登録し、ロジックのあるフィールドを変更すると正常に機能します。ただし、これらのフィールドの1つだけを変更すると(またはフォーム上で他のフィールドがダーティになると)、キーが辞書に存在しないというエラーが発生します。私は調査を行い、エンティティイメージの前後でチェックを行って、更新されたフィールドと更新されていないフィールドをチェックしていることを確認しました。しかし、私が混乱しているのは、これを行うときに、操作後に更新プラグインを再グリグリする必要があることです。これにより、更新が機能しなくなり、コードの最後にservice.Update(entity)を実行すると、次のようになります。無限ループの別のエラー。Updateプラグインで、2つの画像(PreとPost)を登録したことを確認しました。誰かが私にアドバイスしてくれたら、プレイメージとポストイメージの間のチェックをどのように行うのですか?

4

1 に答える 1

3

あなたのコードを見る必要があります。しかし、そこで何が起こっているのかを簡単に説明することができます。
service.Update(entity)プラグインが登録されているエンティティの別の更新であるため、プラグインをもう一度呼び出します。この無限ループを回避するために、Depthプロパティを監視できます。プラグインを新たに呼び出すたびに、このプロパティの値が増加します。

更新中に変更されたプロパティを知りたい場合は、InputParametersを調べてください。更新されたプロパティ値のみがあります。

プレエンティティイメージは更新メッセージには使用できますが、作成には使用できません(エンティティインスタンスが実際に作成される前にイメージを作成することはできません)。ただし、作成メッセージと更新メッセージの両方の場合は、エンティティ後のイメージが表示されます。
したがって、変更されたプロパティを知る必要がある場合は、InputParametersを確認してください。これは、Pre-Stageプラグインで実行できます。そして、Value、InputParametersの更新はデータベースに保存されるため、service.Updateを呼び出す必要はありません。

于 2012-04-24T07:53:36.630 に答える