The CORE: Schedule XML and the Schedule UI
#region Schedule Settings #region GET private string GetMatchData() { #region time System.DateTime _startTime,_endTime; bool _hasEndTime=false; try { _startTime=Convert.ToDateTime(this.txt_StartDate.Text); } catch { _startTime=System.DateTime.Now; } try { _endTime=Convert.ToDateTime(this.txt_EndDate.Text); _hasEndTime=true; } catch { _endTime=System.DateTime.Now; } #endregion
ScheduleDefinition schedule = new ScheduleDefinition(); schedule.StartDateTime = _startTime; if(_hasEndTime) { schedule.EndDateSpecified = true; schedule.EndDate=_endTime; } schedule.Item = GetPattern(); XmlDocument xmlDoc = GetScheduleAsXml(schedule); return xmlDoc.OuterXml; }
private XmlDocument GetScheduleAsXml(ScheduleDefinition schedule) { MemoryStream buffer = new MemoryStream(); XmlSerializer xmlSerializer = new XmlSerializer(typeof(ScheduleDefinition)); xmlSerializer.Serialize(buffer, schedule); buffer.Seek(0, SeekOrigin.Begin); XmlDocument doc = new XmlDocument(); doc.Load(buffer); // patch up WhichWeek XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable); nsmgr.AddNamespace("rp","http://schemas.microsoft.com/sqlserver/2003/12/reporting/reportingservices"); XmlNode node = doc.SelectSingleNode("/ScheduleDefinition/rp:MonthlyDOWRecurrence/rp:WhichWeek", nsmgr); if(node != null) { switch (node.InnerXml) { case "FirstWeek": node.InnerXml = "FIRST_WEEK"; break; case "SecondWeek": node.InnerXml = "SECOND_WEEK"; break; case "ThirdWeek": node.InnerXml = "THIRD_WEEK"; break; case "FourthWeek": node.InnerXml = "FOURTH_WEEK"; break; case "LastWeek": node.InnerXml = "LAST_WEEK"; break; } }
return doc; } //订阅设置参数 #region GetPattern private RecurrencePattern GetPattern() { if(this.rad_ScheduleOnce.Checked)//Once { ///OnceRecurrence return null; }
#region monthSelector MonthsOfYearSelector monthSelector = new MonthsOfYearSelector(); if(this.rad_ScheduleDay.Checked) { monthSelector.January =true; monthSelector.February =true; monthSelector.March =true; monthSelector.April =true; monthSelector.May =true; monthSelector.June =true; monthSelector.July =true; monthSelector.August =true; monthSelector.September =true; monthSelector.October =true; monthSelector.November =true; monthSelector.December =true;
} else { bool _jan=this.chk_MonthOfJan.Checked,_feb=this.chk_MonthOfFeb.Checked,_mar=this.chk_MonthOfMar.Checked, _apr=this.chk_MonthOfApr.Checked,_may=this.chk_MonthOfMay.Checked,_jun=this.chk_MonthOfJun.Checked, _jul=this.chk_MonthOfJul.Checked,_aug=this.chk_MonthOfAug.Checked,_sep=this.chk_MonthOfSep.Checked, _oct=this.chk_MonthOfOct.Checked,_nov=this.chk_MonthOfNov.Checked,_dec=this.chk_MonthOfDec.Checked; monthSelector.January =_jan; monthSelector.February =_feb; monthSelector.March =_mar; monthSelector.April =_apr; monthSelector.May =_may; monthSelector.June =_jun; monthSelector.July =_jul; monthSelector.August =_aug; monthSelector.September =_sep; monthSelector.October =_oct; monthSelector.November =_nov; monthSelector.December =_dec; } #endregion
#region daySelector DaysOfWeekSelector daySelector=new DaysOfWeekSelector(); if(this.rad_ScheduleDay.Checked && this.rad_EveryWeekDay.Checked) { daySelector.Monday =true; daySelector.Tuesday =true; daySelector.Wednesday =true; daySelector.Thursday =true; daySelector.Friday =true; daySelector.Saturday =false; daySelector.Sunday =false; } else { bool _mon=this.chk_daysOfWeekMon.Checked,_tue=this.chk_daysOfWeekTue.Checked,_wed=this.chk_daysOfWeekWed.Checked, _thu=this.chk_daysOfWeekThu.Checked,_fri=this.chk_daysOfWeekFri.Checked,_sat=this.chk_daysOfWeekSat.Checked,_sun=this.chk_daysOfWeekSun.Checked; daySelector.Monday =_mon; daySelector.Tuesday =_tue; daySelector.Wednesday =_wed; daySelector.Thursday =_thu; daySelector.Friday =_fri; daySelector.Saturday =_sat; daySelector.Sunday =_sun; } #endregion
if(this.rad_ScheduleHour.Checked)//hourly { ///MinuteRecurrence int _hour,_min; #region _hour _min try { _hour=Convert.ToUInt16(this.txt_IntervalHour.Text); } catch { _hour=0; } try { _min=Convert.ToUInt16(this.txt_IntervalMinute.Text); } catch { _min=0; } #endregion MinuteRecurrence patternMin=new MinuteRecurrence(); patternMin.MinutesInterval=_hour*60+_min; return patternMin; } if(this.rad_ScheduleDay.Checked && this.rad_IntervalDay.Checked)//daily { ///DailyRecurrence int _day; #region _day try { _day=Convert.ToUInt16(this.txt_IntervalDay.Text); } catch { _day=0; } #endregion DailyRecurrence patternDay = new DailyRecurrence(); patternDay.DaysInterval=_day; return patternDay; }
if(this.rad_ScheduleWeek.Checked || (this.rad_ScheduleDay.Checked && (this.rad_WeekDay.Checked || this.rad_EveryWeekDay.Checked)) )//weekly { ///WeeklyRecurrence WeeklyRecurrence patternWeek=new WeeklyRecurrence(); patternWeek.DaysOfWeek=daySelector;
int _weekInterval=1; if(this.rad_ScheduleWeek.Checked) { #region _weekInterval try { _weekInterval = Convert.ToUInt16(this.txt_IntervalWeek.Text); } catch { _weekInterval=-1; } #endregion } if(_weekInterval>-1) { patternWeek.WeeksIntervalSpecified=true; patternWeek.WeeksInterval=_weekInterval; }
return patternWeek; }
if(this.rad_ScheduleMonth.Checked && this.rad_MCalendarDate.Checked)//monthly { ///MonthlyRecurrence string _days=this.txt_CalendarDate.Text; MonthlyRecurrence patternMon=new MonthlyRecurrence(); patternMon.MonthsOfYear=monthSelector; patternMon.Days=_days; return patternMon; }
///MonthlyDOWRecurrence MonthlyDOWRecurrence patternDOW = new MonthlyDOWRecurrence(); patternDOW.MonthsOfYear=monthSelector; patternDOW.DaysOfWeek=daySelector;
bool _weekSpecified=(this.rad_ScheduleMonth.Checked && this.rad_MWeekOfMonth.Checked); if(_weekSpecified) { int _week=Convert.ToUInt16(this.drp_MWeekOfMonth.SelectedValue); #region _week try { _week=Convert.ToUInt16(this.drp_MWeekOfMonth.SelectedValue); } catch { _week=0; } #endregion patternDOW.WhichWeekSpecified=true; patternDOW.WhichWeek =(WeekNumberEnum)_week; //0-3 week of month, 4 last week } return patternDOW; } #endregion
#endregion
#region SET private ScheduleDefinition GetScheduleFromXml (string sMatchData) { MemoryStream vStream = new MemoryStream(System.Text.Encoding.Default.GetBytes(sMatchData)); XmlAttributes attrs = new XmlAttributes();
attrs.XmlElements.Add(new XmlElementAttribute("MinuteRecurrence",typeof(MinuteRecurrence))); attrs.XmlElements.Add(new XmlElementAttribute("DailyRecurrence",typeof(DailyRecurrence))); attrs.XmlElements.Add(new XmlElementAttribute("WeeklyRecurrence",typeof(WeeklyRecurrence))); attrs.XmlElements.Add(new XmlElementAttribute("MonthlyRecurrence",typeof(MonthlyRecurrence))); attrs.XmlElements.Add(new XmlElementAttribute("MonthlyDOWRecurrence",typeof(MonthlyDOWRecurrence))); XmlAttributeOverrides attrOver=new XmlAttributeOverrides();
attrOver.Add(typeof(ScheduleDefinition),"ScheduleDefinition",attrs); XmlSerializer newSr=new XmlSerializer(typeof(ScheduleDefinition),attrOver);
return (ScheduleDefinition)newSr.Deserialize(vStream); }
private void SetPatten(ScheduleDefinition _ScheduleDefinition) { this.txt_StartDate.Text=_ScheduleDefinition.StartDateTime.ToString("yyyy-MM-dd HH:mm"); if(_ScheduleDefinition.EndDateSpecified) this.txt_EndDate.Text=_ScheduleDefinition.EndDate.ToString("yyyy-MM-dd");
if(_ScheduleDefinition.Item==null) this.rad_ScheduleOnce.Checked=true; else { switch(_ScheduleDefinition.Item.GetType().Name) { case "MinuteRecurrence": this.rad_ScheduleHour.Checked=true;//Hourly Schedule this.txt_IntervalHour.Text =string.Format("{0:00}",((MinuteRecurrence)_ScheduleDefinition.Item).MinutesInterval/60); this.txt_IntervalMinute.Text=string.Format("{0:00}",((MinuteRecurrence)_ScheduleDefinition.Item).MinutesInterval`); break; case "DailyRecurrence": this.rad_ScheduleDay.Checked=true; this.rad_IntervalDay.Checked=true;//Daily Schedule this.txt_IntervalDay.Text =string.Format("{0}",((DailyRecurrence)_ScheduleDefinition.Item).DaysInterval); break; case "WeeklyRecurrence": SetDaysOfWeekSelector(((WeeklyRecurrence)_ScheduleDefinition.Item).DaysOfWeek); if(((WeeklyRecurrence)_ScheduleDefinition.Item).WeeksInterval>1)//Weekly Schedule { this.txt_IntervalWeek.Text =string.Format("{0}",((WeeklyRecurrence)_ScheduleDefinition.Item).WeeksInterval); this.rad_ScheduleWeek.Checked=true; } else//Weekly Schedule in Day { DaysOfWeekSelector daySel = ((WeeklyRecurrence)_ScheduleDefinition.Item).DaysOfWeek; if( daySel.Monday ==true&& daySel.Tuesday ==true&& daySel.Wednesday ==true&& daySel.Thursday ==true&& daySel.Friday ==true&& daySel.Saturday ==false&& daySel.Sunday ==false) { this.rad_ScheduleDay.Checked=true; this.rad_EveryWeekDay.Checked=true;//Daily Schedule-EveryWeekDay } else this.rad_ScheduleDay.Checked=true; this.rad_WeekDay.Checked=true;//Daily Schedule-Day Of Week } break; case "MonthlyRecurrence": this.rad_ScheduleMonth.Checked=true; this.rad_MCalendarDate.Checked=true;//Month Calendar this.txt_CalendarDate.Text = ((MonthlyRecurrence)_ScheduleDefinition.Item).Days; SetMonthsOfYearSelector(((MonthlyRecurrence)_ScheduleDefinition.Item).MonthsOfYear); break; case "MonthlyDOWRecurrence": this.rad_ScheduleMonth.Checked=true; this.rad_MWeekOfMonth.Checked=true;//Month DOW SetDaysOfWeekSelector(((MonthlyDOWRecurrence)_ScheduleDefinition.Item).DaysOfWeek); SetMonthsOfYearSelector(((MonthlyDOWRecurrence)_ScheduleDefinition.Item).MonthsOfYear); if(((MonthlyDOWRecurrence)_ScheduleDefinition.Item).WhichWeekSpecified) { this.drp_MWeekOfMonth.SelectedValue=string.Format("{0}",(uint)((MonthlyDOWRecurrence)_ScheduleDefinition.Item).WhichWeek); } break; } } } #region Selector private void SetDaysOfWeekSelector(DaysOfWeekSelector daySelector) { this.chk_daysOfWeekMon.Checked = daySelector.Monday; this.chk_daysOfWeekTue.Checked = daySelector.Tuesday; this.chk_daysOfWeekWed.Checked = daySelector.Wednesday;
this.chk_daysOfWeekThu.Checked = daySelector.Thursday; this.chk_daysOfWeekFri.Checked = daySelector.Friday; this.chk_daysOfWeekSat.Checked = daySelector.Saturday; this.chk_daysOfWeekSun.Checked = daySelector.Sunday; } private void SetMonthsOfYearSelector(MonthsOfYearSelector monthSelector) { this.chk_MonthOfJan.Checked = monthSelector.January; this.chk_MonthOfFeb.Checked =monthSelector.February; this.chk_MonthOfMar.Checked =monthSelector.March;
this.chk_MonthOfApr.Checked =monthSelector.April; this.chk_MonthOfMay.Checked =monthSelector.May; this.chk_MonthOfJun.Checked =monthSelector.June;
this.chk_MonthOfJul.Checked =monthSelector.July; this.chk_MonthOfAug.Checked =monthSelector.August; this.chk_MonthOfSep.Checked =monthSelector.September;
this.chk_MonthOfOct.Checked =monthSelector.October; this.chk_MonthOfNov.Checked =monthSelector.November; this.chk_MonthOfDec.Checked =monthSelector.December; } #endregion #endregion #endregion
