Практическое руководство. Создание, обновление и удаление элементов списка
Дата последнего изменения: 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());
}
См. также
Концепции
Инструкции по использованию клиентской объектной модели
Другие ресурсы
Фрагмент кода: создание элемента во внешнем списке на клиенте
Фрагмент кода: обновление элемента во внешнем списке на клиенте
Пример кода: удаление элемента из внешнего списка на стороне клиента