Как запрашивать рабочие элементы TFS по их полям ревизий

Как получить коллекцию WorkItem, запросив хранилище WorkItem с полем их ревизии.

  WorkItemCollection WIC = WIS.Query(
               " SELECT * " +
               " FROM WorkItems " +
               " WHERE  [System.TeamProject]='project1' AND [Work Item Type]='Bug' AND [System.Revision.ChangedBy]=@Me  ORDER BY [System.WorkItemType], [System.Id]");

Мне нужна такая коллекция рабочих элементов, но ошибка возникает в [System.Revision.ChangedBy]

Есть ли способ получить коллекцию рабочих элементов, измененных их версиями by=@me

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

Пробовал разными способами, но решения пока не нашел.

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

Благодарность


person Sankha Sumadhura    schedule 17.06.2016    source источник


Ответы (1)


Нет, вы не можете использовать «System.Revision.ChangedBy» в скрипте WIQL. И вы также не можете использовать макросы «@me» в API, их можно использовать только в веб-портале TFS или Team Explorer.

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

        string tfsurl = "http://xxxxxxxxxx/";
        TfsTeamProjectCollection ttpc = new TfsTeamProjectCollection(new Uri(tfsurl));
        WorkItemStore wis = ttpc.GetService<WorkItemStore>();
        WorkItemCollection wic = wis.Query(" SELECT * " + " FROM WorkItems " + "WHERE  [System.TeamProject]='GitBuildRelease' AND [Work Item Type]='Bug'");
        List<WorkItem> wies = new List<WorkItem> { };
        foreach (WorkItem wi in wic)
        {
            foreach (Revision rev in wi.Revisions)
            {
                if (rev.Fields["Changed By"].Value.ToString() == "yourdisplayname")
                {
                    wies.Add(rev.WorkItem);
                    break;
                }
            }
        }
person Eddie Chen - MSFT    schedule 17.06.2016
comment
Это то, что я разработал, проблема в том, что это слишком медленно, когда количество рабочих элементов не увеличивается, в любом случае, спасибо. - person Sankha Sumadhura; 17.06.2016