다음을 통해 공유


버그, 작업 및 기타 작업 항목에 대한 쿼리

버그를 쿼리할 수 및 작업을 다른 작업 항목 형식 중 하나를 사용 하 여 작업 항목 간 링크를 WorkItemStore.Query 메서드 또는 Query 개체입니다.Transact SQL 비슷한 작업 항목 쿼리 언어 (WIQL)이 쿼리를 사용 합니다.

TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(
      new Uri("https://server:8080/tfs/DefaultCollection"));
WorkItemStore workItemStore = (WorkItemStore)tpc.GetService(typeof(WorkItemStore)); 
WorkItemCollection queryResults = workItemStore.Query("
   Select [State], [Title] 
   From WorkItems
   Where [Work Item Type] = 'User Story'
   Order By [State] Asc, [Changed Date] Desc");
Dim collectionUri As Uri
collectionUri = New Uri("https://Server:8080/tfs/DefaultCollection")
Dim tpc As New TfsTeamProjectCollection(collectionUri)
Dim workItemStore As WorkItemStore
workItemStore = tpc.GetService(Of WorkItemStore)()
Dim queryResults As WorkItemCollection
queryResults = workItemStore.Query(“
  Select [State], [Title]
  From WorkItems
  Where [Work Item Type] = ‘User Story’
  Order By [State] Asc, [Changed Date] Desc”)

항목 내용

필요한 권한

쿼리에 있는 작업 항목만 반환 됩니다을 작업 항목 보기 또는 이 노드의 작업 항목 보기 사용 권한.일반적으로 구성원에 게 이러한 권한을 부여 된 독자참가자 그룹의 각 팀 프로젝트에 대 한.자세한 내용은 Team Foundation Server 권한을 참조하십시오.

팁

작업 항목 쿼리 언어의 세부 정보를 보려면 쿼리를 사용 하 여 만드는 팀 탐색기, 고.wiql 파일로 저장 됩니다..Xml 확장명을 사용 하 여 파일 이름을 변경 하 고 Visual Studio 열기.찾을 대상의 wiql 요소에 작업 항목 쿼리 언어에서는 각 쿼리가 표현 되는 방법을 참조 하십시오.

쿼리 언어

작업 항목 쿼리 언어 다섯 부분으로 이루어져 있습니다.

          Select [State], [Title] 
From WorkItems
Where [Work Item Type] = 'User Story'
Order By [State] Asc, [Changed Date] Desc
AsOf '6/15/2010'

Select [State], [Title]

각 식별 Field 값으로 설정 됩니다 모든 WorkItem 쿼리에 의해 반환 됩니다.표시 이름 또는 필드의 참조 이름을 지정할 수 있습니다.이름을 공백 또는 마침표가 포함 된 경우 대괄호 ()를 사용 해야 합니다.

주의 정보주의
사용할 수 있는 WorkItem 값을 가져오는 쿼리를 통해 반환 된는 Field쿼리에서 값을 반환 하지 않았습니다 경우에.이렇게 하면 서버에 또 다른 라운드트립을 발생 합니다.자세한 내용은 필드 값은 페이징을 참조하십시오.

From WorkItems

원하는 작업 항목을 찾는 쿼리 또는 작업 항목 간 링크 여부를 나타냅니다.

From WorkItems

작업 항목에 사용 됩니다.

From WorkItemLinks

작업 항목 간 링크를 사용 합니다.자세한 내용은 작업 항목 간 링크에 대 한 쿼리을 참조하십시오.

Where [Work Item Type] = 'User Story'

쿼리 필터 조건을 지정합니다.자세한 내용은 이 항목의 뒤에 나오는 Where 절를 참조하십시오.

Order By [State] Asc, [Changed Date] Desc

(선택 사항) 정렬 방법을 지정 된 WorkItemCollection 쿼리에서 반환 합니다.

AsOf '6/15/2010'

(선택 사항) 기록 쿼리에 지정 날짜 또는 포인트를 나타내는 필터입니다 적용 될 시간.예를 들어,이 쿼리는 2010 년 6 월 15 일에 있었던 모든 사용자 스토리를 반환 합니다.

참고참고
Visual Studio 쿼리 작성기에서 쿼리 된 Asof를 만들 수 없습니다.된 AsOf 절 포함 된 AsOf 절 쿼리 파일 (.wiq)을 만들고 다음 해당 Visual Studio 로드 하는 경우 무시 됩니다.

Where 절

Where 절 쿼리의 작업 항목에 대 한 필터 조건을 지정 합니다.이러한 조건에 맞는 작업 항목만 쿼리를 반환 합니다.다음 예제 쿼리는 활성 및 할당 된 사용자 스토리를 반환 합니다.

Where [Work Item Type] = 'User Story'
AND [State] = ‘Active’
AND [Assigned to] = @Me

그룹 검색 조건에 괄호를 사용 하면 논리 연산자의 계산 순서를 제어할 수 있습니다.중 하나 또는 사용자에 할당 된 작업 항목을 반환 합니다 예를 들어, 종료, 쿼리 필터는 다음 예제와 같이 변경:

Where [Work Item Type] = 'User Story'
AND [State] = ‘Active’
AND ( [Assigned to] = @Me
OR [Closed by] = @Me )

Where 구문은 다음 표에서 설명 절.

구문

예제

Where 절

Where FilterCondition [Group|{LogicalOperator FilterCondition}]

Group

(FilterCondition LogicalOperator FilterCondition [LogicalOperator Filter Condition]…)

([Assigned to] = @Me OR [Created by = @Me])

논리적으로 그룹화 연산자는 AND 및 OR.

FilterCondition

Field ComparisonOperator Value

[Work Item Type] = ‘Help Topic’

참조 이름 또는 필드의 표시 이름을 지정할 수 있습니다.이름을 공백이 나 마침표가 포함 된 경우 대괄호 ()로 묶어야 합니다.

비교 연산자에서 설명 된 비교 연산자 이 항목의 뒷부분에 나오는.

값을 리터럴 값 (' 사용자 스토리 ') 나 매크로 지정할 수 있습니다 (@Me).

LiteralValue|Variable|Field

'User Story'

리터럴 값

필드의 값을 비교 하 여 실제 값입니다.자세한 내용은 이 항목의 뒤에 나오는 리터럴 값를 참조하십시오.

변수

특정 값을 나타내는 식입니다.예를 들어, @Me, 쿼리를 실행 한 사람을 나타냅니다.자세한 내용은 이 항목의 뒤에 나오는 변수를 참조하십시오.

필드

다른 필드의 이름입니다.예를 들어, 사용할 수 있습니다 [Assigned to] = [Changed by]작업 항목 가장 최근에 변경한 사람에 게 할당 된 작업 항목을 찾을 수 있습니다.

Bb130306.collapse_all(ko-kr,VS.110).gif비교 연산자

필드의 해당 값에 관계 해야 지정 하는 다음 표에서 연산자를 사용할 수 있습니다.

쿼리 연산자

설명

해당 형식의 필드

=

값을 찾습니다.

숫자, 텍스트, 날짜, 트리

<>

값이 일치 하지 않습니다.

숫자, 텍스트, 날짜, 트리

>

이 값 보다 큽니다.

숫자, 텍스트, 날짜

<

이 값 보다 작은 경우

숫자, 텍스트, 날짜

>=

보다 크거나 같은 값입니다.

숫자, 텍스트, 날짜

<=

보다 작거나 같은 값입니다.

숫자, 텍스트, 날짜

포함

문자열을 포함합니다.

텍스트

포함 안 함

문자열을 포함 되지 않습니다.

텍스트

In

쉼표로 구분 된 집합의 한 값과 일치 합니다.예를 들어, [System.Id] In (100, 101, 102) 검색 한 작업 항목 Id는 100, 101 및 102.

숫자, 텍스트, 날짜, 트리

그룹에 포함

그룹의 구성원이입니다.그룹 수를 Team Foundation 그룹 ([Assigned to] In Group [Project]\Contributors) 또는 작업 항목 형식 필드를 사용 하는 경우 작업 항목 범주 ([Work Item Type] In Group Requirements).범주 그룹에 대한 자세한 내용은 범주를 정의하여 작업 항목 형식 그룹화를 참조하십시오.

텍스트

그룹에 포함되지 않음

그룹의 구성원이 아닙니다.항목에 대 한 자세한 내용은 참조 하십시오. In Group.

텍스트

할당된 적 있음

필드 값을 항상 일치 하는 경우 다른 값으로 변경 된 경우에 일치 합니다.

텍스트, 날짜

다음에 속함

영역 및 반복에 대 한 작업 항목 노드 또는 해당 자식 노드 중 하나에 경우를 찾습니다.영역 및 반복에 대 한 내용은 영역 및 반복 만들기 및 수정.

트리

다음에 속하지 않음

영역 및 반복에 대 한 작업 항목 노드 또는 해당 자식 노드 중 하나에 있는 경우를 찾습니다.

트리

Bb130306.collapse_all(ko-kr,VS.110).gif변수

사용자 입력 또는 계산 된 값을 전달 하려면 쿼리에 변수를 사용할 수 있습니다.변수를 포함 하는 쿼리를 작성 하려면 자리 표시자 쿼리 문자열에서 사용 하 여 만드는 @variable.다음의 구현을 사용 하 여 쿼리 메서드를 이름 및 각 변수의 값을 전달 IDictionary다음 예제와 같이

// Define a query that uses a variable for the type of work item. 
string queryString = "Select [State], [Title] From WorkItems Where [Work Item Type] = @Type";

// Set up a dictionary to pass "User Story" as the value of the type variable.
Dictionary<string, string> variables = new Dictionary<string, string>();
variables.Add("Type", "User Story");

// Create and run the query.
Query query = new Query(workItemStore, queryString, variables); 
WorkItemCollection results = query.RunQuery();
// Define a query that uses a variable for the type of work item.
Dim queryString As New StringBuilder("SELECT [State], [Title] FROM WorkItems WHERE [WorkItemtype] = @Type")

// Set up a dictionary to pass "User Story" as the value of a type variable.
Dim variables = New Dictionary(Of String, String)
variables.Add("Type", "User Story")

// Create and run the query.
Dim query As New Query(workItemStore, queryString, variables)                   
WorkItemCollection results = query.RunQuery()

사용할 수도 있습니다 @Me 또는 @Today 쿼리에 해당 변수에 대 한 값을 제공 하지 않고 있습니다.이러한 변수 쿼리 결과에 나타납니다 있지만 전달 된 관련 된 값이 없는 경우는 IDictionary 구현, 변수는 다음 표의 설명에 따라 평가 됩니다.

변수

용도

@Me

현재 사용자의 사용자 이름이 포함 된 필드를 나타냅니다.예를 들어, 지정 하는 경우 정품 인증 하는 작업 항목을 찾을 수 있습니다 [Activated by] = @Me.

@Today

현재 날짜를 나타냅니다.수정할 수도 @Today 변수를 추가 하거나 며칠을 빼는 방식으로.예를 들어, 지정 하는 경우에 지난 주에 활성화 된 모든 항목을 찾을 수 있습니다 [Activated Date] > @Today - 7.

Bb130306.collapse_all(ko-kr,VS.110).gif리터럴 값

각 필드에 대해 값을 지정 하면 값 필드의 데이터 형식이 일치 해야 합니다.모든 필드에서 Team Foundation 는 다음 표에 나열 된 데이터 형식 중 하나를 가질:

데이터 형식

저장된 데이터

DateTime

A datetime 로 정의 된 값 SQL Server.기본적으로 작업 항목 쿼리에서 날짜/시간 값 날짜 정밀도 갖는 것으로 취급 됩니다.예를 들어, 2010 년 6 월 1 일에 하루 중 언제 든 지 생성 하는 작업 항목 필터 조건에 맞는 수 [Created Date] = 6/1/2010.

자세한 내용은 메서드 및 쿼리 개체를 쿼리 합니다. 나중에이 항목 및 다음 페이지에는 Microsoft 웹 사이트: datetime (Transact SQL).

Double

0.2, 3.5 등과 같은 실수입니다.

GUID

GUID를 나타내는 문자열입니다.

HTML

HTML을 포함 하는 텍스트 문자열입니다.

Integer

0, 1, 2, 또는 34 같은 서명 된 32 비트 정수입니다.

PlainText

255 문자 보다 짧아야 하는 서식 없는 텍스트 문자열입니다.

String

최대 255 문자를 포함 하는 텍스트 문자열입니다.

TreePath

영역 또는 반복 같은 분기 트리 구조입니다.

작업 항목 간 링크에 대 한 쿼리

또한 작업 항목 간의 링크를 찾는 쿼리를 수 있습니다.조건을 Where 절 링크에 나 소스 또는 대상에 대 한 링크의 모든 작업 항목에 적용 됩니다.다음 표에 이러한 유형의 쿼리 및 쿼리를 작업 항목에 대 한 차이점을 요약합니다.

작업 항목

작업 항목 간 링크

From 절

작업 항목에서

Workitemlinks에서

Where 절

[FieldName] = Value

다음 중 하나입니다.

[Source].[FieldName] = Value

[Target].[FieldName] = Value

[System.Links.LinkType] = 'LinkName'

모드

다음 중 하나입니다.

mode(MustContain)

(기본값) 만 반환 WorkItemLinkInfo 레코드 원본, 대상 및 링크 조건 모두 충족 되는.

mode(MayContain)

반환 WorkItemLinkInfo 연결 된 작업 항목이 대상 기준을 충족 하는 경우에 원본 및 링크 기준을 만족 하는 모든 작업 항목에 대 한 레코드입니다.

mode(DoesNotContain)

반환 WorkItemLinkInfo 레코드 원본을 만족 하는 모든 작업 항목에 대 한 연결 된 작업 항목에서 링크 및 대상 조건에 맞는 경우.

반환 값

[ T:Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemCollection ]

WorkItemLinkInfo의 배열입니다.

다음 쿼리에서 사용자 스토리와 해당 활성 자식 노드 사이의 링크를 반환합니다.

SELECT [System.Id]
FROM WorkItemLinks
WHERE ([Source].[System.WorkItemType] = 'User Story')
  And ([System.Links.LinkType] = 'Child')
  And ([Target].[System.State] = 'Active')
mode(MustContain)

메서드 및 쿼리 개체를 쿼리 합니다.

사용 하 여 작업 항목을 쿼리할 수 있는 WorkItemStore.Query 메서드.또한 사용 하 여 모든 작업 항목을 반환 하지 않고 쿼리를 만족 하는 작업 항목의 수를 확인할 수 있습니다의 WorkItemStore.QueryCount 메서드입니다.

만들 수는 Query 개체를 정의 하 고 쿼리를 실행 합니다.

string queryString = "Select [Title] From WorkItems Where [Work Item Type] = 'User Story'"
Query query = new Query(workItemStore, queryString); 
int numWorkItems = query.RunCountQuery();
Console.WriteLine("The project collection has " + numWorkItems.ToString() + " user stories.");
Dim queryString As New StringBuilder("Select [Title] FROM WorkItems WHERE [WorkItemType] = 'User Story'"
Dim query As New Query(workItemStore, queryString)
Dim numWorkItems As Int
numWorkItems = query.RunCountQuery()
Console.Writeline("The project collection has " + numWorkItems.ToString() + " user stories.")

비동기 쿼리

사용 하 여 쿼리를 비동기적으로 실행 된 Query.BeginQuery 메서드.다음 샘플에서는 쿼리를 비동기적으로 실행 하 고 매우 짧은 제한 시간 후 쿼리를 취소 합니다.

// Run the query asynchronously, and time out after 0.05 seconds. 
ICancelableAsyncResult callback = query.BeginQuery();
callback.AsyncWaitHandle.WaitOne(50, false); 
if (!callback.IsCompleted) 
{
   callback.Cancel();
   Console.WriteLine("The query timed out");
}
else
{
   WorkItemCollection nextResults = query.EndQuery(callback); 
   Console.WriteLine("The project collection has " + nextResults.Count.ToString() + " work items."); 
}
Dim callback as ICancelableAsyncResult
callback = query.RunQuery()
callback.AsyncAWaitHandle.WaitOne(50, False)
If Not (callback.IsCompleted)
Then
callback.Cancel()
Console.Writeline("The query timed out")
Else
Dim nextResults As WorkItemCollection = query.EndQuery(callback)
Console.Writeline("The project collection has " + nextResults.Count.ToString() + " work items.") 
End If

필드 값은 페이징

WorkItemCollection 쿼리를 반환 하는 다음과 같은 필드 값이 들어:

  • ID

  • Rev (개정판)

  • AreaID

  • IterationID

  • WorkItemType

SELECT 절에 지정 되는 필드 값을 페이지에 반환 됩니다.

[!참고]

기본적으로 각 페이지 50 작업 항목에 대해 선택된 된 필드를 포함합니다.사용 하 여 페이지의 크기를 조정할 수 있습니다 WorkItemCollection.PageSize.

코드를 사용 하는 모든 필드를 선택 하 여 서버 왕복을 최소화할 수 있습니다.다음 코드 질의 대 한 한 번의 라운드트립 왕복 타이틀 페이지는 새 페이지를 액세스할 때마다 반환 합니다 하나 있습니다.

WorkItemCollection results = WorkItemStore.Query(
   "SELECT Title FROM Workitems WHERE (ID < 1000)"); 
foreach (WorkItem item in results) 
{
   Console.WriteLine(item.Fields["Title"].Value);
}

SELECT 절에 지정 하지 않은 필드 코드에서 액세스 하는 경우 해당 필드 페이지 된 필드 집합에 추가 됩니다.해당 필드의 값을 포함 하는 페이지를 새로 고치려면 또 다른 라운드트립이 수행 됩니다.

쿼리 구문 (EBNF)

확장된 Naur 기초로 폼 (EBNF) 간결 하 고 모호 하지 않은 방법으로 언어의 문법을 설명 메타 언어입니다.이 코드 블록 EBNF를 사용 하 여 작업 항목 쿼리 언어 (WIQL)의 문법에 설명 합니다.

EBNF와 익숙하지 않은 경우에 대 한 WIQL는 대체 설명을 참조 하십시오. Syntax for the Work Item Query Language.

<select> ::= <flat-select> | <one-hop-select> | <recursive-select>

<flat-select> ::= select <field list>
from workitems
[ where <expression> ]
[ order by <order by field list> ]
[ asof <datetime> ]

<one-hop-select> ::= select <field list>
from workitemlinks
[ where <one-hop-link-expression>  <source-expression>  <target-expression> ]
[ order by <source-target order by field list> ]
[ asof <datetime> ]
mode( mustcontain | maycontain | doesnotcontain )

<recursive-select> ::= select <field list>
from workitemlinks
where <recursive-link-expression> [ and <source-expression> <target-expression> ]
mode ( recursive | returnmatchingchildren )

<expression> ::= <expression4>

<expression4> ::= <expression3> [ or <expression4> ]
<expression3> ::= <expression2> [ and <expression3> ]

<expression2> ::=   {[ not | ever ] <expression2> }
                          | <expression1>

<expression1> ::= <conditional expression>

<conditional expression> ::=   { '(' <expression> ')' }  | <field reference name> <conditional operator> <value>  | <field reference name> [not] in '(' <value list> ')'

<value> ::= <number>
| <string>
| <datetime>

<value list> ::= <value> [ ',' <value list> ]

<conditional operator> ::=   { '=' | '<>' | '<' | '<=' | '>' | '>=' } 
                             | { [ever] [not] { like | under }} 
<link operator> ::= '=' | '<>'

<field list> ::= <field name> [ ',' <field list> ]
<order by field list> ::= <order by field> [ ',' <order by field list> ]
<source-target order by field list> ::= [ <source> |<target> ] <order by field> [ ',' <source-target order by field list> ]
<order by field> ::= <field name> [ 'asc' | 'desc' ]

<number> ::= [ '-' ] <digit>* [ '.' [ <digit>* ]] [ { e | E } [ '-' ] <digit>* ]

<string> ::=   { ''' { <anychar except '''> | '''' }* ''' } 
                 | { '"' { <anychar except '"'> | '""' }* '"' }

<datetime> ::= <string>

<source> ::= '[source].'
<target> ::= '[target].'

<one-hop-link-expression> ::= <one-hop-link-expression4> | ''

<one-hop-link-expression4> ::= <one-hop-link-expression3> [ or <one-hop-link-expression4> ]
<one-hop-link-expression3> ::= <one-hop-link-expression2> [ and <one-hop-link-expression3> ]

<one-hop-link-expression2> ::= {[ not | ever ] <one-hop-link-expression2>}
                         | <one-hop-link-expression1>

<one-hop-link-expression1> ::= <conditional-link-expression>

<conditional-link-expression> ::= { '(' <one-hop-link-expression> ')' } | <linktype-field> <link operator> <linktype-name><linktype-direction> | <linktype-field> [not] 'in  (' <linktype list> ')'

<recursive-link-expression> ::= <linktype-field> '=' <linktype-name>'-forward'

<linktype list> ::= <linktype-name><linktype-direction> [, <linktype-name><linktype-direction>]

<linktype-direction> ::= '-forward' | '-reverse'

<source-expression> ::= <source-expression4> | ''

<source-expression4> ::= <source-expression3> [ or <source-expression4> ]
<source-expression3> ::= <source-expression2> [ and <source-expression3> ]

<source-expression2> ::=   {[ not | ever ] <source-expression2> }
                          | <source-expression1>

<source-expression1> ::= <conditional-source-expression>

<conditional-source-expression> ::=   { '(' <source-expression> ')' }  | <source><field reference name> <conditional operator> <value>  | <source><field reference name> [not] in '(' <value list> ')'

<target-expression> ::= <target-expression4> | ''

<target-expression4> ::= <target-expression3> [ or <target-expression4> ]
<target-expression3> ::= <target-expression2> [ and <target-expression3> ]

<target-expression2> ::=   {[ not | ever ] <target-expression2> }
                          | <target-expression1>

<target-expression1> ::= <conditional-target-expression>

<conditional-target-expression> ::=   { '(' <target-expression> ')' }  | <target><field reference name> <conditional operator> <value>  | <target><field reference name> [not] in '(' <value list> ')'

<linktype-field> ::= '[System.Links.LinkType] = '
<select> ::= select <field list>
from workitems
[ where <expression> ]
[ order by <order by field list> ]
[ asof <datetime> ]

<expression> ::= <expression4>

<expression4> ::= <expression3> [ or <expression4> ]
<expression3> ::= <expression2> [ and <expression3> ]

<expression2> ::=   {[ not | ever ] <expression2> }
                          | <expression1>

<expression1> ::= <conditional expression>

<conditional expression> ::=   { '(' <expression> ')' }  | <field reference name> <conditional operator> <value>  | <field reference name> [not] in '(' <value list> ')'

<value> ::= <number>
| <string>
| <datetime>

<value list> ::= <value> [ ',' <value list> ]

<conditional operator> ::=   { '=' | '<>' | '<' | '<=' | '>' | '>=' } 
                             | { [ever] [not] { like | under }} 

<field list> ::= <field name> [ ',' <field list> ]
<order by field list> ::= <field name> [ asc | desc ] [ ',' <order by field list> ]

<number> ::= [ '-' ] <digit>* [ '.' [ <digit>* ]] [ { e | E } [ '-' ] <digit>* ]

<string> ::=   { ''' { <anychar except '''> | '''' }* ''' } 
                 | { '"' { <anychar except '"'> | '""' }* '"' }

<datetime> ::= <string> Insert section body here.

참고 항목

개념

Team Foundation용 클라이언트 개체 모델을 사용하여 작업 항목 추적 확장