チェックイン イベントをクライアント上の TFS 2013 にトラップするカスタム チェックイン ポリシー プラグインを開発しました。これは、特定のワークフロー ステータスを評価し、チェックインに関する意味のあるコメントを生成するために使用されます。これらのタスクでは、チェックインのためにユーザーが選択/関連付けたワーク アイテムの有効性が検査され、ワーク アイテムの値を使用してコメントが生成されます。これは、Visual Studio の領域で完全に機能します。最近まで、TFS へのすべてのチェックインは Visual Studio 2013 を介して行われていました。新しいチームが参加し、XPA Magic を利用しています。標準の XPA エディターは、TFS 2013 の 32 ビット MSSCCI プロバイダーを使用して、TFS でチェックアウトとチェックインを実行しているようです。XPA エディターを介してコードをチェックインする場合、次のダイアログを使用して、ユーザーが自分の作業項目を選択/関連付け、コメントを追加できるようにします。
残念ながら、このダイアログを介してチェックインすると、機能が機能しなくなります。プラグイン プロジェクトをデバッグしました。このルートを介してチェックアウトすると、 Evaluate() 関数が呼び出され、 Microsoft.VisualStudio.TeamFoundation.VersionControl.PendingChanges.PendingChangesModelVS が公開されます。ただし、IN をチェックする場合、Evaluate() 関数は呼び出されません。
チェックイン イベントをトラップし、Visual Studio 経由でチェックインする場合と同じ (または同様の) 結果を達成することも概念的に可能ですか?
クライアント コンピューターには、TFS 2013.Update3 アプリケーション サーバーに接続する Windows 7 で実行されている Visual Studio Premium 2013 があります。
-
-
ねえエドワード、
私はあなたの返事を正しく解釈しているかどうか完全には確信が持てませんが、ここに行きます:-)
アイデアは、チェックイン時に、関連付けられたワークアイテムの詳細 (WI 番号、説明、その他のカスタム情報など) を含むコメントを作成することです。ファイルをチェックインすると、作成された変更セットのコメントに役立つ情報が含まれます。チェックイン時にコメント (文字列) が生成され、次のプロパティに設定されます。
完全な名前空間: {Microsoft.VisualStudio.TeamFoundation.VersionControl.PendingChanges.PendingChangesModelVS}.PendingCheckin.PendingChanges.Comment
したがって、チェックイン アクション中にここにコメントをプッシュする必要があります。また、チェックイン時に、データを抽出できる場所から少なくとも 1 つの WI が関連付けられていることが確実にわかります。これは強制されるためです。
デバッグでは、これらのアクションが実行されるたびに、次のイベントが発生することがわかります。
- チーム エクスプローラー内の更新時。(PendingCheckin.Policies.EvaluationState = 未評価)
Windows エクスプローラーのコンテキスト メニュー [Team Foundation Server] からのチェックアウト。(PendingCheckin.Policies.EvaluationState = 未評価)
Visual Studioでのチェックイン(PendingCheckin.Policies.EvaluationState = Evaluated )
チェックイン アクションのみに関心があることを確認すると、コードは次のものにのみ応答します。
public override PolicyFailure[] Evaluate()
{
PolicyFailure[] failures = null;
if (PendingCheckin.Policies.EvaluationState == PolicyEvaluationState.Evaluated)
{
InitConfiguration();
failures = CheckWorkitemStatus();
if (Util.ArePolicyFailuresOk(failures))
failures = ComposeCheckinComment();
if (Util.ArePolicyFailuresOk(failures)) //The setting of the comment -> PendingCheckin.PendingChanges.Comment = newCheckinComment , happen in this function.
failures = CheckFilesToCheckin();
}
return failures;
}
ご覧のとおり、Windows エクスプローラーのコンテキスト メニュー "Team Foundation Server" を介したチェックインは Evaluate() 関数に到達しないが、同じコンテキスト メニューからのチェックアウトは到達するという問題が発生します。検出!