3

MOSS リストで作成される次のリスト アイテムの ID を特定しようとしています。これを行う方法はありますか?

ありがとう、マジックアンディ

4

4 に答える 4

0

私はこの問題に対する別の解決策を見つけました。

私が抱えていた問題はバージョンに関連していました:

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

リストにバージョン管理がありましたが、新しいアイテムの2つの異なるバージョンを作成したくありませんでした。このように解決しました:

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を提供しませんが、誰かの根本的な問題を解決する可能性があります。

于 2010-04-20T13:48:32.927 に答える
0

このリンクを見てください: http://snipplr.com/view/24210/next-splistitem-id-from-splist/、私はこの解決策を試しましたが、他の欠点を克服しています.WSSコンテンツDBにクエリを実行する必要があります.少し高価になりますが、他のロジックの後に colItems.Count == 0 の場合にのみ DB をクエリするハイブリッド ソリューションを実装できます。

よろしく!

于 2010-02-01T23:34:04.587 に答える
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+1 である必要があるときに N を返します。

于 2009-08-06T15:38:01.523 に答える
0

リスト項目を作成してその ID を記録し、リスト項目を削除すると、次のリスト項目の ID+1 が確実に得られます。これにより、最後のアイテムが削除された場合が解決されます。

もちろん、これは非常に厄介です..しかし、コンテンツ データベースからの読み取りも同様です。

なぜ必要なのか聞いてもいいですか?または、GUID を含む列をリストに追加して、ID を自分で事前に生成することもできます。

于 2010-02-02T00:40:11.817 に答える