TFS - 比较任务的自动化



您知道如何实现以下目标吗?我想在 TFS 中当前存储的内容与 SSRS 报告、SSIS 包、SQL 存储过程/表定义的实时版本进行比较。

对于 SSRS 报告,它可能看起来像这样:1. 提取报告的定义2. 将其添加到 TFS3. 在报告的先前版本和当前版本之间进行比较。4. 发送/存储有差异的报告

怎样才能自动实现这一点,我正在考虑使用 TFS API,但不确定从哪里开始。

谢谢你的帮助,拉法尔

一种方法可以通过 ReportExecutionService Class 使用 TFS API 和 SSRS 生成报告。

前提是已将 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;
   tring 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 = "2016-05-01 00:00:00";
    parameters[1] = new ParameterValue();
    parameters[1].Name = "EndDateParam";
    parameters[1].Value = "2016-05-30 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);
    }
}

生成报告后,只需将它们签入 TFS 服务器即可。然后你只需要使用Difference.DiffFiles方法比较两个文件,并使用内部比较引擎,并返回 DiffSegment 的链接列表。更多详细信息,请参阅此 MSDN 博客。

最新更新