Sdílet prostřednictvím


Dotaz na propojené pracovní položky

Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019

Dotazování pracovních položek napříč odkazy se podobá použití typických navigačních vlastností. Samotné odkazy jsou ale entity, takže je to trochu složitější.

Existují dva způsoby dotazování na propojené pracovní položky. První je hierarchie Rodič/Dítě a druhá je navigační vlastnost Odkazy.

V tomto článku se dozvíte:

  • Vytvoření dotazu pro vrácení hierarchicky propojených pracovních položek (nadřazený-podřízený)
  • Vytvoření dotazu pro vrácení ne hierarchicky propojených pracovních položek (souvisejících, přímých)

Poznámka:

Služba Analytics je automaticky povolená a podporovaná v produkčním prostředí pro všechny služby Azure DevOps Services. Integrace Power BI a přístup k datovému kanálu OData služby Analytics jsou obecně dostupné. Doporučujeme, abyste ho používali a poskytli nám zpětnou vazbu. Dostupná data jsou závislá na verzi. Nejnovější podporovaná verze je v2.0a nejnovější verze Preview je v4.0-preview. Další informace najdete v tématu Správa verzí rozhraní API OData.

Poznámka:

Služba Analytics se automaticky nainstaluje a podporuje v produkčním prostředí pro všechny nové kolekce projektů pro Azure DevOps Server 2020 a novější verze. Integrace Power BI a přístup k datovému kanálu OData služby Analytics jsou obecně dostupné. Doporučujeme, abyste ho používali a poskytli nám zpětnou vazbu. Pokud jste upgradovali z Azure DevOps Serveru 2019, můžete během upgradu nainstalovat službu Analytics.

Dostupná data jsou závislá na verzi. Nejnovější podporovaná verze je v2.0a nejnovější verze Preview je v4.0-preview. Další informace najdete v tématu Správa verzí rozhraní API OData.

Požadavky

Kategorie Požadavky
Úrovně přístupu - Člen projektu.
- Alespoň základní přístup.
Oprávnění Ve výchozím nastavení mají členové projektu oprávnění provádět dotazy v Analytice a vytvářet zobrazení. Další informace o požadavcích týkajících se aktivace služeb a funkcí a obecných aktivit sledování údajů najdete v tématu Oprávnění a požadavky pro přístup k analytickým službám.

Poznámka:

Příklady uvedené v tomto článku jsou založené na adrese URL služby Azure DevOps Services. Pro Azure DevOps Server je potřeba nahradit adresu URL místního serveru.

https://{servername}:{port}/tfs/{OrganizationName}/{ProjectName}/_odata/{version}/

Hierarchie nadřazeného a podřízeného objektu

Položky související s odkazy nadřazený/podřízený můžete zahrnout pomocí $expand ve vlastnostech nadřazený/podřízený.

Příklad: Dotaz rodič na dítě

Chcete-li vrátit informace o podřízených položkách, použijte $expand na navigační vlastnost Podřízené položky. Následující fragment kódu požaduje vrácení podřízených položek s ID pracovní položky 359 z projektu Fabrikam Fiber.

žádost

https://analytics.dev.azure.com/fabrikam/Fabrikam Fiber/_odata/v4.0-preview/WorkItems?$filter=WorkItemId eq 359&$select=WorkItemId, Title, WorkItemType, State&$expand=Children($select=WorkItemId,Title, WorkItemType, State)

Odpověď vrátí vlastnosti 479 a 480, což jsou děti námětu 359.

Poznámka:

Většina dotazů OData, které požadují informace o propojení pracovních položek, vrátí výsledky, ale také upozornění. Upozornění je připomenutí, že chcete postupovat podle doporučených pokynů pro dotazy popsaných v pokynech k dotazům OData Analytics. Zadané příklady dotazů jsou však platné.

odpověď

@odata.context	"https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/$metadata#WorkItems(WorkItemId,Title,WorkItemType,State,Children(WorkItemId,Title,WorkItemType,State))"
vsts.warnings@odata.type	"#Collection(String)"
@vsts.warnings	
0	"VS403508: Using the Parent, Children, Descendants or Revision properties in a filter or expand is not recommended. Details on recommended query patterns are available here: https://go.microsoft.com/fwlink/?linkid=861060."
value	
 0	
   WorkItemId	359
   Title	"Phase 1 - Customer access and engagement 5"
   WorkItemType	"Epic"
   State	"In Progress"
   Children	
      0	
        WorkItemId	480
        Title	"Customer Phone - Phase 1"
        WorkItemType	"Feature"
        State	"In Progress"
      1	
        WorkItemId	479
        Title	"Customer Web - Phase 1"
        WorkItemType	"Feature"
        State	"In Progress"

Příklad: Dětský dotaz k rodiči

Nahrazením podřízených za nadřazené v možnosti $expand můžete získat rodokmen položky.

cs-CZ: Následující dotaz požaduje vrátit nadřazenou položku pracovního úkolu s ID 1048 z projektu Fabrikam Fiber.

žádost

https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/WorkItems?$select=WorkItemId,Title,State&$expand=Parent($select=WorkItemId,Title,WorkItemType, State)&$filter=WorkItemId eq 1048

Odpověď vrátí funkci 480, která je nadřazená položce produktového backlogu 1048.

odpověď

@odata.context	"https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/$metadata#WorkItems(WorkItemId,Title,WorkItemType,State,Parent(WorkItemId,Title,WorkItemType,State))"
vsts.warnings@odata.type	"#Collection(String)"
@vsts.warnings	
0	"VS403508: Using the Parent, Children, Descendants or Revision properties in a filter or expand is not recommended. Details on recommended query patterns are available here: https://go.microsoft.com/fwlink/?linkid=861060."
value	
  0	
     WorkItemId	1048
     Title	"Support reset"
     WorkItemType	"Product Backlog Item"
     State	"New"
     Parent	
        WorkItemId	480
        Title	"Customer Phone - Phase 1"
        WorkItemType	"Feature"
        State	"In Progress"

Kromě hierarchie nadřazenosti/podřízenosti mohou položky přímo souviset s jinými položkami s typy propojení, jako jsou Související nebo Duplicitní. Vlastnost navigace odkazy umožňuje požádat o tyto relace.

Chcete-li načíst odkazy přidružené k položce, můžete $expandOdkazy navigační vlastnost. V tomto příkladu jsou SourceWorkItemId, TargetWorkItemIda LinkTypeName načteny pro všechny odkazy přidružené k pracovní položce 363.

žádost

https://analytics.dev.azure.com/fabrikam/Fabrikam Fiber/_odata/v4.0-preview/WorkItems?$select=WorkItemId,Title,WorkItemType,State&$filter=WorkItemId%20eq%20363&$expand=Links($select=SourceWorkItemId,TargetWorkItemId,LinkTypeName)

odpověď

{
    "@odata.context": "https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/$metadata#WorkItems(WorkItemId,Title,WorkItemType,State,Links(SourceWorkItemId,TargetWorkItemId,LinkTypeName))",
    "value": [{
        "WorkItemId": 363,
        "Title": "Welcome back page",
        "WorkItemType": "Product Backlog Item",
        "State": "Done",
        "Links": [{
            "SourceWorkItemId": 363,
            "TargetWorkItemId": 400,
            "LinkTypeName": "Related"
        }, {
            "SourceWorkItemId": 363,
            "TargetWorkItemId": 470,
            "LinkTypeName": "Tested By"
        }, {
            "SourceWorkItemId": 363,
            "TargetWorkItemId": 501,
            "LinkTypeName": "Related"
        }, {
            "SourceWorkItemId": 363,
            "TargetWorkItemId": 1079,
            "LinkTypeName": "Tested By"
        }
    }]
}

Příklad: Žádost o podrobnosti o propojených položkách

Podrobnosti o propojených pracovních položkách můžete zahrnout pomocí $expand na TargetWorkItem nebo vlastností navigace SourceWorkItem. V tomto příkladu načteme WorkItemId, Titlea State cílové pracovní položky pro každý odkaz.

žádost

https://analytics.dev.azure.com/fabrikam/Fabrikam Fiber/_odata/v4.0-preview/WorkItems?$select=WorkItemId,Title,WorkItemType,State&$filter=WorkItemId%20eq%20103&$expand=Links($select=SourceWorkItemId,TargetWorkItemId,LinkTypeName;$expand=TargetWorkItem($select=WorkItemId,Title,State))

odpověď

{
    "@odata.context": "https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/$metadata#WorkItems(WorkItemId,Title,WorkItemType,State,Links(SourceWorkItemId,TargetWorkItemId,LinkTypeName,TargetWorkItem(WorkItemId,Title,State)))",
    "value": [{
        "WorkItemId": 103,
        "Title": "Feature Y",
        "WorkItemType": "Feature",
        "State": "New",
        "Links": [{
            "SourceWorkItemId": 103,
            "TargetWorkItemId": 48,
            "LinkTypeName": "Child",
            "TargetWorkItem": {
                "WorkItemId": 48,
                "Title": "Story 15",
                "State": "Resolved"
            }
        }, {
            "SourceWorkItemId": 103,
            "TargetWorkItemId": 50,
            "LinkTypeName": "Child",
            "TargetWorkItem": {
                "WorkItemId": 50,
                "Title": "Story 17",
                "State": "Active"
            }
        }, {
            "SourceWorkItemId": 103,
            "TargetWorkItemId": 55,
            "LinkTypeName": "Child",
            "TargetWorkItem": {
                "WorkItemId": 55,
                "Title": "Story 22",
                "State": "New"
            }
        }, {
            "SourceWorkItemId": 103,
            "TargetWorkItemId": 112,
            "LinkTypeName": "Related",
            "TargetWorkItem": {
                "WorkItemId": 112,
                "Title": "Some issue",
                "State": "Active"
            }
        }]
    }]
}

Může vás také zajímat konkrétní typ propojení mezi položkami. Zadejte vlastnost LinkTypeName v klauzuli $filter. Následující příklad dotazu rozbalí všechny odkazy typu Související a vyfiltruje všechny ostatní typy odkazů pro pracovní položku 103.

žádost

https://analytics.dev.azure.com/fabrikam/Fabrikam Fiber/_odata/v4.0-preview/WorkItems?$select=WorkItemId,Title,WorkItemType,State&$filter=WorkItemId eq 103&$expand=Links($select=SourceWorkItemId,TargetWorkItemId,LinkTypeName;$filter=LinkTypeName eq 'Related';$expand=TargetWorkItem($select=WorkItemId,Title,State))

odpověď

{
    "@odata.context": "https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/$metadata#WorkItems(WorkItemId,Title,WorkItemType,State,Links(SourceWorkItemId,TargetWorkItemId,LinkTypeName,TargetWorkItem(WorkItemId,Title,State)))",
    "value": [{
        "WorkItemId": 103,
        "Title": "Feature Y",
        "WorkItemType": "Feature",
        "State": "New",
        "Links": [{
            "SourceWorkItemId": 103,
            "TargetWorkItemId": 112,
            "LinkTypeName": "Related",
            "TargetWorkItem": {
                "WorkItemId": 112,
                "Title": "Some issue",
                "State": "Active"
            }
        }]
    }]
}

Další kroky