background

Work Item Yönetimi (Part 2)

Herkese Merhaba :)

Bir önceki yazımda Azure DevOps Servisine ait API lar ile yapabileceğimiz temel işlemlerden bahsetmiştim.

Bu yazıda wiql editor, query editor gibi Azure DevOps modüllerine değineceğim. Query editör aracılığı ile hazırlamış olduğumuz karmaşık sorguların sql karşılıklarını Wiql editor ile hazırlayabileceğimizi, bu sorguları da API’lar ile nasıl çalıştırabileceğimizi örnek senaryolar üzerinden aktaracağım.

Ben daha önceden kendi Azure DevOps Board’um için birkaç tane User Story tipinde work item ve bunlara ait birkaç tane Task oluşturmuştum.

Buradaki herbir user story için risk bilgileri girilmiştir.

Azure DevOps Query Editor

Azure DevOps içinde bulunan Query editörü sayesinde backlogda bulunan tüm work itemları istediğimiz şekilde listelemek mümkün. Burada kolayca sorgu oluşturabilir, oluşturmuş olduğunuz sorguları kaydedebilir, daha önce oluşturmuş olduğunuz sorguları günceleyebilir ve silebilirsiniz.

Query oluşturmak için aşağıdaki adımlar izlenmelidir.

1. Sol menü - Board - Queries - New Query diyerek yeni bir sorgu oluşturabilirsiniz.

2. Örnek bir sorgu : Work item tipi User Story olan ve Risk değeri 1-High olan work itemların getirildiği bir sorgu.

Peki biz bu sorguyu ne yapacağız?

API’lara istek gönderirken request body olarak bu sorguyu yollayacağız.

Nasıl mı?

Editörde oluşturduğumuz sorguları sql sorgusuna dönüştürürek. Bunu ise Azure DevOps’da bir extension(wiql editor) zaten bizim için yapmakta. Buda bizim işlerimizi oldukça kolaylaştırmaktadır.

WIQL (Work item query language) Editor

Bu editör Azure DevOps’da default olarak gelmediğinden marketplace üzerinden WIQL Editor extensionı yüklemeniz gerekmektedir.

WIQL Editör Extension’ı Azure DevOps’unuza aşağıdaki adımları izleyerek entegre edebilirsiniz.

Aşağıdaki link marketplace üzerinde wiql extensionı için indirme ekranına yönlendirmektedir. İndirme ekranında form üzerinden, extensionı hangi organizasyona eklemek istediğinizi sormaktadır.

https://marketplace.visualstudio.com/acquisition?itemName=ottostreifel.wiql-editor&serverKey=null

Organizasyonunuzu seçerek Install edebilirsiniz.

Proceed to organization dediğinizde sizi Azure DevOps’a yönlendirmektedir. Installation işleminden sonra Board menüsüne Wiql Playground modülü gelmiş olmalı.

Yazılan sorguları wiql’e döndürme işlemini ise aşağıdaki şekilde yapmaktayız.

Hazırlamış olduğumuz query’de üst menüden Edit query wiql derseniz size bu sorgu için hazır wiql verecektir.

WIQL’i tanımlamak istersek ; Work itemları listelemek için oluşturmuş olduğumuz queryler için bir sql language diyebiliriz.

Şimdi bu sorguyu API ile çalıştıralım. Kullanmamız gereken API aşağıdaki şekilde olmalıdır.

POST
https://dev.azure.com/{organization}/{project}/{team}/_apis/wit/wiql?api-version=5.1

Aşağıdaki scripti poweshellde çalıştırdığınızda yukarıda listelenen work itemların id ve urlleri dönecektir.

$apiadress = "https://dev.azure.com/kadriyetaylann/deneme/_apis/wit/wiql?api-version=5.1"$personalAccessToken ="2ojzcqzxxmkn6hxrt7lhog3lgfgiqxjyi5u37tcn4334xi4ofi3a"$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($personalAccessToken)"))$headers = @{authorization = "Basic $token" }$body= @"{"query": "SELECT[System.Id],[System.WorkItemType],[System.Title],[System.AssignedTo],[System.State],[System.Tags]FROM workitemsWHERE[System.TeamProject] = @projectAND [System.WorkItemType] = 'User Story'AND [Microsoft.VSTS.Common.Risk] = '1 - High'"}"@$getWits = Invoke-RestMethod -Method Post -Uri $apiadress -Body $body -ContentType "application/json" -Headers $headers$getWits.workItems

Script çalıştırıldığında çıktısı aşağıdaki çıktıya benzer bir çıktı olmalıdır.

Şimdi de bu work itemlara ait bilgileri ekrana yazdıralım.

Bir work itema ait field bilgilerini alabilmek için o work itemın id bilgisi ile aşağıdaki şekilde bir request atmalısınız.

GET
https://dev.azure.com/{organization}/{project}/_apis/wit/workitems/{id}?$expand=fields

Yukarıdaki scripte aşağıdaki scripti ekleyerek çalıştırdığınızda her bir work item için Title (‘System.Title’ ) değerleri dönecektir

foreach ($getWit in $getWits.workItems) {$witFieldsUrl = “https://dev.azure.com/kadriyetaylann/deneme/_apis/wit/workitems/" + $getWit.id + ‘?$expand=fields’$witFields = Invoke-RestMethod -Method Get -Uri $witFieldsUrl -Headers $headers$witFields.fields.’System.Title’}

Script çalıştırıldığında çıktısı aşağıdaki gibi çıktıya benzer bir çıktı olmalıdır.

Bu çıktıdaki stringler ise yukarıda query sonunda dönen work itemların title bilgileridir.

Bir work itema ait tüm field bilgilerini görüntülemek için scriptte $witFields.fields.’System.Title’ adımında field bilgisi belirtmeden $witFields.fields komutunu yazmanız yeterli olacaktır.

Şimdi de Risk değeri ‘ 1-High’ olan user story work itemlarının risk değerlerini ‘2-Medium’ yapalım.

Bir önceki yazımda bir work item field bilgisinin nasıl güncellendiğinden bahsetmiştim. Burayı atlayarak zaten gerekli tüm ayrıntılardan bahsettiğim için hazır scripti sizinle paylaşacağım.

$apiadress = "https://dev.azure.com/kadriyetaylann/deneme/_apis/wit/wiql?api-version=5.1"$personalAccessToken ="2ojzcqzxxmkn6hxrt7lhog3lgfgiqxjyi5u37tcn4334xi4ofi3a"$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($personalAccessToken)"))$headers = @{authorization = "Basic $token" }$body= @"{"query": "Select [System.Id], [System.Title], [System.State] from WorkItems where [System.TeamProject] = @project and [System.WorkItemType] = 'User Story'"}"@$getWits = Invoke-RestMethod -Method Post -Uri $apiadress -Body $body -ContentType "application/json" -Headers $headersforeach ($getwit in $getWits.workItems) {$witUrl = "https://dev.azure.com/kadriyetaylann/deneme/_apis/wit/workitems/" + $getwit.id + '?$expand=fields'$witFields = Invoke-RestMethod -Method Get -Uri $witUrl -Headers $headersif($witFields.fields.'Microsoft.VSTS.Common.Risk'.Contains('High')){$jsonBody = @(@{op = 'replace'path = '/fields/Microsoft.VSTS.Common.Risk'value = '2 - Medium'})$JSON = ConvertTo-Json $jsonBody$patchUrl = "https://dev.azure.com/kadriyetaylann/deneme/_apis/wit/workitems/" + $getwit.id + '?api-version=5.1'Invoke-RestMethod -Method Patch -Uri $patchUrl -Body $JSON -ContentType "application/json-patch+json; charset=utf-8" -Headers $headers}}

Kodu çalıştırdıktan sonra tekrardan work itemları get ettiğimizde güncellemeleri göreceğiz.

Query Editor Görüntüsü:

Görselde de görüldüğü üzere Risk fieldlarımız güncellenmiş.

NOT : Aşağıda bir work itemın temel field bilgileri bulunmaktadır.

System.Id
System.AreaId
System.AreaPath
System.TeamProject
System.NodeName
System.AreaLevel1
System.Rev
System.AuthorizedDate
System.RevisedDate
System.IterationId
System.IterationPath
System.IterationLevel1
System.WorkItemType
System.State
System.Reason
System.CreatedDate
System.CreatedBy
System.ChangedDate
System.ChangedBy
System.AuthorizedAs
System.PersonId
System.Watermark
System.CommentCount
System.Title
Microsoft.VSTS.Scheduling.RemainingWork
Microsoft.VSTS.Scheduling.OriginalEstimate
Microsoft.VSTS.Scheduling.CompletedWork
Microsoft.VSTS.Common.StateChangeDate

Scriptler’e aşağıdaki GitHub linkinden de erişebilirsiniz.

Bu yazımda Azure DevOps üzerinde Query Editor’de query nasıl oluşturulur, Wiql editor extension installation nasıl yapılır ve nasıl kullanılır, bir sorgu API ile nasıl çalıştırılır gibi soruları küçük örnekler ile açıklamaya çalıştım. Umarım faydalı bir yazı olmuştur :)

Bir sonraki yazımda görüşmek üzere :)

Reference

Nasıl yardımcı olabiliriz?