2012-09-06 24 views
6

का उपयोग करके प्रोग्रामेटिक रूप से रिपोर्ट जेनरेट करें क्या टीएफएस एपीआई और एसएसआरएस का उपयोग करके पीडीएफ, एक्सेल, वर्ड या टीआईएफएफ प्रारूपों में रिपोर्ट बनाने में कोई आसान तरीका है? मैं टीएफएस के लिए एसएसआरएस डैशबोर्ड का उपयोग कर कॉम्बो बॉक्स से पैरामीटर का चयन करके मैन्युअल रूप से रिपोर्ट जेनरेट कर सकता हूं लेकिन मैं अपने वेब एप्लिकेशन में एक निर्यात बटन शामिल करना चाहता हूं ताकि मैं आसानी से रिपोर्ट बनाने के लिए टीम वेब एक्सेस को बाईपास कर सकूं। कोई विचार?टीएफएस एपीआई और एसएसआरएस

मैंने this post पर पढ़ा है कि मैं एसएसआरएस से ReportExecutionService कक्षा का उपयोग कर सकता हूं, इसलिए मैं सोच रहा था कि इसका उपयोग टीएफएस सर्वर से किया जा सकता है या नहीं।

मैं नाम स्थान इस वेब सेवा संदर्भ का उपयोग कर आयात किया है: http://<TFS server>/reportserver/ReportExecution2005.asmx

उत्तर

4

मैं एक तरह से बाहर पाया है ReportExecutionService वेब सेवा का उपयोग रिपोर्ट उत्पन्न करने की। बशर्ते कि पहले से ही एक वेब सेवा संदर्भ जोड़ा गया था, यह दिए गए पैरामीटर के साथ एक फाइल उत्पन्न करेगा। यहां प्रारंभ और समाप्ति तिथियां पैरामीटर के रूप में प्रदान की जाती हैं और रिपोर्ट Render() method का उपयोग करके उत्पन्न की जाती है।

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 सेट करने का तरीका।