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
Vytvořte projekt knihovny tříd a přidejte jej do existujícího VSIX řešení nebo vytvořte nové řešení.
V nabídce Soubor zvolte položku Nový, Projekt.
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.
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.
Zadejte název a umístění projektu a klepněte na tlačítko OK.
Vytvořte projekt VSIX, pokud ho vaše řešení ještě neobsahuje.
V Průzkumníku řešení v místní nabídce řešení zvolte Přidat, Nový projekt.
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.
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í.
V source.extension.vsixmanifest, v části Obsah přidejte projekt knihovny tříd jako komponentu MEF.
Na metadat kartu, nastavte název souboru VSIX.
Na kartě Cíle instalace nastavte sady Visual Studio Ultimate a Premium jako cíle.
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í.
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
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í.
V pokusné Visual Studio, otevřít nebo vytvořit projekt modelování a otevřít nebo vytvořit diagramu modelu.
Vytvořte element modelu, jako je třída UML, a nastavte jeho jméno.
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.
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.
Vyplňte formulář, uložte a zavřete pracovní položku.
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
Koncepty
Propojení prvků modelu a pracovních položek
Postupy: Připojení referenčních řetězců k prvkům modelů