typescript - Azure DevOps REST API:s getWorkItems returnerar inte alla tillgängliga fält
DETTA kom närmast det jag står inför, men deras lösning fungerar inte. Dessutom är det 2,5 år gammalt, så kanske har det skett några ändringar i API:et, så jag ställer en ny fråga.
Här är mitt manifest:
{
"targets": [
{
"id": "Microsoft.VisualStudio.Services"
}
],
"scopes": [
"vso.work_full",
"vso.project_manage",
"vso.profile",
"vso.graph",
"vso.identity"
],
"categories": [
"Azure Boards"
],
"demands": [
"api-version/6.0"
],
...
"contributions": [
{
"id": "",
"type": "ms.vss-web.hub",
"targets": [
"ms.vss-work-web.work-hub-group"
]
}
]
}
och min kod:
import { getClient } from 'azure-devops-extension-api';
import { WorkItem, WorkItemExpand, WorkItemTrackingRestClient } from 'azure-devops-extension-api/WorkItemTracking';
export class WorkItemsService {
...
static async getWorkItems(ids: number[], projectId: string): Promise<WorkItem[]> {
const client = getClient(WorkItemTrackingRestClient);
...
client.getWorkItems(ids.slice(...), projectId, undefined, undefined, WorkItemExpand.All));
...
}
}
Jag är:
- använder WorkItemTrackingRestClient:s
getWorkItems-metod se - ange
WorkItemExpand.Alli förfrågan - inte lista några fältnamn i förfrågan
- inställning
vso.work_fulli manifestet se
Men jag får bara tillbaka dessa fält:
"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.IterationLevel2": "",
"System.WorkItemType": "",
"System.State": "",
"System.Reason": "",
"System.AssignedTo": "",
"System.CreatedDate": "",
"System.CreatedBy": "",
"System.ChangedDate": "",
"System.ChangedBy": "",
"System.AuthorizedAs": "",
"System.PersonId": "",
"System.Watermark": "",
"System.CommentCount": "",
"System.Title": "",
"Microsoft.VSTS.Common.StateChangeDate": "",
"Microsoft.VSTS.Common.ActivatedDate": "",
"Microsoft.VSTS.Common.ActivatedBy": "",
"Microsoft.VSTS.Common.Priority": "",
"System.Parent": ""
Men intressant nog, när jag lägger in URL:en från ApiWorkItem._links.fields i en webbläsare får jag en enorm datasats med alla fält jag är intresserad av och mer därtill, liknande detta. Ett exempel är Microsoft.VSTS.Scheduling.xxxx. I den inbyggda metodens data syns det inte alls, men i JSON som returneras av URL:en finns det en massa fält.
När jag istället för undefined skriver till exempel Effort som i Microsoft.VSTS.Scheduling.Effort, så här
client.getWorkItems(ids.slice(...), projectId, ['Effort']);
resultatens fält visar sig vara tomma.
Jag har inte lust att göra hundratals API-anrop för att få de uppgifter jag behöver från arbetsobjektens URL:er. Vad missar jag?
Jag uppskattar alla som har läst så här långt.
Svar #1
Svarar på min egen fråga för att förhindra att slösa bort någon annans tid. Ett par observationer som bidrog till den perfekta stormen av missförstånd:
- Azure returnerar bara fält som har data
ApiWorkItem._links.fieldslistar endast deklarerade fält i projektet och tillhandahåller ingen datagetWorkItemsBatchochgetWorkItemsär två sidor av samma mynt, och returnerar samma uppsättning data- i
fields-parametern för nämnda metoder krävs fältets fullareferenceName, t.ex.Microsoft.VSTS.Scheduling.OriginalEstimateoch inte baraOriginalEstimate - och viktigast av allt måste man se till att de kontrollerar mot ett arbetsobjekt som verkligen har data i de fält de behöver
Allt fungerar som det ska..
Svar #2
Såvitt jag förstår försöker du använda denna metod: https://learn.microsoft.com/en-us/javascript/api/azure-devops-extension-api/workitemtrackingrestclient#azure-devops-extension-api-workitemtrackingrestclient-getworkitems
- Denna metod returnerar endast kärnfält.
- WorkItemExpand.All expanderar endast referenser (länkar till andra arbetsobjekt, definitioner) av ett arbetsobjekt.
- Jag tror att metoden är baserad på följande REST-API: Hämta arbetsobjekt i batch
Du kan hitta ett rått exempel på hur man använder det (Hämta lista över arbetsobjekt för specifika fält):
{
"ids": [
297,
299,
300
],
"fields": [
"System.Id",
"System.Title",
"System.WorkItemType",
"Microsoft.VSTS.Scheduling.RemainingWork"
]
}
