我已经设置了 SSRS 2017。我需要使用他们的新 REST API 导出 SSRS 报告,我一直在查看 API 规范,但我在 swagger 规范中找不到使用 HTTP 呈现/导出该报告的方法客户。这个问题可能要求与我正在寻找的相同。
3 回答
到目前为止,我知道目前,Microsoft 提供的 RestAPI 中没有可用的方法,请参见此处
有另一种方法可以利用URL 访问 (SSRS)生成报告
通过 URL 访问 SQL Server Reporting Services (SSRS) 中的报表服务器,您可以通过 URL 请求向报表服务器发送命令。
URL 访问语法
URL 请求可以包含以任意顺序列出的多个参数。参数由与号 (&) 分隔,名称/值对由等号 (=) 分隔。
使用 URL 访问导出报告
您可以选择使用 rs:Format URL 参数指定呈现报告的格式。HTML4.0 和 HTM5 格式(渲染扩展)将在浏览器中渲染,对于其他格式,浏览器会提示将报告输出保存到本地文件。
例如,要直接从本机模式报表服务器获取报表的 PDF 副本:
http://myrshost/ReportServer?/myreport&rs:Format=PDF
您还可以使用语法为此提供参数
http://myrshost/ReportServer?/activeusers&UserStatus=true&rs:Format=PDF
欲了解更多详情,您可以访问
https://docs.microsoft.com/en-us/sql/reporting-services/export-a-report-using-url-access
Selenium 的 .Net DLL 可用于调用报告,包括设置任何报告参数。
诀窍是 ReportViewerControl 在 IFRAME 中发出参数和“查看报告”按钮。“ChroPath” Chromium 扩展可用于帮助获取页面中元素的完整 XPath 路径,但该路径实际上可能不适用于 Selenium API。
但是,如果您将焦点“设置”到 IFRAME 中:
# 来自执行此操作的 Powershell 脚本...
#首先,切换到reportviewercontrol IFRAME:
[无效] $seldriver.SwitchTo().frame(0)
...那么您应该能够通过相对 XPath 查询访问 IFRAME 中的任何 HTML 元素
$xpath = "//*[@id='ReportViewerControl_ctl04_ctl03_txtValue']"
要运行报告,您需要在“查看报告”按钮上调用 Click 事件。
需要注意的是,ReportViewerControl 发出的 HTML 元素具有相当枯燥的、连续生成的名称和 ID。但是使用 Selenium,您可以尝试以多种方式访问它们。
对于 Powershell 用户,“Selenium”powershell 模块很有用。但是您需要深入了解 .DLL 以进行诸如切换到 ReportViewerControl IFRAME 之类的事情。
我发现我需要做的另一件事是输入自由睡眠 N #n 秒命令,以让报告的某些部分完成渲染并被拉入它们的包含变量中。
至少那是我在我的 Powershell 脚本中所做的。
我不确定 Selenium API 是否真的会为页面呈现抛出任何事件,即使调用报告似乎本质上是一个异步操作。Selenium API 理论上确实支持设置显式超时(以及隐式超时)等。
因此,就我而言,我想调用我的 SSRS 服务器上的所有报告以查看它们是否真正运行。Selenium 似乎是在 Web 浏览器中与报告“交互”的好方法。
这似乎有些过时了。您可以直接从 API 下载 .rdl 格式的报告:
查看: https ://app.swaggerhub.com/apis/danmonteiro/SSRS-ageradora/2.0#/Reports/GetReportContent
这是一个发回文件的示例 url:
http://10.0.15.78/reports/api/v2.0/Reports(8bf3f3c9-8f72-4c1a-b9bb-54b8ff1d6729)/Content/$value
我刚刚在浏览器中对报表服务器进行了尝试,它立即询问我要将文件保存在哪里。