SharePoint - Как вставить новые элементы с помощью веб-службы списка? - PullRequest
6 голосов
/ 17 сентября 2008

У меня есть список с 2 текстовыми полями и полем выбора. Как использовать веб-сервис Lists.asmx для вставки нового элемента? Я могу сделать веб-ссылку на сервис lists.asmx, чтобы вы могли предположить, что это известно.

Мне нужен полный пример, включающий код и XML для запроса CAML. В идеале образец должен использовать C #.

1 Ответ

16 голосов
/ 17 сентября 2008

Использование веб-службы Lists для вставки элемента в список SharePoint действительно может быть непростым делом. Так как этот метод имеет форму: XML in, XML out, может быть трудно получить правильные параметры.

Сначала вы должны взглянуть на определение списка. Его можно получить с помощью метода GetList (), как показано ниже:

XmlNode listXml = sharePointLists.GetList(listName);
File.WriteAllText("listdefinition.xml", listXml.OuterXml);

Здесь важны названия полей и их типы данных. Имена полей никогда не будут такими же, как те, которые вы видите в графическом интерфейсе SharePoint. Хорошим примером является поле Заголовок, которое используется для первого поля списка.

Теперь, когда вы это знаете, вы можете создать запрос для перехода в SharePoint. Пример:

<Batch OnError="Continue">
    <Method ID="1" Cmd="New">
        <Field Name="Title">Abcdef</Field>
        <Field Name="Project_x0020_code">999050</Field>
        <Field Name="Status">Open</Field>    
    </Method>
</Batch>

Элемент Batch является корневым элементом XML. Внутри вы можете положить разные методы. Они должны получить уникальный идентификатор (который используется, чтобы сообщить вам об ошибках) и команду, которая может быть, например, «Новая» или «Обновить». Внутри метода вы помещаете элементы поля, которые определяют значение для каждого поля. Например, поле «Заголовок» получает значение «Abcdef». Будьте осторожны, чтобы использовать точное имя, возвращаемое GetList ().

Чтобы выполнить запрос в SharePoint, используйте метод UpdateListItems ():

XmlNode result = sharePointLists.UpdateListItems(listDefinition.Name, updates);

Возвращаемое значение - это фрагмент XML, содержащий состояние каждого обновления. Например:

<Results xmlns="http://schemas.microsoft.com/sharepoint/soap/">
    <Result ID="1,New">
    <ErrorCode>0x00000000</ErrorCode>
    <z:row ows_ContentTypeId="0x010036F3F587127F1A44B8BA3FEFED4733C6" 
         ows_Title="Abcdef" 
         ows_Project_x0020_code="999050" 
         ows_Status="Open" 
         ows_LinkTitleNoMenu="Abcdef" 
         ows_LinkTitle="Abcdef" 
         ows_ID="1005"            
         ... 
         xmlns:z="#RowsetSchema" />
    </Result>
</Results>

Вы можете проанализировать это и посмотреть на ErrorCode, чтобы увидеть, какие методы потерпели неудачу.

На практике я создал класс-обёртку, который заботится обо всех грязных деталях для меня. К сожалению, это принадлежит моему работодателю, поэтому я не могу поделиться им с вами.

Этот класс-оболочка является частью внутренней утилиты, которая используется для извлечения информации из нашей базы данных проекта и ее публикации в SharePoint. Так как он был разработан во время работы компании, я не могу публиковать его здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...