Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
 SerializableTreeNode <ReportVisualFolder> IReportVisualService.GetReportFolder(
     ReportSearchCriteria reportSearchCriteria,
     string topLevelFolderName) => GetReportFolder(reportSearchCriteria, topLevelFolderName);
Пример #7
0
 SerializableTreeNode <ReportVisualFolder> IReportVisualService.GetReportFolderTreeRoot(ReportSearchCriteria reportSearchCriteria)
 {
     return(GetReportFolder(reportSearchCriteria, Root));
 }