Silverlight cloudapp で、Reportviewer.aspx という Web フォームでホストされている SSRS Reportviewer コントロールを使用する必要があります。これは、SL C# クラスから javascript OpenReportviewer 関数を呼び出すときに、Azure の "127.0.0.1" テスト環境からうまく機能しています。
<script type="text/javascript" src="Silverlight.js"></script>
<script type="text/javascript">
function OpenReportViewer(ReportViewerURL, TabHeading, EstId, ShowExtraDetail, ReportTypeID, PreExpandSections) {
var form = document.createElement('form');
form.action = ReportViewerURL; //'http://endorphin.cloudapp.net/Reporting/ReportViewer.aspx';
form.method = "POST";
form.target = '_blank'; // this is important to open a new window
var tabHeading = document.createElement('input');
tabHeading.name = 'TabHeading';
tabHeading.value = TabHeading;
form.appendChild(tabHeading);
var estID = document.createElement('input');
estID.name = 'EstID';
estID.value = EstId;
form.appendChild(estID);
var showExtraDetail = document.createElement('input');
showExtraDetail.name = 'ShowExtraDetail';
showExtraDetail.value = ShowExtraDetail;
form.appendChild(showExtraDetail);
var reportTypeID = document.createElement('input');
reportTypeID.name = 'ReportTypeID';
reportTypeID.value = ReportTypeID;
form.appendChild(reportTypeID);
var preExpandSections = document.createElement('input');
preExpandSections.name = 'PreExpandSections';
preExpandSections.value = PreExpandSections;
form.appendChild(preExpandSections);
document.body.appendChild(form);
form.submit();
document.body.removeChild(form);
}
function onSilverlightError(sender, args) {...
ただし、実際の Azure にデプロイしたところ、「Failed to Invoke: OpenReportviewer」と表示されます。
上記の関数が正確に貼り付けられました。
呼び出しコードは次のとおりです。
//**********************************************************************************
public void Invoke3(string tabHeading, int estID, int reportTypeID, bool showExtraDetail, bool preExpandSections)
{
if (true == HtmlPage.IsPopupWindowAllowed)
{
string strBaseWebAddress = App.Current.Host.Source.AbsoluteUri;
int PositionOfClientBin =
App.Current.Host.Source.AbsoluteUri.ToLower().IndexOf(@"/clientbin");
strBaseWebAddress = Strings.Left(strBaseWebAddress, PositionOfClientBin);
string ReportViewerURL = String.Format(@"{0}/Reporting/ReportViewer.aspx", strBaseWebAddress);
try
{
HtmlPage.Window.Invoke("OpenReportViewer", ReportViewerURL, tabHeading, estID.ToString(),
showExtraDetail.ToString(), reportTypeID.ToString(), preExpandSections.ToString());
}
catch (Exception ex)
{
My.ShowError("Failed to invoke Webform for Report Viewer.", ex);
}
}
else
{
MessageBox.Show("You must enable popups to view reports. Safari browser is not supported.",
"Error", MessageBoxButton.OK);
}
}