2010-03-05 13 views
8

Estoy intentando actualizar/Editar propiedades de la Subida de documentos en Sharepoint 2007.¿Cómo actualizar las propiedades de los documentos cargados en Sharepoint usando los servicios web?

Mi código:

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); 

RefiriéndoseLink.

Error de obtención: "Uno o más tipos de campo no están instalados correctamente. Vaya a la página de configuración de la lista para eliminar estos campos".

Respuesta

1

La siguiente solución se proporciona a partir de: Sin embargo http://www.codeproject.com/KB/sharepoint/File_Shunter.aspx

Tenga en cuenta, como se menciona en la otra respuesta, se requiere el nombre interno del campo.

Web.Config Claves

Si decide, con el siguiente añadido a la Web.config de la aplicación (para este ejemplo solamente, alternativamente, usted podría simplemente incluir los valores requeridos [Server, la biblioteca de documentos , de usuario, dominio, contraseña, etc.] en su código):

<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> 

código:

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

Asegúrate de estar utilizando los nombres internos de los campos.

To get the internal name of the field, open the "New" form and click "View Source" from context menu (right click any where in the "New" form page to open the context menu). You will see the fields along with their internal names near the end of the source file.

mirar el código:

string strBatch = 

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

...

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

son estos realmente dos propiedades separadas en SharePoint?

0

Intente utilizar U2UCamlCreator herramienta, para probar sus consultas sharepoint.
Esta herramienta lo ayudará a crear lotes para actualizar los campos de Sharepoint y muchas otras funciones.

Cuestiones relacionadas