web-dev-qa-db-ja.com

Sharepointリストアイテムの更新

次のエラーが発生しました...

System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません。 Microsoft.SharePoint.SPListItem.get_UniqueId()、ConsoleApplication1.Program.Main(String [] args)、Program.cs:line 21

次のコードを実行する

using (SPSite site = new SPSite("http://site/"))
{    
    using (SPWeb web = site.OpenWeb())
    {
        try
        {
            SPList list = web.Lists["ListName"]; // 2        
            SPListItem item = list.Items.Add();
            Guid itemId = item.UniqueId;
            SPListItem itemUpdate = web.Lists["ListName"].Items[itemId];
            itemUpdate["PercentComplete"] = .45; // 45%        
            itemUpdate.Update();
        }
        catch (Exception e)
        { 
            Console.WriteLine(e);
            Console.ReadLine();

        }
    }
}

どうしたの?

8
K-M

挿入したばかりのリストアイテムの値を変更しようとしている場合は、次のようにする必要があります。

_SPList list = web.Lists["ListName"];
//SPListItem item = list.Items.Add();
//item["PercentComplete"] = .45; // 45%
//item.Update();

SPListItemCollection items = list.GetItems(new SPQuery()
{
    Query = @"<Where>
                <Eq>
                   <FieldRef Name='Title' />
                   <Value Type='Text'>Desigining</Value>
                </Eq>
              </Where>"
});

foreach (SPListItem item in items)
{
    item["PercentComplete"] = .45; // 45%
    item.Update();
}
_

更新する特定のアイテムを見つける必要がある場合は、_list.Items[uniqueId]_以上のlist.GetItemByUniqueId(uniqueId)を使用する必要があります。 SPQueryクラスを使用して何を達成できるか。

11
Rubens Farias

Rubenの答えは正しかったが、エラーがほとんど発生しなかった(私だけの場合もある)ので、少し調整して問題なく動作しました。以下は、誰かが必要な場合に使用したコードです

 SPList list = web.Lists["ListName"];
                    //SPListItem item = list.Items.Add();
                    //item["PercentComplete"] = .45; 
                    // 45%//item.Update();
                   SPQuery oQuery = new SPQuery();

                        oQuery.Query = @"<Where>               
                                    <Eq>                   
                                        <FieldRef Name='Title' />                   
                                        <Value Type='Text'>Design</Value>              
                                    </Eq>            
                                  </Where>";
                        SPListItemCollection collListItems = list.GetItems(oQuery);
                        foreach (SPListItem item in collListItems)
                    {    item["PercentComplete"] = .55;   
                        item.Update();}
4
K-M

UniqueIDを取得する前に、リストのUpdate()を呼び出してみてください

 SPList list = web.Lists["ListName"]; // 2        
 SPListItem item = list.Items.Add();
 item["Title"] = "Test";
 item.Update ();
 list.Update ();
 Guid itemId = item.UniqueId;
1
axel_c

私の最高の質問は、あなたがそうするときあなたのアイテムがまだリストに作成されていないということです:

Guid itemId = item.UniqueId;
SPListItem itemUpdate = web.Lists["ListName"].Items[itemId];

UniqueIdを要求したり、リストからアイテムを取得したりする前に、まずitem.Update()を実行します。

PS:「PercentComplete」情報を更新するために2番目のSPItemオブジェクトを取得する必要がある理由はわかりません。

0
Wout