Программное форсирование значений полей для TFS WorkItem

Я пишу утилиту для чтения всех дефектов из устаревшей системы отслеживания ошибок и импорта их в TFS (2008/2010). Я использую API TFS для создания новых WorkItems, установки их полей и последующего их сохранения. Однако я не могу изменить поля «Кем создан» и «Дата создания», так как они устанавливаются системой. (а также есть другие поля, для которых я хотел бы иметь возможность принудительно указывать значения, например, установить отправителя как кого-то, кто не является действительным пользователем TFS)

// these fail with "The value for the field 'Created By' cannot be changed."
defectWorkItem.Fields["Created By"].Value = defect.Submitter;
defectWorkItem.Fields["Created Date"].Value = defect.SubmitDate;

Очевидно, что если я не смогу установить эти поля, все устаревшие ошибки будут выглядеть так, как будто они были созданы в одну и ту же дату одним и тем же человеком.

Есть ли способ использовать API, но принудительно вносить изменения в поля, которые обычно защищены? Я рассматривал возможность прямого доступа к таблицам базы данных TFS, но схема выглядит сложной, и я думаю, что было бы довольно рискованно пытаться изменить данные там самостоятельно.


person Mark Heath    schedule 28.09.2012    source источник


Ответы (2)


Вам разрешено устанавливать поля Created Date и Created By, если вы являетесь учетной записью службы и включаете функцию обхода правил.

Вы можете обойти правила при создании экземпляра класса WorkItemStore, используя этот флаг: WorkItemStoreFlags.BypassRules.

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

person Bogdan Spaiuc    schedule 28.09.2012
comment
спасибо, это звучит именно то, что мне нужно. Я попробую и отмечу это как ответ, если я смогу заставить его работать - person Mark Heath; 30.09.2012
comment
Знаете ли вы, является ли этот флаг новым в TFS 2012? Его нет в предыдущей версии библиотеки. - person Mark Heath; 04.10.2012
comment
Я пробовал это, и это немного странно. Во-первых, вы не можете установить эти поля при первом сохранении, только при последующих сохранениях. Во-вторых, он не позволит мне изменить System.CreatedBy, хотя с помощью этого метода я могу изменить System.CreatedDate и Microsoft.VSTS.Common.ActivatedDate. - person Mark Heath; 04.10.2012
comment
Created By не может быть изменен таким образом после первой ревизии, как вы сказали. (Ошибка: TF26194: значение поля «Создано» не может быть изменено) Любое решение для этого? - person Reza; 11.05.2014

Просто предложение: вставьте этот текст в начало описания рабочего элемента при переносе:

  • Перенесено из системы XXX
  • Первоначальная дата создания: 01.01.2012
  • Автор оригинала: Джон Доу
person Morten Frederiksen    schedule 28.09.2012
comment
да, я так и сделаю, если вообще не смогу изменить созданные даты, но это будет означать, что люди не смогут использовать те запросы, к которым они привыкли из старой системы - person Mark Heath; 28.09.2012