2009-08-06 2 views
3

MOSS 목록에서 생성 될 다음 목록 항목의 ID가 무엇인지 결정하려고합니다. 이 일을하는 방법이 있습니까?MOSS SPList에서 다음 SPListItem ID를 확인 하시겠습니까?

감사합니다, MagicAndi

가장 가능성이 ID를 결정하는 것이 다음 CAML 쿼리는 다음에 발생하는
+1

이것은 사용자의 접근 방식을 재고해야하는 질문 유형입니다. 왜 미래를 알 필요가 있습니까? 이 가치는 무엇을 필요로합니까? –

답변

0

:

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 + 1 일 때 N을 반환합니다.

+1

목록에서 모든 항목을 삭제해도 내부에서 숫자가 유지되는 경우에도 코드가 1을 반환하는 경우에도 작동하지 않습니다. – murki

0

http://snipplr.com/view/24210/next-splistitem-id-from-splist/이 솔루션을 사용해 보았지만 다른 단점을 극복하고 WSS 콘텐츠 DB를 쿼리하는 작업이 조금 더 비싸지 만 하이브리드 솔루션을 구현할 수 있습니다. 다른 논리 뒤에 colItems.Count == 0 인 경우에만 DB를 쿼리합니다.

감사합니다.

0

목록 항목을 만들 수 있는지 확인하려면 ID를 기록하고 목록 항목을 삭제하면 다음 목록 항목의 ID가 +1이됩니다. 이것은 마지막 항목이 삭제 된 경우를 극복해야합니다.

물론 이것은 꽤 괜찮습니다.하지만 콘텐츠 데이터베이스에서 읽는 것도 마찬가지입니다.

이유가 필요한지 묻습니다. 또는 ID를 미리 생성 할 수 있도록 GUID가 포함 된 열을 목록에 추가 할 수 있습니다.

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 (false) 새 버전을 트리거하지 않고 항목을 업데이트합니다. 희망이 도움이! –

관련 문제