2012-09-06 4 views
6

Gibt es einen einfachen Ansatz bei der Erstellung von Berichten, entweder in PDF, Excel, Word oder TIFF-Formate mit der TFS-API und SSRS? Ich kann die Berichte manuell generieren, indem ich die Parameter aus den Kombinationsfeldern über das SSRS-Dashboard für TFS auswähle, aber ich möchte eine Export-Schaltfläche in meine Webanwendung aufnehmen, damit ich Team Web Access zum Generieren von Berichten problemlos umgehen kann. Irgendwelche Ideen?Generieren von Berichten programmgesteuert mithilfe der TFS-API und SSRS

Ich habe auf this post gelesen, dass ich die ReportExecutionService Klasse von SSRS verwenden konnte, also fragte ich mich, ob dies vom TFS-Server verwendet werden könnte.

Ich habe den Namespace mit dieser Web-Service-Referenz importiert: http://<TFS server>/reportserver/ReportExecution2005.asmx

Antwort

4

Ich habe einen Weg gefunden, aus Berichten zu generieren mit dem ReportExecutionService Webservice. Vorausgesetzt, dass dem Projekt bereits eine Webdienst-Referenz hinzugefügt wurde, wird eine Datei mit den angegebenen Parametern generiert. Hier werden die Start- und Enddaten als Parameter angegeben und der Bericht wird mit der Render() method generiert.

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); 
    } 

} 

By the way, die für die Parameter-Werte sind MDX-Abfragen und ich habe noch nicht herausgefunden, wie eine bestimmte AreaPath zu setzen, so dass nur für jetzt I ‚All‘ auflisten kann.

Verwandte Themen