6

TFS API と SSRS を使用して、PDF、Excel、Word、または TIFF 形式でレポートを生成する簡単な方法はありますか? TFS の SSRS ダッシュボードを使用してコンボ ボックスからパラメーターを選択することでレポートを手動で生成できますが、レポートを生成するために Team Web Access を簡単にバイパスできるように、Web アプリケーションにエクスポート ボタンを含めたいと考えています。何か案は?

この投稿で、SSRS のクラスを使用できることを読んだReportExecutionServiceので、これを TFS サーバーから使用できるかどうか疑問に思っていました。

この Web サービス参照を使用して名前空間をインポートしました。 http://<TFS server>/reportserver/ReportExecution2005.asmx

4

1 に答える 1

4

ReportExecutionServiceWeb サービスを使用してレポートを生成する方法を見つけました。Web サービス参照が既にプロジェクトに追加されている場合、指定されたパラメーターでファイルが生成されます。ここでは、開始日と終了日がパラメーターとして提供され、 Render() メソッドを使用してレポートが生成されます。

private void GenerateReport()
{
    ReportExecutionService rs = new ReportExecutionService();
    rs.Credentials = System.Net.CredentialCache.DefaultCredentials;
    rs.Url = "http://<TFS server name>/reportserver/ReportExecution2005.asmx";

    // Render arguments
    byte[] result = null;
    string reportPath = @"<SSRS report path>";
    string format = "PDF";
    string historyID = null;
    string devInfo = @"<DeviceInfo><Toolbar>False</Toolbar></DeviceInfo>";

    // Prepare report parameter.
    ParameterValue[] parameters = new ParameterValue[2];
    parameters[0] = new ParameterValue();
    parameters[0].Name = "StartDateParam";
    parameters[0].Value = "2012-06-01 00:00:00";
    parameters[1] = new ParameterValue();
    parameters[1].Name = "EndDateParam";
    parameters[1].Value = "2012-09-01 00:00:00";
    parameters[2] = new ParameterValue();
    parameters[2].Name = "AreaParam";
    parameters[2].Value = "[Work Item].[Area Hierarchy].[All]";
    parameters[3] = new ParameterValue();
    parameters[3].Name = "WorkItemTypeParam";
    parameters[3].Value = "[Work Item].[System_WorkItemType].&[Task]";
    parameters[4] = new ParameterValue();
    parameters[4].Name = "StateParam";
    parameters[4].Value = "[Work Item].[System_State].&[Active]";
    parameters[5] = new ParameterValue();
    parameters[5].Name = "TrendLineParam";
    parameters[5].Value = "both";

    DataSourceCredentials[] credentials = null;
    string showHideToggle = null;
    string encoding;
    string mimeType;
    string extension;
    Warning[] warnings = null;
    ParameterValue[] reportHistoryParameters = null;
    string[] streamIDs = null;

    ExecutionInfo execInfo = new ExecutionInfo();
    ExecutionHeader execHeader = new ExecutionHeader();

    rs.ExecutionHeaderValue = execHeader;

    execInfo = rs.LoadReport(reportPath, historyID);

    var parameters_ = rs.GetExecutionInfo().Parameters;

    rs.SetExecutionParameters(parameters, "en-us"); 
    String SessionId = rs.ExecutionHeaderValue.ExecutionID;

    Console.WriteLine("SessionID: {0}", rs.ExecutionHeaderValue.ExecutionID);

    try
    {
        result = rs.Render(format, devInfo, out extension, out encoding, out mimeType, out warnings, out streamIDs);

        execInfo = rs.GetExecutionInfo();

        Console.WriteLine("Execution date and time: {0}", execInfo.ExecutionDateTime);

    }
    catch (SoapException e)
    {
        Console.WriteLine(e.Detail.OuterXml);
    }
    // Write the contents of the report to an MHTML file.
    try
    {
        FileStream stream = File.Create("report.pdf", result.Length);
        Console.WriteLine("File created.");
        stream.Write(result, 0, result.Length);
        Console.WriteLine("Result written to the file.");
        stream.Close();
    }
    catch (Exception e)
    {
        Console.WriteLine(e.Message);
    }

}

ちなみに、パラメータに設定する値はMDXクエリで、特定のAreaPathの設定方法はまだわかっていないので、とりあえず「すべて」しか列挙できません。

于 2012-09-11T15:27:51.903 に答える