2013-02-27 4 views
1

У меня проблема с сохранением workitem. Сценарий: у меня есть одно веб-приложение, оттуда я отправляю значение в TFS. Я могу изменить значение в обоих местах (через веб-приложение также из TFS). Проблема, с которой я столкнулся сейчас, -Как проверить работоспособность изменен или нет до того, как я сохраню

Когда я пытаюсь сохранить рабочий элемент в TFS, он проверяет, произошли ли какие-либо изменения с момента его открытия. Если так, вам не разрешено сохранять. Нет такой проверки, когда я сберегаю от веб-приложения, я использовал метод workitem.isvalid, но не проверяя, какой рабочий элемент был изменен, прежде чем я сохраню его из веб-приложения.

Это мой код

wi.Open(); 

foreach (var str in piWorkItemTfs.Values.Keys) 
    wi[str] = piWorkItemTfs.Values[str]; 


if (!wi.IsValid()) 
{ 
    var listFelaktigaVärde = (from Field field in wi.Validate() select field.Name + "=" + field.Value).ToList(); 

    errorMessage = "Felaktiga värde: Id " + wi.Id + " " + String.Join(", ", listFelaktigaVärde); 
} 
else 
{ 
    wi.Save(); 
    errorMessage = wi.Id.ToString(); 
} 

Может ли один помочь мне, чтобы избежать проблемы параллельности пожалуйста. Мне нужно сохранить workitem только никаких изменений, сделанных ранее, иначе я покажу сообщение об ошибке конечному пользователю.

ответ

2

Метод IsValid() только для рабочего элемента проверяет правильность полей рабочего элемента, он не проверяет, изменился ли рабочий элемент в другом месте. В объекте рабочего объекта есть флаг, который называется IsDirty, который проверяет, изменился ли рабочий элемент с момента последнего сохранения.

В качестве примечания, поля, отображаемые как сообщение об ошибке, являются только полями, которые не соответствуют правилам определения типа рабочего элемента (то есть значение поля, которое находится за пределами его определения AllowedValues). Это нужно проверить, но проверить, изменился ли он или нет, поскольку последнее сохранение должно отображать другую ошибку.

Вот ссылка на MSDN для WorkItem класса: http://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.workitemtracking.client.workitem(v=vs.110).aspx

EDIT

Флаг IsDirty подберут ли, или нет, рабочий элемент был изменен локально. Вместо этого способ проверки на стороне сервера - это попытаться объединиться при сохранении рабочего элемента.

workItem.Save(SaveFlags.MergeAll); 

IsValid флаг для локальных изменений, а не изменений сервера. Сохранение рабочего элемента с помощью опции SaveFlags.MergAll выполнит проверку и выдаст исключение, если рабочий элемент был сохранен на стороне сервера.

+0

привет благодарю вас за ответ. Я также использовал IsDirty, он проверяет измененное значение только после сохранения. Моя проблема заключается в том, что я открыл один и тот же рабочий элемент в двух разных местах одновременно (один в веб-приложении и т. Д. В TFS), когда я сначала сохраняю рабочий элемент в сети и сохраняю сохранение в tfs, что дает мне ошибку (проверка грязная) но если я сначала сохраню TFS и попытаюсь сохранить рабочий элемент из веб-приложения, то он не даст никаких исключений, измененное значение исчезнет. Мне нужно показать некоторую ошибку перед сохранением (какой-то измененный из внешней среды или нет) – user1845163

+0

Обновлен ответ, чтобы дать вам исключение. –

+0

Привет, я не могу видеть MergeAll в SaveFlags – user1845163