/// <summary> /// DI constructor /// </summary> public LocalBiRenderService(IServiceManager serviceManager, IJobManagerService jobManager, IBiMetadataRepository metadataRepository, IBiDataSource defaultDataSource = null) { this.m_serviceManager = serviceManager; var job = serviceManager.CreateInjected <BiMaterializeJob>(); jobManager.AddJob(job, JobStartType.TimerOnly); // Set default job if (jobManager.GetJobSchedules(job)?.Any() != true) { jobManager.SetJobSchedule(job, new DayOfWeek[] { DayOfWeek.Monday, DayOfWeek.Tuesday, DayOfWeek.Wednesday, DayOfWeek.Thursday, DayOfWeek.Friday, DayOfWeek.Saturday, DayOfWeek.Sunday }, new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 0, 0, 0)); // First run for tomorrow } // Scan and initialize all BI materialized views ApplicationServiceContext.Current.Started += (o, e) => { foreach (var itm in metadataRepository.Query <BiQueryDefinition>(x => x.MetaData.Status == BiDefinitionStatus.Active, 0, 100)) { try { IBiDataSource dataSource = null; var queryDefinition = BiUtils.ResolveRefs(itm) as BiQueryDefinition; var providerType = queryDefinition.DataSources.FirstOrDefault()?.ProviderType; if (providerType != null) { dataSource = this.m_serviceManager.CreateInjected(providerType) as IBiDataSource; } else { dataSource = defaultDataSource; } this.m_tracer.TraceInfo("Materializing views for {0}", queryDefinition.Id); dataSource.CreateMaterializedView(queryDefinition); } catch (Exception ex) { this.m_tracer.TraceWarning("Could not initialize materialized views for {0} - {1}", itm.Id, ex.Message); } } }; }