dev使用Ajax访问查询数据WIQL

时间:2019-10-18 15:01:16

标签: azure-devops devops agile azure-devops-rest-api

我正在尝试使用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和用户活动。你能帮忙吗?

$.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
        });

2 个答案:

答案 0 :(得分:1)

您之前使用的脚本是用于执行API的方法,但不适合用于执行WIQL脚本。这就是为什么您遇到该错误。

WIQL中执行Ajax实际上是一个请求过程:wiql语句发送到您要访问的服务器,请求执行查询语句(Wiql),并返回执行结果。。因此,这是一个请求执行Post命令的过程。但是在您的脚本中,它没有告诉服务器需要执行哪些指令。

以下是简单的示例,您可以参考将WIQLAjax一起使用:

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

                  

我的脚本的逻辑是请求运行带有 WIQL 语句作为请求正文的API,并将此请求发送到我要访问的项目。然后将使用js语法的响应数据显示到页面主体中。这是输出:

enter image description here 由于我不确定您的下一个操作是什么。您可以在此脚本中用自己的替换Wiql语句和Url。然后更改相应的完成功能以实现所需的功能。

答案 1 :(得分:0)

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
            });