devops 使用 Ajax 访问查询数据 WIQL
devops using Ajax access query data WIQL
我正在尝试使用 Ajax 访问 azure-devops 数据。下面是我的工作代码。
$.ajax({
url: 'https://dev.azure.com/ORG/products/_apis/wit/workitems/2065741?$expand=all&api-version=5.1',
dataType: 'json',
headers: {
'Authorization': 'Basic ' + btoa("" + ":" + 'XXXX')
}
}).done(function( results ) {
});
在我需要使用 WQIL 访问数据之后,它给出了意外的令牌错误。我想访问 WorkItem 和用户 activity。你能帮忙解决这个问题吗?
$.ajax({
url: 'https://dev.azure.com/ORG/products/_apis/wit/wiql?api-version=5.1 ',
dataType: 'json',
headers: {
'Authorization': 'Basic ' + btoa("" + ":" + 'XXXX')
},
JSON.Stringfy("QUERY":"SELECT [System.Id], [System.WorkItemType], [System.Title], [System.AssignedTo], [System.State], [System.Tags] FROM workitemLinks WHERE " +
"( [Source].[System.TeamProject] = @project AND [Source].[System.WorkItemType] = 'User Story' ) AND ( [System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Forward' ) "+
" AND ( [Target].[System.TeamProject] = @project AND [Target].[System.WorkItemType] = 'Task' ) ORDER BY [System.Id] MODE (MustContain)")
}).done(function( results ) {
x=results
});
您使用的前一个脚本是用于执行API的方法,但不适合执行WIQL脚本。这就是您遇到该错误的原因。
在Ajax
中执行WIQL
实际上是一个request过程:将wiql
语句发送到你的服务器想要访问,请求执行查询语句(Wiql),return执行结果。因此,这是一个请求执行Post
命令的过程。但是在你的脚本中,它并没有告诉服务器需要执行什么指令。
这里是一个简单的例子,可以参考 WIQL
和 Ajax
:
<script type="text/javascript">
$(document).ready(function () {
$("#SelectWIT").on("click", function () {
var d = { "query": " Select [System.Id] from WorkItems Where [System.WorkItemType] = 'Bug' "};
$.ajax({
type: 'POST',
url: 'https://dev.azure.com/{org name}/{project name}/_apis/wit/wiql?api-version=1.0',
contentType: 'application/json',
data: JSON.stringify(d),
cache: false,
dataType: 'json',
beforeSend: function (xhr) {
xhr.setRequestHeader("Authorization", "Basic " + btoa("" + ":" + "{PAT token}"));
},
}).done(function (data) {
var items = [];
$.each(data.workItems, function (key, val) {
items.push("<li> <a href='" + val.url + "'>" + val.id + "</a></li>");
});
$("<ul/>", {
html: items.join("")
}).appendTo("body");
}).error(function (e) {
var s = "error error error";
});
})
});
</script>
我的脚本的逻辑是向运行一个API请求一个WIQL语句作为请求体,将这个请求发送到我的项目想访问。然后将响应数据以 js
语法显示到页面正文中。这是输出:
因为我不确定你的下一个手术是什么。您可以在此脚本中将 Wiql 语句和 Url 替换为您的语句。然后改对应的done函数就可以实现你想要的了。
WQIL 以某种方式给出错误 400,这看起来像是权限问题。
所以我用不同的方式解决了它。除了查询,还有另一种方法可以提供工作项的所有详细信息,我只需要在其中传递工作项 ID。
var d ={
"ids": [
20813,21677
],
"fields": ["System.Id","System.WorkItemType","System.Title","System.AssignedTo","System.State","System.Tags"]
};
$.ajax({
type: 'POST',
url: 'https://dev.azure.com/ORG/products/_apis/wit/workitemsbatch?api-version=5.1',
contentType: 'application/json',
data: JSON.stringify(d),
cache: false,
dataType: 'json',
beforeSend: function (xhr) {
xhr.setRequestHeader("Authorization", "Basic " + btoa("" + ":" + "XXXXX"));
},
}).done(function (data) {
x=data
});
我正在尝试使用 Ajax 访问 azure-devops 数据。下面是我的工作代码。
$.ajax({
url: 'https://dev.azure.com/ORG/products/_apis/wit/workitems/2065741?$expand=all&api-version=5.1',
dataType: 'json',
headers: {
'Authorization': 'Basic ' + btoa("" + ":" + 'XXXX')
}
}).done(function( results ) {
});
在我需要使用 WQIL 访问数据之后,它给出了意外的令牌错误。我想访问 WorkItem 和用户 activity。你能帮忙解决这个问题吗?
$.ajax({
url: 'https://dev.azure.com/ORG/products/_apis/wit/wiql?api-version=5.1 ',
dataType: 'json',
headers: {
'Authorization': 'Basic ' + btoa("" + ":" + 'XXXX')
},
JSON.Stringfy("QUERY":"SELECT [System.Id], [System.WorkItemType], [System.Title], [System.AssignedTo], [System.State], [System.Tags] FROM workitemLinks WHERE " +
"( [Source].[System.TeamProject] = @project AND [Source].[System.WorkItemType] = 'User Story' ) AND ( [System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Forward' ) "+
" AND ( [Target].[System.TeamProject] = @project AND [Target].[System.WorkItemType] = 'Task' ) ORDER BY [System.Id] MODE (MustContain)")
}).done(function( results ) {
x=results
});
您使用的前一个脚本是用于执行API的方法,但不适合执行WIQL脚本。这就是您遇到该错误的原因。
在Ajax
中执行WIQL
实际上是一个request过程:将wiql
语句发送到你的服务器想要访问,请求执行查询语句(Wiql),return执行结果。因此,这是一个请求执行Post
命令的过程。但是在你的脚本中,它并没有告诉服务器需要执行什么指令。
这里是一个简单的例子,可以参考 WIQL
和 Ajax
:
<script type="text/javascript">
$(document).ready(function () {
$("#SelectWIT").on("click", function () {
var d = { "query": " Select [System.Id] from WorkItems Where [System.WorkItemType] = 'Bug' "};
$.ajax({
type: 'POST',
url: 'https://dev.azure.com/{org name}/{project name}/_apis/wit/wiql?api-version=1.0',
contentType: 'application/json',
data: JSON.stringify(d),
cache: false,
dataType: 'json',
beforeSend: function (xhr) {
xhr.setRequestHeader("Authorization", "Basic " + btoa("" + ":" + "{PAT token}"));
},
}).done(function (data) {
var items = [];
$.each(data.workItems, function (key, val) {
items.push("<li> <a href='" + val.url + "'>" + val.id + "</a></li>");
});
$("<ul/>", {
html: items.join("")
}).appendTo("body");
}).error(function (e) {
var s = "error error error";
});
})
});
</script>
我的脚本的逻辑是向运行一个API请求一个WIQL语句作为请求体,将这个请求发送到我的项目想访问。然后将响应数据以 js
语法显示到页面正文中。这是输出:
WQIL 以某种方式给出错误 400,这看起来像是权限问题。
所以我用不同的方式解决了它。除了查询,还有另一种方法可以提供工作项的所有详细信息,我只需要在其中传递工作项 ID。
var d ={
"ids": [
20813,21677
],
"fields": ["System.Id","System.WorkItemType","System.Title","System.AssignedTo","System.State","System.Tags"]
};
$.ajax({
type: 'POST',
url: 'https://dev.azure.com/ORG/products/_apis/wit/workitemsbatch?api-version=5.1',
contentType: 'application/json',
data: JSON.stringify(d),
cache: false,
dataType: 'json',
beforeSend: function (xhr) {
xhr.setRequestHeader("Authorization", "Basic " + btoa("" + ":" + "XXXXX"));
},
}).done(function (data) {
x=data
});