In a RadScheduler with a custom provider (inheriting from SchedulerProviderBase), there is no way to get "expanded" appointments (i.e. masters plus occurrences minus exceptions).
I devised a solution (as suggested in http://www.telerik.com/forums/scheduler-exporting-a-range-of-appointments), using the Occurrences property of RecurrenceRule:
public IEnumerable<Appointment> GetExpandedAppointments(RadScheduler owner, DateTime start, DateTime end)
{
var result = new List<Appointment>();
foreach (Appointment a in this.GetAppointments(owner))
{
// see http://www.telerik.com/forums/scheduler-exporting-a-range-of-appointments
if (a.RecurrenceState == RecurrenceState.Master)
{
RecurrenceRule parsedRule;
RecurrenceRule.TryParse(a.RecurrenceRule, out parsedRule);
parsedRule.SetEffectiveRange(start, end);
int nc = 0;
foreach (DateTime occurrence in parsedRule.Occurrences)
{
Appointment app = a.Clone();
app.ID = a.ID + "_" + ++nc;
app.Start = occurrence;
app.End = occurrence.Add(a.Duration);
app.RecurrenceRule = null;
app.RecurrenceParentID = a.ID;
app.RecurrenceState = RecurrenceState.Occurrence;
result.Add(app);
}
}
else if (a.RecurrenceState != RecurrenceState.Occurrence)
{
result.Add(a);
}
}
return result;
}
}
I think this functionality can be part of SchedulerProviderBase, there is no custom logic.
Thanks
Regards
Mauro