Subscription & Schedule handling on Reporting Services API (Part 3)

    技术2022-05-11  88

    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


    最新回复(0)