2016-11-23 13 views
0

私は次のコードを持っている:私はちょうどで検索する場合は、しかし、TFS APIで複数のユーザーパターンでフィルタリングするにはどうすればよいですか?

Microsoft.TeamFoundation.Framework.Client.IdentityExpressionException: TF400819: Query Expression is not well-formed 
---> System.Web.Services.Protocols.SoapException: TF400819: Query Expression is not well-formed 
    --- End of inner exception stack trace --- 
    at Microsoft.TeamFoundation.Client.Channels.TfsHttpClientBase.HandleReply(TfsClientOperation operation, TfsMessage message, Object[]& outputs) 
    at Microsoft.TeamFoundation.Client.Channels.TfsHttpClientBase.Invoke(TfsClientOperation operation, Object[] parameters, TimeSpan timeout, Object[]& outputs) 
    at Microsoft.TeamFoundation.Framework.Client.IdentityManagementWebService2.ReadFilteredIdentities(String expression, Int32 suggestedPageSize, String lastSearchResult, Boolean lo 
okForward, Int32 queryMembership, Int32 features) 
    at Microsoft.TeamFoundation.Framework.Client.IdentityManagementService2.ReadFilteredIdentities(String expression, Int32 suggestedPageSize, String lastSearchResult, Boolean lookF 
orward, Int32 queryMembership) 
    at TFSTool.Program.GetUsers(IEnumerable`1 args) in C:\dayforce\SharpTop\Build\ConfigurationManagement\utilities\tfstool\Program.cs:line 1621 
    at TFSTool.Program.Main(String[] args) in C:\dayforce\SharpTop\Build\ConfigurationManagement\utilities\tfstool\Program.cs:line 519 

:クエリは

Microsoft.TeamFoundation.Identity.Type == 'User' AND (Microsoft.TeamFoundation.Identity.DisplayName CONTAINS 'alice' OR Microsoft.TeamFoundation.Identity.DisplayName CONTAINS 'bob') 

のようなものであるとき、コードは次の例外をスローし、今

var tfs = new TfsTeamProjectCollection(new Uri(TFS_SERVER_URL));  
tfs.EnsureAuthenticated(); 

var query = GetQuery(...) 
var identities = ims.ReadFilteredIdentities(query, 5000, null, true, (int)MembershipQuery.None); 
foreach (var item in identities.Items) 
{ 
    Console.WriteLine("{0,-20} {1,-20} {2}", item.DisplayName, item.UniqueName, item.GetAttribute("Mail", null)); 
} 

を1つのユーザパターン、例えば、

Microsoft.TeamFoundation.Identity.Type == 'User' AND Microsoft.TeamFoundation.Identity.DisplayName CONTAINS 'mark' 

うまく動作します。

私の質問 - TFS Apiで複数のユーザーパターンを検索することは可能ですか、それとも個別にパターンごとにクエリを繰り返す必要がありますか?

+0

どこでMicrosoft.TeamFoundation.Identity.TypeとMicrosoft.TeamFoundation.Identity.DisplayNameを取得しましたか?コード全体を共有できますか? TFSのクエリ作業項目の場合、複数のユーザーパターンがサポートされています。https://msdn.microsoft.com/en-us/library/bb130306(v=vs.120).aspx –

+0

どういう意味ですか?私は正確なコードを与えた。クエリは正確に** Microsoft.TeamFoundation.Identity.Type == 'ユーザー'とMicrosoft.TeamFoundation.Identity.DisplayNameは 'マーク' **を含みます。あなたが与えたリンクはユーザーを取得しないので、良い例ではありません。 – mark

答えて

1

いいえ、できません。 OR演算子はクエリ式でサポートされていません。詳細については、この記事のReadFilteredIdentities()メソッドの説明を参照してください。TeamFoundationIdentityService Class

ReadFilteredIdentitiesは、式の に基づいてIDのセットを取得するために使用されます。式は、SQL WHERE句に似た構文です。式の機能の詳細については、QueryExpressionクラスの のドキュメントを参照してください。 式には2つの部分があります。 アイデンティティから使用できる一連の値があり、それらは一緒にAND'edする必要があります

+0

Bummer ......... – mark

関連する問題