azure-devops-node-api:使用 WIQL 参数调用 queryByWiql() 函数时遇到问题

azure-devops-node-api: Trouble calling queryByWiql() function with WIQL argument

这里是第一个问题。 我正在开发一个程序,需要查询我的 azure devops 组织和 return 由 System.Tag 和 System.TeamProject.

过滤的工作项引用列表

为此,我决定按以下方式使用 azure-devops-node-api 的 queryByWiql() 函数:

//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)

问题是,我知道我正在查询的项目和组织中存在 projectName 和 tagName。我也知道我使用了对这些字段“System.Tag”和“System.TeamProject”的正确引用,因为我专门检查了我的项目。

我想要做的就是从这个调用中得到一个类型 WorkItemTrackingInterfaces.WorkItemQueryResult。请帮忙!谢谢你的时间。

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

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

我只是模拟了一些东西,正如我所料,用 [ ] 包裹似乎导致它认为您引用的是字段而不是文字。至少错误消息看起来是一样的。

没有..

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

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

...是的,事实证明这是一个语法错误。我觉得很傻哈哈。我花了这么多时间哈哈