Beispiel #1
0
        /// <summary>
        /// Schedule an AppTask.
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public SolutionMessageResponse ScheduleAppTask(Save360Request<AppTask> request)
        {
            try
            {
                bool run = false;
                ErrorLogger logger = ErrorLogger.GetLogger("AppTask");
                var service = ImardaTaskProxyManager.Instance.IImardaTaskProxy;
                ChannelInvoker.Invoke(delegate(out IClientChannel channel)
                {
                    channel = service as IClientChannel;
                    AppTask appTask = request.Item;
                    DateTime userTime, utc;
                    run = TaskManager.CalculateStartTime(
                        appTask.GetTimeZoneInfo(), appTask.Recurrence, appTask.TimeOfDay, out userTime, out utc);

                    if (run)
                    {
                        appTask.CompanyID = request.CompanyID;
                        appTask.StartTime = utc;
                        logger.DebugFormat("StartTime {0} UTC", appTask.StartTime);
                        appTask.TimeAllowed = TimeSpan.FromMinutes(ConfigUtils.GetInt("TaskTimeoutMinutes", 60));
                        ScheduledTask scheduledTask = AppTaskHelper.Convert(appTask);
                        scheduledTask.ManagerID = (byte)ConfigUtils.GetInt("AppTaskManagerID", 1);
                            // = i360 application service task manager
                        scheduledTask.OwnerID = appTask.TaskOwnerID;
                        scheduledTask.UserID = appTask.TaskOwnerID;

                        #region TASK TYPE SPECIFIC ITEMS

                        if (appTask.GetType() == typeof (ReportTask))
                        {
                            ReportTask repTask = (ReportTask) appTask;
                            if (repTask.StartTime < TimeUtils.MinValue.AddYears(1))
                            {
                                logger.Error(repTask);
                                throw new Exception(string.Format("Invalid Start {0}", repTask));
                            }
                            repTask.Definition.CalculatePeriod(userTime);
                            scheduledTask.AlgorithmID = (byte) Algorithms.Reports;
                            scheduledTask.ProgramID = (int) Programs.ReportHandler;
                            scheduledTask.Arguments = XmlUtils.Serialize(repTask.Arguments, false);
                        }

                        #endregion

                        logger.Debug(scheduledTask);
                        var response = service.SaveScheduledTask(new SaveRequest<ScheduledTask>(scheduledTask));
                        ErrorHandler.Check(response);
                    }
                });
                return new SolutionMessageResponse { Status = run };
            }
            catch (Exception ex)
            {
                return ErrorHandler.Handle<SolutionMessageResponse>(ex);
            }
        }
Beispiel #2
0
 // required by interface, but handled completely in Imarda360.cs
 public SolutionMessageResponse IsNextScheduledDateInRange(Save360Request<AppTask> request)
 {
     throw new NotImplementedException();
 }