首页 > 解决方案 > devops-rest APi - $expand 不适用于“Work Items - Get Work Items Batch”

问题描述

我想从选定的工作项中访问一些数据。
下面是我的工作代码。

function postApiData(ApiUrl, responseBody, token) {
            var res = '';
            $.ajax({
                type: 'POST',
                async: false,
                url: ApiUrl,
                contentType: 'application/json',
                data: JSON.stringify(responseBody),
                cache: false,
                dataType: 'json',
                beforeSend: function (xhr) {
                    xhr.setRequestHeader("Authorization", "Basic " + btoa("" + ":" + _token));
                },
            }).done(function (data) {
                res = data;
            });
        return res;
    };

 var d = {
                    "ids": itemlist,
                    "fields": ["System.Id", "System.WorkItemType", "System.Title", "System.AssignedTo", "System.State", "System.Tags", "cust.PID", "cust.Product", "cust.ReleasedToProduction"]
                };
                var itemdata = postApiData('https://dev.azure.com/COMP/products/_apis/wit/workitemsbatch?$expand=relations&api-version=5.1', d, '');

但是, $expand 在这里无法获取关系。查询给出结果并且总是忽略 $expand。

我也尝试在请求正文中传递 $expand,但它也不起作用。有人可以在这里指导吗?

标签: javascriptajaxazure-devopsdevopsazure-devops-rest-api

解决方案


那是因为如果值为 ,则expand参数不能与参数一起使用。fieldsexpandrelations

您可以在Postman中使用您的请求正文执行此 api 。您将收到明确的信息,说明为什么您不能应用它。

在此处输入图像描述


要使用您的 API,如果您fields在请求正文中指定 ,则expand不应再使用,反之亦然。这是按照设计的,并且已经硬编码到我们的脚本中。$expand如果不是Noneor ,我们不允许其他值Links

对于$expand( None, Relations, Fields, Links, All) 的 5 个值,只有None并且Links可以fields在 API 中成功使用。这是适用于所有 API 的通用规则,包括这个


另外,请$expand=Relations在请求正文中使用,而不是在描述的文档中显示的 URI 中使用。这里如果你在 URI 中使用它,它不会被服务器脚本使用,因为这个 API 调用的方法没有这个参数。另一个可以在 URI 中使用 $expand 的 API(通常,我们会在文档中提到并显示它是否可以在 URI 中使用),相应的脚本有参数可以访问这些通过 URI 传递的值。

因此,请$expand=Relations在请求正文中使用,然后您将获得包含所有字段及其所有关系的结果。


推荐阅读