1

背景:

  • 我使用 ReportExecutionServiceSoap 接口通过用 C# 编写的 ASP.NET 应用程序呈现 SSRS 报告
  • 我有一个工作渲染服务已经实现了切换项和分页功能,所以我对代码很有信心。
  • 我正在尝试提供“交互式排序”功能。查看(非常有限的)文档,实现应该与切换功能非常相似。

这是我在渲染器中对 Sort 方法的实现:

        using (var rsExec = new ReportExecutionService())
        {
            // Configure the service instance, specifiying the credentials and the sessionId
            rsExec.Url = BuildSsrsServiceInvocationUri(m_reportServerUrl);
            rsExec.Credentials = System.Net.CredentialCache.DefaultCredentials;
            rsExec.UseDefaultCredentials = true;

            // Reload the execution context of the previous session
            rsExec.ExecutionHeaderValue = new ExecutionHeader();
            rsExec.ExecutionHeaderValue.ExecutionID = sessionId;

            // Sort
            string reportItemResult;            // don't know what to do with this
            ExecutionInfo2 execInfoResult;      // don't know what to do with this

            rsExec.Sort2(sortItem, 
                SortDirectionEnum.Ascending,    // TODO: get this from method arg
                clearExistingSorts, 
                PageCountMode.Estimate, 
                out reportItemResult, 
                out execInfoResult);
        }

从我的控制器中,我像这样调用上述方法。sessionId是之前渲染的报表的ExecutionId,id对应用户点击的报表项:

        // Sort the report
        m_ReportRenderer.Sort(sessionId, id, clear);

最后我调用我的渲染器的 RenderReport 方法,期望获得按用户点击的列排序的报告输出:

        // Render the report with the new sort order
        var renderResult = m_ReportRenderer.RenderReport(sessionId, ImageRoot, actionScript);

问题:

  1. 我对 API 的理解正确吗?
  2. 如果没有,我做错了什么?
  3. 如果是这样,我做错了什么?
4

1 回答 1

0
  1. 是的,您对 API 的理解是正确的。
  2. -
  3. 你没有说,出了什么问题,但我猜对 RenderReport 的调用会导致与以前相同的(未排序的)报告。你有没有尝试过再次调用排序方法?我还不知道为什么,但它需要一个 Render-Report 和一个第二个 Sort-Call 才能正常工作。对排序方法的所有后续调用在第一次调用时按预期工作。
于 2015-04-08T06:19:04.533 回答