Практическое руководство. Создание, обновление и удаление элементов списка

Дата последнего изменения: 29 апреля 2011 г.

Применимо к: SharePoint Foundation 2010

В этой статье
Создание элемента списка
Обновление элемента списка
Удаление элемента списка

Доступно на сайте SharePoint Online

Создание, обновление и удаление элементов списка с помощью клиентской объектной модели работает аналогично выполнению этих задач с помощью серверной объектной модели. Можно создать объект элемента списка, установить его свойства, а затем обновить этот объект. Чтобы изменить или удалить объект "элемент списка", сначала необходимо вернуть этот объект с помощью метода GetById() (JavaScript: getById(ИД)) класса ListItemCollection (JavaScript: ListItemCollection), а затем либо установить свойства и вызвать обновление в объекте, возвращенном методом, либо вызвать собственный метод объекта для удаления. В отличие от серверной объектной модели, каждая из этих операций в клиентской объектной модели должна завершаться вызовом метода ExecuteQuery() или ExecuteQueryAsync(ClientRequestSucceededEventHandler, ClientRequestFailedEventHandler) (JavaScript: executeQueryAsync(succeededCallback, failedCallback)), чтобы изменения вступили в силу на сервере.

Создание элемента списка

Чтобы создать элементы списка, следует создать объект ListItemCreationInformation (JavaScript: ListItemCreationInformation), установить его свойства и передать его как параметр в метод AddItem(ListItemCreationInformation) (JavaScript: addItem(параметры)) класса List (JavaScript: List). Затем устанавливаются свойства объекта "элемент списка", который возвращает этот метод, и вызывается метод Update() (JavaScript: update()), как показано в следующем примере.

using System;
using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;

namespace Microsoft.SDK.SharePointServices.Samples
{
    class CreateListItem
    {
        static void Main()
        {   
            string siteUrl = "http://MyServer/sites/MySiteCollection";

            ClientContext clientContext = new ClientContext(siteUrl);
            SP.List oList = clientContext.Web.Lists.GetByTitle("Announcements");

            ListItemCreationInformation itemCreateInfo = new ListItemCreationInformation();
            ListItem oListItem = oList.AddItem(itemCreateInfo);
            oListItem["Title"] = "My New Item!";
            oListItem["Body"] = "Hello World!";

            oListItem.Update();

            clientContext.ExecuteQuery(); 
        }
    }
}
Imports System
Imports Microsoft.SharePoint.Client
Imports SP = Microsoft.SharePoint.Client

Namespace Microsoft.SDK.SharePointServices.Samples
    Class CreateListItem

        Shared Sub Main ()

            Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"

            Dim clientContext As New ClientContext(siteUrl)
            Dim oList As SP.List = clientContext.Web.Lists.GetByTitle("Announcements")

            Dim itemCreateInfo As New ListItemCreationInformation()
            Dim oListItem As ListItem = oList.AddItem(itemCreateInfo)
            oListItem("Title") = "My New Item!"
            oListItem("Body") = "Hello World!"

            oListItem.Update()

            clientContext.ExecuteQuery()

        End Sub
    End Class
End Namespace
var siteUrl = '/sites/MySiteCollection';

function createListItem() {

    var clientContext = new SP.ClientContext(siteUrl);
    var oList = clientContext.get_web().get_lists().getByTitle('Announcements');
        
    var itemCreateInfo = new SP.ListItemCreationInformation();
    this.oListItem = oList.addItem(itemCreateInfo);
        
    oListItem.set_item('Title', 'My New Item!');
    oListItem.set_item('Body', 'Hello World!');
        
    oListItem.update();

    clientContext.load(oListItem);
        
    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}

function onQuerySucceeded() {

    alert('Item created: ' + oListItem.get_id());
}

function onQueryFailed(sender, args) {

    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

Поскольку в предыдущем примере создается обычный элемент списка, не требуется устанавливать свойства объекта ListItemCreationInformation (JavaScript: ListItemCreationInformation) до его передачи в метод AddItem(ListItemCreationInformation) (JavaScript: addItem(параметры)). Однако если код должен создать, например, новую папку, необходимо установить свойство UnderlyingObjectType (JavaScript: underlyingObjectType) объекта ListItemCreationInformation (JavaScript: ListItemCreationInformation) в значение Folder (JavaScript: folder).

Дополнительные сведения и пример создания объекта "элемент списка" в контексте объектной модели Microsoft SharePoint Foundation 2010 Silverlight см. в статье Использование объектной модели Silverlight.

Обновление элемента списка

Для установки большинства свойств элемента списка можно с помощью индексатора столбца создать назначение, а затем вызвать метод Update() (JavaScript: update()), чтобы изменения вступили в силу при вызове метода ExecuteQuery() или ExecuteQueryAsync(ClientRequestSucceededEventHandler, ClientRequestFailedEventHandler) (JavaScript: executeQueryAsync(succeededCallback, failedCallback)). В следующем примере устанавливается заголовок третьего элемента списка Announcements.

using System;
using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;

namespace Microsoft.SDK.SharePointServices.Samples
{
    class UpdateListItem
    {
        static void Main()
        {   
            string siteUrl = "http://MyServer/sites/MySiteCollection";

            ClientContext clientContext = new ClientContext(siteUrl);
            SP.List oList = clientContext.Web.Lists.GetByTitle("Announcements");
            ListItem oListItem = oList.Items.GetById(3);

            oListItem["Title"] = "My Updated Title.";

            oListItem.Update();

            clientContext.ExecuteQuery(); 
        }
    }
}
Imports System
Imports Microsoft.SharePoint.Client
Imports SP = Microsoft.SharePoint.Client

Namespace Microsoft.SDK.SharePointServices.Samples
    Class UpdateListItem

        Shared Sub Main ()

            Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"

            Dim clientContext As New ClientContext(siteUrl)
            Dim oList As List = clientContext.Web.Lists.GetByTitle("Announcements")
            Dim oListItem As ListItem = oList.Items.GetById(3)

            oListItem("Title") = "My Updated Title."

            oListItem.Update()

            clientContext.ExecuteQuery()

        End Sub
    End Class
End Namespace
var siteUrl = '/sites/MySiteCollection';

function updateListItem() {

    var clientContext = new SP.ClientContext(siteUrl);
    var oList = clientContext.get_web().get_lists().getByTitle('Announcements');

    this.oListItem = oList.getItemById(3);

    oListItem.set_item('Title', 'My Updated Title');

    oListItem.update();

    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}

function onQuerySucceeded() {

    alert('Item updated!');
}

function onQueryFailed(sender, args) {

    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

Удаление элемента списка

Чтобы удалить элемент списка, следует вызвать метод DeleteObject() (JavaScript: deleteObject()) в удаляемом объекте. В следующем примере с помощью метода GetItemById() (JavaScript: getItemById(ИД)) возвращается второй элемент из списка, а затем этот элемент удаляется.

SharePoint Foundation 2010 обслуживает целочисленные идентификаторы элементов в коллекциях, даже если эти элементы удаляются. Поэтому, например, второй элемент может иметь идентификатор, отличный от 2. Если метод DeleteObject() (JavaScript: deleteObject()) вызывается для несуществующего элемента, то возникает исключение ServerException.

using System;
using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;

namespace Microsoft.SDK.SharePointServices.Samples
{
    class DeleteListItem
    {
        static void Main()
        {   
            string siteUrl = "http://MyServer/sites/MySiteCollection";

            ClientContext clientContext = new ClientContext(siteUrl);
            SP.List oList = clientContext.Web.Lists.GetByTitle("Announcements");
            ListItem oListItem = oList.GetItemById(2);

            oListItem.DeleteObject();

            clientContext.ExecuteQuery(); 
        }
    }
}
Imports System
Imports Microsoft.SharePoint.Client
Imports SP = Microsoft.SharePoint.Client

Namespace Microsoft.SDK.SharePointServices.Samples
    Class DeleteListItem

        Shared Sub Main ()

            Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"

            Dim clientContext As New ClientContext(siteUrl)
            Dim oList As List = clientContext.Web.Lists.GetByTitle("Announcements")
            Dim oListItem As ListItem = oList.GetItemById(2)

            oListItem.DeleteObject()

            clientContext.ExecuteQuery()
        End Sub
    End Class
End Namespace
var siteUrl = '/sites/MySiteCollection';

function deleteListItem() {

    this.itemId = 2;

    var clientContext = new SP.ClientContext(siteUrl);
    var oList = clientContext.get_web().get_lists().getByTitle('Announcements');

    this.oListItem = oList.getItemById(itemId);

    oListItem.deleteObject();

    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}

function onQuerySucceeded() {

    alert('Item deleted: ' + itemId);
}

function onQueryFailed(sender, args) {

    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

Если, например, требуется получить новое количество элементов, появившееся в результате операции удаления, следует включить вызов метода Update() (JavaScript: update()), чтобы обновить список. Кроме того, перед выполнением запроса необходимо загрузить либо сам объект "список", либо его свойство ItemCount (JavaScript: itemCount). Если требуется получить как исходное, так и итоговое количество элементов списка, то необходимо выполнить два запроса и получить число элементов дважды, как показано в следующем варианте предыдущего примера.

using System;
using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;

namespace Microsoft.SDK.SharePointServices.Samples
{
    class DeleteListItemDisplayCount
    {
        static void Main()
        {   
            string siteUrl = "http://MyServer/sites/MySiteCollection";

            ClientContext clientContext = new ClientContext(siteUrl);
            SP.List oList = clientContext.Web.Lists.GetByTitle("Announcements");

            clientContext.Load(oList,
                list => list.ItemCount);

            clientContext.ExecuteQuery();

            int startCount = oList.ItemCount;
            ListItem oListItem = oList.GetItemById(2);

            oListItem.DeleteObject();

            oList.Update();

            clientContext.Load(oList,
                list => list.ItemCount);

            clientContext.ExecuteQuery();

            int endCount = oList.ItemCount;

            Console.WriteLine("Start: {0}  End: {1}", startCount, endCount);
        }
    }
}
Imports System
Imports Microsoft.SharePoint.Client
Imports SP = Microsoft.SharePoint.Client

Namespace Microsoft.SDK.SharePointServices.Samples
    Class DeleteListItemDisplayCount

        Shared Sub Main ()

            Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"

            Dim clientContext As New ClientContext(siteUrl)
            Dim oList As List = clientContext.Web.Lists.GetByTitle("Announcements")

            clientContext.Load(oList, Function(list) list.ItemCount)

            clientContext.ExecuteQuery()

            Dim startCount As Integer = oList.ItemCount
            Dim oListItem As ListItem = oList.GetItemById(2)

            oListItem.DeleteObject()

            oList.Update()

            clientContext.Load(oList, Function(list) list.ItemCount)

            clientContext.ExecuteQuery()

            Dim endCount As Integer = oList.ItemCount

            Console.WriteLine("Start: {0}  End: {1}", startCount, endCount)
        End Sub
    End Class
End Namespace
var siteUrl = '/sites/MySiteCollection';

function deleteListItemDisplayCount() {

    this.clientContext = new SP.ClientContext(siteUrl);
    this.oList = clientContext.get_web().get_lists().getByTitle('Announcements');

    clientContext.load(oList);

    clientContext.executeQueryAsync(Function.createDelegate(this, this.deleteItem), Function.createDelegate(this, this.onQueryFailed));
}

function deleteItem() {

    this.itemId = 58;
    this.startCount = oList.get_itemCount();
    this.oListItem = oList.getItemById(itemId);

    oListItem.deleteObject();

    oList.update();

    clientContext.load(oList);
        
    clientContext.executeQueryAsync(Function.createDelegate(this, this.displayCount), Function.createDelegate(this, this.onQueryFailed));
}

function displayCount() {

    var endCount = oList.get_itemCount();
    var listItemInfo = 'Item deleted: ' + itemId + 
        '\nStart Count: ' +  startCount + ' End Count: ' + endCount;
        
    alert(listItemInfo)
}

function onQueryFailed(sender, args) {

    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

См. также

Концепции

Создание клиентского объекта

Инструкции по использованию клиентской объектной модели

Обзор извлечения данных

Получение элементов списка

Общие задачи программирования

Другие ресурсы

Фрагмент кода: создание элемента во внешнем списке на клиенте

Фрагмент кода: обновление элемента во внешнем списке на клиенте

Пример кода: удаление элемента из внешнего списка на стороне клиента

Библиотека классов для клиента

Библиотека классов ECMAScript