HOW TO:定義工作項目連結處理常式
您可以建立 Visual Studio Integration Extension,而此擴充功能會在使用者建立或刪除 UML 模型項目和工作項目之間的連結時回應。 例如,當使用者選擇將新工作項目連結至模型項目時,您的程式碼可以根據模型中的值初始化此工作項目的欄位。
設定 UML 擴充功能方案
這可讓您開發處理常式,然後將其散發給其他使用者。 您必須設定兩個 Visual Studio 專案:
類別庫專案,其中包含連結處理常式的程式碼。
VSIX 專案,做為用於安裝命令的容器。 如果您想要,也可以在相同的 VSIX 中加入其他元件。
若要設定 Visual Studio 方案
建立類別庫專案 (不論是透過將其加入至現有的 VSIX 方案,或建立新方案)。
在 [檔案] 功能表上,指向 [新增],然後按一下 [專案]。
在 [已安裝的範本] 底下,按一下 [Visual C#] 或 [Visual Basic],然後在中間的欄位中,按一下 [類別庫]。
設定 [方案],指出您想要建立新的方案,還是想要將元件加入至您已經開啟的 VSIX 方案。
設定專案名稱和位置,然後按一下 [確定]。
建立 VSIX 專案 (若您的方案中已有則不需建立)。
在 [方案總管] 中,以滑鼠右鍵按一下方案、指向 [加入],再按一下 [新增專案]。
在 [已安裝的範本] 底下,展開 [Visual C#] 或 [Visual Basic],然後按一下 [擴充性]。 在中間的欄位中,按一下 [VSIX 專案]。
將 VSIX 專案設定為方案的啟始專案。
- 在 [方案總管] 中,以滑鼠右鍵按一下 VSIX 專案,然後按一下 [設定為啟始專案]。
在 source.extension.vsixmanifest 的 [內容] 底下,加入類別庫專案當做 MEF 元件。
開啟 source.extension.vsixmanifest
按一下 [加入內容]。
在 [選取內容類型] 中,選取 [MEF 元件]。
在 [選取來源] 中,按一下 [專案],然後選取類別庫專案的名稱。
按一下 [選取版本],然後選取您想要用來執行擴充功能的 Visual Studio 版本。
設定 VSIX 的名稱和描述性欄位。 儲存檔案。
定義工作項目連結處理常式
執行位於類別庫專案中的所有下列工作。
專案參考
將下列 .NET 組件加入至您的專案參考:
Microsoft.TeamFoundation.WorkItemTracking.Client.dll
Microsoft.VisualStudio.TeamFoundation.WorkItemTracking.dll Microsoft.VisualStudio.Modeling.Sdk.10.0
Microsoft.VisualStudio.ArchitectureTools.Extensibility.Uml
Microsoft.VisualStudio.Uml.Interfaces
System.ComponentModel.Composition
System.Drawing - 由範例程式碼使用
如果您在 [加入參考] 對話方塊的 [.Net] 索引標籤下找不到其中一個參考,請使用 [瀏覽] 索引標籤在 \Program Files\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\ 中尋找。
匯入工作項目命名空間
在 Visual Studio 專案的 [參考] 中,加入下列組件的參考:
Microsoft.TeamFoundation.WorkItemTracking.Client.dll
Microsoft.VisualStudio.TeamFoundation.WorkItemTracking.dll
在您的程式碼中匯入下列命名空間:
using System.ComponentModel.Composition;
using Microsoft.VisualStudio.Uml.Classes;
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Uml;
using Microsoft.VisualStudio.TeamFoundation.WorkItemTracking;
using System.Linq;
定義已連結的工作項目事件處理常式
將類別檔案加入至類別庫專案,並將類別檔案的內容設定如下。 依照您的偏好變更命名空間和類別名稱。
using System.ComponentModel.Composition;
using Microsoft.VisualStudio.Uml.Classes;
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Uml;
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Presentation;
using Microsoft.VisualStudio.TeamFoundation.WorkItemTracking;
using System.Linq;
namespace WorkItems
{
[Export(typeof(ILinkedWorkItemExtension))]
public class MyWorkItemExtension : ILinkedWorkItemExtension
{
// Called before a new work item is edited by the user.
// Use this to initialize work item fields from the model element.
public void OnWorkItemCreated(System.Collections.Generic.IEnumerable<IElement> elementsToBeLinked, IWorkItemDocument workItemDocument)
{
INamedElement namedElement =
elementsToBeLinked.First() as INamedElement;
if (namedElement != null)
workItemDocument.Item.Title = namedElement.Name;
}
// Called when any work item is linked to a model element.
public void OnWorkItemLinked(System.Collections.Generic.IEnumerable<IElement> elements, string serverUri, int workItemId)
{
foreach (IElement element in elements)
foreach (IShape shape in element.Shapes())
shape.Color = System.Drawing.Color.Red;
}
// Called when a work item is unlinked from a model element.
public void OnWorkItemRemoved(IElement element, string serverUri, int workItemId)
{
foreach (IShape shape in element.Shapes())
shape.Color = System.Drawing.Color.White;
}
}
}
測試連結處理常式
為進行測試,請在偵錯模式中執行您的連結處理常式。
若要測試連結處理常式
按下 F5,或在 [偵錯] 功能表上,按一下 [開始偵錯]。
Visual Studio 的實驗執行個體隨即啟動。
疑難排解:如果新的 Visual Studio 未啟動,請確定已設定 VSIX 專案做為方案的啟始專案。
在實驗性質的 Visual Studio 中,開啟或建立模型專案,然後開啟或建立模型圖表。
建立模型項目 (如 UML 類別),並設定其名稱。
以滑鼠右鍵按一下項目,然後按一下 [建立工作項目]。
如果子功能表顯示 [開啟 Team Foundation Server 連接],請按一下此選項,然後依照對話方塊的指示連接至伺服器。 接著,請再次以滑鼠右鍵按一下模型項目,然後按一下 [建立工作項目]。
如果子功能表顯示工作項目類型的清單,請按其中一個工作項目類型。
新的工作項目表單隨即開啟。
如果您使用了上一節的範例程式碼,請確認工作項目的標題與模型項目相同。 這表示 OnWorkItemCreated() 有作用。
完成表單,然後在儲存工作項目後加以關閉。
確認工作項目現在顯示為紅色。 這表示 OnWorkItemLinked() 位於範例程式碼中。
疑難排解:如果處理常式方法未執行,請確認:
類別庫專案在 VSIX 專案之 source.extensions.manifest 的 [內容] 清單中,已列為 MEF 元件。
已將正確的 Export 屬性附加至處理常式類別,且該類別實作 ILinkedWorkItemExtension。
所有 Import 和 Export 屬性的參數皆有效。
關於工作項目處理常式程式碼
接聽新的工作項目
當使用者選擇建立要連結至模型項目的新工作項目時,便會呼叫 OnWorkItemCreated。 您的程式碼可以初始化工作項目欄位。 然後,此工作項目會呈現給使用者,以便他們更新欄位並儲存工作項目。 成功儲存工作項目後,才會建立模型項目的連結。
public void OnWorkItemCreated(
IEnumerable<IElement> elementsToBeLinked,
IWorkItemDocument workItem)
{
INamedElement namedElement =
elementsToBeLinked.First() as INamedElement;
if (namedElement != null)
workItem.Item.Title = namedElement.Name;
}
接聽連結建立作業
OnWorkItemLinked 只會在建立連結之後呼叫。 不論是新工作項目或現有項目的連結,都會呼叫它。 但只會對每一個工作項目呼叫一次。
public void OnWorkItemLinked
(IEnumerable<IElement> elements,
string serverUri, // TFS server
int workItemId)
{
foreach (IElement element in elements)
foreach (IShape shape in element.Shapes())
shape.Color = System.Drawing.Color.Red;
}
注意事項 |
---|
若要讓此範例運作,您必須將專案參考加入至 System.Drawing.dll,並匯入命名空間 Microsoft.VisualStudio.ArchitectureTools.Extensibility.Presentation。 不過,在執行 OnWorkItemLinked 的其他實作時,就不需附加這些項目了。 |
接聽連結移除作業
只會在已刪除的每一個工作項目連結之前呼叫一次 OnWorkItemRemoved。 如果已刪除模型項目,則會移除其所有的連結。
public void OnWorkItemRemoved
(IElement element, string serverUri, int workItemId)
{...}
更新工作項目
使用 Team Foundation 命名空間,您即可操作工作項目。
若要使用下列範例,請將這些 .NET 組件加入至您專案的 [參考]:
Microsoft.TeamFoundation.Client.dll
Microsoft.TeamFoundation.WorkItemTracking.Client.dll
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.WorkItemTracking.Client;
...
public void OnWorkItemLinked
(IEnumerable<IElement> elements,
string serverUri, // TFS server
int workItemId)
{
TfsTeamProjectCollection tfs =
TfsTeamProjectCollectionFactory
.GetTeamProjectCollection(new Uri(serverUri));
WorkItemStore workItemStore = new WorkItemStore(tfs);
WorkItem item = workItemStore.GetWorkItem(workItemId);
item.Open();
item.Title = "something";
item.Save();
}
存取工作項目參考連結
您可以依照下列方式存取連結:
//Get:
string linkString = element.GetReference(ReferenceConstants.WorkItem);
// Set:
element.AddReference(ReferenceConstants.WorkItem, linkString, true);
linkString 的格式是:
string.Format(@"%{0}\{1}#{1}${2}", tfServer, projectCollection, RepositoryGuid, workItem.Id);
其中:
伺服器的 URI 會是:
http://tfServer:8080/tfs/projectCollection
大小寫在 projectCollection 很重要。
RepositoryGuid 可以從 TFS 連接取得:
TfsTeamProjectCollection tpc = TfsTeamProjectCollectionFactory...; RepositoryGuid= tpc.InstanceId;
如需參考的詳細資訊,請參閱 HOW TO:將參考字串附加至模型項目。
請參閱
工作
參考
Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore