Как создать список последних регистраций для каждого проекта в TFS 2015?

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

Я видел примеры для более старых версий TFS, которые запрашивали tbl_ChangeSet с помощью JOIN для tbl_identity, но эта таблица отсутствует в моей базе данных TFS 2015, и я не могу найти замену.

Итак, мой вопрос: как мне ПРИСОЕДИНИТЬСЯ к OwnerId в tbl_ChangeSet в базе данных TFS 2015?

Пример полного запроса, который соответствует моей цели, конечно, тоже приветствуется, как и любые альтернативные методы (может быть, сценарий PowerShell?)!


person Frank van Eykelen    schedule 26.05.2016    source источник


Ответы (1)


Я нашел таблицу tbl_Identity!

В нашей компании есть две коллекции TFS — назовем их FooBar и FooBar-DSG — с двумя соответствующими базами данных: Tfs_FooBar и Tfs_FooBar-DSG.

Таблица [tbl_Identity] находится в базе данных с именем Tfs_Foobar_Configuration.

Для поиска записей в таблице [tbl_Identity] вам необходимо присоединиться к [tbl_ChangeSet].[OwnerId] в [tbl_IdentityMap].[localId] и использовать [tbl_IdentityMap].[masterId] для присоединения к [tbl_Identity].Id.

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

Вот мои запросы:

SELECT DISTINCT [OwnerId], I.DisplayName, I.MailAddress,
    (SELECT TOP 1 CreationDate FROM [Tfs_FooBar-DSG].[dbo].tbl_ChangeSet C2 
     WHERE C2.OwnerId = C1.OwnerId ORDER BY CreationDate DESC) LatestDate
FROM [Tfs_FooBar-DSG].[dbo].[tbl_ChangeSet] C1
LEFT OUTER JOIN [Tfs_FooBar-DSG].[dbo].[tbl_IdentityMap] IM ON IM.[localId] = C1.OwnerId
LEFT OUTER JOIN Tfs_FooBar_Configuration.[dbo].[tbl_Identity] I ON IM.[masterId] = I.Id
ORDER By LatestDate DESC, [OwnerId], DisplayName, MailAddress

SELECT DISTINCT [OwnerId], I.DisplayName, I.MailAddress,
    (SELECT TOP 1 CreationDate FROM [Tfs_FooBar].[dbo].tbl_ChangeSet C2 
     WHERE C2.OwnerId = C1.OwnerId ORDER BY CreationDate DESC) LatestDate
FROM [Tfs_FooBar].[dbo].[tbl_ChangeSet] C1
LEFT OUTER JOIN [Tfs_FooBar].[dbo].[tbl_IdentityMap] IM ON IM.[localId] = C1.OwnerId
LEFT OUTER JOIN Tfs_FooBar_Configuration.[dbo].[tbl_Identity] I ON IM.[masterId] = I.Id
ORDER By LatestDate DESC, [OwnerId], DisplayName, MailAddress

Обновление: Даниэль Манн в своем комментарии ниже предупреждает, что «не следует писать запросы непосредственно к операционному хранилищу TFS. Это не поддерживается и потенциально опасно». Решите для себя, можете ли вы жить с неподдерживаемой функциональностью и насколько опасным может быть запрос SELECT.

person Frank van Eykelen    schedule 26.05.2016
comment
Не следует писать запросы непосредственно к операционному хранилищу TFS. Он не поддерживается и потенциально опасен. - person Daniel Mann; 27.05.2016