У меня очень простой отчет в SSRS, который представляет собой таблицу с тремя столбцами, именем объекта, учетной записью клиента и датой истечения срока действия.Автоматическая настройка абонентской подписки в SSRS
В моем отчете я включаю фильтр UserID, чтобы ограничить данные только зарегистрированными учетными записями пользователей пользователя.
Я храню учетные записи пользователя пользователя в простой таблице с доменом \ alias | поля учетной записи клиента, которые заполняются из пакета SSIS.
Когда новый псевдоним | ассоциация учетных записей клиентов, я также хотел бы настроить подписку на отчет для этого псевдонима, чтобы они были уведомлены о том, когда они обновляются.
Возможно ли это?
Я недавно обнаружил Report Server Web Service, и я думаю, что это может помочь. Могу ли я настроить новые подписки здесь? В идеале я хотел бы сделать это в моем пакете SSIS, когда будет идентифицирована новая учетная запись клиента.
Также обратите внимание, я не верю, что данные ведомые подписки будут работать по нескольким причинам:
1) Я с помощью параметра UserID для фильтрации отчета
2) Я хотел бы, чтобы пользователи смогли управлять подпиской на себя, как только он будет создан под «Мои подписки»
UPDATE
я смог успешно создать подписку на себя с помощью веб-сервиса (смотрите ниже), и я все еще глядя в хо ж это может быть сделано для других пользователей, хотя это не очень хорошо:
ReportingService2010SoapClient service = new ReportingService2010SoapClient();
service.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
TrustedUserHeader userHeader = new TrustedUserHeader();
string desc = "Send to Document Library";
string eventType = "TimedSubscription";
string scheduleXml =
@"<ScheduleDefinition>" +
" <StartDateTime>2010-11-30T08:00:00-08:00" +
" </StartDateTime>" +
" <WeeklyRecurrence>" +
" <WeeksInterval>1</WeeksInterval>" +
" <DaysOfWeek>" +
" <Monday>True</Monday>" +
" </DaysOfWeek>" +
" </WeeklyRecurrence>" +
"</ScheduleDefinition>";
ParameterValue[] extensionParams = new ParameterValue[4];
extensionParams[0] = new ParameterValue();
extensionParams[0].Name = "TO";
extensionParams[0].Value = "my alias";
extensionParams[1] = new ParameterValue();
extensionParams[1].Name = "IncludeReport";
extensionParams[1].Value = "FALSE";
extensionParams[2] = new ParameterValue();
extensionParams[2].Name = "IncludeLink";
extensionParams[2].Value = "TRUE";
extensionParams[3] = new ParameterValue();
extensionParams[3].Name = "Subject";
extensionParams[3].Value = "@ReportName was executed at @ExecutionTime";
string matchData = scheduleXml;
ExtensionSettings extSettings = new ExtensionSettings();
extSettings.ParameterValues = extensionParams;
extSettings.Extension = "Report Server Email";
string id;
service.CreateSubscription(userHeader, "/report path/report name",
extSettings, desc, eventType, matchData, null, out id);
Я хочу, чтобы иметь возможность сделать что-то вроде следующего перед вызовом CreateSubscription, но я не могу сделать это без включения пароля пользователя.
NetworkCredential credentials = new NetworkCredential("alias", "", "userdomain");
service.ClientCredentials.Windows.ClientCredential = credentials;
или другой вариант, я обнаружил, что не требует пароля, но бросает COM исключение:
WindowsIdentity wi = new WindowsIdentity("[email protected]");
WindowsImpersonationContext ctx = null;
ctx = wi.Impersonate();
Можно ли добавить записи в таблицу БД для достижения этой цели? – earthling 2010-11-30 21:40:36