2012-04-23 52 views
4

我希望有人爲能幫助我一個問題,我一直在試圖解決已經結束了一段時間。我有一個創建插件和一個更新插件。出於測試目的,我的創建插件(Pre-Operation)進行簡單的計算,並在保存後將結果放在字段中。當我註冊它的前操作和改變,我有我的邏輯領域前期及後期實體圖像2011

我的更新插件正常工作。但是,如果我只更改其中一個字段(或在表單上弄髒其他字段),則會出現該字典中不存在該鍵的錯誤。我已經完成了我的研究,並且看到您在「實體前圖像」和「實體後圖像」之間進行檢查,以檢查哪些字段已更新,哪些未更新。但我感到困惑的是,當我這樣做時,我需要在post-opertion上註冊我的更新插件,這導致我的更新不再工作,如果我在代碼的末尾執行service.Update(entity),它會給出我又一次無限循環的錯誤。在我的Update插件上,我確定我註冊了兩個圖像(Pre和Post)。我很感激,如果有人能夠指導我,如何做前後圖像之間的檢查?

+1

你可以發佈插件的代碼?如果我的理解是正確的,你不應該需要的前/後圖像 – glosrob 2012-04-23 14:45:00

+1

你好非常感謝你對你的反應,是訣竅是把if語句有權在exceute方法的頂部(如果(context.depth> 1)return;)欣賞你昨天晚上自己發現的答案:-)。 - – 2012-04-24 09:28:56

回答

3

我們需要查看您的代碼。但我可以提供簡短的解釋。
service.Update(entity)打電話給你的插件一個更多的時間,因爲它的另一個更新到您的插件中註冊的法人實體。爲了避免這種無限循環,你可以觀看Depth屬性。每個新的插件調用都會增加此屬性的值。

如果你想知道什麼樣的屬性更新過程中發生了變化,只需要看着InputParameters。只會有更新的屬性值。

預實體圖像可用於更新信息,但不能用於創建(這是不可能有一個形象其實之前創建實體實例)。但是,在創建和更新消息的情況下,實體後圖像會呈現。
因此,如果您需要知道哪些屬性發生了變化,請檢查InputParameters。您可以在Pre-Stage插件中執行此操作。並且值,InputParameters中的更新將被存儲在數據庫中,因此您不需要調用service.Update。

+0

嗨,非常感謝您的回覆,是的訣竅就是在優秀方法的頂部添加一個if語句權限(if(context.depth> 1)return;)欣賞您昨天自己發現的答覆晚上:-)。 – 2012-04-24 09:28:30

+1

考慮將此答案標記爲已接受,因爲它似乎在此情況下爲您提供了答案 – glosrob 2012-04-24 10:42:45