2010-01-26 110 views
0

我有一種情況,我需要我的報表服務器或多或少可公開訪問,因爲我們在ASP.NET Web應用程序中使用ReportViewer控件,並且用戶組將訪問各種報表。如何使用SOAP API爲鏈接報告設置SSRS報告參數?

這將針對SQL Server 2008標準版運行。

安全性將通過創建鏈接報告(每個用戶一個,在運行時發佈,當他們從我們的Web應用程序請求報告時發佈)來處理,但我無法以編程方式設置鏈接報告參數值。

簡而言之,報表具有少量的保留參數名稱(例如UserID和LanguageID)。在運行時,Web應用程序將檢查用戶是否有鏈接的報告(對每個報告/用戶使用唯一鏈接的報告名稱),如果不存在,則創建一個。

這是使用SSRS SOAP API完成的,並且運行良好。我遇到的問題是設置鏈接報告的報告參數。

例如,如果我以系統管理員身份登錄,我只想查看報告並對報告查看器中的參數進行完全統治。如果我以「低」用戶身份登錄,我希望UserID參數在鏈接報告中設置爲我的ID,並且無法將用戶ID更改爲在其他用戶的報告中窺探。

這可以通過打開鏈接報告的屬性並設置參數默認值並取消選中「提示用戶」框在報告管理器中手動完成。

現在我正在嘗試使用SOAP API以編程方式執行該操作,並且似乎無法找到正確的方法來執行此操作。

我在CreateLinkedReport方法可以設置參數的一些地方閱讀提示,但我開始認爲這只是作者的誤解。儘管此方法確實接受Property []屬性,但這些屬性僅顯示提供報告元數據(如鏈接的報告名稱)。

是否有一個特殊的標記,我需要使用屬性名稱/值來指示屬性是一個報告參數?

任何想法,不勝感激。

回答

0

啊!得到它了!

有2種SOAP方法: GetReportParameters和SetReportParameters

,他們的文檔與報告,這是非常不掛報告工作,但API在該位的功能似乎與這兩個工作。

對於未來搜索: 我寫接收ReportParameter [](GetReportParameters呼籲鏈接報表的結果),並遍歷它們的方法。僞/幾乎C#代碼:

ReportParameter[] reportParameters = ReportingService2005.GetReportParameters(LinkedReportName); 
foreach(ReportParameter reportParameter in reportParameters) 
{ 
    switch(reportParameter.Name) 
    { 
     case "ReservedParam1": 
     reportParameter.DefaultValues = new string[1]; 
     reportParameter.DefaultValues[0] = CalculateReservedParam1(); 
     reportParameter.PromptUser = false; 
     //etc 
    } 
} 
try 
{ 
    ReportingService2005.SetReportParameters(reportParameters); 
} 
catch (Exception e) 
{ 
    // if error occurs while replacing params, delete linked report so user can't specify parameters they aren't entitled to 
    ReportingService2005.DeleteItem(LinkedReportName); 
    throw e; 
}