Hi Concern,
I am using Client Site CSOM coding and getting error
Smart Parts user control detail is required and while converting throws error.
Cannot covert type ‘Microsoft.SharePoint.Client.WebParts.WebPart’ to ‘GenericSmartPart.SmartPart’
Code is associted as problem.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.SharePoint.Client; using Microsoft.SharePoint.Client.WebParts; using Microsoft.SharePoint.Client.Utilities; using System.Data; namespace TrainingCsharp { class Class1 { public void print() { // Starting with ClientContext, the constructor requires a URL to the // server running SharePoint. using (ClientContext context = new ClientContext("http://kmuat.hcl.com/engagement/Aegon")) { // The SharePoint web at the URL. Web web = context.Web; // We want to retrieve the web's properties. // context.Load(web, w => w.Title, w => w.Description); context.Load(web, w => w.Title, w => w.Description, w => w.ServerRelativeUrl); context.ExecuteQuery(); string sUrl= web.ServerRelativeUrl; File oFile = context.Web.GetFileByServerRelativeUrl(sUrl+"/Pages/default.aspx"); LimitedWebPartManager limitedWebPartManager = oFile.GetLimitedWebPartManager(PersonalizationScope.Shared); context.Load(limitedWebPartManager.WebParts, wps => wps.Include( wp => wp.WebPart.Title, wp => wp.WebPart.ZoneIndex )); context.ExecuteQuery(); int count = limitedWebPartManager.WebParts.Count; string[] arr, arr1; if (count == 0) { Console.WriteLine("No Web Parts on this page."); } else { arr = new string[count]; arr1 = new string[count]; string sControlName = null; for (int i = 0; i < count; i++) { WebPartDefinition oWebPartDefinition = limitedWebPartManager.WebParts[i]; WebPart oWebPart = oWebPartDefinition.WebPart; arr[i] = oWebPart.Title; if (arr[i].ToLower().Contains("generic")) { sControlName = ((GenericSmartPart.SmartPart)(oWebPart)).UserControlPath; } //else if (arr[i].ToLower().Contains("smartpart")) //{ //sControlName = ((SmartPart.SmartPart)(oWebPart)).UserControl; //} //else if (arr[i].EndsWith("ListViewWebPart")) //{ //sControlName = ((Microsoft.SharePoint.Client.ListItemCollection)(oWebPart)).ListName; //} //else if (arr[i].StartsWith("Microsoft.SharePoint.WebPartPages.")) //{ //sControlName = arr[i].Length > 34 ? arr[i].Substring(34) : ""; //} //else //{ //sControlName = ""; //} arr1[i] = Convert.ToString(oWebPart.ZoneIndex); Console.Write(arr[i] + " "); Console.WriteLine("Position" + arr1[i]); // ctx.ExecuteQuery(); } List announcementsList = context.Web.Lists.GetByTitle("Announcements"); // 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(1000); ListItemCollection items = announcementsList.GetItems(query); // Retrieve all items in the ListItemCollection from List.GetItems(Query). context.Load(items, itema => itema.Include( item => item, item => item["Title"], item => item["Expires"], item => item["Body"], item => item.FieldValuesAsText["Body"], item => item["Author"], item => item["Editor"] )); context.ExecuteQuery(); foreach (ListItem listItem in items) { // We have all the list item data. For example, Title. Console.WriteLine("Title" + listItem["Title"]+ " "); Console.WriteLine("Body" + listItem["Body"] != null ? Convert.ToString(listItem.FieldValuesAsText["Body"]) : string.Empty + " "); Console.WriteLine("Expires " + Convert.ToDateTime(listItem["Expires"] + " ")); FieldUserValue oValue = listItem["Author"] as FieldUserValue; String strAuthorName = oValue.LookupValue; Console.WriteLine("Created at " + strAuthorName + " "); FieldUserValue oValue1 = listItem["Editor"] as FieldUserValue; String strAuthorName1 = oValue1.LookupValue; Console.WriteLine("Last Modified " + strAuthorName1); } //Console.ReadKey(); DataTable table = new DataTable(); table.Columns.Add("Title"); table.Columns.Add("Body"); table.Columns.Add("Expires"); table.Columns.Add("Author"); table.Columns.Add("Editor"); foreach (ListItem listItem in items) { FieldUserValue oValue = listItem["Author"] as FieldUserValue; String strAuthorName = oValue.LookupValue; FieldUserValue oValue1 = listItem["Editor"] as FieldUserValue; String strAuthorName1 = oValue1.LookupValue; table.Rows.Add(listItem["Title"],listItem["Body"],Convert.ToDateTime(listItem["Expires"]),strAuthorName,strAuthorName1); } //datagrid.DataSource = table; //ctx.ExecuteQuery(); List EventsList = context.Web.Lists.GetByTitle("Event Calendar"); // 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 queryEvent = CamlQuery.CreateAllItemsQuery(1000); ListItemCollection itemsEvent = EventsList.GetItems(queryEvent); // Retrieve all items in the ListItemCollection from List.GetItems(Query). context.Load(itemsEvent, itema => itema.Include( item => item, item => item["Title"], item => item["Location"], item => item["EventDate"], item => item["EndDate"], item => item["Description"], item => item.FieldValuesAsText["Description"], item => item["Event_x0020_Contact"], item => item["Event_x0020_Category"], item => item["Inhouse_x0020__x002f__x0020_Exte"], item => item["Expires_x0020_On"], item => item["Author"], item => item["Editor"] )); context.ExecuteQuery(); foreach (ListItem listItemEvent in itemsEvent) { // We have all the list item data. For example, Title. Console.WriteLine("Items of Events to be Printed"); Console.WriteLine("Title: " + listItemEvent["Title"] + " "); Console.WriteLine("Title: " + listItemEvent["Location"] + " "); Console.WriteLine("Event Date: " + Convert.ToDateTime(listItemEvent["EventDate"] + " ")); Console.WriteLine("End Date: " + Convert.ToDateTime(listItemEvent["EndDate"] + " ")); string sDescription = listItemEvent["Description"] != null ? Convert.ToString(listItemEvent.FieldValuesAsText["Description"]) : ""; Console.WriteLine("Description: " + sDescription); Console.WriteLine("Event Contact: " + listItemEvent["Event_x0020_Contact"] + " "); Console.WriteLine("Event Category: " + listItemEvent["Event_x0020_Category"] + " "); Console.WriteLine("Inhouse / External: " + listItemEvent["Inhouse_x0020__x002f__x0020_Exte"]); Console.WriteLine("Expires: " + Convert.ToDateTime(listItemEvent["Expires_x0020_On"])); FieldUserValue oAuthor = listItemEvent["Author"] as FieldUserValue; String sAuthor = oAuthor.LookupValue; Console.WriteLine("Author: " + sAuthor); FieldUserValue oEditor = listItemEvent["Editor"] as FieldUserValue; String sEditor = oEditor.LookupValue; Console.WriteLine("Editor: " + sEditor); } //Console.ReadKey(); DataTable tableEvents1 = new DataTable(); tableEvents1.Columns.Add("Title"); tableEvents1.Columns.Add("Location"); tableEvents1.Columns.Add("EventDate"); tableEvents1.Columns.Add("EndDate"); tableEvents1.Columns.Add("Description"); tableEvents1.Columns.Add("Event Category"); tableEvents1.Columns.Add("Event Contact"); tableEvents1.Columns.Add("Inhouse / External"); tableEvents1.Columns.Add("Expires On"); tableEvents1.Columns.Add("Author"); tableEvents1.Columns.Add("Editor"); foreach (ListItem listItemEvent in itemsEvent) { FieldUserValue oValue = listItemEvent["Author"] as FieldUserValue; String strAuthorName = oValue.LookupValue; FieldUserValue oValue1 = listItemEvent["Editor"] as FieldUserValue; String strAuthorName1 = oValue1.LookupValue; tableEvents1.Rows.Add(listItemEvent["Title"] , listItemEvent["Location"] ,Convert.ToDateTime(listItemEvent["EventDate"]) , Convert.ToDateTime(listItemEvent["EndDate"]), listItemEvent["Description"], listItemEvent["Event_x0020_Category"],listItemEvent["Event_x0020_Contact"],listItemEvent["Inhouse_x0020__x002f__x0020_Exte"] ,Convert.ToDateTime(listItemEvent["Expires_x0020_On"]) ,strAuthorName,strAuthorName1); } //datagrid.DataSource = table; // ctx.ExecuteQuery(); } } } } }