【问题标题】:Is there a way to change state of workitem with java sdk for TFS?有没有办法使用 java sdk for TFS 更改工作项的状态?
【发布时间】:2013-04-28 02:40:45
【问题描述】:

每当我收到如下所示的以​​下异常时,我都无法弄清楚如何将错误的状态从“新”更改为我尝试过的任何“已批准、已完成、已关闭”。我浏览了整个互联网,发现 System.State 字段与其他字段有点不同。我想好吧,也许有一种方法可以移动过渡状态,但找不到。我还在 .NET api 中看到了一些帖子,其中切换状态导致其他字段,特别是原因字段变得无效。我认为这不是问题,因为一旦我尝试调用 field.setValue("Closed") 它就会引发异常。我使用电动工具查看并且 System.State 确实显示为可编辑?这不可能是过渡状态问题,因为我已经尝试了下一步应该有效的状态。例如,工作项是新的,因此 Approved 是有效的下一步。

如果有人知道是什么问题,我将不胜感激。

示例代码:

     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.microsoft.tfs.core.clients.workitem.internal.fields.FieldCollectionImpl.newIllegalFieldIDException(FieldCollectionImpl.java:119) 在 com.microsoft.tfs.core.clients.workitem.internal.fields.FieldCollectionImpl.getFieldInternal(FieldCollectionImpl.java:459) 在 com.microsoft.tfs.core.clients.workitem.internal.WorkItemImpl.getRuleTargetField(WorkItemImpl.java:769) 在 com.microsoft.tfs.core.clients.workitem.internal.rules.RuleEngine.preProcessFields(RuleEngine.java:224) 在 com.microsoft.tfs.core.clients.workitem.internal.rules.RuleEngine.fieldChanged(RuleEngine.java:196) 在 com.microsoft.tfs.core.clients.workitem.internal.rules.RuleEngine.fieldChanged(RuleEngine.java:167) 在 com.microsoft.tfs.core.clients.workitem.internal.fields.FieldImpl.fireRules(FieldImpl.java:795) 在 com.microsoft.tfs.core.clients.workitem.internal.fields.FieldImpl.setValue(FieldImpl.java:765) 在 com.microsoft.tfs.core.clients.workitem.internal.fields.FieldImpl.setValue(FieldImpl.java:457) 在 com.microsoft.tfs.core.clients.workitem.internal.fields.FieldImpl.setValue(FieldImpl.java:389) 在 Test.main(Test.java:54)

【问题讨论】:

    标签: java tfs


    【解决方案1】:

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

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

    如果您查看 SDK 中包含的示例,您会发现其中一个 (EditWorkItemByID) 应该说明为您编辑工作项。调整该 sn-p 和您在上面发布的代码,您应该尝试以下操作:

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

    【讨论】:

    • 感谢您的评论,但它确实提供了相同的错误。 SettingsParser 只是我用来将字符串映射到 tfs 中的设置字符串的类,所以你可以忽略它。我查看了 sn-p 代码,kis 所做的只是设置标题。创建和编辑票证我没有问题。驱使我喝酒的是状态的变化。所以,我实际上使用 System.State 作为应该使用的字符串。 CoreFieldReferenceNames.STATE 和 System.State 正在产生相同的异常。奇怪的是在调试器中你可以看到它找到了正确的字段。
    猜你喜欢
    • 1970-01-01
    • 2018-04-22
    • 2014-03-21
    • 1970-01-01
    • 2019-12-26
    • 2010-09-19
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    相关资源
    最近更新 更多