2010-02-25 65 views
1

還有一個問題。SharePoint項目添加事件延遲

所以現在我的EventReceiver和它的邏輯工作得很好。除了一件事。

基本上它通過查詢查詢CAML整個列表,然後將結果傳遞給DataTable對象,後來就到DataRow對象...

像所有的,在測試環境中,它的作品完美,但在生產...

會發生什麼是我需要更新的列獲取更新,但不立即顯示。項目列收到我想要的值,但它不會在第一次刷新時顯示,您必須再次刷新頁面,然後出現...

唯一的區別是在teste env中。我的清單有200個記錄,而且在生產中,它有近5000條記錄。

一些問題:

  • 有沒有一種方法來定義你想要多少記錄?在CAML中還是在DataTable對象中?像「SELECT TOP 100 ...」
  • 如果不是,有沒有辦法讓刷新過程停止並等待代碼執行?

一些信息:

  • 這是WSS 3.0,而我攔截事件ItemAdded,這也解釋了刷新不是在等待我的代碼。

哦,並考慮改變ItemAdding事件會有點問題,因爲我需要捕獲記錄的ID,這是尚未在ItemAdding中提供,因爲列表項尚未提交到數據庫呢。

在此先感謝。

回答

1

經過大量搜索後,我最終將代碼移動到ItemAdding事件中,該事件是同步的,並會在SharePoint加載其頁面之前完成執行。

即使在將結果行限制爲5之後,它仍然會加載沒有我想要顯示的值的頁面。


另外,如果你正在考慮捕獲從使用計算值,並在其公式的字段的值,要小心,因爲至少在我的例子時,SharePoint沒有解決的情況下公式執行,所以具有計算值的字段將始終返回null

1

類似的問題和答案here。您應該可以使用SPQuery的Rowlimit屬性。

2

這裏的問題是「GetDataTable()」方法。當我運行CAML查詢並用結果填充數據表時,它將失去修飾符的順序。但是,如果我用SPListItemCollection對象得到結果,它就會返回我想要的行數。

在另一篇文章中看到......「這是一個討厭的問題」。