有没有办法用Java sdk为TFS改变工作项目的状态?

时间:2013-05-03 16:06:39

标签: java tfs

我无法弄清楚如何将错误的状态从“新”更改为我尝试“批准,完成,关闭”的任何内容,每次出现以下所示的异常时。我查看了整个互联网,发现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)     at 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)

1 个答案:

答案 0 :(得分:0)

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

状态字段称为System.State,或者更好,您只需使用常量CoreFieldReferenceNames.STATE来引用它。

如果您查看SDK附带的示例,您会发现一个(EditWorkItemByID)应该说明为您编辑工作项。根据您上面发布的代码段和代码,您应该尝试以下内容:

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