2009-08-06 10 views
3

我想確定在MOSS列表中要創建的下一個列表項的ID是什麼。有沒有辦法做到這一點?確定MOSS SPList中的下一個SPListItem ID?

感謝,MagicAndi

+1

這是一個應該讓你重新思考你的方法的問題。你爲什麼需要了解未來?你需要什麼價值? – 2009-08-06 17:11:29

回答

0

將產生以下CAML查詢將確定最可能的ID旁:

int iNextID = 1; 

try 
{ 
    using (SPSite objSite = new SPSite(sSiteUrl)) 
    { 
     using (SPWeb objWeb = objSite.OpenWeb()) 
     { 
      SPList objList = objWeb.Lists[sListName]; 

      SPQuery objQuery = new SPQuery(); 
      // objQuery.RowlImit = 1; 
      objQuery.Query = "<OrderBy><FieldRef Name='ID' Ascending='False' /></OrderBy><RowLimit>1</RowLimit>"; 
      objQuery.Folder = objList.RootFolder; 

      // Execute the query against the list 
      SPListItemCollection colItems = objList.GetItems(objQuery); 

      if (colItems.Count > 0) 
      { 
       string sMaxID = colItems[0]["ID"].ToString(); 
       iNextID += int.Parse(sMaxID); 
      } 
     } 
    } 
} 
catch (Exception ex) 
{ 
    ... 
} 

return iNextID; 

然而,這並沒有爲案件工作,而且最近生成的列表項(與ID N)被刪除,然後我們使用上面的代碼給出下一個ID - 它將返回N,當它應該是N + 1。

+1

是的,如果刪除列表中的所有項目,代碼將返回1,即使內部仍在計數 – murki 2010-01-29 23:01:38

0

看看這個鏈接:http://snipplr.com/view/24210/next-splistitem-id-from-splist/,我試過這個解決方案,它克服了其他的缺點,它涉及到查詢WSS內容數據庫可能有點貴,但你可以實現一個混合解決方案,你會在其他邏輯後面查詢數據庫,如果colItems.Count == 0。

問候!

0

如果你想更確定你可以創建一個listitem,記錄它的ID,刪除列表項,下一個listitem將有ID + 1。這應該克服最後一項被刪除的情況。

當然,這是非常不正常的..但是從內容數據庫中讀取也是如此。

請問你爲什麼需要它?或者,您可以向包含GUID的列表添加一列,以便您自己預先生成ID。

0

我發現了另一個解決這個問題的方法。

的問題,我是有關版本:

var newItem = myList.Items.Add(); 
newItem["Title"] = "whatever"; 
newItem.Update(); 
newItem["MyProperty"] = "whatever" + newItem.ID; 
newItem.Update(); 

我不得不版本我的名單上,但不希望創建兩個不同的版本我的新項目。 解決這樣的:

var newItem = myList.Items.Add(); 
newItem["Title"] = "whatever"; 
newItem.Update(); 
myList.EnableVersioning = false; 
myList.Update(); 
newItem["MyProperty"] = "whatever" + newItem.ID; 
newItem.Update(); 
myList.EnableVersioning = true; 
myList.Update(); 

有人可能會認爲開啓關閉版本將刪除所有版本,除了當前但事實並非如此。

這不會給你下一個ID,但可能會解決某人的根本問題。

+0

而不是關閉和版本控制,更好的解決方案是調用newItem.SystemUpdate(假)來更新該項目而不觸發新版本。希望這可以幫助! – 2017-03-01 17:42:34