I'm using SQL server, I have my datastructure set to that of the Telerik Demos. I am trying to take one large appointment in my Appointments table and bust it up into several little appointments. Why would I be doing such a boneheaded thing? This is why. So, I have everything working fantastically. My users create an appointment from 9:00-3:15 and in the database, I change it to 12 half hour appointments. There is one glitch though.
When I create an Appointment record and INSERT the data for the RecurrenceRule field, RadScheduler will not recognize the rule. It sees the appointment and registers that it is a recurring rule (by the little circle/arrow in the top left-hand of the appointment) but the recurring appointments never show up if you click to the next week(s). If you double click on the appointment and go to the advanced form, the recurrrence box is NOT checked and none of the fields filled in for recurrence.
I can hear you thinking now, "His cowboy programming has dorked up Teleriks perfection. He's messed up the data he's inserting into the field." Well, here is where we get thrown down the rabbit hole. If I use the RadScheduler and edit one of the new appointments and make a recurring rule, it works perfectly! The recurring appointments show up for the next week(s). Furthermore, if I then go to the appointment record (in the database) that RadScheduler has just updated, the rule looks exactly the same as the one I created programmatically. SQL says it is identical. And one more kicker, if I take that rule which radscheduler has created/updated in the database, and insert it into another record's RecurrenceRule field (changing the time/date to match of course), then it still won't work for that record/appointment.
I don't see how this can be happening. The rules are identical but RadScheduler seems to know when I have entered in the data and when IT has. It's as if there are some hidden characters somewhere that clue RadScheduler into the fact that I typed the rule in instead of it.
UPDATE Appointments SET RecurrenceRule = 'DTSTART:20110317T160000Z DTEND:20110317T170000Z RRULE:FREQ=WEEKLY;UNTIL=20110618T000000Z;INTERVAL=1;BYDAY=TH,SA'WHERE [Subject] = 'Howdy Recurr Test' -- Results from UPDATE above do not work in Radscheduler: -- DTSTART:20110317T160000Z DTEND:20110317T170000Z RRULE:FREQ=WEEKLY;UNTIL=20110618T000000Z;INTERVAL=1;BYDAY=TH,SA -- DTSTART:20110317T160000Z DTEND:20110317T170000Z RRULE:FREQ=WEEKLY;UNTIL=20110618T000000Z;INTERVAL=1;BYDAY=TH,SA -- Above us is the rule that DOES work which was created by editing RadScheduler on the webpage. What is the difference? student.aspx ****************************** <li> <asp:Label ID="lbStudName" runat="server" Text="Student Name: " AssociatedControlID="lstStudName"> </asp:Label> <telerik:RadComboBox ID="lstStudName" runat="server" ShowToggleImage="false" DataTextField="SName" DataValueField="SName" ReadOnly="true" Enabled="true" AppendDataBoundItems="true" AutoPostBack="True" onselectedindexchanged="lstStudName_SelectedIndexChanged" > <Items><telerik:RadComboBoxItem Text="Choose One..." Value="0" /></Items> </telerik:RadComboBox> </li> <li><asp:Label ID="lbCourseCode" runat="server" Text="Course Code: " Visible="true" AssociatedControlID="lstCourseCode"> </asp:Label> <telerik:RadComboBox ID="lstCourseCode" runat="server" ShowToggleImage="true" DataTextField="CRef" DataValueField="CRef" Visible="true" AppendDataBoundItems="True" ReadOnly="true" AutoPostBack="True"> </telerik:RadComboBox> </li> <asp:LinqDataSource ID="LinqDataSource1" runat="server" ContextTypeName="ModTTDataContext" TableName="StudentTutors"> </asp:LinqDataSource> ********************************* student.aspx.cs ********************************** protected void lstStudName_SelectedIndexChanged(object o, RadComboBoxSelectedIndexChangedEventArgs e) { string StudName = ((RadComboBox)o).SelectedItem.Text; BindCourse(StudName); string[] course; foreach( Items c in course) { //linq query here } // BindTutor(CREF); } private void BindCourse(string StudName) { String[] str = StudName.Split(new char[] { ' ' }); String fname = str[0]; String lname = str[1]; var query1 = (from z in modttdc.StudentInfos where (z.Forenames.ToLower() == fname.ToLower()) && (z.Surname == lname.ToLower()) orderby z.Student_reference select new { CRef = z.Course_Ref, }).Distinct(); BindList(lstCourseCode, query1); //String CRef1 = lstCourseCode.SelectedItem.Text; }| <telerik:RadAjaxManager ID="ramAjax" runat="server" EnableHistory="True" OnAjaxRequest="ramAjax_AjaxRequest"> |
| <AjaxSettings> |
| <telerik:AjaxSetting AjaxControlID="rbAllWorkOrders"> |
| <UpdatedControls> |
| <telerik:AjaxUpdatedControl ControlID="rgSearchResults" LoadingPanelID="ralpLoading" /> |
| <telerik:AjaxUpdatedControl ControlID="pageTime" /> |
| </UpdatedControls> |
| </telerik:AjaxSetting> |
| <telerik:AjaxSetting AjaxControlID="rbMyWorkOrders"> |
| <UpdatedControls> |
| <telerik:AjaxUpdatedControl ControlID="rgSearchResults" LoadingPanelID="ralpLoading" /> |
| <telerik:AjaxUpdatedControl ControlID="pageTime" /> |
| </UpdatedControls> |
| </telerik:AjaxSetting> |
| </AjaxSettings> |
| </telerik:RadAjaxManager> |
| <asp:RadioButton runat="server" ID="rbAllWorkOrders" GroupName="rbgWorkOrderFilter" Text="All Work Orders" AutoPostBack="True" OnCheckedChanged="filter_ValueChanged" Checked="True" /> |
| <asp:RadioButton runat="server" ID="rbMyWorkOrders" GroupName="rbgWorkOrderFilter" Text="My Work Orders" AutoPostBack="True" OnCheckedChanged="filter_ValueChanged" /> |
<%@ Page Language="C#" AutoEventWireup="true" MasterPageFile="~/_layouts/application.master" CodeBehind="~/Pages/VersionHistory.aspx.cs" Inherits="BlackBlade.ListActions.DocumentSectionManager.Monitor.VersionHistory, BlackBlade.ListActions.DocumentSectionManager.Monitor,Version=1.0.0.0,Culture=neutral,PublicKeyToken=932c3000eeb6dd9c" %><%@ Register TagPrefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %><%@ Register assembly="Telerik.Web.UI, Version=2008.3.1125.20, Culture=neutral, PublicKeyToken=121fae78165ba3d4" namespace="Telerik.Web.UI" tagprefix="telerik" %><%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Namespace="System.Web.UI" TagPrefix="cc1" %><asp:Content ID="Main" runat="server" contentplaceholderid="PlaceHolderMain" > <style type="text/css"> .RadGrid_Vista td{padding:0} </style> <telerik:RadScriptManager ID="RadScriptManager1" runat="server" /> <!-- content start --> <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server"> <AjaxSettings> <telerik:AjaxSetting AjaxControlID="RadGrid1"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="RadGrid1" /> </UpdatedControls> </telerik:AjaxSetting> </AjaxSettings> </telerik:RadAjaxManager> <!--skins Web20, Office2007, Black --> <telerik:RadGrid ID="RadGrid1" runat="server" DecoratedControls="All" Skin="Vista" OnColumnCreated="RadGrid1_ColumnCreated" OnItemCreated="RadGrid1_ItemCreated" OnItemDataBound="RadGrid1_ItemDataBound"> <MasterTableView HierarchyDefaultExpanded="true" HierarchyLoadMode="Client" AllowSorting="true" DataKeyNames="GUID, ParentGUID" Width="100%"> <SelfHierarchySettings ParentKeyName="ParentGUID" KeyName="GUID" /> </MasterTableView> <ClientSettings AllowExpandCollapse="true" /> </telerik:RadGrid> <!-- content end --> </asp:Content><asp:Content ID="PageTitle" runat="server" contentplaceholderid="PlaceHolderPageTitle" > Version History</asp:Content><asp:Content ID="PageTitleInTitleArea" runat="server" contentplaceholderid="PlaceHolderPageTitleInTitleArea" > BlackBlade Version History</asp:Content>using System;using Telerik.Web.UI;using Microsoft.SharePoint;using System.Web.UI.WebControls;using System.Web.UI;using System.Reflection;using System.Collections.Generic;using Microsoft.SharePoint.WebControls;using System.Data;namespace BlackBlade.ListActions.DocumentSectionManager.Monitor{ public partial class VersionHistory : LayoutsPageBase { private DataTable dataTable = new DataTable(); protected void RadGrid1_ColumnCreated(object sender, GridColumnCreatedEventArgs e) { if (e.Column is GridExpandColumn) { e.Column.Visible = false; } else if (e.Column is GridBoundColumn) { e.Column.HeaderStyle.Width = Unit.Pixel(100); } } protected override void OnLoad(EventArgs e) { try { base.OnLoad(e); string strItemId = this.Request["ItemID"]; string strListId = this.Request["ListID"]; SPWeb site = this.Web; SPList list = site.Lists[new Guid(strListId)]; SPListItem item = list.GetItemById(Convert.ToInt32(strItemId)); ColumnSetup(); VersionCollectionTree tree = new VersionCollectionTree(item); PopulateData(tree.headers[0], "root"); RadGrid1.DataSource = dataTable; RadGrid1.MasterTableView.FilterExpression = "ParentGUID = 'root'"; } catch { } } protected override void OnPreRenderComplete(EventArgs e) { base.OnPreRenderComplete(e); HideExpandColumnRecursive(RadGrid1.MasterTableView); RadGrid1.MasterTableView.GetColumn("GUID").Visible = false; RadGrid1.MasterTableView.GetColumn("ParentGUID").Visible = false; RadGrid1.MasterTableView.HorizontalAlign = HorizontalAlign.Left; } public void HideExpandColumnRecursive(GridTableView tableView) { GridItem[] nestedViewItems = tableView.GetItems(GridItemType.NestedView); foreach (GridNestedViewItem nestedViewItem in nestedViewItems) { foreach (GridTableView nestedView in nestedViewItem.NestedTableViews) { nestedView.Style["border"] = "0"; nestedView.GetColumn("GUID").Visible = false; nestedView.GetColumn("ParentGUID").Visible = false; nestedView.HorizontalAlign = HorizontalAlign.Left; Button MyExpandCollapseButton = (Button)nestedView.ParentItem.FindControl("MyExpandCollapseButton"); if (nestedView.Items.Count == 0) { if (MyExpandCollapseButton != null) { MyExpandCollapseButton.Style["visibility"] = "hidden"; } nestedViewItem.Visible = false; } else { if (MyExpandCollapseButton != null) { MyExpandCollapseButton.Style.Remove("visibility"); } } if (nestedView.HasDetailTables) { HideExpandColumnRecursive(nestedView); } } } } protected void RadGrid1_ItemCreated(object sender, GridItemEventArgs e) { CreateExpandCollapseButton(e.Item, "Title"); if (e.Item is GridHeaderItem && e.Item.OwnerTableView != RadGrid1.MasterTableView) { e.Item.Style["display"] = "none"; } if (e.Item is GridNestedViewItem) { e.Item.Cells[0].Visible = false; } } protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e) { CreateExpandCollapseButton(e.Item, "Title"); } public void CreateExpandCollapseButton(GridItem item, string columnUniqueName) { if (item is GridDataItem) { if (item.FindControl("MyExpandCollapseButton") == null) { Button button = new Button(); button.Click += new EventHandler(button_Click); button.CommandName = "ExpandCollapse"; button.CssClass = (item.Expanded) ? "rgCollapse" : "rgExpand"; button.ID = "MyExpandCollapseButton"; if (item.OwnerTableView.HierarchyLoadMode == GridChildLoadMode.Client) { string script = String.Format(@"$find(""{0}"")._toggleExpand(this, event); return false;", item.Parent.Parent.ClientID); button.OnClientClick = script; } int level = item.ItemIndexHierarchical.Split(':').Length; if (level > 1) { button.Style["margin-left"] = level * 10 + "px"; } TableCell cell = ((GridDataItem)item)[columnUniqueName]; cell.Controls.Add(button); cell.Controls.Add(new LiteralControl(" ")); cell.Controls.Add(new LiteralControl(((GridDataItem)item)[columnUniqueName].Text.ToString())); } } } void button_Click(object sender, EventArgs e) { ((Button)sender).CssClass = (((Button)sender).CssClass == "rgExpand") ? "rgCollapse" : "rgExpand"; } private void ColumnSetup() { dataTable.Columns.Add("Title", typeof(string)); dataTable.Columns.Add("Version"); dataTable.Columns.Add("Modified"); dataTable.Columns.Add("User"); dataTable.Columns.Add("Size"); dataTable.Columns.Add("Comment"); dataTable.Columns.Add("GUID", typeof(string)); dataTable.Columns.Add("ParentGUID", typeof(string)); } private void PopulateData(VersionCollectionTree.Node node, string parentGUID) { DataRow row = dataTable.NewRow(); string GUID = node.versionCollection.latest.file.UniqueId.ToString(); row["GUID"] = GUID; row["ParentGUID"] = parentGUID; row["Title"] = node.versionCollection.latest.file.Name; row["Version"] = node.versionCollection.latest.versionLabel; row["Modified"] = node.versionCollection.latest.created; row["User"] = node.versionCollection.latest.user.Name; row["Size"] = node.versionCollection.latest.size; row["Comment"] = node.versionCollection.latest.comment; dataTable.Rows.Add(row); if (node.hasChildren) { foreach (VersionCollectionTree.Node child in node.children) { PopulateData(child, GUID); } } } }}protected override IAsyncUploadResult Process(UploadedFile file, HttpContext context, IAsyncUploadConfiguration configuration, string tempFileName){ // This will throw an exception even when I've set it in the controller configuration.TempTargetFolder = context.Session["MySessionVar"].ToString(); return base.Process(file, context, configuration, fileName);}