Compartilhar via


Como: definir um manipulador de Link do Item de trabalho

Você pode criar um Visual Studio 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 escolhe Vincular 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í-las 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 para uma solução VSIX existente ou criar uma nova solução.

    1. Sobre o arquivo menu, escolha nova, projeto.

    2. Em Modelos instalados, expanda Visual C# ou Visual Basic, clique na coluna do meio 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 um local e clique em OK.

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

    1. Em Solution Explorer, no menu de atalho da solução, escolha Add, Novo projeto.

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

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

    • No Solution Explorer, no menu de atalho do projeto VSIX escolha Set as StartUp project.
  4. Na source.extension.vsixmanifest, em conteúdo, adicione o projeto de biblioteca de classe como um componente de MEF.

    1. Sobre o metadados guia, defina um nome para o VSIX.

    2. Sobre o Instalar destinos defina Visual Studio Ultimate e Premium como destino.

    3. Sobre o ativos de tabulação, escolha um novoe, na caixa de diálogo, defina:

      Tipo de = MEF componente

      Origem = um projeto na solução atual

      Projeto = O projeto de biblioteca de classe

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

Ee329485.collapse_all(pt-br,VS.110).gifReferê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.11.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 11.0\Common7\IDE\PrivateAssemblies\ de Visual Studio.

Ee329485.collapse_all(pt-br,VS.110).gifImporte o Namespace do Item de trabalho

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

  • Microsoft

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

Ee329485.collapse_all(pt-br,VS.110).gifDefinir 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 classe e de espaço de nomes para 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 do Debug menu, escolha 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, em seguida, clique em Create Work Item.

    • Se a mostrar o submenu 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 elemento de modelo com o botão direito e clique em Create Work Item.

    • Se o submenu mostra uma lista de 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 que o 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 de manipulador não executou, 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á associado a 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

Ee329485.collapse_all(pt-br,VS.110).gifEscuta 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 foi salva 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 que este exemplo funcione, você deve adicionar uma referência ao 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 referências do projeto:

  • Client. dll

  • Microsoft

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:

//Get:
string linkString = element.GetReference(ReferenceConstants.WorkItem);
// Set:
element.AddReference(ReferenceConstants.WorkItem, linkString, true);

O formato do linkString é:

string.Format(@"%{0}\{1}#{1}${2}", tfServer, projectCollection, RepositoryGuid, workItem.Id);

onde:

  • O URI para o seu servidor seria:

    http://tfServer:8080/tfs/projectCollection

    Caso é importante em projectCollection.

  • RepositoryGuidpodem ser obtidas com sua conexão TFS:

    TfsTeamProjectCollection tpc = TfsTeamProjectCollectionFactory...;
    RepositoryGuid= tpc.InstanceId;
    

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

Consulte também

Referência

Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore

Conceitos

Vincular elementos de modelo e itens de trabalho

Como: anexar seqüências de caracteres de referência aos elementos de modelo

Como: definir e instalar uma extensão de modelagem

Programação com a API de UML