Devops, используя данные запроса доступа Ajax WIQL - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь получить доступ к данным azure-devops с помощью Ajax. Ниже приведен мой рабочий код.

 $.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 ]

1 голос
/ 19 октября 2019

Предыдущий скрипт, который вы используете, - это метод, используемый для выполнения API, но не подходящий для выполнения скрипта WIQL. Вот почему вы сталкиваетесь с этой ошибкой.

Выполнение WIQL в Ajax на самом деле запрос процесс: Отправьте оператор wiql на сервер, к которому вы хотите получить доступзапросить выполнение оператора запроса (Wiql) и вернуть результат выполнения. Таким образом, это процесс запроса выполнения команды 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 в теле страницы. Это вывод:

enter image description here Так как я не уверен, какова ваша следующая операция. В этом скрипте вы можете заменить оператор Wiql и URL-адрес своим. Затем измените соответствующую функцию done для достижения того, чего вы хотите.

0 голосов
/ 23 октября 2019

Почему-то WQIL выдает ошибку 400, это похоже на проблему с разрешением.

Так что я решил ее по-другому. Вместо запроса есть другой метод, который дает мне все детали рабочего элемента, которые мне просто необходимы для передачи идентификаторов рабочих элементов.

 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
            });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...