问题描述
第一个问题在这里。 我正在开发一个程序,该程序需要查询我的azure devops组织并返回按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类型。请帮忙!谢谢您的时间。
解决方法
我建议您尝试使用市场扩展Wiql Editor。它使您可以使用语法和查询结果。
我只是模拟了一些东西,正如我所期望的那样,用[]换行似乎使它认为您是在引用字段而不是文字。至少错误消息看起来相同。
没有。.
,更新: 我修好了它。我不这样做很傻。原来我误解了[]在WIQL中应该使用什么括号[],它们仅代表字段。要用空格和特殊字符表示字符串,请用''括起字符串,如下所示:
const query: string = "SELECT [System.Id] FROM WorkItems WHERE [System.TeamProject] = '" + this.globals.API_PROJECT + "' AND [System.Tags] Contains '" + tag + "'";
...是的,事实证明这一直都是语法错误。我觉得很傻,哈哈。我花了很多时间在这个哈哈上