Создание большого количества рабочих элементов в TFS с помощью Javascript REST API

Мне нужно создать около 6000 рабочих элементов с помощью расширения TFS. Я использую машинописный текст и REST API в своем расширении.

ниже приведен код, который я использую для создания рабочего элемента

 var ops = [
            {
                path: "/fields/System.Title",
                op: "add",
                value: "Hello world"
            }
        ];

    var options = {
        url: 'http://localhost:8080/tfs/DefaultCollection/Agile Git/_apis/wit/workItems/$Bug?api-version=2.2',
        username: 'username',
        password: 'password',
        domain: 'domain',
        method: 'PATCH',
        headers: {
          'Content-Type': 'application/json-patch+json'
        },
        body: JSON.stringify(ops)
    };

    httpntlm.patch(options, function(err,res) {
                console.log("patch complete");
                console.log(res.body);
    })

Я повторяю детали для каждого рабочего элемента и пытаюсь создать множество рабочих элементов с временными интервалами (например, 100 пакетов рабочих элементов). Но процесс создания не удается для многих рабочих элементов из-за проблем с тайм-аутом (мне удалось создать около 1000 рабочих элементов). Есть ли рекомендуемый метод создания / редактирования рабочих элементов. Пожалуйста помоги.


person Lalindu    schedule 01.03.2017    source источник


Ответы (1)


Вместо этого используйте API пакета рабочих элементов:

Например:

http://[collection url]/_apis/wit/$batch?api-version=1.0

Тело:

[
  {
    "method": "PATCH",
    "uri": "/ScrumStarain/_apis/wit/workItems/$Product Backlog Item?api-version=1.0",
    "headers": {
      "Content-Type": "application/json-patch+json"
    },
    "body": [
      {
        "op": "add",
        "path": "/fields/System.Title",
        "value": "apip1"
      },
      {
        "op": "add",
        "path": "/id",
        "value": "-1"
      }
    ]
  },
  {
    "method": "PATCH",
    "uri": "/ScrumStarain/_apis/wit/workItems/$Task?api-version=1.0",
    "headers": {
      "Content-Type": "application/json-patch+json"
    },
    "body": [
      {
        "op": "add",
        "path": "/fields/System.Title",
        "value": "apip2"
      },
      {
        "op": "add",
        "path": "/id",
        "value": "-2"
      }

    ]
  }
]

Для получения дополнительной информации вы можете обратиться к: Пакетные операции рабочего элемента

person starian chen-MSFT    schedule 02.03.2017
comment
привет starain, Большое спасибо за ответ :). Еще одна вещь, которую нужно уточнить: есть ли какие-либо ограничения на количество товаров в партии? - person Lalindu; 02.03.2017
comment
@Lalindu Это не упоминается в официальной статье, но вы можете проверить это. - person starian chen-MSFT; 02.03.2017
comment
Привет @Starain, в настоящее время я реализую это, я сделаю это, как только закончу с тем же. - person Lalindu; 08.03.2017
comment
Привет @ starain-MSFT, нужно ли нам добавить {method: PATCH, uri: /ScrumStarain/_apis/wit/workItems/$Task?api-version=1.0, заголовки: {Content-Type: application / json-patch + json } для каждого элемента пакета или есть способ обобщить, является ли он общим для всех элементов пакета? - person Lalindu; 08.03.2017
comment
@Lalindu Да, вам нужно добавить эти json-объекты. - person starian chen-MSFT; 08.03.2017
comment
Привет, @ starain-MSFT, я получаю, что MediaTypeFormatter не доступен для чтения объекта типа JsonBatchHttpRequest из содержимого с ошибкой application / json-patch + json типа мультимедиа, когда я пытаюсь выполнить пакетную операцию. Есть какие-нибудь советы по этому поводу? - person Lalindu; 20.03.2017
comment
@Lalindu Каковы подробности вашего запроса? У меня он отлично работает с TFS 2015. - person starian chen-MSFT; 21.03.2017
comment
Привет @ starain-MSFT, наконец-то заработало. Мы должны отправить его как json (а не как тело). Мы обсуждали то же самое во время другой беседы. Поэтому необходимо внести небольшую поправку в приведенный выше ответ: нужно поставить Json вместо Body - person Lalindu; 21.03.2017
comment
@Lalindu Вы имеете в виду эту ветку stackoverflow.com/questions/42856174/. Тело правильное, просто httpntlm предоставляет еще один простой способ добавить данные json в тело. - person starian chen-MSFT; 21.03.2017
comment
да и stackoverflow.com/questions/42907479/ объяснил это - person Lalindu; 21.03.2017
comment
Привет @ starain-MSFT. Не могли бы вы немного рассказать о приведенных ниже обозначениях. Обязательно ли определять ID? .как определить Id? Можно ли для этого назначить номер автоинкремента? {op: add, path: / id, value: -2} - person Lalindu; 22.03.2017
comment
@Lalindu Идентификатор обязательно указать, иначе будет выдано исключение. Значение кажется числом приращения, вы можете сгенерировать значения программирования. - person starian chen-MSFT; 22.03.2017