2016-05-26 17 views
1

Ich habe 2 Sharepoint 2013 Websites. Wenn Benutzer ein neues Element in SPList beim ersten SPSite -> Start-Workflow hinzufügen, muss die Kopie des Elements in SPList auf der zweiten SPSite hinzugefügt werden. Dies ist mein Code:Schreiben Sie auf andere Sharepoint-Website mit Webserivces

public void UpdateSPList(string Title) 
     { 
      using (AuthenticationSvc.Authentication authSvc = new AuthenticationSvc.Authentication()) 
      { 
        try 
        { 
         using (ListsSvc.Lists list = new ListsSvc.Lists()) 
         { 
          list.Url = @"http://second-srharepoint-site.com/_vti_bin/Lists.asmx"; 
          list.CookieContainer = new System.Net.CookieContainer(); 
          list.AllowAutoRedirect = true; 
          list.PreAuthenticate = true; 

          list.Credentials = new System.Net.NetworkCredential("domain\\username", "password"); 


          string strBatch = "<Method Cmd='New'><Field Name='Title'>" + Title + "</Field> "; 

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

          elBatch.InnerXml = strBatch; 
          XmlNode ndReturn = list.UpdateListItems("SPListName", elBatch); 


         } 
        } 
        finally 
        { 

        } 

      } 

     } 

Aber auf der Leitung elBatch.InnerXml = strBatch; ich Ausnahme:

  • $exception {"Unexpected end of file has occurred. The following elements are not closed: Method. Line 1, position 60."} System.Exception {System.Xml.XmlException}

Ich weiß nicht, wie dieses Problem zu beheben. Hilf mir bitte.

+1

Die XML-Zeichenfolge ist ungültig. Sie müssen Abschlusselemente für * alle * Elemente hinzufügen, nicht nur die letzten –

+1

Warum verwenden Sie CSOM nicht trotzdem? Sie können die Eigenschaft Name Title einfach wie bei jedem anderen ORM- oder OData-Client aktualisieren. Die asmx-Webdienste wurden im Jahr 2010 nicht weiter unterstützt. Daher ist Ihr Code per Definition problematisch. –

+0

Ich weiß nicht, wie es besser geht. – DisguisePerceptron

Antwort

1

Erstens ist die Zeichenfolge nicht gültige XML, da das schließende Element Method fehlt. Es sollte

"<Method Cmd='New'><Field Name='Title'>" + Title + "</Field></Method>" 

Zweitens sind die ASMX Dienstleistungen sein wurden zurück in 2010 als veraltet Sie sollten sie nicht für jeden König von Entwicklung nutzen, vor allem gegen SP 2013 Die clientseitige Objektmodell (CSOM) ist ein Los einfacher und einfacher zu bedienen. Es gibt a lot von Beispielen in der Dokumentation. Das Snippet, das ein neues Objekt erstellt wird:

// Starting with ClientContext, the constructor requires a URL to the 
// server running SharePoint. 
ClientContext context = new ClientContext("http://SiteUrl"); 

// Assume that the web has a list named "Announcements". 
List announcementsList = context.Web.Lists.GetByTitle("Announcements"); 

// We are just creating a regular list item, so we don't need to 
// set any properties. If we wanted to create a new folder, for 
// example, we would have to set properties such as 
// UnderlyingObjectType to FileSystemObjectType.Folder. 
ListItemCreationInformation itemCreateInfo = new ListItemCreationInformation(); 
ListItem newItem = announcementsList.AddItem(itemCreateInfo); 
newItem["Title"] = "My New Item!"; 
newItem["Body"] = "Hello World!"; 
newItem.Update(); 

context.ExecuteQuery(); 

Keine XML Fiedeln, erstellen Sie einfach ein neues Objekt, legen Sie seine Eigenschaften und rufen aktualisieren

+0

Ich nehme '+ ex {" Der Remote-Server hat einen Fehler zurückgegeben: (401) Nicht autorisiert. "} System.Exception {System.Net.WebException}' Wenn Sie Code nach 'list.Credentials ...' schreiben. Wie repariere es? Vielen Dank. – DisguisePerceptron