[英]How can I get rdl report parameter value in custom SSRS renderer using c# code
[英]Accessing Parameter Collection in SSRS Custom Code to get Parameter Name/Value Pairs
好的,因此由於自定義代碼對參數收集的支持不是很好,因此這僅在將報告發送到服務器后才有效。 這使得調試變得棘手,但我們可以通過在測試時對參數進行硬編碼來解決這個問題。
這個答案可能看起來很長,但實際上它很快就可以完成。
開始創建報告並添加參數
在我的示例報告中,我有兩個參數,
現在部署報告,即使它還沒有完成,我們現在需要部署,其余部分才能工作。
所以我們需要做的第一件事就是獲取一個參數列表。 如果我們知道報告的完整路徑,我們就可以做到這一點。 我們現在將對該值進行硬編碼,但在完成之前使其動態化。
創建一個名為dsParameters
的數據集並將查詢設置為以下內容。
DECLARE @pNameList varchar(1000) =''
SELECT @pNameList = eachParam.value('Name[1]', 'VARCHAR(250)') +'|' + eachParam.value('Type[1]', 'VARCHAR(250)') + CASE @pNameList WHEN '' THEN '' ELSE ',' + @pNameList END
FROM (
SELECT CONVERT(XML, c.Parameter) AS pxml
FROM ReportServer.dbo.Catalog c
WHERE c.[Path] = @ReportPath
) a
CROSS APPLY pxml.nodes('//Parameters/Parameter') ( eachParam )
SELECT @pNameList as pNameList
這將返回類似
PeriodID|Integer,CountryID|String
現在右鍵單擊數據集,選擇“數據集屬性”,然后選擇“參數”。
將@ReportPath
參數值設置為報告的路徑和報告名稱。 您可以在Path
列中獲取此ReportServer.dbo.catalog
,它看起來類似於="/Sales Reports Folder/My Sales Report"
。 注意正斜杠。
一旦一切正常,我們將在稍后回到硬編碼值。
接下來,轉到報告的屬性並單擊代碼選項卡。
粘貼以下兩個函數。
Public Function GetParameterValues(ByVal parameter as Parameter, ByVal pType as string) as String
Dim s as String = ":["
If parameter.IsMultiValue then
For i as integer = 0 to parameter.Count-1
if i >0 then
s = s + ","
end if
if pType = "String" then
s = s + """" + CStr(parameter.Value(i)) + """"
else
s = s + CStr(parameter.Value(i))
end if
Next
Else
s = s + CStr(parameter.Value)
End If
Return s + "]"
End Function
Public Function GetJSON(ByVal parameters as Parameters, pNameTypeList as String) as string
' pass in a list of parameter names
' for each name GetParameterValues
' append the result to json txt
Dim pList() AS String = Split(pNameTypeList, ",")
Dim pParts() AS String
Dim i as Integer
Dim pName as string
Dim pType as string
Dim json as String ="{"
While i <= pList.Length - 1
pParts = Split(pList(i), "|")
pName = pParts(0)
pType = pParts(1)
if i >0 then
json = json + ","
end if
json = json & """" & pName & """"
json &= GetParameterValues(parameters(pName), pType)
json = json & vbcrlf
i += 1
End While
json = json & "}"
Return json
End Function
第一個函數接受參數對象和數據類型,並通過參數值循環返回一行,例如"CountryID":["89","94"]
第二個函數采用Name1|Type1,Name2|Type1
形式的參數集合和參數名稱和類型列表。 它以json“標題”開頭,根據需要重復調用第一個添加逗號的函數,然后關閉json。
輸出將是這樣的......
{"PeriodID":[2020300]
,"CountryID":["89","94"]
}
注意我只定義了String
類型的引用,您可能需要進行調整以滿足您的需要。
最后(幾乎)創建一個文本框並將值表達式設置為
=Code.GetJSON(Parameters,
First(Fields!pNameList.Value, "dsParameters")
)
這是最終報告輸出...
最后,我們需要使該數據集參數動態化。 返回數據集的參數並將@ReportPath
參數值設置為
=Globals!ReportFolder & "/" & Globals!ReportName
就是這樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.