/// <summary> /// Existing bug in SDK where recurrence counts are set to 0 instead of null /// </summary> /// <param name="jobRecurrenceSchedule">The JobRecurrenceSchedule</param> /// <returns>The JobRecurrenceSchedule</returns> private JobRecurrenceSchedule SetRecurrenceSchedule(JobRecurrenceSchedule jobRecurrenceSchedule) { if (jobRecurrenceSchedule != null) { JobRecurrenceSchedule schedule = new JobRecurrenceSchedule(); schedule.Days = jobRecurrenceSchedule.Days.Count == 0 ? null : jobRecurrenceSchedule.Days; schedule.Hours = jobRecurrenceSchedule.Hours.Count == 0 ? null : jobRecurrenceSchedule.Hours; schedule.Minutes = jobRecurrenceSchedule.Minutes.Count == 0 ? null : jobRecurrenceSchedule.Minutes; schedule.MonthDays = jobRecurrenceSchedule.MonthDays.Count == 0 ? null : jobRecurrenceSchedule.MonthDays; schedule.MonthlyOccurrences = jobRecurrenceSchedule.MonthlyOccurrences.Count == 0 ? null : jobRecurrenceSchedule.MonthlyOccurrences; schedule.Months = jobRecurrenceSchedule.Months.Count == 0 ? null : jobRecurrenceSchedule.Months; return(schedule); } else { return(null); } }
private JobRecurrenceSchedule CreateMonthlySchedule(Task model) { JobRecurrenceSchedule s = new JobRecurrenceSchedule(); if (model.Monthly_Type == MonthlyType.DAYS) { List <int> monthDays = new List <int>(); int i = 1; foreach (DaysInMonth d in Enums <DaysInMonth>()) { if (((DaysInMonth)model.Monthly_Days).HasFlag(d)) { if (d != DaysInMonth.Last) { monthDays.Add(i); } else { monthDays.Add(-1); } } i++; } if (monthDays.Count > 0) { s.MonthDays = monthDays; } } if (model.Monthly_Type == MonthlyType.IN) { List <JobScheduleDay> days = GetWeeklyDays(model.Monthly_In_Days); if (days.Count > 0) { s.Days = days; } List <JobScheduleMonthlyOccurrence> oList = new List <JobScheduleMonthlyOccurrence>(); int mIndex = 1; foreach (InModifiers mod in Enums <InModifiers>()) { if (((InModifiers)model.Monthly_In_Modifiers).HasFlag(mod)) { foreach (JobScheduleDay d in days) { JobScheduleMonthlyOccurrence o = new JobScheduleMonthlyOccurrence(); o.Day = d; o.Occurrence = mod == InModifiers.LAST ? -1 : mIndex; oList.Add(o); } } mIndex++; } if (oList.Count > 0) { s.MonthlyOccurrences = oList; } } List <int> months = new List <int>(); int m = 1; foreach (Months month in Enums <Months>()) { if (((Months)model.Monthly_Months).HasFlag(month)) { months.Add(m); } m++; } if (months.Count > 0) { s.Months = months; } return(s); }
private JobCreateOrUpdateParameters GetParams(Task model) { JobCreateOrUpdateParameters p = new JobCreateOrUpdateParameters(); string url; if (Request == null) { url = model.Url; } else { string serverName = HttpContext.Current.Request.ServerVariables["SERVER_NAME"]; string host = serverName == "localhost" ? defaultHost : serverName; url = string.Format("http://{0}{1}", host, model.Url); } if (Request == null) { p.Action = new JobAction() { Type = JobActionType.Https, Request = new JobHttpRequest() { Method = "GET", Uri = new Uri(url), } }; p.StartTime = model.Start_Date; } else { p.Action = new JobAction() { Type = JobActionType.Http, Request = new JobHttpRequest() { Body = "", Headers = new Dictionary <string, string>() { { "Content-Type", "application/x-www-form-urlencoded" } }, Method = "GET", Uri = new Uri(url), Authentication = new BasicAuthentication() { Username = systemAccountName, Password = systemAccountPass, Type = HttpAuthenticationType.Basic } } }; p.StartTime = model.Start_Date == null ? DateTime.UtcNow : model.Start_Date + model.Start_Time; } JobRecurrence r = new JobRecurrence(); switch (model.Type) { case ScheduleType.DAILY: r.Frequency = JobRecurrenceFrequency.Day; r.Interval = model.Daily_Repeat; break; case ScheduleType.WEEKLY: r.Frequency = JobRecurrenceFrequency.Week; r.Interval = model.Weekly_Repeat; r.Schedule = new JobRecurrenceSchedule() { Days = GetWeeklyDays(model.Weekly_Days), }; break; case ScheduleType.MONTHLY: r.Frequency = JobRecurrenceFrequency.Month; r.Schedule = CreateMonthlySchedule(model); break; case ScheduleType.ONCE: r.Count = 1; break; case ScheduleType.ONIDLE: throw new NotImplementedException("Pro Azure scheduler nelze plánovat OnIdle úlohy"); } if (model.Repeat == true) { JobRecurrenceSchedule s = r.Schedule ?? new JobRecurrenceSchedule(); int minutes = (int)model.Repeat_Minute; int startHour = model.Start_Time == null ? DateTime.Now.Hour : model.Start_Time.Hours; List <int> minuteSchedule = new List <int>(); for (int i = 1; i <= 60; i++) { if ((i % minutes) == 0) { minuteSchedule.Add(i); } } List <int> hourSchedule = new List <int>(); for (int i = 0; i < model.Repeat_Duration; i++) { int hour = startHour + i; hourSchedule.Add(hour > 23 ? hour - 24 : hour); } s.Minutes = minuteSchedule; s.Hours = hourSchedule; } if (model.End_Date != null) { r.EndTime = model.End_Date + model.End_Time; } p.Recurrence = r; return(p); }