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 { }
         }
     }
 }
Exemple #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);
                }
            }
        }
        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;
                    }
                }
            });
        }