Typescript azure devops节点api:使用WIQL参数调用QueryByIQL()函数时出现问题

Typescript azure devops节点api:使用WIQL参数调用QueryByIQL()函数时出现问题,typescript,azure-devops,tags,wiql,Typescript,Azure Devops,Tags,Wiql,第一个问题。 我正在开发一个程序,该程序需要查询我的azure devops组织,并返回由System.Tag和System.TeamProject筛选的工作项引用列表 为此,我决定以以下方式使用azure devops节点api的queryByIQL()函数: //create a new WIQL object of data we want const query: string = "SELECT [System.Id] FROM WorkItems WHERE [System

第一个问题。 我正在开发一个程序,该程序需要查询我的azure devops组织,并返回由System.Tag和System.TeamProject筛选的工作项引用列表

为此,我决定以以下方式使用azure devops节点api的queryByIQL()函数:

//create a new WIQL object of data we want
const query: string = "SELECT [System.Id] FROM WorkItems WHERE [System.TeamProject] = [" + this.globals.API_PROJECT + "] AND [System.Tags] Contains [" + tag + "]";
console.log(query);

//create a new TeamContext object so the query knows where to look
const projectId = this.globals.API_PROJECT;

//ping ADO with this query
const result: WorkItemTrackingInterfaces.WorkItemQueryResult = await WorkItemApiObject.queryByWiql({query: query}, {project: projectId}); //WHY DOESNT THIS WORKKKKKK
其中,“this.globals.API_PROJECT”是一个引用项目名称的字符串,“tag”是我要查询工作项的标记名称的字符串

问题是,当我使用参数'this.globals.API_PROJECT'=projectName和'tag'=tagName(只是随机参数:无论发生什么,我都会收到相同的错误消息)调用queryByWiql()时,我会得到以下错误:

Failed to load resource: the server responded with a status of 400 () from dev.azure.com/{organization}/{project}/_apis/wit/wiql:1
ERROR Error: Uncaught (in promise): Error: TF51005: The query references a field that does not exist. The error is caused by «projectName».
at RestClient.<anonymous> (RestClient.js:202)
at Generator.next (<anonymous>)
at fulfilled (RestClient.js:6)
at ZoneDelegate.invoke (zone-evergreen.js:364)
at Object.onInvoke (core.js:27148)
at ZoneDelegate.invoke (zone-evergreen.js:363)
at Zone.run (zone-evergreen.js:123)
at zone-evergreen.js:857
at ZoneDelegate.invokeTask (zone-evergreen.js:399)
at Object.onInvokeTask (core.js:27136)
at resolvePromise (zone-evergreen.js:798)
at zone-evergreen.js:705
at rejected (tslib.es6.js:72)
at ZoneDelegate.invoke (zone-evergreen.js:364)
at Object.onInvoke (core.js:27148)
at ZoneDelegate.invoke (zone-evergreen.js:363)
at Zone.run (zone-evergreen.js:123)
at zone-evergreen.js:857
at ZoneDelegate.invokeTask (zone-evergreen.js:399)
at Object.onInvokeTask (core.js:27136)
加载资源失败:服务器从dev.azure.com/{organization}/{project}/_api/wit/wiql:1以400()状态响应
错误:未捕获(承诺中):错误:TF51005:查询引用的字段不存在。该错误是由«projectName»引起的。
在RestClient。(RestClient.js:202)
在Generator.next()处
完成时(RestClient.js:6)
在ZoneDelegate.invoke(zone evergreen.js:364)
在Object.onInvoke(core.js:27148)
在ZoneDelegate.invoke(zone evergreen.js:363)
在Zone.run(Zone evergreen.js:123)
常青区。js:857
在ZoneDelegate.invokeTask(zone evergreen.js:399)
在Object.onInvokeTask(core.js:27136)
at resolvePromise(zone evergreen.js:798)
常青区。js:705
at被拒绝(tslib.es6.js:72)
在ZoneDelegate.invoke(zone evergreen.js:364)
在Object.onInvoke(core.js:27148)
在ZoneDelegate.invoke(zone evergreen.js:363)
在Zone.run(Zone evergreen.js:123)
常青区。js:857
在ZoneDelegate.invokeTask(zone evergreen.js:399)
在Object.onInvokeTask(core.js:27136)
问题是,我知道在我查询的项目和组织中存在projectName和tagName。我还知道,我使用了对这些字段“System.Tag”和“System.TeamProject”的正确引用,因为我专门检查了我的项目

我要做的就是从这个调用中获取类型WorkItemTrackingInterfaces.WorkItemQueryResult。请帮忙!谢谢你抽出时间


EDIT1:添加了资源加载失败错误消息,因为这种情况也会发生。

我建议您尝试市场扩展。它让您可以处理语法和查询结果

我只是模拟了一些东西,正如我所预料的,用[]包装似乎会让它认为您引用的是一个字段而不是一个文本。至少错误消息看起来是相同的

没有


我建议您尝试一下marketplace扩展。它让您可以处理语法和查询结果

我只是模拟了一些东西,正如我所预料的,用[]包装似乎会让它认为您引用的是一个字段而不是一个文本。至少错误消息看起来是相同的

没有

更新: 我修好了。我觉得不这样做太傻了。结果我误解了WIQL中括号[]应该是什么——它们只应该表示字段。要用空格和特殊字符表示字符串,请将字符串用“”环绕,如下所示:

const query: string = "SELECT [System.Id] FROM WorkItems WHERE [System.TeamProject] = '" + this.globals.API_PROJECT + "' AND [System.Tags] Contains '" + tag + "'";
…是的,原来一直都是语法错误。我觉得自己很傻,哈哈。我花了这么多时间在这个哈哈更新上: 我修好了。我觉得不这样做太傻了。结果我误解了WIQL中括号[]应该是什么——它们只应该表示字段。要用空格和特殊字符表示字符串,请将字符串用“”环绕,如下所示:

const query: string = "SELECT [System.Id] FROM WorkItems WHERE [System.TeamProject] = '" + this.globals.API_PROJECT + "' AND [System.Tags] Contains '" + tag + "'";

…是的,原来一直都是语法错误。我觉得自己很傻,哈哈。我花了这么多时间在这上面,哈哈

是的,我有。括号是必要的,因为我的组织中有一些项目和标记使用空格和特殊字符,括号让API知道这些字符仍然是标记/项目名称的一部分。无论如何,即使没有括号,错误仍然是一样的。好问题思想更新:我错了。回答我的问题。括号是必要的,因为我的组织中有一些项目和标记使用空格和特殊字符,括号让API知道这些字符仍然是标记/项目名称的一部分。无论如何,即使没有括号,错误仍然是一样的。好问题思想更新:我错了。回答如下你完全正确。正如你发布的那样,我发现了这一点(好吧,我的老板发现了)。无论如何谢谢你!我很感激,你说得很对。正如你发布的那样,我发现了这一点(好吧,我的老板发现了)。无论如何谢谢你!我很感激。太好了。你修好了。你可以。太好了。你修好了。你可以。