Muchas de estas consultas ya no son relevantes con los nuevos casos de TFS. Una de las principales razones es que las identidades de usuario (tbl_Identity) se han movido. Tfs_DefaultCollection es la base de datos que almacena toda la información pertinente para una colección determinada, pero TFS puede alojar varias colecciones Y y un administrador puede cambiar el nombre de la colección predeterminada cuando configura TFS.
Como tal, todas las identidades de usuario se han movido a la base de datos Tfs_Configuration;
select * from [tfs_Configuration].dbo.tbl_Identity
Obtención de acceso a la parte descriptiva del nombre de cuenta (o AccountName DisplayName) a partir de una colección de DB se logra mediante Únete a partir de [tfs_DefaultCollection] .dbo.tbl_IdentityMap
select *
from [tfs_Configuration].dbo.tbl_Identity I
JOIN [tfs_DefaultCollection].dbo.tbl_IdentityMap IM
ON I.Id = IM.MasterID
Con esta información en mano , ahora podemos producir la siguiente consulta para mostrar los últimos 100 conjuntos de cambios comprometidos con TFS, así como el nombre del confirmador.
select top 100 *
from tbl_changeset as c
JOIN tbl_IdentityMap IM
ON C.OwnerID = IM.localId
JOIN tfs_configuration.dbo.tbl_Identity u
ON IM.MasterID = u.Id
Order by C.ChangeSetID DESC
En cuanto a este dato, podemos ver una gran cantidad de ID, el SMSL, búsquedas, etc. Lo que no vamos a ver en estos datos es cualquier información sobre el archivo que se ha cometido o información sobre la Unidad de la Encomienda fue hecho para. Esta información proviene de la tabla tbl_Version.
select top 100 *
from [tfs_DefaultCollection].dbo.tbl_changeset as c
JOIN [tfs_DefaultCollection].dbo.tbl_IdentityMap IM
ON C.OwnerID = IM.localId
JOIN [tfs_configuration].dbo.tbl_Identity u
ON IM.MasterID = u.Id
JOIN [tfs_DefaultCollection].dbo.tbl_Version as v
ON v.Versionfrom = c.ChangeSetId
Order by C.ChangeSetID DESC
[tfs_DefaultCollection] .dbo.tbl_Version tiene algunas columnas de interés, a saber; ParentPath, ChildItem & FullPath.Lo que falta aquí es información útil sobre la sucursal a la que se realizó la confirmación. La información de la sucursal está incrustada en cualquiera de los 2 campos de ruta de acceso disponibles;
$\da3da7cf"80b5"4385"b3dc"ebb3088f3c01\Features\Inpatient\Source\Yadda\Yadda\Yadda\
Esto lleva a la siguiente pregunta, ¿dónde se almacena la información de la sucursal en TFS? Gracias a la respuesta StackOverflowUsers anterior, esta información se encontró en la tabla [tfs_DefaultCollection] .dbo.TreeNodes;
select * from [tfs_DefaultCollection].dbo.[TreeNodes] where parentID=0 and fDeleted=0
El CssNodeID columna es el identificador que estamos buscando que tengan sentido fuera de la FullPath
CoolBranchName da3da7cf-80b5-4385-b3dc-ebb3088f3c01
Sin embargo, esto nos presenta nuestro próximo desafío con respecto a las bases de datos de TFS. Mucha información está codificada y/o integrada, por lo que debemos manipular algunas cosas para obtener lo que buscamos.
En este caso, la parte del valor [tfs_DefaultCollection] .dbo.tbl_Version.ParentPath o [tfs_DefaultCollection] .dbo.tbl_Version.FullPath que contiene la información de la sucursal.
Este pequeño Diddy fea aquí extrae la parte del ID del valor del campo ParentPath y reemplaza todas las comillas dobles con guiones que nos da un valor de ID que podemos utilizar para consultar [Tfs_DefaultCollection] .dbo.TreeNodes
SUBSTRING(
REPLACE(v.ParentPath, '$\', ''),
CHARINDEX('\', REPLACE(v.ParentPath, '$\', '')),
(LEN(v.ParentPath) - CHARINDEX('\', REPLACE(v.ParentPath, '$\', '')))
)
Reuniendo todo esto en busca de una consulta para recuperar Los detalles del último [X] check-in dan como resultado lo siguiente;
select top 10
c.CreationDate,
c.Comment,
u.DisplayName as CommittingUser,
TN.Name as BranchName,
SUBSTRING(
REPLACE(v.ParentPath, '$\', ''),
CHARINDEX('\', REPLACE(v.ParentPath, '$\', '')),
(LEN(v.ParentPath) - CHARINDEX('\', REPLACE(v.ParentPath, '$\', '')))
) as ChangedFile
from tbl_changeset as c
JOIN tbl_IdentityMap IM
ON C.OwnerID = IM.localId
JOIN [Tfs_Configuration].dbo.tbl_Identity u
ON IM.MasterID = u.Id
JOIN dbo.tbl_Version as v
ON v.Versionfrom = c.ChangeSetId
LEFT JOIN dbo.TreeNodes TN with(nolock)
ON TN.CssNodeId = REPLACE(
SUBSTRING(
REPLACE(v.ParentPath, '$\', ''),
0,
CHARINDEX('\', REPLACE(v.ParentPath, '$\', ''))
),
'"', '-'
)
AND parentID=0
AND fDeleted=0
Order by c.CreationDate desc
Nota que incluí la fase de clasificación de base de datos para todas las consultas previas a la consulta final para proporcionar un contexto en donde se encuentran las tablas de interés.
Qué tal esto. Obtenga el conjunto de resultados a través del TFS SDK mientras tiene el Analizador ejecutándose en el servidor TFS. Vea qué declaraciones SQL se generan. –