/// <summary> /// Gets the NextRunInfo /// </summary> /// <returns></returns> public NextRunInfo GetNextRunInfo(DateTime sourceDate) { //TFS #3449: Calculate next run parameter values using the Base //Company Time Zone; otherwise the date variables will be off NextRunInfo nextRunInfo = new NextRunInfo(); nextRunInfo.Date = this.IsActive ? this.Schedule.GetNextRunDate(sourceDate) : null; DateTime?nextRunDateInBaseCoTimeZone = null; if (nextRunInfo.Date.HasValue && false == string.IsNullOrEmpty(this.BaseCompanyTimeZoneIdentifier)) { nextRunDateInBaseCoTimeZone = TimeZoneInfoExtension.SafeConvertTimeBySystemTimeZoneId(nextRunInfo.Date.Value, Subscription.ServerTimeZoneIdentifier, this.BaseCompanyTimeZoneIdentifier); } nextRunInfo.ParametersAsXml = nextRunDateInBaseCoTimeZone.HasValue ? this.GetNextRunParameterValuesXml(nextRunDateInBaseCoTimeZone.Value) : null; return(nextRunInfo); }
public static void UpdateSubscription(Subscription subscription) { #region validation if (!subscription.Application.HasValue) { throw new InvalidOperationException("Application must be set"); } if (string.IsNullOrEmpty(subscription.FormatId)) { throw new InvalidOperationException("Format must be set"); } if (string.IsNullOrEmpty(subscription.ReportId)) { throw new InvalidOperationException("ReportId must be set"); } if (subscription.Parameters == null) { throw new InvalidOperationException("Parameters must be set"); } if (subscription.Schedule == null) { throw new InvalidOperationException("Schedule must be set"); } #endregion //set input values for the insert operation int reportingUserId = int.Parse(subscription.OwnerId); int subscriptionId = int.Parse(subscription.Id); int reportId = int.Parse(subscription.ReportId); int formatId = int.Parse(subscription.FormatId); //get next run info NextRunInfo nextRunInfo = subscription.GetNextRunInfo(DateTime.Now); //load old values Subscription oldSubscription = LoadSubscription( subscription.Id, reportingUserId, subscription.Application.Value); //only change the properties that are not "read-only" oldSubscription.Application = subscription.Application; oldSubscription.FormatId = subscription.FormatId; oldSubscription.IsActive = subscription.IsActive; oldSubscription.ModifiedDate = DateTime.Now; oldSubscription.ModifiedUser = subscription.ModifiedUser; oldSubscription.Description = subscription.Description; oldSubscription.Parameters = subscription.Parameters; oldSubscription.Schedule = subscription.Schedule; using (var sql = new Emdat.InVision.Sql.ReportingDataContext(subscription.Application.Value)) { int result = sql.EditSubscription( reportingUserId, subscriptionId, reportId, subscription.Description, formatId, subscription.IsActive, subscription.GetParameterValuesXml(), subscription.Schedule.GetFrequencyId(), subscription.Schedule.GetFrequencyInterval(), subscription.Schedule.GetFrequencyRecurrenceFactor(), subscription.Schedule.GetFrequencyRelativeInterval(), string.Format("{0:00}{1:00}{2:00}", subscription.Schedule.StartTime.Hours, subscription.Schedule.StartTime.Minutes, subscription.Schedule.StartTime.Seconds), string.Format("{0:00}{1:00}{2:00}", subscription.Schedule.EndTime.Hours, subscription.Schedule.EndTime.Minutes, subscription.Schedule.EndTime.Seconds), nextRunInfo.Date, nextRunInfo.ParametersAsXml, subscription.ModifiedUser, DateTime.Now, subscription.NotifyOnScreen, subscription.NotifyEmail, subscription.NotificationEmail, subscription.Options, (int)subscription.ReportingEnvironmentId); if (result < 1) { throw new ApplicationException("The subscription was not updated. No rows were modified."); } } }
public static void AddSubscription(Subscription subscription) { #region validation if (!subscription.Application.HasValue) { throw new InvalidOperationException("Application must be set"); } //for InCommand, require a company ID if (subscription.Application.Value == ReportingApplication.InCommand && !subscription.CompanyId.HasValue) { throw new InvalidOperationException("CompanyId is required for InCommand reports"); } if (string.IsNullOrEmpty(subscription.FormatId)) { throw new InvalidOperationException("Format must be set"); } if (string.IsNullOrEmpty(subscription.ReportId)) { throw new InvalidOperationException("ReportId must be set"); } if (subscription.Parameters == null) { throw new InvalidOperationException("Parameters must be set"); } //TODO: validate the parameters if (subscription.Schedule == null) { throw new InvalidOperationException("Schedule must be set"); } //TODO: validate the schedule #endregion //set input values for the insert operation int reportingUserId = int.Parse(subscription.OwnerId); int reportId = int.Parse(subscription.ReportId); int formatId = int.Parse(subscription.FormatId); //get next run info NextRunInfo nextRunInfo = subscription.GetNextRunInfo(DateTime.Now); using (var sql = new Emdat.InVision.Sql.ReportingDataContext(subscription.Application.Value)) { var result = sql.AddSubscription( reportingUserId, subscription.CompanyId, reportId, subscription.Description, formatId, subscription.IsActive, subscription.GetParameterValuesXml(), subscription.Schedule.GetFrequencyId(), subscription.Schedule.GetFrequencyInterval(), subscription.Schedule.GetFrequencyRecurrenceFactor(), subscription.Schedule.GetFrequencyRelativeInterval(), string.Format("{0:00}{1:00}{2:00}", subscription.Schedule.StartTime.Hours, subscription.Schedule.StartTime.Minutes, subscription.Schedule.StartTime.Seconds), string.Format("{0:00}{1:00}{2:00}", subscription.Schedule.EndTime.Hours, subscription.Schedule.EndTime.Minutes, subscription.Schedule.EndTime.Seconds), nextRunInfo.Date, nextRunInfo.ParametersAsXml, subscription.ModifiedUser, DateTime.Now, subscription.NotifyOnScreen, subscription.NotifyEmail, subscription.NotificationEmail, subscription.Options, (int)subscription.ReportingEnvironmentId).FirstOrDefault(); if (result == null || !result.ReportSubscriptionID.HasValue) { throw new ApplicationException("The subscription could not be added. The procedure did not return a result."); } } }