Недавно мне было поручено открыть более 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;
}
}
}