private void processRDL(SSRS2006.ReportingService2006 SSRS, SPWeb web, SPListItem folder, SSRS2006.DataSourceReference dsr, SPDocumentLibrary list)
 {
     foreach (SPListItem li in list.GetItemsInFolder(list.DefaultView, folder.Folder))
     {
         if (li.FileSystemObjectType == SPFileSystemObjectType.Folder)
         {
             processRDL(SSRS, web, li, dsr, list);
         }
         else
         {
             try
             {
                 SSRS2006.DataSource[] dsstl = SSRS.GetItemDataSources(web.Url + "/" + li.Url);
                 for (int i = 0; i < dsstl.Length; i++)
                 {
                     if (dsstl[i].Name == "EPMLiveReportDB")
                     {
                         dsstl[i].Item = dsr;
                     }
                 }
                 SSRS.SetItemDataSources(web.Url + "/" + li.Url, dsstl);
             }
             catch { }
         }
     }
 }
Exemplo n.º 2
0
        public static void ProcessReportDataSources(SPWeb web, string FileList)
        {
            XmlDocument docFiles = new XmlDocument();

            docFiles.LoadXml("<Files/>");

            try
            {
                docFiles.LoadXml(FileList);
            }
            catch { }

            string ssrsurl = EPMLiveCore.CoreFunctions.getWebAppSetting(web.Site.WebApplication.Id, "ReportingServicesURL");

            SSRS2006.ReportingService2006 SSRS = new SSRS2006.ReportingService2006();
            SSRS.Url = ssrsurl + "/ReportService2006.asmx";
            SSRS.UseDefaultCredentials = true;

            SPList tList = web.Lists.TryGetList("Report Library");

            if (tList != null)
            {
                SPDocumentLibrary list = (SPDocumentLibrary)tList;

                SPListItemCollection folders = list.GetItemsInFolder(list.DefaultView, list.RootFolder);

                SSRS2006.DataSourceReference dsr = new SSRS2006.DataSourceReference();
                dsr.Reference = web.Url + "/Report Library/Data Sources/EPMLiveReportDB.rsds";

                foreach (SPListItem li in folders)
                {
                    processRDL(SSRS, web, li, dsr, list, docFiles);
                }
            }
        }
        protected TreeNode CreateTreeNode(SPListItem item, SPDocumentLibrary doc)
        {
            if (item == null)
            {
                throw new ArgumentNullException("item");
            }

            if (doc == null)
            {
                throw new ArgumentNullException("doc");
            }

            var node       = new TreeNode(item.Name, item.UniqueId.ToString());
            var spListItem = doc.GetItemByUniqueId(item.UniqueId);

            if (!string.IsNullOrWhiteSpace(spListItem.Title))
            {
                node.Text = spListItem.Title;
            }

            if (item.FileSystemObjectType == SPFileSystemObjectType.Folder)
            {
                node.Text         = string.Format(BoldTextTemplate, node.Text);
                node.SelectAction = TreeNodeSelectAction.None;
                node.ImageUrl     = TreeNodeFolderImage;

                var folderItems = doc.GetItemsInFolder(doc.DefaultView, item.Folder);
                if (folderItems.Count > 0)
                {
                    PopulateTree(folderItems, doc, node);
                }
            }
            else if (item.FileSystemObjectType == SPFileSystemObjectType.File &&
                     item.File.Name.EndsWith(RdlFileExtension, StringComparison.OrdinalIgnoreCase))
            {
                if (node.Text.EndsWith(RdlFileExtension, StringComparison.OrdinalIgnoreCase))
                {
                    node.Text = node.Text.Substring(0, node.Text.Length - FileExtensionLength);
                }

                node.ImageUrl = TreeNodeFileImage;

                try
                {
                    node.NavigateUrl = GetFileNodeNavigationUrl(item);
                }
                catch (Exception ex)
                {
                    node.Text = GetFileNodeErrorText(item, ex);
                    Trace.TraceError(ex.ToString());
                }
            }

            return(node);
        }
Exemplo n.º 4
0
        public SPListItemCollectionInstance GetItemsInFolder(SPViewInstance view, SPFolderInstance folder)
        {
            if (view == null)
            {
                throw new JavaScriptException(this.Engine, "Error", "A SPView must be specified as the first argument.");
            }

            if (folder == null)
            {
                throw new JavaScriptException(this.Engine, "Error", "A SPFolder must be specified as the second argument.");
            }

            var items = m_documentLibrary.GetItemsInFolder(view.View, folder.Folder);

            return(items == null
                ? null
                : new SPListItemCollectionInstance(this.Engine.Object.InstancePrototype, items));
        }
        private void BuildReportTree(SPFolder spFolder, SPDocumentLibrary spDocumentLibrary, ref XElement parentElement)
        {
            var xElement = new XElement("Folder", new XAttribute("Name", spFolder.Name));

            foreach (SPListItem spListItem in spDocumentLibrary.GetItemsInFolder(spDocumentLibrary.DefaultView, spFolder))
            {
                if (spListItem.FileSystemObjectType == SPFileSystemObjectType.Folder)
                {
                    BuildReportTree(spListItem.Folder, spDocumentLibrary, ref xElement);
                }
                else if (spListItem.FileSystemObjectType == SPFileSystemObjectType.File && spListItem.File.Name.ToLower().EndsWith(".rdl"))
                {
                    SPFile spFile = spListItem.File;
                    string name   = spFile.Name;

                    string url = string.Empty;
                    string hasResourcesParam = string.Empty;

                    try
                    {
                        var web = SPContext.Current.Web.Site.RootWeb;
                        var sServerReelativeUrl = (web.ServerRelativeUrl == "/") ? "" : web.ServerRelativeUrl;

                        url = sServerReelativeUrl + "/_layouts/epmlive/SSRSReportRedirect.aspx?weburl=" + HttpUtility.UrlEncode(Web.Site.RootWeb.Url) +
                              "&itemurl=" + HttpUtility.UrlEncode(spListItem.Url);
                    }
                    catch (Exception ex) { }

                    var element = new XElement("Report", new XAttribute("Name", name.Substring(0, name.Length - 4)),
                                               new XAttribute("Url", url),
                                               new XAttribute("HasResourcesParam", hasResourcesParam));

                    xElement.Add(element);
                }
            }
            parentElement.Add(xElement);
        }
        private void processReports(SPWeb web)
        {
            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                string username = "";
                string password = "";
                EPMLiveCore.ReportAuth _chrono = SPContext.Current.Site.WebApplication.GetChild <EPMLiveCore.ReportAuth>("ReportAuth");
                if (_chrono != null)
                {
                    username = _chrono.Username;
                    password = EPMLiveCore.CoreFunctions.Decrypt(_chrono.Password, "KgtH(@C*&@Dhflosdf9f#&f");
                }

                bool reportingIntegratedMode = true;
                bool.TryParse(EPMLiveCore.CoreFunctions.getWebAppSetting(SPContext.Current.Site.WebApplication.Id, "ReportsUseIntegrated"), out reportingIntegratedMode);

                if (!reportingIntegratedMode)
                {
                    Guid fieldsFeature = new Guid("acdb86be-bfa5-41c7-91a8-7682d7edffa5");
                    if (web.Features[fieldsFeature] == null)
                    {
                        web.Features.Add(fieldsFeature);
                    }

                    Guid receiversFeature = new Guid("a8ebe311-83e1-48a4-ab31-50f237398f44");

                    if (web.Features[receiversFeature] == null)
                    {
                        web.Features.Add(receiversFeature);
                    }

                    string dataSourceString = String.Format(@"<?xml version=""1.0"" encoding=""utf-8""?>
                    <DataSourceDefinition xmlns=""http://schemas.microsoft.com/sqlserver/reporting/2006/03/reportdatasource"">
                      <Extension>SQL</Extension>
                      <ConnectString>Data Source={0};Initial Catalog={1};</ConnectString>
                      <CredentialRetrieval>Store</CredentialRetrieval>
                      <WindowsCredentials>{2}</WindowsCredentials>
                      <ImpersonateUser>False</ImpersonateUser>
                      <Enabled>True</Enabled>
                    </DataSourceDefinition>", txtReportServer.Text, txtReportDatabase.Text, chkWindows.Checked);

                    SPDocumentLibrary doclib = web.Lists["Report Library"] as SPDocumentLibrary;
                    web.AllowUnsafeUpdates   = true;
                    SPFile file = doclib.RootFolder.Files.Add(doclib.RootFolder.Url + "/Data Sources/EPMLiveReportDB.rsds", Encoding.ASCII.GetBytes(dataSourceString), new Hashtable {
                        { "Datasource Credentials", String.Format("{0}:{1}", txtReportUsername.Text, hdnReportPassword.Value == "" ? hdnSaveReportPassword.Value : hdnReportPassword.Value) }
                    }, true);

                    web.AllowUnsafeUpdates = false;
                }
                else
                {
                    SSRS2006.ReportingService2006 SSRS = new SSRS2006.ReportingService2006();
                    SSRS.Url = ssrsurl + "/ReportService2006.asmx";
                    SSRS.UseDefaultCredentials = true;


                    if (password != "")
                    {
                        SSRS.UseDefaultCredentials = false;
                        if (username.Contains("\\"))
                        {
                            SSRS.Credentials = new System.Net.NetworkCredential(username.Substring(username.IndexOf("\\") + 1), password, username.Substring(0, username.IndexOf("\\")));
                        }
                        else
                        {
                            SSRS.Credentials = new System.Net.NetworkCredential(username, password);
                        }
                    }


                    /*System.Web.HttpCookie tCookie = System.Web.HttpContext.Current.Response.Cookies["WSS_KeepSessionAuthenticated"];
                     *
                     * System.Net.Cookie oC = new System.Net.Cookie();
                     *
                     * // Convert between the System.Net.Cookie to a System.Web.HttpCookie...
                     * oC.Domain = System.Web.HttpContext.Current.Request.Url.Host;
                     * oC.Expires = tCookie.Expires;
                     * oC.Name = tCookie.Name;
                     * oC.Path = tCookie.Path;
                     * oC.Secure = tCookie.Secure;
                     * oC.Value = tCookie.Value;
                     *
                     * SSRS.CookieContainer = new System.Net.CookieContainer();
                     *
                     * SSRS.CookieContainer.Add(oC);
                     */

                    try
                    {
                        var authCookie       = HttpContext.Current.Request.Cookies["FedAuth"];
                        var fedAuth          = new Cookie(authCookie.Name, authCookie.Value, authCookie.Path, string.IsNullOrEmpty(authCookie.Domain) ? HttpContext.Current.Request.Url.Host : authCookie.Domain);
                        SSRS.CookieContainer = new CookieContainer();
                        SSRS.CookieContainer.Add(fedAuth);
                    }
                    catch { }

                    SPDocumentLibrary list = (SPDocumentLibrary)web.Lists["Report Library"];

                    SPListItemCollection folders = list.GetItemsInFolder(list.DefaultView, list.RootFolder);

                    try
                    {
                        foreach (SPListItem li in folders)
                        {
                            if (li.FileSystemObjectType == SPFileSystemObjectType.Folder && li.Name == "Data Sources")
                            {
                                SSRS2006.DataSourceDefinition dsd = new SSRS2006.DataSourceDefinition();
                                dsd.ConnectString       = "Data Source=" + txtReportServer.Text + ";Initial Catalog=" + txtReportDatabase.Text + ";";
                                dsd.CredentialRetrieval = SSRS2006.CredentialRetrievalEnum.Store;
                                dsd.UserName            = txtReportUsername.Text;
                                if (hdnReportPassword.Value == "")
                                {
                                    dsd.Password = hdnSaveReportPassword.Value;
                                }
                                else
                                {
                                    dsd.Password = hdnReportPassword.Value;
                                }

                                if (chkWindows.Checked)
                                {
                                    dsd.WindowsCredentials = chkWindows.Checked;
                                }

                                dsd.Enabled   = true;
                                dsd.Extension = "SQL";

                                SSRS.CreateDataSource("EPMLiveReportDB.rsds", web.Url + "/" + li.Url, true, dsd, null);
                            }
                        }

                        SSRS2006.DataSourceReference dsr = new SSRS2006.DataSourceReference();
                        dsr.Reference = web.Url + "/Report Library/Data Sources/EPMLiveReportDB.rsds";

                        foreach (SPListItem li in folders)
                        {
                            processRDL(SSRS, web, li, dsr, list);
                        }
                    }
                    catch
                    {
                        pnlMessage.Visible = true;
                    }
                }
            });
        }
        /// <summary>
        ///     Builds the report tree.
        /// </summary>
        /// <param name="parentFolder">The parent folder.</param>
        /// <param name="spFolders">The sp folders.</param>
        /// <param name="spDocumentLibrary">The sp document library.</param>
        /// <param name="parentElement">The parent element.</param>
        private void BuildReportTree(SPFolder parentFolder, IEnumerable <SPFolder> spFolders, SPDocumentLibrary spDocumentLibrary, ref XElement parentElement)
        {
            var xElement = new XElement("Folder", new XAttribute("Name", parentFolder.Name));

            foreach (SPListItem spListItem in spDocumentLibrary.GetItemsInFolder(spDocumentLibrary.DefaultView, parentFolder))
            {
                if (spListItem.FileSystemObjectType != SPFileSystemObjectType.File ||
                    !spListItem.File.Name.ToLower().EndsWith(".rdl"))
                {
                    continue;
                }

                SPFile spFile = spListItem.File;
                string name   = spFile.Name;

                string safeServerRelativeUrl = Web.SafeServerRelativeUrl();
                string url = string.Empty;
                string hasResourcesParam = string.Empty;
                string error             = string.Empty;

                try
                {
                    //string reportUrl = BuildReportQueryString(SPUrlUtility.CombineUrl(Web.Url, spListItem.Url));
                    //string[] reportUrlParts = reportUrl.Split('|');

                    /*url =
                     *  string.Format(
                     *      @"{0}/_layouts/ReportServer/RSViewerPage.aspx?rv:RelativeReportUrl={1}{2}&rv:HeaderArea=none",
                     *      safeServerRelativeUrl,
                     *      HttpUtility.UrlEncode(string.Format(@"{0}/{1}", safeServerRelativeUrl, spListItem.Url)),
                     *      reportUrlParts[0]);
                     *
                     * hasResourcesParam = reportUrlParts[1];
                     * */
                    //sites/dev4/_layouts/epmlive/SSRSReportRedirect.aspx?weburl=http%3a%2f%2fcontosos1%2fsites%2fdev4&itemurl=Report+Library%2fepmlivetl%2fResources%2fCapacity+Planning%2fResource+Requirements.rdl
                    url = spDocumentLibrary.ParentWeb.ServerRelativeUrl + "/_layouts/15/epmlive/SSRSReportRedirect.aspx?weburl=" + System.Web.HttpUtility.UrlEncode(spDocumentLibrary.ParentWeb.Url) + "&itemurl=" + System.Web.HttpUtility.UrlEncode(spListItem.Url);
                }
                catch (Exception ex)
                {
                    error = ex.Message;
                }

                var element = new XElement("Report", new XAttribute("Name", name.Substring(0, name.Length - 4)),
                                           new XAttribute("Url", url),
                                           new XAttribute("HasResourcesParam", hasResourcesParam));

                if (!string.IsNullOrEmpty(error))
                {
                    element.Add(new XElement("Error", new XCData(error)));
                }

                xElement.Add(element);
            }

            foreach (
                SPFolder spFolder in
                spFolders.Where(f => f.ParentFolder.Name.Equals(parentFolder.Name)).Where(
                    spFolder => !spFolder.Name.Equals("Data Sources")))
            {
                BuildReportTree(spFolder, spFolders, spDocumentLibrary, ref xElement);
            }

            parentElement.Add(xElement);
        }