Background:
I have implemented Rad Scheduler in a MOSS 2007 SP1 web part. I have bound the scheduler to an object data source following this example:
http://www.telerik.com/help/aspnet-ajax/schedule_gettingstarted.html
The web part is rendering properly and the scheduler is binding data from the custom data source.
Problem:
On insert, update, and delete, my web part errors and throws the standard SharePoint "an unexpected error has occured" page. I have all my custom code wrapped in try/catch blocks, so I'm pretty sure it's not a problem with my custom code.
Since the scheduler is rendering and pulling the data, I know the control is properly configured (web.config, script manager, etc). I also know that the object data source select method is working - it's pulling the data properly.
To troubleshoot I have commented out all code in the actual InsertTask method - to ensure my custom code is not throwing the error.
So I'm pretty much stumped as to what is causing this. Here is my relavent code:
Data Source Creation - inside OnInit() method
Web Part - CreateChildControls()
TaskList.cs
TaskInfo.cs
Please let me know if I can provide any other information that would be helpful in resolving this issue. Thanks.
I have implemented Rad Scheduler in a MOSS 2007 SP1 web part. I have bound the scheduler to an object data source following this example:
http://www.telerik.com/help/aspnet-ajax/schedule_gettingstarted.html
The web part is rendering properly and the scheduler is binding data from the custom data source.
Problem:
On insert, update, and delete, my web part errors and throws the standard SharePoint "an unexpected error has occured" page. I have all my custom code wrapped in try/catch blocks, so I'm pretty sure it's not a problem with my custom code.
Since the scheduler is rendering and pulling the data, I know the control is properly configured (web.config, script manager, etc). I also know that the object data source select method is working - it's pulling the data properly.
To troubleshoot I have commented out all code in the actual InsertTask method - to ensure my custom code is not throwing the error.
So I'm pretty much stumped as to what is causing this. Here is my relavent code:
Data Source Creation - inside OnInit() method
| ds = new ObjectDataSource(); |
| ds.ID = "dsTaskList"; |
| ds.TypeName = "WIT.TaskList.TaskList"; |
| ds.SelectMethod = "AllData"; |
| ds.SelectParameters.Add("siteurl", _site); |
| ds.SelectParameters.Add("webname", _web); |
| ds.SelectParameters.Add("tasklistname", _tasklist); |
| ds.SelectParameters.Add("viewname", _view); |
| ds.SelectParameters.Add("startdatefield", _datastarttimefield); |
| ds.SelectParameters.Add("enddatefield", _dataendtimefield); |
| ds.SelectParameters.Add("subjectfield", _datasubjectfield); |
| ds.InsertMethod = "InsertTask"; |
| ds.InsertParameters.Add(new Parameter("Subject", System.Data.DbType.String)); |
| ds.InsertParameters.Add(new Parameter("Start", System.Data.DbType.DateTime)); |
| ds.InsertParameters.Add(new Parameter("End", System.Data.DbType.DateTime)); |
| ds.InsertParameters.Add("siteurl", _site); |
| ds.InsertParameters.Add("webname", _web); |
| ds.InsertParameters.Add("tasklistname", _tasklist); |
| ds.InsertParameters.Add("viewname", _view); |
| ds.InsertParameters.Add("startdatefield", _datastarttimefield); |
| ds.InsertParameters.Add("enddatefield", _dataendtimefield); |
| ds.InsertParameters.Add("subjectfield", _datasubjectfield); |
| ds.UpdateMethod = "UpdateTask"; |
| ds.UpdateParameters.Add(new Parameter("ID", System.Data.DbType.Int32)); |
| ds.UpdateParameters.Add(new Parameter("Subject", System.Data.DbType.String)); |
| ds.UpdateParameters.Add(new Parameter("Start", System.Data.DbType.DateTime)); |
| ds.UpdateParameters.Add(new Parameter("End", System.Data.DbType.DateTime)); |
| ds.UpdateParameters.Add("siteurl", _site); |
| ds.UpdateParameters.Add("webname", _web); |
| ds.UpdateParameters.Add("tasklistname", _tasklist); |
| ds.UpdateParameters.Add("viewname", _view); |
| ds.UpdateParameters.Add("startdatefield", _datastarttimefield); |
| ds.UpdateParameters.Add("enddatefield", _dataendtimefield); |
| ds.UpdateParameters.Add("subjectfield", _datasubjectfield); |
| ds.DeleteMethod = "DeleteTask"; |
| ds.DeleteParameters.Add(new Parameter("ID", System.Data.DbType.Int32)); |
| ds.DeleteParameters.Add("siteurl", _site); |
| ds.DeleteParameters.Add("webname", _web); |
| ds.DeleteParameters.Add("tasklistname", _tasklist); |
| ds.DeleteParameters.Add("viewname", _view); |
| ds.DeleteParameters.Add("startdatefield", _datastarttimefield); |
| ds.DeleteParameters.Add("enddatefield", _dataendtimefield); |
| ds.DeleteParameters.Add("subjectfield", _datasubjectfield); |
| this.Page.Controls.AddAt(1, ds); |
Web Part - CreateChildControls()
| //new instance of scheduler |
| schedule = new RadScheduler(); |
| //set scheduler appearance |
| schedule.Width = Unit.Percentage(100); |
| schedule.Height = Unit.Percentage(100); |
| schedule.Skin = _skin; |
| schedule.SelectedView = _startview; |
| //set scheduler data properties |
| schedule.DataSourceID = ds.ID; |
| schedule.DataKeyField = "_id"; |
| schedule.DataEndField = "_enddatetime"; |
| schedule.DataStartField = "_startdatetime"; |
| schedule.DataSubjectField = "_subject"; |
| //other scheduler properties |
| schedule.AllowDelete = _allowdelete; |
| schedule.AllowEdit = _allowedit; |
| schedule.AllowInsert = _allowinsert; |
| schedule.EnableAjaxSkinRendering = true; |
| schedule.DayEndTime = _dayendtime; |
| schedule.DayStartTime = _daystarttime; |
| schedule.FirstDayOfWeek = _firstdayofweek; |
| schedule.WorkDayEndTime = _workdayendtime; |
| schedule.WorkDayStartTime = _workdaystarttime; |
| schedule.StartInsertingInAdvancedForm = true; |
| schedule.StartEditingInAdvancedForm = false; |
| //add scheduler to control collection |
| Controls.Add(schedule); |
| schedule.DataBind(); |
TaskList.cs
| const string TasksKey = "TaskListScheduler_key"; |
| public static List<TaskInfo> AllData(string siteurl, string webname, string tasklistname, string viewname, string startdatefield, string enddatefield, string subjectfield) |
| { |
| List<TaskInfo> sessApts = HttpContext.Current.Session[TasksKey] as List<TaskInfo>; |
| if (sessApts == null) |
| { |
| sessApts = new List<TaskInfo>(); |
| SPSecurity.RunWithElevatedPrivileges(delegate() |
| { |
| //get task list information |
| using (SPSite site = new SPSite(siteurl)) |
| { |
| SPWeb web = site.OpenWeb(webname); |
| SPList tasklist = web.Lists[tasklistname]; |
| SPView view = tasklist.Views[viewname]; |
| SPListItemCollection lic = tasklist.GetItems(view); |
| foreach (SPListItem item in lic) |
| { |
| if (item[startdatefield] != null) |
| { |
| if (item[enddatefield] != null) |
| { |
| if (item[subjectfield] != null) |
| { |
| string subject = Convert.ToString(item[subjectfield]); |
| DateTime start = (DateTime)item[startdatefield]; |
| DateTime end = (DateTime)item[enddatefield]; |
| //if (start <= end) |
| //{ |
| // if (start == end) |
| // { |
| //end = end.AddDays(1); |
| TaskInfo ti = new TaskInfo(Convert.ToInt32(item["ID"]), subject, start, end); |
| sessApts.Add(ti); |
| // } |
| //} |
| } |
| } |
| } |
| } |
| } |
| }); |
| HttpContext.Current.Session[TasksKey] = sessApts; |
| } |
| return sessApts; |
| } |
| public static void InsertTask(string Subject, DateTime Start, DateTime End, string siteurl, string webname, string tasklistname, string viewname, string startdatefield, string enddatefield, string subjectfield) |
| { |
| List<TaskInfo> sessApts = (List<TaskInfo>)HttpContext.Current.Session[TasksKey]; |
| int ID = 0; |
| //try |
| //{ |
| // SPSecurity.RunWithElevatedPrivileges(delegate() |
| // { |
| // using (SPSite site = new SPSite(siteurl)) |
| // { |
| // //open task list |
| // SPWeb web = site.OpenWeb(webname); |
| // SPList tasklist = web.Lists[tasklistname]; |
| // //add new item to list |
| // SPListItem item = tasklist.Items.Add(); |
| // //get ID |
| // ID = item.ID; |
| // //set meta data values |
| // item[subjectfield] = Subject; |
| // item[startdatefield] = Start; |
| // item[enddatefield] = End; |
| // //update inserted item with meta data |
| // item.Update(); |
| // } |
| // }); |
| //} |
| //catch (Exception ex) { HttpContext.Current.Response.Write(ex.ToString()); } |
| TaskInfo ti = new TaskInfo(ID, Subject, Start, End); |
| sessApts.Add(ti); |
| HttpContext.Current.Session[TasksKey] = sessApts; |
| } |
| public static void DeleteTask(int ID, string siteurl, string webname, string tasklistname, string viewname, string startdatefield, string enddatefield, string subjectfield) |
| { |
| try |
| { |
| List<TaskInfo> sessApts = AllData(siteurl, webname, tasklistname, viewname, startdatefield, enddatefield, subjectfield); |
| SPSecurity.RunWithElevatedPrivileges(delegate() |
| { |
| using (SPSite site = new SPSite(siteurl)) |
| { |
| //open task list |
| SPWeb web = site.OpenWeb(webname); |
| SPList tasklist = web.Lists[tasklistname]; |
| //delete item |
| tasklist.Items.DeleteItemById(ID); |
| } |
| }); |
| sessApts.Remove(FindById(ID, sessApts)); |
| } |
| catch (Exception ex) { HttpContext.Current.Response.Write(ex.ToString()); } |
| } |
| public static void UpdateTask(int ID, string Subject, DateTime Start, DateTime End, string siteurl, string webname, string tasklistname, string viewname, string startdatefield, string enddatefield, string subjectfield) |
| { |
| try |
| { |
| List<TaskInfo> sessApts = AllData(siteurl, webname, tasklistname, viewname, startdatefield, enddatefield, subjectfield); |
| SPSecurity.RunWithElevatedPrivileges(delegate() |
| { |
| using (SPSite site = new SPSite(siteurl)) |
| { |
| //open task list |
| SPWeb web = site.OpenWeb(webname); |
| SPList tasklist = web.Lists[tasklistname]; |
| //get list item to update |
| SPListItem item = tasklist.GetItemById(ID); |
| //set meta data values |
| item[subjectfield] = Subject; |
| item[startdatefield] = Start; |
| item[enddatefield] = End; |
| //update item with new meta data |
| item.Update(); |
| } |
| }); |
| TaskInfo ti = FindById(ID, sessApts); |
| ti._subject = Subject; |
| ti._startdatetime = Start; |
| ti._enddatetime = End; |
| } |
| catch (Exception ex) { HttpContext.Current.Response.Write(ex.ToString()); } |
| } |
| public static TaskInfo FindById(int ID, List<TaskInfo> sessTasks) |
| { |
| foreach (TaskInfo ti in sessTasks) |
| { |
| if (ti._id == ID) |
| { |
| return ti; |
| } |
| } |
| return null; |
| } |
TaskInfo.cs
| public class TaskInfo |
| { |
| public int _id { get; set; } |
| public string _subject { get; set; } |
| public DateTime _startdatetime { get; set; } |
| public DateTime _enddatetime { get; set; } |
| public TaskInfo(int id, string subject, DateTime start, DateTime end) |
| { |
| this._id = id; |
| this._subject = subject; |
| this._startdatetime = start; |
| this._enddatetime = end; |
| } |
| } |
Please let me know if I can provide any other information that would be helpful in resolving this issue. Thanks.