使用肥皂访问SSRS报告的特定部分?

时间:2012-08-31 17:04:56

标签: windows wcf reporting-services

我们有一个测试WCF客户端连接到我们的应用程序,它从报告中解析xml并将其显示在自定义表中。我们有一些单元格,我们希望能够折叠,以获得桌面上最初可行的唯一ID列表。问题是他们的数据太多了,我想知道是否有办法只从报告中加载id,然后在点击ID时动态调用额外的信息。这样我们就可以在应用程序开始时加载更少的数据。

我以为我可以用报告的soap请求来做这个,但我真的不明白我应该如何弄清楚他们的API。这是由过去的其他人为我们的WCF应用程序完成的。我想也许增加这个可能只让我在桌子的某个部分?也许我接近这一点的方式完全错了。

public string Invoke(string reportPath, FilterViewModel reportParameter, NetworkCredential networkCredential)
{
    if (NetworkInterface.GetIsNetworkAvailable())
    {
        m_NetworkCredential = networkCredential;
        m_reportParameter = reportParameter;

        Dictionary<string, string> headers = new Dictionary<string, tring>();
        headers.Add("charset", "utf-8");
        headers.Add("useUnsafeHeaderParsing", "true");
        headers.Add("SOAPAction", "http://schemas.microsoft.com/sqlserver/2005/06/30/reporting/reportingservices/LoadReport");

        StringBuilder reqSOAPEnv = new StringBuilder();

        reqSOAPEnv.Append("<s:Envelope xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'>");

        reqSOAPEnv.Append("<s:Body xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' ");
        reqSOAPEnv.Append("xmlns:xsd='http://www.w3.org/2001/XMLSchema'>");

        reqSOAPEnv.Append("<LoadReport xmlns='http://schemas.microsoft.com/sqlserver/2005/06/30/reporting/reportingservices'>");
        reqSOAPEnv.Append("<Report>");
        reqSOAPEnv.Append(reportPath);
        reqSOAPEnv.Append("</Report>");
        reqSOAPEnv.Append("</LoadReport>");

        reqSOAPEnv.Append("</s:Body>");
        reqSOAPEnv.Append("</s:Envelope>");

        SSRS_ServiceRequestController serviceRequest = new SSRS_ServiceRequestController();
        result = serviceRequest.MakeWebRequest(ServiceURL, m_ContentType, m_Method, headers, networkCredential, reqSOAPEnv.ToString());
    }
    return result;
}

1 个答案:

答案 0 :(得分:1)

你看过SSRS Web Service documentation了吗?据我所知,没有method in the SOAP API来获取报告的部分

一种解决方法可能是将报表呈现为XML,并处理该XML以仅检索所需的数据。另一个可能是为您要导出的表使用子报表,并且仅根据您的情况使用子报表。

顺便说一句,我知道你继承了你发布的代码,但它看起来有点过时了。为什么SOAP请求构造为字符串?如果为SSRS Web服务生成代理,并且只使用常规方法调用,那么可能要容易得多 - 让框架为您处理SOAP内容。