5

TFS API を使用していくつかのことを行う必要があります。その中で、各プロジェクトのスプリントのリソース計画情報を読み取って、WPF UI に表示する必要があります。

このガイドに沿ってタグ付けすると、次の方法があります。

    private TfsTeamService _teamService;
    private ICommonStructureService4 _structureService;
    TeamSettingsConfigurationService _teamSettingsConfigurationService;

    public void GetUserIterationAssignments(IList<ProjectInfo> projects)
    {
        foreach (ProjectInfo project in projects)
        {
            Console.WriteLine(project.Name);

            TeamFoundationTeam team = _teamService.QueryTeams(project.Uri).First();
            IList<Guid> teamGuids = new List<Guid>() { team.Identity.TeamFoundationId };
            TeamConfiguration config = _teamSettingsConfigurationService.GetTeamConfigurations(teamGuids).FirstOrDefault();
            if (config != null)
            {
                foreach (string nodePath in config.TeamSettings.IterationPaths)
                {
                    var projectNameIndex = nodePath.IndexOf("\\", 2);
                    var fullPath = nodePath.Insert(projectNameIndex, "\\Iteration");
                    var nodeInfo = _structureService.GetNodeFromPath(fullPath);
                    if (nodeInfo.StartDate != null &&
                       nodeInfo.FinishDate != null)
                    {
                        foreach (TeamFoundationIdentity member in team.GetMembers(_collection, MembershipQuery.Direct))
                        {
                            Console.WriteLine("{0} is in assigned to {1} from {2}", 
                                                    member.DisplayName, 
                                                    nodeInfo.Name,
                                                    nodeInfo.StartDate,
                                                    nodeInfo.FinishDate);
                        }
                    }
                }
            }
        }
    }

コンソールに出力する必要があるのは (もちろんこの例のためだけです)、Capacity ビューに表示されるほとんどの情報です。

ここに画像の説明を入力

より正確には、アクセスする必要があります

  • 1日の容量
  • 休日(メンバー)
  • 休日(チーム)

これを行う方法についてのアイデアはありますか?

4

3 に答える 3

3

これはサポートされているアプローチではなく、将来、新しいバージョンの TFS にアップグレードすると機能しなくなる可能性がありますが、データを読み取るだけの場合は、TFS サーバーの SQL データベースに直接アクセスできます。

必要な特定の値が入っています (DefaultCollection を使用していると仮定します)

  • [Tfs_DefaultCollection].[dbo].[tbl_TeamConfigurationCapacity]
  • [Tfs_DefaultCollection].[dbo].[tbl_TeamConfigurationCapacityDaysOffRange]

これらには、GUID を介した反復とユーザーへの参照があります。

  • 反復 GUID は次の場所にあります。[Tfs_Warehouse].[dbo].[DimIteration]
  • ユーザー GUID は、[Tfs_Configuration].[dbo].[tbl_Identity]

以下は、1 月のイテレーションのキャパシティを 1 日あたりの時間数で照会する簡単な例です。

select Capacity from [Tfs_DefaultCollection].[dbo].[tbl_TeamConfigurationCapacity] as _cap
inner join [Tfs_Configuration].[dbo].[tbl_Identity] as _user
    on _user.[Id] = _cap.[TeamMemberId]
inner join [Tfs_Warehouse].[dbo].[DimIteration] as _iter
    on _iter.[IterationGUID] = _cap.[IterationId]
        where _iter.[IterationPath]='\Code\Current\401-Jan'
        and _user.[DisplayName]='Williams, Jason'

同様の方法を使用して、tbl_TeamConfigurationCapacityDaysOffRange から各休日の開始日と終了日の範囲を読み取ることができます。ただし、チームの休日と個人の休日があるため、やや複雑です。

これを達成するために使用しているクエリを次に示します。(すべてのユーザーに対して 6 か月間作業した後、ユーザーの 1 人が突然クエリから姿を消し、明らかな理由もなく、IdentityMap テーブルで彼の ID を検索する必要があることに気付きましたが、うまくいっているようです。文書化されていないソースからのリバース エンジニアリングの要素 :-(

select [StartTime],[EndTime] from [Tfs_DefaultCollection].[dbo].[tbl_TeamConfigurationCapacityDaysOffRange] as _cap1
    inner join [Tfs_Warehouse].[dbo].[DimIteration] as _iter1
      on _iter1.[IterationGUID] = _cap1.[IterationId]
          where _iter1.[IterationPath]='\Code\Current\401-Jan'
              and _cap1.[TeamMemberId]='00000000-0000-0000-0000-000000000000'
union
    select [StartTime],[EndTime] from [Tfs_DefaultCollection].[dbo].[tbl_TeamConfigurationCapacityDaysOffRange] as _cap2
        inner join [Tfs_DefaultCollection].[dbo].[tbl_IdentityMap] as _map
            on _map.[localId] = _cap2.[TeamMemberId]
        inner join [Tfs_Configuration].[dbo].[tbl_Identity] as _user2
            on _user2.[Id] = _map.[masterId]
        inner join [Tfs_Warehouse].[dbo].[DimIteration] as _iter2
            on _iter2.[IterationGUID] = _cap2.[IterationId]
                where _iter2.[IterationPath]='\Code\Current\401-Jan'
                    and (_user2.[DisplayName]='Williams, Jason')

イテレーション パスとクエリするユーザー名に言及している 2 つの場所を適切な値に置き換える必要があります。

于 2014-01-31T16:52:10.867 に答える
1

これらの値は、サーバー オブジェクト モデルからのみ使用できます (現時点では、クライアント オブジェクト モデルに相当するものはありません)。インターフェイスとオブジェクトはすべて作成されInternalているため、サーバー上でもこれらの値にアクセスできません。

internal TeamCapacity GetTeamIterationCapacity(Guid teamId, Guid iterationId);

タイプの宣言:Microsoft.TeamFoundation.Server.WebAccess.WorkItemTracking.Common.DataAccess.TeamConfigurationComponent

組み立て:Microsoft.TeamFoundation.Server.WebAccess.WorkItemTracking.Common, Version=12.0.0.0

現時点では、データにアクセスする唯一の方法は/tfs/{ProjectCollection}/{Team Project}/_api/_teamcapacity/updateteamcapacity/{Team}/{Iteration/Path}?__v=4、Team Capacity ページが使用する json サービス ( ) を使用するか、James Tupper が言及したテーブルの ProjectCollection データベースから直接取得することです。

json サービスが Request Verification を使用しているように見えるため、外部システムからの使用が難しくなっています。

必須の免責事項:

TFS のサーバー データベースは拡張性を意図したものではなく、それらに対する直接のクエリはサポートされておらず、サービス パック間であってもモデルは予告なく変更される可能性があります。TFS データベースへの直接のクエリはサポートされていません。公式 API 以外の方法で TFS データベースの値を変更すると、基本的に TFS サーバーがサポートされていない状態になり、後で新しいバージョンにアップグレードするときに大きな問題が発生する可能性があります。

于 2014-01-24T12:56:00.183 に答える