如何使用tfs Java sdk切换工作项的状态

如何使用tfs Java sdk切换工作项的状态,java,tfs,Java,Tfs,我尝试将工作项的状态从“新”切换到“活动”,如下所示: WorkItemCollection co = tpc.getWorkItemClient().query("select xxxxxx..."); WorkItem newWorkItem = co.getWorkItem(0); newWorkItem.getFields().getField(CoreFieldReferenceNames.STATE).setValue("Active&

我尝试将工作项的状态从“新”切换到“活动”,如下所示:

   WorkItemCollection co = tpc.getWorkItemClient().query("select xxxxxx...");
   WorkItem newWorkItem = co.getWorkItem(0);
   newWorkItem.getFields().getField(CoreFieldReferenceNames.STATE).setValue("Active");
但有如下错误报告:

   Exception in thread "main" java.lang.IllegalArgumentException: field id [10112] does not exist in this collection (wi=5789377,size=9)


我假设此方法有问题,或者此方法不支持Azure Devops Server 2019U1,因为此包是可用的

我的测试代码:

public class HelloJava {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        URI serverURI = null;
        try {
            serverURI = new URI("xxxxxxxx");
        } catch (URISyntaxException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Credentials credentials = new UsernamePasswordCredentials("xxx","xxx");
        TFSTeamProjectCollection tpc = new TFSTeamProjectCollection(serverURI, credentials);
        tpc.authenticate();
        WorkItemClient myClient = tpc.getWorkItemClient();
        WorkItemCollection myWorkitemCollection = myClient.query("SELECT [System.Id],[System.WorkItemType],[System.State] FROM workitems");
        //Get workItem Task1
        WorkItem myWorkItem = myWorkitemCollection.getWorkItem(0);
        FieldCollection myFieldCollection = myWorkItem.getFields();
        Field myField = myFieldCollection.getField(CoreFieldReferenceNames.STATE);
        //Get workItem Task2
        WorkItem myWorkItem2 = myWorkitemCollection.getWorkItem(1);
        FieldCollection myFieldCollection2 = myWorkItem2.getFields();
        Field myField2 = myFieldCollection2.getField(CoreFieldReferenceNames.STATE);
        
        System.out.println(myField.getValue());
        System.out.println(myField2.getValue());
        
        myField2.setValue(myField.getValue()); //Where the error occurs.
        
        System.out.println(myField.getValue());
        System.out.println(myField2.getValue());
    }
}
结果是:

setValue()
方法将引发异常,即使我试图将Task1的
状态设置为Task2的
状态

奇怪的是,如果我将当前状态作为输入,它不会抛出错误。。。(如果task1的状态是
To Do
,它不会为xx.setValue(“To Do”)抛出错误。如果我通过web portal将状态更改为
Do
,那么如果我下次输入
To Do
,代码就会抛出错误!!!)


因此,我认为您必须将此问题报告给sdk团队,以获得修复或分享您的反馈,因为它可能不适用于新的Azure Devops Server 2019。

如果我们看到类的定义,诊断起来会更容易