C#更改报告中包含的所有表的数据源和目录

2020-09-01 19:10发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中) SAP您好! 我最近被分配了...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


SAP您好!

我最近被分配了一个任务,我必须打开300多个报告并将数据源更改为新数据库,同时还要更改新数据库中包含的表。 如您所见,下图未更改

我需要将所有表更改为" testepicor",但我不必打开每个报表并单独进行处理。 有什么办法可以用C#制作一些东西来替我完成这项工作吗? 我精通c#,但从未将其用于Crystal Reports。

我希望所有这些表都具有"目录:TESTEPICOR"

喜欢这个

感谢您的阅读!

(7.3 kB)
5条回答
nice_wp
2020-09-01 19:41
所以这是 我到目前为止所拥有的似乎并没有改变报告中的任何内容。 数据源在运行之前是相同的。





 使用系统;
 使用System.Collections.Generic;
 使用System.Linq;
 使用System.Text;
 使用System.Threading.Tasks;
 使用CrystalDecisions.Shared;
 使用CrystalDecisions.ReportSource;
 使用CrystalDecisions.CrystalReports.Engine;
 使用System.IO;
 使用System.Diagnostics;


 命名空间Automate_crystal_reports
 {
     公共静态课程
     {
         静态void Main(string [] args)
         {
             List  AllReports = GetReports();
             ReportDocument cryRpt =新的ReportDocument();
             foreach(AllReports中的字符串报告)
             {
                 Console.WriteLine(@" \\ cytepicortest \ EpicorData \ CustomReports \" +报告);
                 Console.ReadLine();
                 cryRpt.Load(@" \\ cytepicortest \ EpicorData \ CustomReports \" +报告);




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


         公共静态无效SetDatabaseLogon(此ReportDocument报告,字符串用户名,字符串密码,字符串odbcDataSource)
         {
            //首先,我们需要将所有报告(主报告和子报告)的所有表切换到目标odbcDataSource。
             foreach(report.Database.Tables中的表表)
             {
                 table.LogOnInfo.ConnectionInfo.UserID =用户名;
                 table.LogOnInfo.ConnectionInfo.Password =密码;
                 table.LogOnInfo.ConnectionInfo.ServerName = odbcDataSource;
                 table.LogOnInfo.ConnectionInfo.DatabaseName = string.Empty;
             }


             如果(!report.IsSubreport)
             {
                 foreach(report.Subreports中的ReportDocument子报表)
                 {
                     subreport.SetDatabaseLogon(用户名,密码,odbcDataSource);
                 }


                //现在,我们已经设置了报告,我们可以执行实际的数据库登录了
                 report.SetDatabaseLogon(用户名,密码,odbcDataSource,string.Empty,true);
                 Console.WriteLine(用户名);
                 Console.WriteLine(密码);
                 Console.WriteLine(odbcDataSource);
                 Console.WriteLine("设置数据源以测试Epicor");
                 Console.ReadLine();
             }
         }




         公共静态List  GetReports()
         {
             var FileList = new List ();
             DirectoryInfo d = new DirectoryInfo(@" \\ cytepicortest \ EpicorData \ CustomReports");//假设测试是您的文件夹
             FileInfo [] Files = d.GetFiles(" *。rpt"); //获取文本文件
             foreach(文件中的FileInfo文件)
             {
                FileList.Add(file.Name);
             }
             返回FileList;
            
         }
     }
 }