2010-03-05 57 views
8

我想更新在SharePoint 2007如何使用Web服務更新Sharepoint上上載文檔的屬性?

我的代碼上傳文檔/編輯屬性:

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

爲參照Link

獲取錯誤:「一個或多個字段類型未正確安裝,轉到列表設置頁面以刪除這些字段」。

回答

1

以下解決方案從提供:但是http://www.codeproject.com/KB/sharepoint/File_Shunter.aspx

注意,如其他答覆中提到,需要現場的內部名稱。

的Web.Config鍵

如果您選擇,用下面的添加到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

檢查以確保您使用的是字段的內部名稱。

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.

看代碼:

string strBatch = 

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

...

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

是在SharePoint這實際上是兩個單獨的屬性?

0

嘗試使用U2UCamlCreator工具來測試您的Sharepoint查詢。
此工具將幫助您構建批次以更新共享點字段和許多其他功能。

相關問題