【问题标题】:devops using Ajax access query data WIQLdevops 使用 Ajax 访问查询数据 WIQL
【发布时间】:2019-10-18 15:01:16
【问题描述】:

我正在尝试使用 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
        });

【问题讨论】:

  • 嗨,最近怎么样?下面的脚本示例现在是否可以帮助您在 Ajax 中使用 WIQL 成功访问 Azure decvops?如果是,您可以接受答案,因此其他 SO 用户将能够看到该解决方案是否有效。如果您仍然遇到一些问题,请随时在此处留下表扬,我可以继续为您提供帮助:-)

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


【解决方案1】:

您之前使用的脚本是用于执行 API 的方法,但不适合执行 WIQL 脚本。这就是您面临该错误的原因。

Ajax中执行WIQL其实是一个请求过程:发送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 语法的响应数据显示到页面正文中。这是输出:

因为我不确定你的下一个操作是什么。您可以在此脚本中将 Wiql 语句和 Url 替换为您的。然后改变对应的done函数来实现你想要的。

【讨论】:

  • @JigarParekh 400 表示请求错误,请求正文应该有一些错误。你能告诉我根据我的脚本你在哪里改变了吗?
  • 我刚刚修改了 {org name}/{project name} 和我的令牌
  • @JigarParekh, :( 有线。你能更新任何有关错误消息的屏幕截图吗?最好包括你完成的脚本。
  • 无法添加大评论,无法看到 optino 添加屏幕截图,并且此处没有聊天选项。你知道如何在评论中添加截图吗?
【解决方案2】:

不知何故,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
            });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多