private SsrsFolderInfo _GetParentFolder(ref List <SsrsFolderInfo> folders, SSRS_SOAP.CatalogItem item) { SsrsFolderInfo folder = null; var parentPath = item.Path.Substring(0, item.Path.LastIndexOf(item.Name)); parentPath = parentPath.TrimEnd('/'); if (parentPath.Length < 1) { return(null); } else { var strings = parentPath.IndexOf('/') == 0 ? parentPath.Substring(1).Split('/') : parentPath.Split('/'); foreach (var str in strings) { SsrsFolderInfo tmpF = null; if (folder == null) { tmpF = folders.FirstOrDefault(f => f.FolderName == str); } else { tmpF = folder.SubFolders.FirstOrDefault(f => f.FolderName == str); } if (tmpF != null) { folder = tmpF; } else { return(null); } } } return(folder); }
public Response <SsrsFolderInfo> GetAllReports() { var rootFolder = ConfigurationManager.AppSettings.Get("SSRS_RootDir"); try { var dbRepRes = GetReportsByType("ReportingServices"); if (dbRepRes == null || dbRepRes.DataItems == null || dbRepRes.DataItems.Count < 1) { throw new Exception("Error while loading reports or no reports in database."); } var response = new Response <SsrsFolderInfo>(); var folders = new List <SsrsFolderInfo>(); var items = _rs_Svc_2010.ListChildren(rootFolder, true); if (rootFolder.Length > 1) { folders.Add(new SsrsFolderInfo() { FolderName = rootFolder.Substring(1), Path = rootFolder, HiddenSpecified = false }); } SsrsReportInfo report; ReportingServicesModel dbReport; foreach (SSRS_SOAP.CatalogItem ci in items) { SsrsFolderInfo folder = null; if (folders.Count > 0) { folder = _GetParentFolder(ref folders, ci); } switch (ci.TypeName.ToLower()) { case "report": if (folder == null) { continue; } dbReport = dbRepRes.DataItems .FirstOrDefault(r => r.ReportName == ci.Name); report = new SsrsReportInfo() { ID = ci.ID, ReportName = ci.Name, Description = ci.Description, Path = ci.Path, Size = ci.Size, VirtualPath = ci.VirtualPath, CreatedBy = ci.CreatedBy, ModifiedBy = ci.ModifiedBy, CreationDate = ci.CreationDate, ModifiedDate = ci.ModifiedDate, HiddenSpecified = ci.HiddenSpecified }; if (dbReport != null) { report.ReportID = dbReport.ReportID; report.ReportGroupID = dbReport.ReportGroupID; report.ReportGroup = dbReport.ReportGroup; } folder.Reports.Add(report); break; case "folder": if (folder == null) { folders.Add(new SsrsFolderInfo() { ID = ci.ID, FolderName = ci.Name, Description = ci.Description, Path = ci.Path, VirtualPath = ci.VirtualPath, CreatedBy = ci.CreatedBy, ModifiedBy = ci.ModifiedBy, CreationDate = ci.CreationDate, ModifiedDate = ci.ModifiedDate, HiddenSpecified = ci.HiddenSpecified }); } else { folder.SubFolders.Add(new SsrsFolderInfo() { ID = ci.ID, FolderName = ci.Name, Description = ci.Description, Path = ci.Path, VirtualPath = ci.VirtualPath, CreatedBy = ci.CreatedBy, ModifiedBy = ci.ModifiedBy, CreationDate = ci.CreationDate, ModifiedDate = ci.ModifiedDate, HiddenSpecified = ci.HiddenSpecified }); } break; } } response.DataItems = folders; return(response); } catch (Exception ex) { _Logger.LogException(new ExceptionModel() { Message = ex.ToString(), Source = "Axis.Service.Reporting.ReportingService.GetAllReports" }); throw ex; } }