1

I need to extract InfoPath form fields in C# using Client Side Object Model(CSOM) and convert it into XML file.

The code which I tried to get FormLibrary fields is

 // Starting with ClientContext, the constructor requires a URL to the // server running SharePoint. ClientContext context = new ClientContext("http://SiteURL/"); // Assume the web has a list named "Announcements". List announcementsList = context.Web.Lists.GetByTitle("MyFormLibrary"); // This creates a CamlQuery that has a RowLimit of 100, and also specifies Scope="RecursiveAll" // so that it grabs all list items, regardless of the folder they are in. CamlQuery query = CamlQuery.CreateAllItemsQuery(100); ListItemCollection items = announcementsList.GetItems(query); // Retrieve all items in the ListItemCollection from List.GetItems(Query). context.Load(items); context.ExecuteQuery(); foreach (ListItem listItem in items) { // We have all the list item data. For example, Title. Console.WriteLine( listItem["Title"]); } 

I am getting Title field as name of xml file but when I debug it, giving me error in StackTrace as

at Microsoft.SharePoint.Client.ClientObject.CheckUninitializedProperty(String propName) at Microsoft.SharePoint.Client.File.get_Name()

can anyone please help me !!! Any help is appreciated.

    1 Answer 1

    1

    I tried your code at my end and I found something useful for you.

    Please replace your foreach loop with this code and try again.

     foreach (ListItem listItem in items) { // We have all the list item data. For example, Title. Console.WriteLine("Item : {0}, Id : {1}", listItem.FieldValues["Title"], listItem.Id, listItem.FieldValues["YourField"]); var fileRef = listItem.FieldValues["FileRef"]; FileInformation fileInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(context, fileRef.ToString()); using (var memory = new System.IO.MemoryStream()) { byte[] buffer = new byte[1024 * 64]; int nread = 0; while ((nread = fileInfo.Stream.Read(buffer, 0, buffer.Length)) > 0) { memory.Write(buffer, 0, nread); } memory.Seek(0, System.IO.SeekOrigin.Begin); XDocument doc = XDocument.Load(memory); } //Console.WriteLine( listItem["Title"] + listItem.File.Name); Console.ReadKey(); } 

    Now you will be getting XML data. Please find following snap which I got while running my code.

    enter image description here

    Let me know you were looking for this only.

    1
    • 1
      hey @aakash thanks a lot it worked for me perfectly and this is all i want
      – Codec
      CommentedJul 26, 2016 at 8:27

    Start asking to get answers

    Find the answer to your question by asking.

    Ask question

    Explore related questions

    See similar questions with these tags.