Sdílet prostřednictvím


Postupy: Definování obslužné rutiny pracovních položek

Můžete vytvořit rozšíření integrace Visual Studio, které reaguje, když uživatel vytvoří nebo odstraní spojení mezi prvkem modelu UML a pracovní položkou.Například když se uživatel rozhodne novou pracovní položku propojit s prvkem modelu, váš kód může inicializovat pole pracovní položky z hodnot v modelu.

Nastavte řešení rozšíření UML

To vám umožní vyvíjet obslužné rutiny a potom je distribuovat ostatním uživatelům.Musíte nastavit dva projekty Visual Studio.

  • Projekt knihovny tříd obsahující kód obslužné rutiny odkazu.

  • Projekt VSIX, který funguje jako kontejner pro instalaci příkazu.Pokud chcete, můžete zahrnout další součásti do stejného VSIX.

Nastavení řešení Visual Studio

  1. Vytvořte projekt knihovny tříd a přidejte jej do existujícího VSIX řešení nebo vytvořte nové řešení.

    1. V nabídce Soubor zvolte položku Nový, Projekt.

    2. V části Nainstalované šablony rozbalte položku Visual C# nebo Visual Basic, potom v prostředním sloupci klikněte na možnost Knihovna tříd.

    3. Nastavte Řešení pro určení, zda chcete vytvořit nové řešení nebo přidat součást do řešení VSIX, které jste již otevřeli.

    4. Zadejte název a umístění projektu a klepněte na tlačítko OK.

  2. Vytvořte projekt VSIX, pokud ho vaše řešení ještě neobsahuje.

    1. Průzkumníku řešení v místní nabídce řešení zvolte Přidat, Nový projekt.

    2. V části Nainstalované šablony rozbalte možnost Visual C# nebo Visual Basic a potom vyberte možnost Rozšiřitelnost.V prostředním sloupci zvolte Projekt VSIX.

  3. Nastavte projekt VSIX jako projekt po spuštění pro řešení.

    • V Průzkumníku řešení v místní nabídce projektu VSIX zvolte Nastavit jako projekt po spuštění.
  4. V source.extension.vsixmanifest, v části Obsah přidejte projekt knihovny tříd jako komponentu MEF.

    1. Na metadat kartu, nastavte název souboru VSIX.

    2. Na kartě Cíle instalace nastavte sady Visual Studio Ultimate a Premium jako cíle.

    3. Na majetku vyberte Nový, a v dialogovém okně, nastavte:

      Typ = Komponenta MEF

      Zdroj = Projekt v aktuálním řešení.

      Projektu = váš projekt knihovny tříd

Definování obslužné rutiny propojení položky práce

Proveďte všechny následující úkoly v projektu knihovny tříd.

Odkazy na projekt

Do odkazů projektu přidejte následující sestavení .NET.

Microsoft.TeamFoundation.WorkItemTracking.Client.dll

Microsoft.VisualStudio.TeamFoundation.WorkItemTracking.dll Microsoft.VisualStudio.Modeling.Sdk.12.0

Microsoft.VisualStudio.ArchitectureTools.Extensibility.Uml

Microsoft.VisualStudio.Uml.Interfaces

System.ComponentModel.Composition

System.Drawing – používá ukázkový kód

Nemůžete-li najít jeden z těchto odkazů pod kartou .Net dialogového okna Přidat odkaz, pomocí karty Procházet jej najděte ve složce \Program Files\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies\.

Importujte obor názvů pracovních položek

Ve vaší Visual Studio projektu odkazuje na, přidat odkazy na následující sestavení:

  • Microsoft.TeamFoundation.WorkItemTracking.Client.dll

  • Microsoft.VisualStudio.TeamFoundation.WorkItemTracking.dll

Ve svém kódu programu importujte následující obory názvů:

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

Definujte obslužnou rutinu události propojené pracovní položky

Přidejte soubor třídy do projektu knihovny tříd a nastavte její obsah následujícím způsobem.Změňte obor názvů a názvy třídy dle požadavků.

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

Testování obslužné rutiny odkazu

Pro účely testování spusťte obslužnou rutina odkazu v režimu ladění.

Poznámka k upozorněníUpozornění

Je již připojen k TFS zdrojový kód ovládacího prvku (SCC) Chcete-li vytvořit nebo propojit s pracovní položkou.Při pokusu o připojení k jiné SCC sady TFS sady Visual Studio automaticky zavře aktuální řešení.Ujistěte se, že jste již připojeni k příslušné SCC před pokusem o vytvořit nebo propojit s pracovní položkou.V následujících vydáních sady Visual Studio nejsou k dispozici v případě, že nejste připojeni k SCC příkazů nabídky.

Testování obslužné rutiny odkazu

  1. Stiskněte klávesu F5 nebo v nabídce Ladit zvolte Spustit ladění.

    Spustí se experimentální instance aplikace Visual Studio.

    Poradce při potížích: Pokud se nová aplikace Visual Studio nespustí, ověřte, zda je projekt VSIX nastaven jako projekt při spuštění řešení.

  2. V pokusné Visual Studio, otevřít nebo vytvořit projekt modelování a otevřít nebo vytvořit diagramu modelu.

  3. Vytvořte element modelu, jako je třída UML, a nastavte jeho jméno.

  4. Klepněte pravým tlačítkem myši na prvek a potom klepněte na tlačítko Vytvořit pracovní položku.

    • Pokud příkaz zobrazuje otevřené připojení serveru Team Foundation, je nutné zavřít projekt, připojte se k příslušné TFS a restartujte tohoto postupu.

    • Pokud dílčí nabídka zobrazí seznam typů pracovních položek, klepněte na jednu.

      Otevře se formulář nové pracovní položky.

  5. Ověřte, zda je název pracovní položky stejný jako prvek modelu, pokud jste použili ukázkový kód v předchozím oddílu.To ukazuje, že OnWorkItemCreated() funguje.

  6. Vyplňte formulář, uložte a zavřete pracovní položku.

  7. Ověřte, zda je pracovní položka nyní zbarvena červeně.To ukazuje OnWorkItemLinked() v ukázkovém kódu.

    Poradce při potížích: Pokud se metody obslužné rutiny nespustily, zkontrolujte, zda:

    • Projekt knihovny tříd je uveden jako komponenta MEF v seznamu Obsah v source.extensions.manifest v projektu VSIX.

    • Správná vlastnost Export je připojena ke třídě obslužné rutiny a třída implementuje ILinkedWorkItemExtension.

    • Parametry všech vlastností Import a Export jsou platné.

O kódu obslužné rutiny pracovní položky

Poslouchání nových pracovních položek

OnWorkItemCreated je volána, když uživatel zvolí vytvoření nové pracovní položky, která se má propojit s prvky modelu.Váš kód může inicializovat pole pracovní položky.Pracovní položka je pak budou zobrazena uživateli, který může pole aktualizovat a uložit pracovní položky.Odkaz na prvek modelu není vytvořen, dokud nebyla pracovní položka úspěšně uložena.

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

Poslouchání vytvoření propojení

OnWorkItemLinked je volána ihned po vytvoření propojení.Je volána, ať jde o odkaz na novou nebo existující pracovní položku.Je volána jednou pro každou pracovní položku.

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

[!POZNÁMKA]

Chcete-li, aby tento příklad fungoval, je nutné přidat projektový odkaz na knihovnu System.Drawing.dll a importovat obor názvů Microsoft.VisualStudio.ArchitectureTools.Extensibility.Presentation.Tyto doplňky však nejsou povinné pro jiné implementace OnWorkItemLinked.

Poslouchání odstranění propojení

OnWorkItemRemoved je volána těsně před každým odkazem na pracovní položku, která je odstraňována.Po odstranění prvku modelu budou odebrány všechny odkazy.

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

Aktualizace pracovní položky

Pomocí oborů názvů Team Foundation lze manipulovat s pracovní položkou.

Chcete-li použít tento příklad, přidejte tato sestavení .NET do Odkazů vašeho projektu:

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

Přístup k odkazům pracovní položky

Odkazy je možné otevřít následujícím způsobem:

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

Formát linkString je:

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

kde:

  • Identifikátor URI pro váš server by být:

    http://tfServer:8080/tfs/projectCollection

    Je důležité v případě projectCollection.

  • RepositoryGuid lze získat z připojení TFS:

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

Další informace naleznete v tématu Postupy: Připojení referenčních řetězců k prvkům modelů.

Viz také

Referenční dokumentace

WorkItemStore

Koncepty

Propojení prvků modelu a pracovních položek

Postupy: Připojení referenčních řetězců k prvkům modelů

Postupy: Definování a instalace rozšíření modelování

Programování s rozhraním API UML