angularjs nginclude к URL-адресу ReportServer

Я являюсь частью команды, разрабатывающей пользовательское приложение SharePoint, использующее AngularJS и отчеты SSRS. По сути, приложение позволяет пользователю выбрать отчет, выбрать набор параметров, а затем просмотреть отчет на сайте/приложении.

Все работало нормально, пока мы не включили панель инструментов отчета. В этот момент отчет перестал отображаться. Видна была только панель инструментов.

Вот что мы делаем:

HTML-код части приложения, которая отображает отчет:

<section class="left-panel report-view-panel ssrsReport show">
    <h1>{{CurrentReport.Title}}</h1>
    <button class="btn-report-close" ng-click="closeReport()"  type="button">Close</button>
    <div class="scroll-list">
        <figure class="report">
            <div class="sample-report">
                <div ng-include='CurrentReportURL'></div>
            </div>
        </figure>
    </div>
</section>

В javascript контроллера мы создаем URL-адрес сервера отчетов (CurrentReportURL) примерно так:

http://ourreportserver.com/_vti_bin/ReportServer?http://ourreportserver.com/Our%20Reports/Report1.rdl&rs:Command=Render&rc:Toolbar=false&rc:Parameters=false&Param1=41001&Param2=08&Param3=0

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

Однако, изменив URL-адрес на это:

http://ourreportserver.com/_vti_bin/ReportServer?http://ourreportserver.com/Our%20Reports/Report1.rdl&rs:Command=Render&rc:Toolbar=true&rc:Parameters=false&Param1=41001&Param2=08&Param3=0

заставляет отображать только панель инструментов. Нет отчета. Если я скопирую тот же URL-адрес и просто открою его в окне браузера, отчет будет отображаться так, как ожидалось.

Я копнул немного глубже и рассмотрел оба сценария, используя Chrome и вкладку Сеть инструментов разработчика Chrome. Было несколько различий в вызовах между URL-адресом в ng-include и URL-адресом в окне браузера. Однако больше всего выделялся POST для RSViewerPage.aspx со всеми параметрами средства просмотра отчетов и отчетов, преобразованными в соответствующие параметры ReportViewer. (Я бы разместил эту реальную ссылку, но SO говорит мне, что для этого мне нужна репутация 10).

Я получаю те же результаты в Chrome и IE10.

Я ищу некоторые рекомендации относительно того, почему версия ng-include не делает POST? Я считаю, что этот POST имеет какое-то отношение к сеансу SSRS, который отслеживается только при включенной панели инструментов, но я действительно не уверен.

Любое руководство будет с благодарностью!


person jeffproe    schedule 13.08.2013    source источник


Ответы (2)


Я собираюсь начать интегрировать SSRS в приложение angularjs, я думал об использовании iframe и изменении атрибута src iframe на URL-адрес выбранного отчета.

Я даже не пытался использовать ng-include, думая, что html, возвращаемый ssrs, будет разработан для работы с моделью asp.net postback/viewstate. При использовании iframe эта модель обратной передачи/состояния просмотра будет изолирована на «острове» на странице и не повлияет на родительский контейнер.

христианин

person Christian    schedule 04.01.2014
comment
В конечном итоге мы остановились на использовании iframe. - person jeffproe; 21.02.2014

Пытаться

<div ng-include src="CurrentReportURL"></div>

Это работает в любом браузере?

Если он работает в Chrome, но не в IE, убедитесь, что вы следуете разделу угловых ограничений IE.

ex:

  <!--[if lte IE 8]>
      <script>
        document.createElement('ng-include');
      </script>
  <![endif]-->

Кроме того, для динамических URL-адресов ознакомьтесь с: этой ссылкой

person yaegerbomb    schedule 16.08.2013
comment
Я попробовал вышеуказанное предложение, и это не имело никакого значения. И нет, это не работает ни в одном браузере. - person jeffproe; 16.08.2013