Добро пожаловать в мой блог! Изначально он не задумывался как блог CRM разработчика, но жизнь сама внесла нужные коррективы. Тут я публикою все свои наблюдения относительно обозначенных в заголовке систем. Если Вы найдете в нем что-то интересное для Вас, как для заказчика, то буду рад сотрудничать с Вами! В моей компетенции 100% задач по MS CRM 3.0/4.0/2011:
MVP 2010, 2011
- Консалтинг
- Проектирование
- Разработка
- Обучение
MVP 2010, 2011
Как использовать адрес сервера отчетов в гиперссылках
Запись от Артем Enot Грунин размещена 09.07.2014 в 19:58
Обновил(-а) Артем Enot Грунин 20.07.2014 в 14:56
Обновил(-а) Артем Enot Грунин 20.07.2014 в 14:56
В одном из своих отчетов я формирую гиппер сылку для открытия формы записи. Проблема в том, что отчет разворачивается не в CRM, где для этого есть специальный параметр CRM_URL, а в SharePoint.
Впрочем, это не мешает создать такой параметр самостоятельно. В моем случае SSRS работает в режиме интеграции SharePoint, так что адрес сервера равен адресу сайта SP, поэтому адрес узла можно получить через глобальную переменную Globals!ReportServerUrl. Единственная проблема - это то, что адрес SSRS в режиме интеграции имеет формат:
Впрочем, нужную нам часть несложно получить при помощи VB функции, которую придется встроить в отчет:
При ее написании выяснился интересный нюанс. Даже если вы задаете адрес сервера отчетов в настройках проекта, при отладке в студии значение параметра Globals!ReportServerUrl все равно будет Nothing. В принципе, это не страшно, для формирования значения параметра можно использовать выражение вида:
Но вот тут-то и кроется коварство SSRS. Как выяснилось, функция IIF не реализует короткое замыкание, поэтому обе части выражения - и та что соответствует истине и та часть, которая соответствует ложному результату, будут выполнены в любом случае. Иными словами, если Globals!ReportServerUrl = Nothing наш код все равно выполнится, хотя результат не будет использован. Как выяснилось, MS это делает в целях улучшения производительности. Именно поэтому, я делаю в коде проверку входного параметра на NULL, в противном случае код валился бы с ошибкой при отладке в студии.
Будьте бдительны!
Впрочем, это не мешает создать такой параметр самостоятельно. В моем случае SSRS работает в режиме интеграции SharePoint, так что адрес сервера равен адресу сайта SP, поэтому адрес узла можно получить через глобальную переменную Globals!ReportServerUrl. Единственная проблема - это то, что адрес SSRS в режиме интеграции имеет формат:
Код:
http://<Server Name>/_vti_bin/ReportServer
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
X++:
=IIF(String.IsNullOrEmpty(Globals!ReportServerUrl), "http://test server uri", Code.GetHostUrl(Globals!ReportServerUrl))
Будьте бдительны!
Всего комментариев 0