SharePoint - Как вставлять новые элементы с помощью веб-службы list?

StackOverflow https://stackoverflow.com/questions/85392

  •  01-07-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

Сначала вы должны взглянуть на определение списка.Его можно получить с помощью метода 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-файла.Внутрь вы можете поместить различные Методы.Они должны получить уникальный идентификатор (который используется для отправки вам сообщения об ошибках) и команду, которая может быть, например, "New" или "Update".Внутри Метода вы помещаете элементы Field, которые задают значение для каждого поля.Например, поле Title получает значение "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>

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top