我们有一个测试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;
}
答案 0 :(得分:1)
你看过SSRS Web Service documentation了吗?据我所知,没有method in the SOAP API来获取报告的部分。
一种解决方法可能是将报表呈现为XML,并处理该XML以仅检索所需的数据。另一个可能是为您要导出的表使用子报表,并且仅根据您的情况使用子报表。
顺便说一句,我知道你继承了你发布的代码,但它看起来有点过时了。为什么SOAP请求构造为字符串?如果为SSRS Web服务生成代理,并且只使用常规方法调用,那么可能要容易得多 - 让框架为您处理SOAP内容。