有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

有没有办法使用java sdk for TFS更改工作项的状态?

每次我遇到如下异常时,我都无法弄清楚如何将bug的状态从“新”更改为我尝试过的“已批准、已完成、已关闭”状态。我在互联网上到处寻找,发现这个系统。“状态”字段与其他字段稍有不同。我想可能有一种方法可以移动过渡态,但是找不到。我在网上也看到了一些帖子。NET api,其中切换状态会导致其他字段,尤其是原因字段变得无效。我不认为这是个问题,因为只要我试着打电话给field。setValue(“Closed”)它抛出异常。我看了看电动工具和系统。状态是否显示为可编辑?这不可能是一个转换状态问题,因为我尝试了下一步应该有效的状态。例如,工作项是新的,因此批准是有效的下一步

如果有人知道问题出在哪里,我将非常感激

示例代码:

     WorkItem workItem = s.get(0);
     Map<String, String> fieldValueMap = settings.getFieldValues();
     String status_field_text = settings.getFieldMap().get(SettingsParser.STATUS);
     Field statusField = workItem.getFields().getField(status_field_text);
     String currentFieldValue =  fieldValueMap.get(SettingsParser.CLOSED_STATE);
     if(currentFieldValue != null)
     {

     statusField.setValue("Approved");//<=========== no matter what i add there i get exception
     }
     else
     {
         System.out.println("pp");
      }

线程“main”中的异常

错误:

“java.lang.IllegalArgumentException:此集合中不存在字段id[10013](wi=16,size=13) 在com。微软tfs。果心客户。工作项目。内部的领域。FieldCollectionImpl。newIllegalFieldIDException(FieldCollectionImpl.java:119) 在com。微软tfs。果心客户。工作项目。内部的领域。FieldCollectionImpl。getFieldInternal(FieldCollectionImpl.java:459) 在com。微软tfs。果心客户。工作项目。内部的工作方式简单。getRuleTargetField(WorkItemImpl.java:769) 在com。微软tfs。果心客户。工作项目。内部的规则。规则引擎。预处理字段(RuleEngine.java:224) 在com。微软tfs。果心客户。工作项目。内部的规则。规则引擎。fieldChanged(RuleEngine.java:196) 在com。微软tfs。果心客户。工作项目。内部的规则。规则引擎。fieldChanged(RuleEngine.java:167) 在com。微软tfs。果心客户。工作项目。内部的领域。FieldImpl。fireRules(FieldImpl.java:795) 在com。微软tfs。果心客户。工作项目。内部的领域。FieldImpl。setValue(FieldImpl.java:765) 在com。微软tfs。果心客户。工作项目。内部的领域。FieldImpl。setValue(FieldImpl.java:457) 在com。微软tfs。果心客户。工作项目。内部的领域。FieldImpl。setValue(FieldImpl.java:389) 在测试中。main(Test.java:54)


共 (1) 个答案

  1. # 1 楼答案

    teesdk中没有SettingsParser。我不确定这个类是什么,但它对更新bug没有帮助。通过使用它,您似乎正在尝试更新名为“10013”的字段,该字段不存在

    状态字段称为System.State,或者更好,您可以简单地使用常量CoreFieldReferenceNames.STATE来引用它

    如果您查看SDK中包含的示例,您会发现一个(EditWorkItemByID)应该说明如何为您编辑工作项。通过修改该代码段和上面发布的代码,您应该尝试以下操作:

    WorkItem workItem = s.get(0);
    workItem.getFields().getField(CoreFieldReferenceNames.STATE).setValue("Approved");