0

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

我以为我可以通过报告的肥皂请求来做到这一点,但我真的不明白我应该如何弄清楚他们的 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;
}
4

1 回答 1

1

您看过SSRS Web 服务文档了吗?据我所知,SOAP API中没有任何方法可以获取报告的一部分

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

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

于 2012-09-01T10:53:19.637 回答