버그, 작업 및 기타 작업 항목에 대한 쿼리
버그를 쿼리할 수 및 작업을 다른 작업 항목 형식 중 하나를 사용 하 여 작업 항목 간 링크를 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 쿼리에 의해 반환 됩니다.표시 이름 또는 필드의 참조 이름을 지정할 수 있습니다.이름을 공백 또는 마침표가 포함 된 경우 대괄호 ()를 사용 해야 합니다. |
From WorkItems |
원하는 작업 항목을 찾는 쿼리 또는 작업 항목 간 링크 여부를 나타냅니다.
|
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' |
비교 연산자
필드의 해당 값에 관계 해야 지정 하는 다음 표에서 연산자를 사용할 수 있습니다.
쿼리 연산자 |
설명 |
해당 형식의 필드 |
---|---|---|
= |
값을 찾습니다. |
숫자, 텍스트, 날짜, 트리 |
<> |
값이 일치 하지 않습니다. |
숫자, 텍스트, 날짜, 트리 |
> |
이 값 보다 큽니다. |
숫자, 텍스트, 날짜 |
< |
이 값 보다 작은 경우 |
숫자, 텍스트, 날짜 |
>= |
보다 크거나 같은 값입니다. |
숫자, 텍스트, 날짜 |
<= |
보다 작거나 같은 값입니다. |
숫자, 텍스트, 날짜 |
포함 |
문자열을 포함합니다. |
텍스트 |
포함 안 함 |
문자열을 포함 되지 않습니다. |
텍스트 |
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. |
텍스트 |
할당된 적 있음 |
필드 값을 항상 일치 하는 경우 다른 값으로 변경 된 경우에 일치 합니다. |
텍스트, 날짜 |
다음에 속함 |
영역 및 반복에 대 한 작업 항목 노드 또는 해당 자식 노드 중 하나에 경우를 찾습니다.영역 및 반복에 대 한 내용은 영역 및 반복 만들기 및 수정. |
트리 |
다음에 속하지 않음 |
영역 및 반복에 대 한 작업 항목 노드 또는 해당 자식 노드 중 하나에 있는 경우를 찾습니다. |
트리 |
변수
사용자 입력 또는 계산 된 값을 전달 하려면 쿼리에 변수를 사용할 수 있습니다.변수를 포함 하는 쿼리를 작성 하려면 자리 표시자 쿼리 문자열에서 사용 하 여 만드는 @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. |
리터럴 값
각 필드에 대해 값을 지정 하면 값 필드의 데이터 형식이 일치 해야 합니다.모든 필드에서 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 |
다음 중 하나입니다.
|
모드 |
다음 중 하나입니다.
|
|
반환 값 |
[ 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.