Итак, вы упомянули, что у вас нет корпоративной версии, и кажется, что только корпоративная версия имеет подписки на основе данных.
Есть другой способ. Вы можете выполнить SSRS через WebClient в C#.
Сначала захватите параметры динамически через SQL:
class parameterRow {
public string fileName;
public string active;
}
...
var parameterRows = new List<parameterRow>();
var sql = @"
select fileName = 'activeRecords.pdf',
active = 'Active'
union all
select fileName = 'inactiveRecords.pdf',
active = 'Inactive'
";
using (var con = new SqlConnection("server=someServer;database=someDB;trusted_connection=yes"))
using (var cmd = new SqlCommand(sql, con)) {
con.Open();
using (var rdr = cmd.ExecuteReader())
while (rdr.Read())
parameterRows.Add(new parameterRow {
fileName = rdr[0].ToString(),
active = rdr[1].ToString()
});
}
Затем l oop динамически созданные параметры, загрузка и архивирование на каждой итерации путем интеграции имени параметра в URL-адрес и имени файла в имя записи zip-архива:
using (var client = new WebClient())
using (var fileStream = new FileStream(@"c:\...\ssrs.zip", FileMode.Create, FileAccess.Write))
using (var zipArchive = new ZipArchive(fileStream, ZipArchiveMode.Create, false)) {
foreach(var paramRow in parameterRows) {
var url = Uri.EscapeUriString(
@"http://ssrs.YourSite.org/ReportServer/Pages/ReportViewer.aspx?" +
@"/Basic Student Lists/Student List" +
$@"&Active={paramRow.active}" +
@"&SortOrder=Student Name" +
@"&rs:Command=Render&rs:Format=pdf"
);
client.UseDefaultCredentials = true;
var data = client.DownloadData(url);
var zipEntry = zipArchive.CreateEntry(paramRow.fileName);
using (var entryMs = new MemoryStream(data))
using (var zipEntryStream = zipEntry.Open())
entryMs.CopyTo(zipEntryStream);
}
}
Очевидно, вам, возможно, не придется архивировать, но поскольку это часть старого кода, который я получил, я полагаю Я бы сохранил эту функцию на случай, если она пригодится.