#tfs #tfs-workitem
#tfs #tfs-workitem
Вопрос:
Я застрял на одной проблеме, где я хочу получить WorkItemCollection
из WorkItemStore
. Я знаю, что это может быть возможно с помощью Query()
метода.
Но в моем сценарии Query
метод не работает, поскольку я использую метод WorkItemStore.Query Method (Int32[], String)
. с String
аргументом в виде
Select [System.Id],[System.State],[System.Title],[System.WorkItemType]
from WORKITEMS
where [System.WorkItemType] = 'Requirement' and [System.TeamProject] = 'Test_Baseline'
Но при выполнении этого запроса он выдает исключение с сообщением как Invalid Query Provided
.
Кто-нибудь может сказать, как мне решить эту проблему?
Заранее благодарю.
Комментарии:
1. Этот запрос отлично работает в моей TFS, просто заменив название командного проекта в запросе.
2. @DaveShaw да, этот запрос выполняется нормально, если я попробовал его напрямую в TFS. Но когда я использую этот запрос в методе
Query(Int32[], String)
, он выдает исключение. Например.WIStore.Query([1,2,3], QueryString)
в программе.3. Я попробовал это с помощью Query (string), я не уверен, почему вы используете эту перегрузку, из вопроса неясно, чего вы хотите достичь, если это просто запрос для элементов с идентификатором, укажите это в предложении where WIQL: ID в (1,2,3)
4. @DaveShaw да, Дэйв, я сделал это, но дело в том, что я хочу знать, почему я не могу использовать
Query(int[], String)
, поскольку это было задокументировано командой TFS. Поскольку мой запрос выполнен нормально, вызов функции выполнен правильно..
Ответ №1:
@Ankit, исключение, которое я получил при выполнении вашего запроса с использованием Query (Int32[], String) oveload, является:
«Предложения WHERE и ORDER BY строки запроса не поддерживаются в параметризованном запросе».
который, я думаю, объясняет, почему вы не можете запустить этот WIQL, используя эту перегрузку. Вам следует либо удалить предложение WHERE из запроса, либо использовать метод Query (String)
Комментарии:
1. Я думаю, что это правильный ответ. однако, я думаю, что программисты Microsoft — ленивые другие мошенники. В документации не сказано «о, и, кстати, вам нужно проанализировать чертов запрос и удалить все условия, даже если мы не собираемся их рассматривать».
Ответ №2:
Я пришел сюда, потому что пытаюсь реализовать функцию запроса, которая будет обрабатывать запросы как СПИСКА, так и ДЕРЕВА. В итоге я написал что-то вроде этого…
JArray RunQuery(string wiql)
{
var i = wiql.ToLower().IndexOf("from workitemlinks");
if (i > 0)
{
// Handle "Tree" queries
var query = new Query(Store, wiql);
var linkInfoList = query.RunLinkQuery();
var parent = linkInfoList.ToDictionary(link => link.TargetId, link => link.SourceId);
// Remove all WHERE and ORDER BY from query
var items = tfs.Store.Query(parent.Keys.ToArray(), wiql.Substring(0, i) "from workitems");
var result = JsonUtil.ConvertItemList(items);
foreach (JObject json in result)
{
json["Parent"] = parent[json.Value<int>("ID")];
}
return resu<
}
// Handle "List" query
return JsonUtil.ConvertItemList(Store.Query(wiql));
}
Я надеюсь, что кто-то найдет это полезным.