Grunderna i Adobe Workfront Planning API

IMPORTANT
Informationen i den här artikeln handlar om Adobe Workfront Planning, en extrafunktion från Adobe Workfront.
En lista över krav för åtkomst till Workfront Planning finns i Åtkomstöversikt för Adobe Workfront Planning.
Allmän information om Workfront Planning finns i Kom igång med Adobe Workfront Planning.

Målet med Adobe Workfront Planning API är att förenkla byggintegreringen med Planning genom att införa en RESTful-arkitektur som fungerar över HTTP. Det här dokumentet förutsätter att du känner till REST- och JSON-svaren.

Fullständig slutpunktsreferens, fråge-/svarsscheman och versionsspecifik information finns i dokumentationen för Workfront Planning API-utvecklare.

Autentisering

Workfront Planning API använder OAuth 2.0 för autentisering. Autentiseringsuppgifterna konfigureras via Adobe Developer Console.

Vi stöder följande två flöden beroende på din integrationstyp:

  • Server-till-server-autentisering (JWT): För automatiserade integreringar och backend-tjänster utan användarinteraktion. Använder OAuth Server-till-Server-autentiseringsuppgifter (klientautentiseringsuppgifter beviljas - programmet autentiseras direkt med sitt klient-ID och hemlighet för att erhålla en åtkomsttoken, utan användarinloggning eller medgivande).

    Mer information finns i Autentisering från server till server.

  • Användarautentisering (Authorization Code flow): för integreringar som agerar för en viss användares räkning. Använder autentiseringsuppgifter för OAuth Web App eller Single Page App (behörighetskod - användaren loggar in och godkänner, och därefter får ditt program en auktoriseringskod som det utbyter för en åtkomsttoken).

    Mer information finns i Användarautentisering.

Du kommer igång genom att skapa ett projekt i Adobe Developer Console och lägga till Workfront Planning API för att få dina inloggningsuppgifter.

Skapa ett OAuth2-program i Workfront om du vill konfigurera inloggningsuppgifter.

Mer information finns i Skapa OAuth2-program för Workfront-integreringar.

NOTE
Autentiseringen av slutpunkten /login och API-nyckeln stöds inte för Workfront Planning. Använd inte parametrarna sessionID eller apiKey.

API-versionshantering

Planerings-API:t versionshanteras via URL-sökvägen.

Följande versioner stöds för närvarande:

Version
Releasedatum
Version 1
Juli 2024
Version 2
Maj 2026

Mer information om de aktuella versionerna som stöds finns i artikeln Workfront Planning API developer documentation.

Vi rekommenderar att ni uttryckligen inriktar er på en version i alla integreringar:

https://{customer-domain}/maestro/api/v2/...

När en ny större version släpps kommer den tidigare versionen att vara tillgänglig tills ett utgått.

Följ versionsinformationen för Workfront för att få information om API-ändringar.

URL-struktur och -åtgärder

Objekten ändras genom att en HTTP-begäran skickas till deras unika URI. Åtgärden anges av HTTP-metoden.

Metod
Åtgärd
GET
Hämta ett enskilt objekt efter ID eller sök-/listobjekt
POST
Skapa ett nytt objekt
PUT
Ersätta ett befintligt objekt (fullständig uppdatering)
PATCH
Uppdatera ett befintligt objekt delvis (endast angivna fält ändras)
DELETE
Ta bort ett objekt
NOTE
Versionskommentar: PATCH stöds inte i version 1. Använd PUT för alla uppdateringar.

Fullständiga slutpunktssökvägar och exempel på begäran/svar finns i API-referensendeveloper.adobe.com/wf-planning.

HTTP-statuskoder

Planerings-API returnerar standard-HTTP-statuskoder:

Code
Betydelse
200 OK
GET, PUT eller PATCH lyckades
201 skapad
POST (resurs skapad) lyckades
204 Inget innehåll
DELETE lyckades
207 Multi-Status
Massåtgärden har slutförts med blandade resultat, där vissa objekt lyckades och vissa misslyckades. Mer information finns i enskilda objektsvar.
400 Ogiltig begäran
Ogiltig begäran - mer information finns i felsvaret
401 Obehörig
Autentiseringstoken saknas eller är ogiltig
403 Förbjuden
Autentiserad men inte tillräcklig behörighet
404 Hittades inte
Resursen finns inte
409 Konflikt
Skrivkonflikt. Resursen ändrades av en annan begäran. Försök igen med den senaste versionen.
429 För många begäranden
Hastighetsgränsen har överskridits
NOTE
Versionsanmärkning: Version 1 returnerar 200 OK för alla slutförda åtgärder, inklusive POST och DELETE.

Felhantering

Planerings-API returnerar fel i ett konsekvent format. Varje felsvar innehåller ett läsbart meddelande, en maskinläsbar felkod och ett begärande-ID för eskalering av support.

Exempel på felsvar:

json
{
  "title": "Validation failed",
  "status": 400,
  "detail": "Request validation failed. See 'errors' for details.",
  "errorCode": "VALIDATION_FAILED",
  "requestId": "req-123",
  "errors": [
    { "field": "name", "message": "must not be blank" }
  ]
}

Använd errorCode (inte status) för att köra programmatisk felhantering. Det ger den mest specifika klassificeringen av felet.

NOTE
Versionskommentar: Felsvar i version 1 använder ett numeriskt type-fält (t.ex. 40001) i stället för en sträng errorCode och radbryt detaljer i ett report -objekt i stället för i ett detail -fält på översta nivån.

Filtrera poster

Använd parametern filter i postsökningsbegäranden om du bara vill returnera poster som matchar specifika villkor. För POST-begäranden är filter en JSON-egenskap i begärandetexten. För GET-begäranden är filter en frågeparameter som innehåller en JSON-kodad filtergrupp. För filter används en typbestämd sammansatt struktur med explicita logiska operatorer.

json
{
  "filter": {
    "operator": "AND",
    "conditions": [
      { "fieldId": "<fieldId>", "condition": "IS", "value": "Active" },
      { "fieldId": "<fieldId>", "condition": "CONTAINS", "value": "marketing" }
    ]
  }
}

Filter kan kapslas med operatorerna AND / OR för att skapa sammansatta villkor:

json
{
  "filter": {
    "operator": "OR",
    "conditions": [
      {
        "operator": "AND",
        "conditions": [
          { "fieldId": "<fieldId>", "condition": "BETWEEN", "value": ["2024-03-31T20:00:00.000Z", "2024-04-01T20:00:00.000Z"] },
          { "fieldId": "<fieldId>", "condition": "IS", "value": "active" }
        ]
      },
      {
        "operator": "AND",
        "conditions": [
          { "fieldId": "<fieldId>", "condition": "IS_BETWEEN", "value": ["2024-04-15T00:00:00.000Z", "2024-04-16T00:00:00.000Z"] },
          { "fieldId": "<fieldId>", "condition": "IS", "value": "planned" }
        ]
      }
    ]
  }
}
NOTE
Anm. 1 för version 1: Version 1 använder operatorer av monotyp i ett filters -objekt. Operatorer har prefix med $ (t.ex. $and, $or, $is, $contains, $isBetween). Sidnumreringsparametrarna (offset, limit) och recordTypeId skickas i begärandetexten i stället för som URL-sökväg och frågeparametrar.

Fälttyper och sökmodifierare

Du kan använda modifierare och filter med fält för att styra vilka data som returneras i resultatet.

Se till exempel Utvecklardokumentationen för Workfront Planning API.

Använda sökmodifierare

Workfront Planning stöder följande sökmodifierare:

Modifierare
Exempel
Beskrivning
Möjliga värden
INNEHÅLLER
{"fieldId":"<id>","condition":"CONTAINS","value":"product"}
Returnerar poster vars fältvärde innehåller filtret
"Ny produktlansering"
DOES_NOT_CONTAIN
{"fieldId":"<id>","condition":"DOES_NOT_CONTAIN","value":"product"}
Returnerar poster där fältvärdet inte innehåller filtret
"New Launch"
ÄR
{"fieldId":"<id>","condition":"IS","value":"new product launch"}
Returnerar poster vars fältvärde exakt matchar filtret
"Ny produktlansering"
IS_NOT
{"fieldId":"<id>","condition":"IS_NOT","value":"product"}
Returnerar poster vars fältvärde inte matchar filtret exakt
"Ny produktlansering"
IS_EMPTY
{"fieldId":"<id>","condition":"IS_EMPTY"}
Returnerar poster vars fältvärde är tomt
"" eller null
IS_NOT_EMPTY
{"fieldId":"<id>","condition":"IS_NOT_EMPTY"}
Returnerar poster vars fältvärde inte är tomt
"Ny produktlansering"
GREATER_THAN
{"fieldId":"<id>","condition":"GREATER_THAN","value":"10"}
Returnerar poster vars fältvärde är större än filtret
"11"
GREATER_THAN_OR_EQUAL
{"fieldId":"<id>","condition":"GREATER_THAN_OR_EQUAL","value":"10"}
Returnerar poster vars fältvärde är större än eller lika med filtret
"10", "11"
LESS_THAN
{"fieldId":"<id>","condition":"LESS_THAN","value":"10"}
Returnerar poster vars fältvärde är mindre än filtret
"9"
LESS_THAN_OR_EQUAL
{"fieldId":"<id>","condition":"LESS_THAN_OR_EQUAL","value":"10"}
Returnerar poster vars fältvärde är mindre än eller lika med filtret
"9", "10"
IS_BETWEEN
{"fieldId":"<id>","condition":"IS_BETWEEN","value":["2024-01-01","2024-12-31"]}
Returnerar poster vars fältvärde ligger mellan de två filtervärdena
["2024-03-01","2024-06-30"]
IS_NOT_BETWEEN
{"fieldId":"<id>","condition":"IS_NOT_BETWEEN","value":["2024-01-01","2024-12-31"]}
Returnerar poster vars fältvärde inte hamnar mellan de två filtervärdena
["2023-01-01","2025-06-30"]
IS_AFTER
{"fieldId":"<id>","condition":"IS_AFTER","value":"2024-01-01"}
Returnerar poster vars datumfältvärde är efter filtret
"2024-06-01"
IS_BEFORE
{"fieldId":"<id>","condition":"IS_BEFORE","value":"2024-12-31"}
Returnerar poster vars datumfältvärde är före filtret
"2024-06-01"
IS_ANY_OF
{"fieldId":"<id>","condition":"IS_ANY_OF","value":["Active","Planerad"]}
Returnerar poster vars fältvärde matchar alla värden i filterlistan
["Aktiv","Planerad","Fullständig"]
IS_NONE_OF
{"fieldId":"<id>","condition":"IS_NONE_OF","value":["Active","Planerad"]}
Returnerar poster vars fältvärde inte matchar något av värdena i filterlistan
["Aktiv","Planerad"]
HAS_ANY_OF
{"fieldId":"<id>","condition":"HAS_ANY_OF","value":["Tag1","Tag2"]}
Returnerar poster vars fält med flera värden innehåller något av filtervärdena
["Tag1","Tag2"]
HAS_ALL_OF
{"fieldId":"<id>","condition":"HAS_ALL_OF","value":["Tag1","Tag2"]}
Returnerar poster vars fält med flera värden innehåller alla filtervärden
["Tag1","Tag2"]
IS_EXACTLY
{"fieldId":"<id>","condition":"IS_EXACTLY","value":["Tag1"]}
Returnerar poster vars fält med flera värden innehåller exakt filtervärdena och inga andra
["Tag1"]
HAS_NONE_OF
{"fieldId":"<id>","condition":"HAS_NONE_OF","value":["Tag1"]}
Returnerar poster vars fält med flera värden inte innehåller något av filtervärdena
["Tag1"]
NOTE
Obs! Version 1: V1-modifierarnamn använder $-prefixed camelCase (t.ex. $contains, $isNot, $isEmpty, $greaterThan, $greaterThanOrEqual, $lessThan, $lessThanOrEqual, $isBetween, $isNotBetween, $isAnyOf, $hasAllOf). Beteendet för varje modifierare är detsamma.

Filtervillkor som stöds per fälttyp

Fälttyp
Villkor som stöds
text, lång text
INNEHÅLLER, DOES_NOT_CONTAIN, IS, IS_NOT, IS_EMPTY, IS_NOT_EMPTY
tal, procent, valuta
IS, IS_NOT, GREATER_THAN, GREATER_THAN_OR_EQUAL, LESS_THAN, LESS_THAN_OR_EQUAL, IS_EMPTY, IS_NOT_EMPTY
datum
IS, IS_NOT, IS_AFTER, IS_BEFORE, IS_BETWEEN, IS_NOT_BETWEEN, IS_EMPTY, IS_NOT_EMPTY
enkelval
IS, IS_NOT, IS_ANY_OF, IS_NONE_OF, IS_EMPTY, IS_NOT_EMPTY
flerval, användare
HAS_ANY_OF, HAS_ALL_OF, IS_EXACTLY, HAS_NONE_OF, IS_EMPTY, IS_NOT_EMPTY
boolesk
ÄR
formel
INNEHÅLLER, DOES_NOT_CONTAIN, IS, IS_NOT, IS_EMPTY, IS_NOT_EMPTY
skapad av
IS, IS_NOT, IS_ANY_OF, IS_NONE_OF
uppdaterad
IS, IS_NOT, IS_ANY_OF, IS_NONE_OF, IS_EMPTY, IS_NOT_EMPTY
created-at
IS, IS_NOT, IS_AFTER, IS_BEFORE, IS_BETWEEN, IS_NOT_BETWEEN
uppdaterad
IS, IS_NOT, IS_AFTER, IS_BEFORE, IS_BETWEEN, IS_NOT_BETWEEN, IS_EMPTY, IS_NOT_EMPTY
referens
HAS_ANY_OF, HAS_ALL_OF, IS_EXACTLY, HAS_NONE_OF, IS_EMPTY, IS_NOT_EMPTY
sökning
Beroende på den länkade fälttypen
NOTE
Version 1 Obs! Version 1 använder $-prefix-operatornamn (t.ex. $contains, $greaterThan, $isAnyOf, $hasAllOf). De villkor som stöds per fälttyp är samma.

Filtrera efter personfält

Personfältsfilter (user, created-by, updated-by, approved-by) accepterar både användar-ID:n för Adobe IMS och användar-ID:n för Workfront. Ett oformaterat strängvärde tolkas som ett användar-ID för Adobe IMS.

Om du vill ställa in identifierartypen för att kontrollera Workfront användar-ID:t måste du skicka id- och idType-parametrarna explicit. Värden som stöds för idType är WF för Workfront användar-ID och IMS för Adobe IMS användar-ID.

{
  "filter": {
   "operator": "AND",
    "conditions": [
      {
        "fieldId": "<userFieldId>",
        "condition": "HAS_ANY_OF",
        "value": [
          { "id": "63e3b13000078c1795146248182d15dc", "idType": "WF" }
        ]
      }
    ]
  }
}
NOTE
Obs! Version 1: V1 har bara stöd för filtrering med användarens IMS-ID.

Filtrera externa referensfält efter externt ID

Externa referensfält länkar poster till objekt i andra Adobe-system (till exempel Workfront-projekt eller AEM Assets). Internt tilldelas dessa objekt ID:n för planeringspost i Planning. Om du vill filtrera sådana fält direkt efter deras ursprungliga objekt-ID lägger du till "matchExternalId": true i ett filtervillkor.

Den här flaggan är bara giltig för referensfält där referenceOptions.isExternal är true; den ignoreras för icke-externa referensfält. Om ett enskilt strängvärde inte kan matchas misslyckas begäran med 400 Bad Request. Om ett listvärde anges skickas olösta poster som oförändrade och matchar helt enkelt inte.

{
  "filter": {
    "operator": "AND",
    "conditions": [
      {
        "fieldId": "<externalReferenceFieldId>",
        "condition": "IS_ANY_OF",
        "value": [
          "5f6a4f6e00000123456789abcdef0123",
          "/content/dam/wknd/en/adventures/bali-surf-camp"
        ],
        "matchExternalId": true
      }
    ]
  }
}
NOTE
Obs! Version 1: V1 stöder inte filtrering med externa objekt-ID:n.

Externa anslutningsfält

Planeringsposttyper kan vara värd för externa referensfält som länkar poster till objekt i andra Adobe-system i stället för andra typer av planeringsposter.

Om du vill skapa ett externt referensfält via API anger du referenceOptions.recordTypeId i ett nytt REFERENCE-fält till ID:t för den önskade externa posttypen. Servern härleder automatiskt referenceOptions.isExternal=true och anslutningsmetadata (connectionName, objectName) från målposttypen.

Externa objekttyper som stöds är bland annat Workfront-objekt (projekt, uppgifter, program, portföljer, företag, grupper, team, användare) och AEM Assets (resurser, innehållsfragment).

NOTE
Obs! Version 1: V1 stöder inte skapande av externa anslutningsfält.

Sortering

Sortera resultat efter fält genom att inkludera en sort-array i din begäran:

json
{
  "sort": [
    { "fieldId": "F6527ecb25df57c441d92b9fc", "direction": "asc" },
    { "fieldId": "F658afcbd4a0273c67c346fd5", "direction": "desc" }
  ]
}

Flera sorteringsfält utvärderas i ordning. Använd alltid en sortering vid sidnumrering för att säkerställa konsekvent ordning över sidorna.

Om du vill gruppera resultat inkluderar du en grupparray vid sorteringen:

{
  "sort": [{ "fieldId": "F001", "direction": "asc" }],
  "group": [{ "fieldId": "F002", "direction": "asc" }]
}
NOTE
Obs! Version 1: V1 använder sorting (inte sort), groupingFieldIds (matris med fält-ID:n, inte group objekt) och den nu föråldrade rowOrderViewId för att tillämpa en befintlig vyns radordning. Ingen av dessa V1-parametrar stöds i version

Fältprojektion

Om du vill begränsa vilka fält som returneras i ett svar använder du frågeparametrarna fieldIds eller fieldAliases med en kommaavgränsad lista. Detta minskar svarsnyttolastens storlek och rekommenderas för integreringar med stora volymer eller latenskänsliga.

NOTE
Version 1 Obs! Version 1 använder ?attributes= för projektion (t.ex. ?attributes=data,createdBy) i stället för ?fieldIds= eller ?fieldAliases=.

Sidnumrering

Planerings-API:t stöder sidnumrerade svar för att hantera stora datamängder.

  • Markörbaserad sidnumrering används för arbetsytor, posttyper, fält och vyer. Skicka ett cursor-värde från föregående svar för att hämta nästa sida. Markörbaserade svar innehåller flaggan hasMore som anger om det finns fler sidor eller inte.
  • Sidbaserad sidnumrering används för postsökning. Använd page och size som frågeparametrar. Använd alltid en sortering vid sidnumrering för att säkerställa konsekvent ordning över sidorna. Observera att sidnumreringen är nollbaserad, så om du vill hämta resultatet av den andra sidan använder du page=1 som parameter.

Använd till exempel följande begäran för att hämta den andra sidan med 500 poster från en postsökning:

POST /v2/record-types/{recordTypeId}/records/search?page=1&size=500
{
  "sort": [{ "fieldId": "F6527ecb25df57c441d92b9fc", "direction": "asc" }],
  "filter": { "operator": "AND", "conditions": [
    { "fieldId": "<fieldId>", "condition": "IS", "value": "active" }
  ] }
}

Alla sidnumrerade svar innehåller ett strukturerat kuvert som anger om fler resultat är tillgängliga. Använd alltid en sortering vid sidnumrering för att säkerställa konsekvent ordning över sidorna.

NOTE
Anm. 1 för version 1: V1 använder offset och limit har skickats i begärandetexten (standard 500, max 2 000). Om du vill hämta poster 2001-4000 anger du offset: "2000", "limit": "2000" i begärandetexten. Svaret returnerar en platt postarray med ett totalCount-fält.

Massåtgärder

Planerings-API:t har stöd för att skapa, uppdatera, korrigera och ta bort poster i en enda begäran. Mer information om slutpunktssökvägar, begärandeformat och postbegränsningar per åtgärd finns i API-referensendeveloper.adobe.com/wf-planning .

NOTE
Versionskommentar: Massåtgärder är inte tillgängliga i version 1.

Behörigheter

Behörigheter till entiteter hanteras med ett dedikerat behörighets-API, som är skilt från resursslutpunkterna. Detta gör att du kan läsa aktuella behörigheter, hantera delningslistan och hantera åtkomstbegäranden oberoende av dataåtgärder. Mer information finns i avsnittet API-referenser i artikeln Workfront Planning API.

NOTE
Anm. 1: Version 1 visar inte ett publikt behörighets-API. Behörighetsnivån är inbäddad direkt i DTO för resurssvar.

Använda Planning API med anpassade Workfront-formulär

Du kan anropa Planning API från ett fält för extern sökning i ett anpassat Workfront-formulär för att visa planeringsdata direkt i Workfront-objekt. Mer information finns i Exempel på ett externt sökfält i ett anpassat formulär.

Relaterade resurser

Mer API-relaterad dokumentation finns även i följande artiklar:

recommendation-more-help
workfront-help-quicksilver