コード例 #1
0
        /// <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);
        }
コード例 #2
0
        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.");
                }
            }
        }
コード例 #3
0
        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.");
                }
            }
        }