Изменение источника данных в списке отчетов - PullRequest
0 голосов
/ 24 сентября 2019

Недавно мне было поручено открыть более 300 отчетов и изменить источник данных на новую базу данных, а также изменить таблицы, включенные в новую базу данных.Как вы видите, следующее изображение не изменилось

https://answers.sap.com/storage/temp/1730867-screenshot-1.png

Мне нужно изменить все таблицы на «testepicor», но я не хотел бы открывать каждый отчет и выполнять их отдельно.Есть ли способ, которым я могу сделать что-то в c #, чтобы справиться с этой работой для меня?Я свободно владею c #, но никогда не использовал его с отчетами о кристаллах.

Мне бы хотелось, чтобы все эти таблицы имели "Каталог: TESTEPICOR"

https://answers.sap.com/storage/temp/1730868-screenshot-3.png

, как этоодин

https://answers.sap.com/storage/temp/1730869-screenshot-2.png

Спасибо за чтение!


    public static class Program
    {
        static void Main(string[] args)
        {
            List<string> AllReports = GetReports();
            ReportDocument cryRpt = new ReportDocument();
            foreach (string report in AllReports)
            {
                Console.WriteLine(@"\\cytepicortest\EpicorData\CustomReports\" + report);
                Console.ReadLine();
                cryRpt.Load(@"\\cytepicortest\EpicorData\CustomReports\" + report);


                SetDatabaseLogon(cryRpt, "odbcuser", "*", "testepicor");
            }
            cryRpt.Dispose();
        }

        public static void SetDatabaseLogon(this ReportDocument report, string username, string password, string odbcDataSource)
        {
            // first we need to switch all tables of all reports (main- and subreports) to the target odbcDataSource.
            foreach (Table table in report.Database.Tables)
            {
                table.LogOnInfo.ConnectionInfo.UserID = username;
                table.LogOnInfo.ConnectionInfo.Password = password;
                table.LogOnInfo.ConnectionInfo.ServerName = odbcDataSource;
                table.LogOnInfo.ConnectionInfo.DatabaseName = string.Empty;
            }

            if (!report.IsSubreport)
            {
                foreach (ReportDocument subreport in report.Subreports)
                {
                    subreport.SetDatabaseLogon(username, password, odbcDataSource);
                }

                // now that we've setup the report, we can perform the actual database logon
                report.SetDatabaseLogon(username, password, odbcDataSource, string.Empty, true);
                Console.WriteLine(username);
                Console.WriteLine(password);
                Console.WriteLine(odbcDataSource);
                Console.WriteLine("Set Datasource to test epicor");
                Console.ReadLine();
            }
        }


        public static List<string> GetReports()
        {
            var FileList = new List<string>();
            DirectoryInfo d = new DirectoryInfo(@"\\cytepicortest\EpicorData\CustomReports");//Assuming Test is your Folder
            FileInfo[] Files = d.GetFiles("*.rpt"); //Getting Text files
            foreach (FileInfo file in Files)
            {
               FileList.Add(file.Name);
            }
            return FileList;

        }
    }
}
...