SSRS — программно помечать, когда отчет создается в виде моментального снимка

Есть ли способ программно определить, выполняется ли отчет в виде моментального снимка?

У меня есть набор отчетов, которые должны вести себя иначе при создании моментального снимка, чем при запуске конечным пользователем.

Различия включают в себя:

  1. Табликсы и видимость столбцов
  2. Несколько параметров (как доступные варианты, так и значения по умолчанию)
  3. Выражения в текстовых полях в заголовке
  4. Выражения в ячейках табликса

Я смог обойти большинство из этих проблем, но это серия кладжей. В идеале мне нужна функция IsSnapshot(), которую я могу использовать во всем отчете.


person TomG    schedule 15.07.2014    source источник


Ответы (1)


Я смог использовать IIf(User!UserID = "",True,False) в выражениях для пометки запланированных моментальных снимков (но не запускаемых вручную).

К сожалению, служба SSRS понимает, что User!UserID изменчива, и поэтому не позволяет мне использовать ее, если я также хочу использовать подписки, управляемые данными: "Вы не можете создать управляемую данными подписку на отчет, который содержит выражение User!UserID"

Чтобы обойти это, я сделал свою собственную публичную функцию в свойствах отчета «Код»:

Public Function UserName()
  Try
   If IsDBNull(Report.User!UserID) Then Return ""
   If IsNothing(Report.User!UserID) Then Return ""
   Return Report.User!UserID
  Catch
   Return ""
  End Try
 End Function

Поэтому в моем отчете в качестве флага моментального снимка используется IIf(Code.UserName() = "",True,False).

Моя основная проблема заключается в том, что я затем использую отсутствие имени пользователя, чтобы решить, следует ли отображать все данные (как я хочу в своем снимке). Это похоже на брешь в системе безопасности.

Я бы предпочел иметь явный флаг моментального снимка и не полагаться на какой-то побочный продукт процесса создания моментального снимка!

person TomG    schedule 15.07.2014