DisguisePerceptron
DisguisePerceptron

Reputation: 117

Write on other sharepoint site using webserivces

I have 2 Sharepoint 2013 sites. When user adding new item in SPList at first SPSite -> starting workflow, what must added copy of item in SPList at second SPSite. This is my code:

   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
                    {

                    }

            }

        }

But on line elBatch.InnerXml = strBatch; I get exception:

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

I don't know how fix this problem. Help me, please.

Upvotes: 1

Views: 116

Answers (1)

Panagiotis Kanavos
Panagiotis Kanavos

Reputation: 131581

First, the string isn't valid XML because the closing Method element is missing. It should be

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

Second, the ASMX services were deprecated back in 2010. You shouldn't use them for any king of development, especially against SP 2013. The client-side object model (CSOM) is a lot simpler and easier to use. There are a lot of examples in the documentation. The snippet that creates a new item is :

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

No XML fiddling, you simply create a new item, set its properties and call Update

Upvotes: 1

Related Questions