如何以编程方式关闭TFS工作项

时间:2010-05-17 16:49:11

标签: .net vb.net tfs

我正在尝试将存储在Excel工作表中的旧版问题跟踪系统中的项目导入Team Foundation Server。我成功遍历Excel文件的行,我可以创建新的工作项,但它们始终处于Proposed状态。如果我尝试将状态更改为Closed,然后为工作项调用Validate方法,则会在State属性上收到验证错误 - InvalidListValue {4}。

    Dim MyProj As Project = store.Projects("MyProject")
    Dim WIT As WorkItemType = MyProj.WorkItemTypes("Task")
    Dim WorkItem As WorkItem = WIT.NewWorkItem()

    WorkItem.Title = Title
    WorkItem.Description = Description
    WorkItem.History = History
    WorkItem.State = "Closed"
    WorkItem.Fields("Assigned To").Value = AssignedTo
    WorkItem.Fields("Priority").Value = Priority
    WorkItem.Fields("Closed By").Value = ClosedBy

我也尝试过以下代码,尝试保存工作项,将状态更改为关闭状态,然后再次保存,但这似乎也不起作用 - 当我打开状态时仍然建议状态我的工作项目TFS查询:

        WorkItem.Save()

        WorkItem.State = "Closed"
        WorkItem.Fields("Closed By").Value = ClosedBy
        WorkItem.Save()

有没有其他人尝试过这样的事情并取得了成功,或者有这样做的想法?哦,这是我正在尝试创建和关闭的CMMI任务。我想知道我是否试图跳过CMMI要求的某些活动,但我是新手,这只是猜测。

3 个答案:

答案 0 :(得分:5)

我想出了如何以编程方式创建和关闭TFS CMMI任务。关键是要经过CMMI流程,可以在http://msdn.microsoft.com/en-us/library/bb668962.aspx找到,在每次更改后更改State属性并保存WorkItem。

        ... WorkItem creation tasks
        WorkItem.Fields("Assigned To").Value = AssignedTo
        WorkItem.Fields("Priority").Value = Priority

        'This first Save creates a WorkItem in the Proposed state'
        WorkItem.Save()

        WorkItem.State = "Active"
        Errors = WorkItem.Validate()
        WorkItem.Save()

        WorkItem.State = "Resolved"
        WorkItem.Fields("Resolved By").Value = ClosedBy
        WorkItem.Fields("Resolved Reason").Value = "Just because"
        Errors = WorkItem.Validate()
        WorkItem.Save()

        WorkItem.State = "Closed"
        WorkItem.Fields("Closed By").Value = ClosedBy
        Errors = WorkItem.Validate()
        WorkItem.Save()

答案 1 :(得分:0)

您应该使用TFS集成平台。

http://tfsintegration.codeplex.com/

答案 2 :(得分:0)

解决这个问题的另一种方法是使用“Process Editor” 使用visual studio从服务器打开“WIT-WorkItem Type” 从Team Projects列表中选择要更改的WorkItem,并通过删除assignedto = None并将其更改为“Required”来编辑工作流。