可以创建响应的 Visual Studio 集成扩展,当用户创建或删除 UML 模型元素与工作项之间的链接。例如,在中,当用户选择包含一个模型元素链接新工作项,您的代码可以初始化工作项的字段从模型中的值
设置 UML 扩展解决方案
这使您能够开发处理程序会将它们分发给其他用户。需要设置以下两个 Visual Studio 项目:
包含链接处理程序的代码的类库项目。
VSIX 项目,作为安装的命令容器。如果需要,可以在同一 VSIX 中包括其他元素。
设置 Visual Studio 解决方案
创建类库项目,并将其添加到现有 VSIX 解决方案或创建新的解决方案。
在 文件 菜单中,选择 新建, 项目。
在 已安装的模板下,展开 Visual C# 或 Visual Basic,然后在中间列中单击 类库。
设置 解决方案 指示是要创建新的解决方案或将元素添加到已经打开的 VSIX 解决方案。
设置项目的名称和位置并单击 " 确定 "。
除非您的解决方案中已有一个,请创建一个 VSIX 项目。
在 解决方案资源管理器,解决方案中的快捷菜单上,选择 add, 新建项目。
在 已安装的模板下,展开 Visual C# 或 Visual Basic,然后选择 扩展性。在中间列中,选择 VSIX 项目。
将 VSIX 项目设置为解决方案的启动项目。
- 在解决方案资源管理器中,在 VSIX 项目的快捷菜单中选择 设置为启动项目。
在 source.extension.vsixmanifest,在 内容下,将类库项目添加为 MEF 组件。
在 元数据 选项卡上,将一个名称 VSIX 中。
在 安装目标 选项卡上,将 Visual Studio 最终和高质量作为目标。
在 资产 选项卡中,选择 新建,然后在对话框中,设置:
类型 = MEF 组件
源 = 在当前解决方案中的项目
项目 = 您的类库项目
定义工作项链接处理程序
执行下列所有任务。类库项目。
项目引用
添加以下 .NET 程序集添加到您的项目引用:
Microsoft.TeamFoundation.WorkItemTracking.Client.dll
Microsoft.VisualStudio.TeamFoundation.WorkItemTracking.dll Microsoft.VisualStudio.Modeling.Sdk.11.0
Microsoft.VisualStudio.ArchitectureTools.Extensibility.Uml
Microsoft.VisualStudio.Uml.Interfaces
System.ComponentModel.Composition
代码示例 - 使用的System.Drawing
如果找不到其中一个引用在 添加引用 对话框的 . net 选项下,请使用 " 浏览 " 选项卡在 \ program files \ Microsoft Visual Studio 11.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() 。
疑难解答:如果处理程序方法未运行,请确认:
,在 内容 一个 MEF 组件在 VSIX 项目中, source.extensions.manifest 的列表类库项目列表中。
正确的 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;
有关引用的更多信息,请参见 如何:将引用字符串附加到模型元素。
请参见
参考
Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore