/// <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); } }
// required by interface, but handled completely in Imarda360.cs public SolutionMessageResponse IsNextScheduledDateInRange(Save360Request<AppTask> request) { throw new NotImplementedException(); }