2014-12-29 12 views
-1

我有下面的代碼,我試圖運行更新列表項值。 「設置」是列表名稱,此列表中的項目索引爲1.使用網絡服務代碼更新sharepoint中的現有列表項值

Main() 
{ 
     ListsSoapClient client = new ListsSoapClient();    
     client.ClientCredentials.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials; 
     client.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation; 
     string strListName = "Settings";   
     client.Open();   

     XElement listData = client.GetList(strListName); 
     string listID = listData.Attribute("ID").Value; 
     string version = listData.Attribute("Version").Value; 
     // string version = listData.Attribute("View").Value; Doesnt work 





     // Method 1 : Make the call to SharePoint 
     var listItems = client.GetListItems(strListName, null, null, null, null, null, null); 
     List<XElement> results = listItems.Descendants().ToList(); 
     XElement updateItem = results[1]; 
     updateItem.SetAttributeValue("ows_Value", "value to update"); 
     client.UpdateListItems(strListName, updateItem); //Didnt work 

     // Method 2 : Make the call to SharePoint 
     string strBatch = "<Method ID='1' Cmd='Update'>" + 
         "<Field Name='ID'>1</Field>" + 
         "<Field Name='Title'>" + "999" + "</Field></Method>"; 
     XmlDocument xmlDoc = new System.Xml.XmlDocument(); 
     System.Xml.XmlElement elBatch = xmlDoc.CreateElement("Batch"); 
     //elBatch.SetAttribute("OnError","Continue"); //Not mandatory ? 
     //elBatch.SetAttribute("ListVersion","1"); //Not mandatory ? 
     //elBatch.SetAttribute("ViewName", "00F85842-35AD-4AED-8DF7-0F903FB850BE"); is it mandatory ? 

     elBatch.InnerXml = strBatch; 
     client.UpdateListItems(strListName, XmlElementToXelement(elBatch)); //doesnt work 
     client.Close(); 
    } 

    public static XElement XmlElementToXelement(XmlElement e) 
    { 
     return XElement.Parse(e.OuterXml); 
    } 

如何使用代碼獲取列表的ViewName值?爲什麼它在方法2中不是強制性的。在方法2中,列表項標題將被替換爲值999.而我想更新該列表項的值。

在方法1結束時,我得到下面的異常。我該如何解決這個問題?

Exception of type 'Microsoft.SharePoint.SoapServer.SoapServerException' was thrown. 

回答

0

有時會出現此錯誤的原因是SOAP操作中的標頭。您需要設置以下以便進行更新。::

beforeSend:function(xhr){xhr.setRequestHeader(「SOAPAction」,「http://schemas.microsoft.com/sharepoint/soap/UpdateListItems」);

我創建了下面的函數來在共享點發送更新列表:

 var location = yoururl 
     var listName = yourlistname 
     var command = "Update" // "Update" or "New" 
     var fieldnames = ["ID","Title"]; //array with the fieldnames 
     var fieldvalues = [value1,value2]; //array with the values 

function sendupdates(location,listName,command,fieldnames,fieldvalues){ 
    var updatesvar; 
    for(x=0;x<fieldnames.length;x++){ 
    updatesvar = updatesvar + '<Field Name="'+fieldnames[x]+'">'+fieldvalues[x]+'</Field>' 
    } 

    var batchvar = '<Batch OnError="Continue" ListVersion="0"><Method ID="1" Cmd="'+command+'">'+updatesvar+'</Method></Batch>'; 

    var soapEnv = 
       '<?xml version="1.0" encoding="utf-8"?>'+ 
       '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">'+ 
       '<soap:Body>'+ 
       '<UpdateListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/">'+ 
       '<listName>'+listName+'</listName>'+ 
       '<updates>'+batchvar+'</updates>'+ 
       '</UpdateListItems>'+ 
       '</soap:Body>'+ 
       '</soap:Envelope>'; 

     $.ajax({ 
       url: location+"/_vti_bin/Lists.asmx", 
       beforeSend: function(xhr) { xhr.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/sharepoint/soap/UpdateListItems");}, 
       type: "POST", 
       dataType: "xml", 
       data: soapEnv, 
       complete: complete, 
       contentType: "text/xml; charset=\"utf-8\"" 
      }); 

}

相關問題