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

2020-09-01 19:10发布

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

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


SAP您好!

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

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

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

喜欢这个

感谢您的阅读!

(7.3 kB)

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

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


SAP您好!

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

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

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

喜欢这个

感谢您的阅读!

(7.3 kB)
付费偷看设置
发送
5条回答
暮风yp
1楼 · 2020-09-01 19:56.采纳回答

ReplaceConnection始终有效,并且您还需要为每个子报表设置登录信息。

WIKI页面上的参数示例向您展示了如何操作。

nice_wp
2楼-- · 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;
            
         }
     }
 }
 
clever101
3楼-- · 2020-09-01 19:54

在运行时使用C#更改Crystal Report数据源(访问):

https://answers.sap.com/questions/11650069/changing-a-crystal-report-datasource-%28access %29-at-r.html

为Crystal服务器上的Crystal报表设置数据源:

https://stackoverflow.com/questions/2074557/programmatically-set-the-

半个程序猿
4楼-- · 2020-09-01 19:44

的数据源通过一个晶体服务器上的晶体报告,所以您说的是ReplaceConnection是我想使用的? 还是您是说我做不到我想做的事,应该在CR Designer中手动更改它们?

SAP砖家
5楼-- · 2020-09-01 19:42

嗨,布雷克,

子报表代码的问题是您没有设置子报表对象的位置,只是再次更改了主报表对象。

在此处转到CR for VS的下载页面:

https: //wiki.scn.sap.com/wiki/display/BOBJ/Crystal+Reports%2C+Developer+for+Visual+Studio+Downloads

该页面上是一个参数测试应用,其中包含有关如何更改/设置主报表和子报表的数据源的代码。

第二个问题是,如果更改了表,SDK将检测到更改并删除报告中未使用的所有字段,这是CR Designer中的自动映射功能。 设计器具有一个用于映射字段的UI,而SDK没有,没有选择来增强功能。 我们尝试了太多的工作,.NET无法做到这一点。 旧的RDC查看器具有该功能,但不再受支持。

因此,您可以使用ReplaceConnection()更新数据源,这是最好的一种使用方式。

但是,如果仅更改表/字段,则可以在Cr Designer中手动更改它们。

现在,您可以使用RAS添加新表,将用于旧字段的代码编码为新字段,获取位置和位置值,并在其中添加新表并删除旧表,然后设置"表"链接等。/p>

可以这样做,但是对于300个报告,只需雇用一个学生为您做这件事会更快...

仅供参考-如果数据源无法连接,更改将不会更新。

一周热门 更多>