-4

I need to query VSTS work items using Wiql from vsp-node-api package, Please provide any examples if possible.

Community
  • 1
  • 1
Bandara
  • 780
  • 8
  • 29

2 Answers2

4

Refer to following code for details:

import * as vm from 'vso-node-api/WebApi';
import * as wa from 'vso-node-api/WorkItemTrackingApi';
import * as wi from 'vso-node-api/interfaces/WorkItemTrackingInterfaces';
import * as vss from 'vso-node-api/interfaces/Common/VSSInterfaces';
import * as core from 'vso-node-api/interfaces/CoreInterfaces';

var collectionUrl = "https://xxxxxx.visualstudio.com";

let token: string = "PersonalAccessToekn";

let creds = vm.getPersonalAccessTokenHandler(token);

var connection = new vm.WebApi(collectionUrl, creds); 

let vstsWI: wa.IWorkItemTrackingApi = connection.getWorkItemTrackingApi();

async function WIQLquery() {
    let teamC: core.TeamContext = {project: "", projectId: "", team: "", teamId: "" };
    let wiqls: wi.Wiql = { query: "Select [System.Id] From WorkItems Where [System.WorkItemType] = 'Task' And [System.TeamProject] = 'Project'"};
    let queryResult: wi.WorkItemQueryResult = await vstsWI.queryByWiql(wiqls, teamC);
    queryResult.workItems.forEach(s=>console.log(s.url));
}

WIQLquery();
Eddie Chen - MSFT
  • 29,708
  • 2
  • 46
  • 60
  • Is there a way to get collectionUrl,Project,ProjectId,Team and TeamId via API? Thanks. – Bandara Sep 27 '16 at 04:52
  • @BandR Check the method in CoreAPI: https://github.com/Microsoft/vsts-node-api/blob/master/api/CoreApi.ts – Eddie Chen - MSFT Sep 27 '16 at 05:16
  • My requirement is to create the work items from the build task, so I have to get the project name and collectionUrl from build api. Thanks – Bandara Sep 27 '16 at 08:43
  • @BandR If you are running it from build task, you can get the collectionUrl and project name from environment variables: SYSTEM_TEAMPROJECT and SYSTEM_TEAMFOUNDATIONCOLLECTIONURI. – Eddie Chen - MSFT Sep 27 '16 at 08:51
0

Here is how I did it, using Javascript instead of Typescript. Shout out to Eddie Chen for leading me in the right direction.

// file - models/witModel.js

var azdev = require("azure-devops-node-api");

var Model = function(){};

Model.prototype.getWiqlQuery = function(wiqlQuery, teamName){
    return new Promise(function(resolve, reject){   

        const orgUrl = process.env.ADOURI; // ex.  https://dev.azure.com/<your org>
        const token = process.env.ADOPAT;   // Your personal access token
        const teamProject = process.env.ADOPROJ;// Team Project     

        let authHandler = azdev.getPersonalAccessTokenHandler(token); 
        let connection = new azdev.WebApi(orgUrl, authHandler);

        connection.getWorkItemTrackingApi().then(function(witAPI){
            var teamContext = {project: teamProject, team: teamName };
            witAPI.queryByWiql(wiqlQuery, teamContext).then(function(queryResult){
                resolve(queryResult);
            }).catch(function(err){reject(err)});
        }).catch(function(err){
            reject(err);
        });

    });
};


module.exports = new Model();

And this was how I used it.

// usage - the above code was saved in a module called witModel.js
// feel free to put the module where you need to.
var witModel = require("./models/witModel.js");

// form query and set the value of the teame to query
var query = {query: "your wiql query"};
var team = "team name in Azure DEvops";

// call the promise and handle resolve/reject - then/catch
witModel.getWiqlQueryResuults(query,team).then(function(data){
    console.log(data);
}).catch(function(err){
    console.log(err)
});
Grizzly Peak Software
  • 1,428
  • 4
  • 15
  • 20