2013-09-10 3 views
2

Я создал новый тип рабочего элемента в XML, и импортировать его с помощью командной строки: witadmin importwitd ...Как модифицировать TFS WorkItemType> FieldDefinition> AllowedValues ​​программно в C#?

Скажем, у меня есть поле, определенное как таковые в XML:

<FIELD name="severity" refname="MySeverity" type="String"> 
    <ALLOWEDVALUES> 
    <LISTITEM value="High"/> 
    <LISTITEM value="Medium"/> 
    </ALLOWEDVALUES> 
</FIELD> 

Теперь я хочу изменить это FieldDefinition и добавить к нему еще один LISTITEM, скажем «Low». Я выяснил, что это можно сделать, изменив XML и повторно импортировав его. Мой вопрос в том, есть ли способ сделать это программно в C#?

Для получения дополнительной информации, мне удалось запросить определения полей с помощью следующих кодов:

TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(new Uri(my_uri)); 
WorkItemStore wistore = (WorkItemStore)tpc.GetService(typeof(WorkItemStore)); 
WorkItemType witype = wistore.Projects["MyProject"].WorkItemTypes["MyWorkItemType"]; 
for (int i = 0; i < witype.FieldDefinitions.Count; ++i) 
{ 
    FieldDefinition fd = witype.FieldDefinitions[i]; 
    // Not able to modify fd and save. 
} 

Я был бы признателен, если кто-то может пролить некоторый свет на это. Спасибо заранее!

+0

Я не думаю, что это возможно (если моя память правильная, FieldDefinition находится в режиме только для чтения). Вам лучше попытаться изменить свое поле через XML через код, а не через TFS SDK. – Atlasmaybe

+0

Ну, элементы списка фактически основаны на содержании какой-либо таблицы. Они должны быть синхронизированы. Если я обновляю элементы списка, обновляя XML через коды, тогда мне также нужно будет сохранить WORKFLOW и FORM в XML через коды. Это нежелательно, так как я хочу, чтобы конструкция формы и логика разваливались. Спасибо за ваш ответ, хотя! – Dunnomuch

ответ

0

Невозможно изменить значения списка программно. И если вы хотите синхронизировать значения с таблицей, как вы говорите, это было бы невозможно, если вы это сделаете программно, так как нет способа сохранить идентификатор таблицы или код вместе с значением поля.

Если вам действительно нужна часть синхронизации, вы можете попробовать использовать сумасшедший бит обходного пути. Вы можете сохранить допустимые значения с помощью xml, как вы обычно делаете для отображения. После этого в отдельной группе допустимых значений вы можете указать скрытый индексный список значений для имени группы пользователей «xxxx», чтобы он не отображался. В этом скрытом списке вы можете сохранить отображение TableId = ValueName текущего состояния таблицы. Затем при следующем изменении одного из полей вы можете сослаться на этот список и получить предыдущее имя значения и изменить его в индексе и списке отображения. Затем вы можете использовать тот же список индексов для поддержки настроек вашего Workflow и FormLayout.

См следующий пример ...

<ALLOWEDVALUES> 
    <GLOBALLIST name="globalListName" /> 
    <LISTITEM value="Name1" /> 
    <LISTITEM value="Name2" /> 
    <LISTITEM value="Name3" /> 
. . . 
</ALLOWEDVALUES> 

<ALLOWEDVALUES for="xxxxxx" expanditems="false"> 
    <GLOBALLIST name="globalListName" /> 
    <LISTITEM value="Id1=Name1" /> 
    <LISTITEM value="Id2=Name2" /> 
    <LISTITEM value="Id3=Name3" /> 
. . . 
</ALLOWEDVALUES> 

Предельно из коробки, но может быть использован, если это абсолютно необходимо.

 Смежные вопросы

  • Нет связанных вопросов^_^