Como: Define um manipulador de Link do Item de trabalho

Você pode criar um Visual Studio A extensão de integração que responde quando o usuário cria ou exclui um vínculo entre um elemento de modelo UML e um item de trabalho. Por exemplo, quando o usuário optar por vincular a um novo item de trabalho a um elemento de modelo, seu código foi possível inicializar os campos no item de trabalho dos valores no modelo.

Configure uma solução de extensão UML

Isso permitirá que você desenvolver manipuladores e, em seguida, distribuí-los para outros usuários. Você precisa configurar dois Visual Studio projetos:

  • Um projeto de biblioteca de classe que contém o código do manipulador de link.

  • Um projeto VSIX, que atua como um recipiente para o comando de instalação. Se desejar, você pode incluir outros componentes no mesmo VSIX.

Para configurar a solução de Visual Studio

  1. Crie um projeto de biblioteca de classe, adicioná-lo em uma solução VSIX existente ou criar uma nova solução.

    1. No menu File, aponte para New e clique Project.

    2. Em Modelos instalados, clique em C# Visual ou Visual Basic, em seguida, na coluna do meio, clique em Biblioteca de classe.

    3. Definir solução para indicar se você deseja criar uma nova solução ou para adicionar um componente a uma solução VSIX que você já tiver aberto.

    4. Definir o projeto de nome e local e clique em OK.

  2. A menos que sua solução já contém um, crie um projeto VSIX.

    1. Em Solution Explorer, a solução com o botão direito, aponte para Adde em seguida, clique em Novo projeto.

    2. Em Modelos instalados, expanda Visual C# ou Visual Basic, em seguida, clique em extensibilidade. Na coluna do meio, clique em O projeto de VSIX.

  3. Defina o projeto VSIX como o projeto de inicialização da solução.

    • No Solution Explorer, clique com o botão direito no projeto VSIX e clique em Set as StartUp project.
  4. Em source.extension.vsixmanifest, em conteúdo, adicione o projeto de biblioteca de classe como um componente de MEF.

    1. Abrirsource.extension.vsixmanifest

    2. Clique em Adicionar conteúdo.

    3. Em Selecione um tipo de conteúdo, selecione MEF componente.

    4. Em Selecionar uma fonte de, clique em projeto e selecione o nome do seu projeto de biblioteca de classe.

  5. Clique em Selecione edições e selecione o Visual Studio edições você deseja que sua extensão a ser executada.

  6. Defina o nome e os campos descritivos do VSIX. Salve o arquivo.

Execute todas as seguintes tarefas no projeto de biblioteca de classe.

Referências do projeto

Adicione o seguinte .NET assemblies para as referências do projeto:

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 -usado pelo código de exemplo

Se você não encontrar uma dessas referências sob o .NET guia da Add Reference caixa de diálogo, use a guia Browse para localizá-lo em \Arquivos de Programas\Microsoft 10.0\Common7\IDE\PrivateAssemblies\ de Visual Studio.

Importe o Namespace do Item de trabalho

No seu Visual Studio projeto referências, adicionar referências para os seguintes módulos: 

  • Microsoft. TeamFoundation

  • Microsoft.VisualStudio.TeamFoundation.WorkItemTracking.dll

No seu código de programa, importe os namespaces a seguir:

using System.ComponentModel.Composition;
using Microsoft.VisualStudio.Uml.Classes;
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Uml;
using Microsoft.VisualStudio.TeamFoundation.WorkItemTracking;
using System.Linq;

Definir o manipulador de eventos de Item de trabalho vinculadas

Adicionar um arquivo de classe ao projeto de biblioteca de classe e defina seu conteúdo como segue. Altere os nomes de namespace e classe a que preferir.

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;
    }
  }
}

Para fins de teste, execute o seu manipulador de link no modo de depuração.

  1. Pressione F5, ou de Debug menu, clique em Start Debugging.

    Uma instância experimental do Visual Studio é iniciado.

    Solucionando problemas de: Se uma nova Visual Studio não iniciar, verifique se o projeto VSIX está definido como projeto de inicialização da solução.

  2. No experimental Visual Studio, abra ou crie um projeto de modelagem e abrir ou criar um diagrama de modelagem.

  3. Crie um elemento de modelo, como a classe UML e definir seu nome.

  4. O elemento com o botão direito e clique em Create Work Item.

    • Se o submenu mostra Abrir conexão do Team Foundation Server, clique nele e siga as caixas de diálogo para se conectar a um servidor. Em seguida, novamente o botão direito do mouse no elemento de modelo e clique em Create Work Item.

    • Se o submenu mostra uma lista dos tipos de item de trabalho, clique em um.

      Um novo formulário de item de trabalho é aberta.

  5. Verifique se o título do item de trabalho é o mesmo elemento de modelo, se você tiver usado o código de exemplo na seção anterior. Isso demonstra OnWorkItemCreated() trabalhou.

  6. Preencha o formulário, salve e feche o item de trabalho.

  7. Verifique se o item de trabalho agora é colorido de vermelho. Isso demonstra OnWorkItemLinked() no código de exemplo.

    Solucionando problemas de: Se os métodos do manipulador não tem sido executado, verifique se:

    • O projeto de biblioteca de classe está listado como um componente MEF a conteúdo Listar no source.extensions.manifest no projeto VSIX.

    • O correto Export atributo está conectado à classe de manipulador e implementa a classe ILinkedWorkItemExtension.

    • Os parâmetros de todos os Import e Export atributos são válidos.

Sobre o código de manipulador de Item de trabalho

Escuta de novos itens de trabalho

OnWorkItemCreatedé chamado quando o usuário optar por criar um novo item de trabalho para serem vinculadas a elementos de modelo. Seu código pode inicializar os campos de item de trabalho. O item de trabalho, em seguida, é apresentado ao usuário, que pode atualizar os campos e salvar o item de trabalho. O link para um elemento de modelo não será criado até que o item de trabalho foram salvas com êxito.

  public void OnWorkItemCreated(
      IEnumerable<IElement> elementsToBeLinked,
      IWorkItemDocument workItem)
  {
    INamedElement namedElement = 
           elementsToBeLinked.First() as INamedElement;
    if (namedElement != null)
        workItem.Item.Title = namedElement.Name;
  }

OnWorkItemLinkedé chamado após a criação de um link. Ele é chamado se o vínculo for para um novo item de trabalho ou um item existente. Ele é chamado uma vez para cada item de trabalho.

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;
}
ObservaçãoObservação

Para fazer com que este exemplo funcionar, você deve adicionar uma referência de projeto para System.Drawing.dlle importar o namespace Microsoft.VisualStudio.ArchitectureTools.Extensibility.Presentation. No entanto, essas adições não são necessárias para outras implementações do OnWorkItemLinked.

OnWorkItemRemovedé chamado uma vez antes de cada link de item de trabalho que é excluído. Se um elemento de modelo for excluído, todos os seus links serão removidos.

public void OnWorkItemRemoved
         (IElement element, string serverUri, int workItemId)
{...}

Atualizar um item de trabalho

Usando os namespaces do Team Foundation, você pode manipular um item de trabalho.

Para usar o exemplo a seguir, adicioná-los.NET assemblies para referências do projeto:

  • Client. dll

  • Microsoft. TeamFoundation

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();
} 

Você pode acessar os links da seguinte maneira:

element.GetReferences(ReferenceConstants.WorkItem)

Para obter mais informações sobre referências, consulte Como: Anexar as seqüências de caracteres de referência para elementos de modelo.

Consulte também

Tarefas

Como: Link de elementos de modelo para os itens de trabalho

Referência

Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore

Conceitos

Programação com a API de UML

Outros recursos

Como: Anexar as seqüências de caracteres de referência para elementos de modelo

Como: Definir e instalar uma extensão de modelagem