연결된 작업 항목 쿼리

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

링크 간에 작업 항목을 쿼리하는 것은 일반적인 탐색 속성을 사용하는 것과 비슷합니다. 하지만 링크 자체는 엔터티이므로 몇 가지 복잡성이 추가로 있습니다.

연결된 작업 항목을 쿼리하는 방법에는 두 가지가 있습니다. 첫 번째는 부모/자식 계층 구조이고, 두 번째는 링크 탐색 속성입니다.

이 문서에서는 다음을 알아봅니다.

  • 계층적으로(부모-자식) 연결된 작업 항목을 반환하는 쿼리를 생성하는 방법
  • 비 계층적(관련, 직접) 연결된 작업 항목을 반환하는 쿼리를 생성하는 방법

참고 항목

Analytics 서비스는 모든 Azure DevOps Services에 대해 프로덕션에서 자동으로 사용하도록 설정되고 지원됩니다. Analytics Service의 OData 피드에 대한 Power BI 통합 및 액세스는 일반적으로 사용할 수 있습니다. 이를 사용하고 피드백을 제공하는 것이 좋습니다. 사용 가능한 데이터는 버전에 따라 다릅니다. 지원되는 최신 버전은 v2.0최신 미리 보기 버전입니다 v4.0-preview. 자세한 내용은 OData API 버전 관리를 참조 하세요.

참고 항목

Analytics 서비스는 Azure DevOps Server 2020 이상 버전의 모든 새 프로젝트 컬렉션에 대해 프로덕션에 자동으로 설치되고 지원됩니다. Analytics Service의 OData 피드에 대한 Power BI 통합 및 액세스는 일반적으로 사용할 수 있습니다. 이를 사용하고 피드백을 제공하는 것이 좋습니다. Azure DevOps Server 2019에서 업그레이드한 경우 업그레이드 중에 Analytics 서비스를 설치할 수 있습니다.

사용 가능한 데이터는 버전에 따라 다릅니다. 지원되는 최신 버전은 v2.0최신 미리 보기 버전입니다 v4.0-preview. 자세한 내용은 OData API 버전 관리를 참조 하세요.

참고 항목

Analytics 서비스는 Azure DevOps Server 2019용 미리 보기로 제공됩니다. 프로젝트 컬렉션에 사용하도록 설정하거나 설치할 수 있습니다. Power BI 통합 및 Analytics Service의 OData 피드에 대한 액세스는 미리 보기로 제공됩니다. 이를 사용하고 피드백을 제공하는 것이 좋습니다.

사용 가능한 데이터는 버전에 따라 다릅니다. 지원되는 최신 버전은 v2.0최신 미리 보기 버전입니다 v4.0-preview. 자세한 내용은 OData API 버전 관리를 참조 하세요.

참고 항목

이 문서에 표시된 예제는 Azure DevOps Services URL을 기반으로 합니다. Azure DevOps Server의 경우 온-프레미스 서버의 URL을 대체해야 합니다.

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

부모-자식 계층 구조

부모 및 자식 속성을 사용하여 $expand 부모/자식 링크를 통해 관련된 항목을 포함할 수 있습니다.

예: 부모-자식 쿼리

항목의 자식에 대한 정보를 반환하려면 자식 탐색 속성을 사용합니다.$expand 다음 코드 조각은 Fabrikam 파이버 프로젝트에서 작업 항목 ID 359의 자식을 반환하도록 요청합니다.

요청

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)

응답은 서사시 359의 자녀 인 479 및 480 기능을 반환합니다.

참고 항목

작업 항목 링크 정보를 요청하는 대부분의 OData 쿼리는 결과뿐만 아니라 경고도 반환합니다. 이 경고는 OData Analytics 쿼리 지침에 설명된 권장 쿼리 지침을 따르도록 미리 알림입니다. 그러나 제공된 쿼리 예제는 유효합니다.

응답

@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"

예: 자식-부모 쿼리

옵션에서 $expand 자식을 부모바꿔 항목의 조상을 검색할 수 있습니다.

다음 쿼리는 Fabrikam 파이버 프로젝트에서 작업 항목 ID 1048의 부모를 반환하도록 요청합니다.

요청

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

응답은 제품 백로그 항목 1048의 부모인 기능 480을 반환합니다.

응답

@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"

부모/자식 계층 구조 외에도 항목은 관련 또는 중복과 같은 링크 형식이 있는 다른 항목과 직접 관련될 수 있습니다. 링크 탐색 속성을 사용하면 이러한 관계를 요청할 수 있습니다.

항목과 연결된 링크를 검색하려면 링크 탐색 속성을 사용할 수 있습니다.$expand 이 예제에서는 작업 항목 363과 연결된 모든 링크에 대해 SourceWorkItemId, TargetWorkItemIdLinkTypeName이 검색됩니다.

Request

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)

Response

{
    "@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"
        }
    }]
}

예: 연결된 항목의 세부 정보 요청

TargetWorkItem 또는 SourceWorkItem 탐색 속성을 사용하여 $expand 연결된 작업 항목의 세부 정보를 포함할 수 있습니다. 이 예제에서는 각 링크에 대한 대상 작업 항목의 WorkItemId, 제목상태를 검색합니다.

Request

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))

Response

{
    "@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"
            }
        }]
    }]
}

항목 간의 특정 유형의 링크에 관심이 있을 수도 있습니다. 절에 LinkTypeName 속성을 지정합니다 $filter . 다음 쿼리 예제에서는 모든 관련 링크를 확장하고 작업 항목 103에 대한 다른 모든 링크 유형을 필터링합니다.

Request

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))

응답

{
    "@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"
            }
        }]
    }]
}

다음 단계