AXForum  
Вернуться   AXForum > Блоги > CRM, SharePoint и Черная Магия
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

Добро пожаловать в мой блог! Изначально он не задумывался как блог CRM разработчика, но жизнь сама внесла нужные коррективы. Тут я публикою все свои наблюдения относительно обозначенных в заголовке систем. Если Вы найдете в нем что-то интересное для Вас, как для заказчика, то буду рад сотрудничать с Вами! В моей компетенции 100% задач по MS CRM 3.0/4.0/2011:
  • Консалтинг
  • Проектирование
  • Разработка
  • Обучение


MVP 2010, 2011
Оценить эту запись

Как использовать адрес сервера отчетов в гиперссылках

Запись от Артем Enot Грунин размещена 09.07.2014 в 19:58
Обновил(-а) Артем Enot Грунин 20.07.2014 в 14:56
Теги report, маразм

В одном из своих отчетов я формирую гиппер сылку для открытия формы записи. Проблема в том, что отчет разворачивается не в CRM, где для этого есть специальный параметр CRM_URL, а в SharePoint.

Впрочем, это не мешает создать такой параметр самостоятельно. В моем случае SSRS работает в режиме интеграции SharePoint, так что адрес сервера равен адресу сайта SP, поэтому адрес узла можно получить через глобальную переменную Globals!ReportServerUrl. Единственная проблема - это то, что адрес SSRS в режиме интеграции имеет формат:
Код:
http://<Server Name>/_vti_bin/ReportServer
Впрочем, нужную нам часть несложно получить при помощи VB функции, которую придется встроить в отчет:
X++:
    Public Function GetHostUrl(ByRef uri As String) As String
        If String.IsNullOrEmpty(uri) Then
            Return String.Empty
        Else
            Return New Uri(uri).GetLeftPart(UriPartial.Authority)
        End If
    End Function
При ее написании выяснился интересный нюанс. Даже если вы задаете адрес сервера отчетов в настройках проекта, при отладке в студии значение параметра Globals!ReportServerUrl все равно будет Nothing. В принципе, это не страшно, для формирования значения параметра можно использовать выражение вида:
X++:
=IIF(String.IsNullOrEmpty(Globals!ReportServerUrl), "http://test server uri", Code.GetHostUrl(Globals!ReportServerUrl))
Но вот тут-то и кроется коварство SSRS. Как выяснилось, функция IIF не реализует короткое замыкание, поэтому обе части выражения - и та что соответствует истине и та часть, которая соответствует ложному результату, будут выполнены в любом случае. Иными словами, если Globals!ReportServerUrl = Nothing наш код все равно выполнится, хотя результат не будет использован. Как выяснилось, MS это делает в целях улучшения производительности. Именно поэтому, я делаю в коде проверку входного параметра на NULL, в противном случае код валился бы с ошибкой при отладке в студии.

Будьте бдительны!
Размещено в CRM, SharePoint
Просмотров 28843 Комментарии 0
Всего комментариев 0

Комментарии

 


Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:58.