2013-04-12 53 views
1

我有我已成功地用於通過使用這裏列出的方法來拉動值到ContentPart一個Web API服務:How to change Orchard record repository如何在更新Orchard中的內容部分後執行Web服務調用?

現在,我想要做的就是更新我的ContentPart屬性的值,並有通過Web API調用執行的更新。我認爲我很接近,但無法獲得更新方法。

在我Handler,我添加了一個處理程序OnUpdate。我可以看到我的OnUpdate方法得到註冊,但它從不執行。

所以我的問題是:這是使用正確的處理程序事件?如果是這樣,我怎麼才能觸發它?

我應該補充說,我通過Controller訪問ContentPart,而不是Driver

+0

爲什麼不從控制器動作調用Web服務? 此外,即使你有一個特殊的控制器,你的部分應該有一個驅動程序。 –

+0

我們從控制器開始調用Web服務,但隨着產品變大,控制器上的操作開始難以讀取/管理。創建零件是抽象訪問我們需要的常見項目的一部分工作。我知道還有其他方法可以做到這一點,但我認爲這是一個瞭解更多關於烏節的機會,以及各部分是如何工作的。 –

+0

當我說從控制器執行它時,我並不是說所有的邏輯都應該在那裏:控制器的操作應該始終保持精簡。我的意思是從動作開始他們,但把邏輯放在服務類中。 –

回答

1

OnUpdating/OnUpdated只要您致電IContentManager.UpdateEditor(item)就會被解僱。在默認情況下,當您在編輯內容項目時點擊「保存」按鈕時會發生這種情況。

我不完全明白你的意思,「訪問ContentPart通過Controller」?

你有一個處理項目編輯器渲染,它的回傳定製控制器? 或者你是否在代碼中創建和更新了一些項目,而根本不使用內置編輯器?

  • 在前一種情況下,你需要確保 IContentEditor.UpdateEditor(item)被調用的POST操作(它在默認 控制器相同的方式 - Core\Contents\Controllers\AdminController.cs)內的全部內容 項目。
  • 在後面,我想可能是這裏的情況,OnUpdating/ OnUpdated不會被解僱,你需要調用 自己從控制器操作的Web服務,伯特蘭在評論中指出。

酒店還設有第三個選擇,我發現它在類似的情況下尤其有用:

  1. 使用LazyField<T>作爲後備領域,你需要推到Web服務更新後,這些零件屬性。
  2. 將調用懶領域的setter內部Web服務(處理器OnActivated事件過程中設置此)的代碼。
  3. 現在,無論何時你的財產得到更新,將會對Web服務進行調用,即。懶惰的字段將作爲您的Web服務和當前代碼之間的透明代理。

爲例子來說明如何用懶惰下地幹活看看到CommonPartHandler類和方法LazyLoadHandlersPropertySetHandlers

相關問題