ReportVisual IReportVisualService.GetReportVisual(ReportSearchCriteria reportSearchCriteria) { var iReportVisualService = this as IReportVisualService; var root = iReportVisualService.GetReportFolderTreeRoot(reportSearchCriteria); ReportVisual matchingReportVisual = null; var id = reportSearchCriteria.ReportId; root.Walk((node, depth) => { var currentFolderReports = node.Data.Reports; if (!currentFolderReports.Any()) { return; } foreach (var report in currentFolderReports) { if (id == report.Id || id == report.ParentId) { matchingReportVisual = report; return; } } }); return(matchingReportVisual); }
private SerializableTreeNode <ReportVisualFolder> GetReportFolder( ReportSearchCriteria reportSearchCriteria, string topLevelFolderName) { var visualContext = reportSearchCriteria.VisualContext; var reportTagFilter = reportSearchCriteria.TagFilter; var rootKey = visualContext.ToString() + topLevelFolderName + reportSearchCriteria.BaseReportVisual?.Id; if (reportTagFilter != null) { foreach (var tag in reportTagFilter) { rootKey += tag; } } return(Cacher.FindOrCreate(rootKey, key => GetTreeCacheEntry(reportSearchCriteria, topLevelFolderName), ReportIndexCacheTimeout).Value); }
private IEnumerable <IReportVisual> GetReportVisuals(ReportSearchCriteria searchCriteria) { var tableauReports = GetTableauReportVisuals(); var tableauReportVisuals = tableauReports as IList <ITableauReportVisual> ?? tableauReports.ToList(); TableauReportIds = tableauReportVisuals.Select(t => t.Id); var relevantReportMetaDatas = new HashSet <ReportMetaData>(GetRelevantReportMetaDatas(searchCriteria)); List <ReportVisual> visuals = new List <ReportVisual>(); foreach (var rmd in relevantReportMetaDatas) { var tableauReport = tableauReportVisuals.SingleOrDefault(x => x.Id == rmd.ExternalReportKey); var visual = (ReportVisual)Merge(tableauReport, rmd); visuals.Add(visual); } return(visuals); }
private IEnumerable <ReportMetaData> GetRelevantReportMetaDatas(ReportSearchCriteria reportSearchCriteria) { var relevantReportMetaDatas = Rdb.ReportMetaData.Where( x => (!x.ReportDetails.ContainsPhi || this.CanSeePhi) && TableauReportIds.Contains(x.ExternalReportKey) && x.ReportDetails.VisualContext == reportSearchCriteria.VisualContext && (reportSearchCriteria.TagFilter == null || x.ReportDetails.Tags.Any(tag => reportSearchCriteria.TagFilter.Contains(tag))) && (reportSearchCriteria.BaseReportVisual == null || x.ReportMetaDataId != reportSearchCriteria.BaseReportVisual.Id) //when fetching related reports, don't include the current report && ((x.ParentReportMetaDataId == null || //Traffk supplied metadata ((long)x.OwnerContactId == CurrentUser.ContactId) || //User's metadata (x.OwnerContactId != CurrentUser.ContactId && x.ReportDetails.Shared))) //Shared metadata ); return(relevantReportMetaDatas); }
private SerializableTreeNode <ReportVisualFolder> GetTreeCacheEntry(ReportSearchCriteria reportSearchCriteria, string topLevelFolderName) { var root = new SerializableTreeNode <ReportVisualFolder>(new ReportVisualFolder(topLevelFolderName)); var reportVisuals = GetReportVisuals(reportSearchCriteria) as ICollection <IReportVisual> ?? GetReportVisuals(reportSearchCriteria).ToList(); if (reportVisuals.Any()) { var workbookFolders = new HashSet <SerializableTreeNode <ReportVisualFolder> >(); foreach (var rv in reportVisuals) { var visual = rv as ReportVisual; var folderName = rv.FolderName; var existingFolder = workbookFolders.SingleOrDefault(x => x.Data.Title == folderName); if (existingFolder != null) { existingFolder.Data.Reports.Add(visual); } else if (folderName == "") { root.Data.Reports.Add(visual); } else { var newWorkbookFolder = new SerializableTreeNode <ReportVisualFolder>(new ReportVisualFolder(folderName)); newWorkbookFolder.Data.Reports.Add(visual); workbookFolders.Add(newWorkbookFolder); } } foreach (var folder in workbookFolders) { root.Add(folder); } } return(new CacheEntry <SerializableTreeNode <ReportVisualFolder> >(root).Value); }
SerializableTreeNode <ReportVisualFolder> IReportVisualService.GetReportFolder( ReportSearchCriteria reportSearchCriteria, string topLevelFolderName) => GetReportFolder(reportSearchCriteria, topLevelFolderName);
SerializableTreeNode <ReportVisualFolder> IReportVisualService.GetReportFolderTreeRoot(ReportSearchCriteria reportSearchCriteria) { return(GetReportFolder(reportSearchCriteria, Root)); }