Как обновить свойства загруженных документов на Sharepoint с помощью веб-сервисов? - PullRequest
8 голосов
/ 05 марта 2010

Я пытаюсь обновить / изменить свойства загруженного документа на Sharepoint 2007.

Мой код:

 Lists listService = new Lists();
 listService.PreAuthenticate = true;
 listService.Credentials = new NetworkCredential(username,password);
 listService.Url = "http://myserver/SiteName/_vti_bin/lists.asmx";

 string strBatch =

                   "<Method ID='1' Cmd='Update'> "
                   + " <Field Name='ID'>3</Field> "
                   + " <Field Name='Name'>Preeti</Field> "                 
                   + " </Method> ";

 XmlDocument xmlDoc = new System.Xml.XmlDocument();
 System.Xml.XmlElement elBatch = xmlDoc.CreateElement("Batch");
 elBatch.SetAttribute("OnError", "Continue");

elBatch.SetAttributeNode("UserName", "Preeti");
elBatch.InnerXml = strBatch;
XmlNode ndReturn = listService.UpdateListItems(ListName, elBatch);

MessageBox.Show(ndReturn.OuterXml); 

Ссылается Ссылка .

Ошибка при получении: «Один или несколько типов полей установлены неправильно. Перейдите на страницу настроек списка, чтобы удалить эти поля».

Ответы [ 3 ]

1 голос
/ 08 марта 2010

Предоставляется следующее решение: http://www.codeproject.com/KB/sharepoint/File_Shunter.aspx

Заметьте, однако, что, как уже упоминалось в другом ответе, ВНУТРЕННЕЕ имя поля ОБЯЗАТЕЛЬНО.

Web.Config Keys

Если вы решите, со следующим, добавленным в Web.config для вашего приложения (только для этого примера, в качестве альтернативы, вы можете просто включить необходимые значения [Сервер, Библиотека документов, Пользователь, Домен, Пароль и т. Д.] В Ваш код):

<configuration>
<appSettings>

<add key="SharePointServer" value=http://SP Portal/Site/>
<add key="DocLibrary" value="Doclib"/>
<add key="User" value="User"/>
<add key="Domain" value="Domain"/>
<add key="Pwd" value="Pwd"/>
<add key="GlobalSharedPath" value="D:\"/>
</appSettings>

Код:

Public Function WSSUpdateFile(ByVal sFileName As String, ByVal sSiteDoc As String, ByVal sTestCol As String) As String

        Dim sUser As String = ConfigurationManager.AppSettings("User")
        Dim sPwd As String = ConfigurationManager.AppSettings("Pwd")
        Dim sDomain As String = ConfigurationManager.AppSettings("Domain")
        Dim sFileIDinList As String
        Dim strBatch As String = ""
        sSiteDoc = Replace(sSiteDoc, "%20", " ")
        sSiteDoc = Replace(sSiteDoc, "\", "/")
        Dim sFinalFilePath As String
        Dim sSPURL As String = ConfigurationManager.AppSettings("SharePointServer")
        Dim sDocLib As String = ConfigurationManager.AppSettings("DocLibrary")
        Try
            Dim netAccess As System.Net.NetworkCredential = New System.Net.NetworkCredential(sUser, sPwd, sDomain)
            Dim listService As New SPLists.Lists
            listService.Url = sSPURL & "/_vti_bin/lists.asmx"
            listService.Credentials = netAccess
            sFileIDinList = sGetID(listService.Url, sDocLib, sFileName)
            If sFileIDinList <> "" Then
                sFinalFilePath = sSPURL & "/" & sDocLib & "/" & sFileName
                'Now we have FileID so update the list
                strBatch = "<Method ID='1' Cmd='Update'>" + _
                    "<Field Name = 'ID'>" & sFileIDinList & "</Field>" + _
                    "<Field Name = 'FileRef'>" & sFinalFilePath & "</Field>" + _
                    "<Field Name = 'TestCol'>" & sTestCol & "</Field>" + _
                    "</Method>"
                Dim xmlDoc = New System.Xml.XmlDocument
                Dim elBatch As System.Xml.XmlElement = xmlDoc.createelement("Batch")
                elBatch.InnerXml = strBatch
                Dim ndreturn As System.Xml.XmlNode = listService.UpdateListItems(sDocLib, elBatch)
            End If
            Return "TRUE"
        Catch ex As Exception
            Return ex.Message
        End Try
    End Function

Private Function sGetID(ByVal sURL As String, ByVal sListGUID As String, ByVal sFileName As String) As String
        Dim sUser As String = ConfigurationManager.AppSettings("User")
        Dim sPwd As String = ConfigurationManager.AppSettings("Pwd")
        Dim sDomain As String = ConfigurationManager.AppSettings("Domain")
        Dim netAccess As System.Net.NetworkCredential = New System.Net.NetworkCredential(sUser, sPwd, sDomain)
        Dim L As New SPLists.Lists
        L.Credentials = netAccess
        L.Url = sURL
        Dim xmldoc As XmlDocument = New XmlDocument
        Dim query As XmlNode = xmldoc.CreateNode(XmlNodeType.Element, "Query", "")
        query.InnerXml = "<OrderBy><FieldRef Name='Modified'  Ascending='False'></FieldRef></OrderBy>"""
        Try
            Dim caml As XmlNode = L.GetListItems(sListGUID, Nothing, query, Nothing, "1", Nothing)
            Dim id As String = caml.ChildNodes(1).ChildNodes(1).Attributes("ows_ID").Value
            Return id
        Catch ex As Exception
            Return ex.Message
        End Try
    End Function
0 голосов
/ 08 марта 2010

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

0 голосов
/ 08 марта 2010

Убедитесь, что вы используете внутренние имена полей.

Чтобы получить внутреннее имя поля, откройте форму «New» и нажмите «View Source» в контекстном меню (щелкните правой кнопкой мыши в любом месте страницы формы «New», чтобы открыть контекстное меню). Вы увидите поля вместе с их внутренними именами в конце исходного файла.

смотрит на код:

string strBatch =

               "<Method ID='1' Cmd='Update'> "
               + " <Field Name='ID'>3</Field> "
               + " <Field Name='Name'>Preeti</Field> "                 
               + " </Method> ";

...

elBatch.SetAttributeNode("UserName", "Preeti");

это на самом деле два отдельных свойства в sharepoint?

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