Nozioni di base sulle API di pianificazione di Adobe Workfront

IMPORTANT
Le informazioni contenute in questo articolo si riferiscono alla Pianificazione di Adobe Workfront, una funzionalità aggiuntiva di Adobe Workfront.
Per un elenco dei requisiti per accedere alla Pianificazione di Workfront, consulta Panoramica dell’accesso alla Pianificazione di Adobe Workfront.
Per informazioni generali su Workfront Planning, vedere Introduzione ad Adobe Workfront Planning.

L’obiettivo dell’API di pianificazione di Adobe Workfront è semplificare la creazione di integrazioni con Planning introducendo un’architettura RESTful che funziona tramite HTTP. In questo documento si presuppone che tu abbia familiarità con le risposte REST e JSON.

Per informazioni complete sul riferimento all’endpoint, sugli schemi di richiesta/risposta e sui dettagli specifici della versione, vedere la documentazione per gli sviluppatori API di Workfront Planning.

Autenticazione

L’API di pianificazione di Workfront utilizza OAuth 2.0 per l’autenticazione. Le credenziali vengono impostate tramite Adobe Developer Console.

A seconda del tipo di integrazione, sono supportati i due flussi seguenti:

  • Autenticazione server-to-server (JWT): per integrazioni automatizzate e servizi back-end senza interazione dell’utente. Utilizza le credenziali da server a server OAuth (credenziali client concesse, l’applicazione si autentica direttamente utilizzando il proprio ID client e segreto per ottenere un token di accesso, senza alcun accesso utente o passaggio di consenso).

    Per informazioni, vedere Autenticazione da server a server.

  • Autenticazione utente (flusso codice di autorizzazione): per integrazioni che agiscono per conto di un utente specifico. Utilizza le credenziali dell’app Web OAuth o dell’app a pagina singola (concessione del codice di autorizzazione: l’utente effettua l’accesso e dà il consenso, dopodiché l’applicazione riceve un codice di autorizzazione che scambia per un token di accesso).

    Per informazioni, vedere Autenticazione utente.

Per iniziare, crea un progetto in Adobe Developer Console e aggiungi Workfront Planning API per ottenere le credenziali.

Per impostare le credenziali, crea un’applicazione OAuth2 in Workfront.

Per informazioni, consulta Creare applicazioni OAuth2 per le integrazioni Workfront.

NOTE
L'endpoint /login e l'autenticazione della chiave API non sono supportati per Workfront Planning. Non utilizzare sessionID o apiKey parametri.

Controllo delle versioni API

Il controllo delle versioni dell’API di Planning viene eseguito tramite il percorso URL.

Di seguito sono elencate le versioni supportate correnti:

Versione
Data di rilascio
Versione 1
Luglio 2024
Versione 2
Maggio 2026
NOTE
Il connettore Workfront Planning per Workfront Fusion non è stato aggiornato all’API versione 2 e continuerà a utilizzare la versione 1 fino a nuovo avviso.

Per ulteriori informazioni sulle versioni supportate correnti, vedere l’articolo Documentazione per gli sviluppatori API di Workfront Planning.

È consigliabile eseguire esplicitamente il targeting di una versione in tutte le integrazioni:

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

Quando viene rilasciata una nuova versione principale, la versione precedente continuerà a essere disponibile fino a quando non viene comunicata una data di rimozione.

Segui le note sulla versione di Workfront per essere sempre informato sulle modifiche API.

Struttura degli URL e operazioni

Gli oggetti vengono manipolati inviando una richiesta HTTP al relativo URI univoco. Operazione specificata dal metodo HTTP.

Metodo
Operazione
GET
Recuperare un singolo oggetto per ID o oggetti di ricerca/elenco
POST
Crea un nuovo oggetto
PUT
Sostituire un oggetto esistente (aggiornamento completo)
PATCH
Aggiorna parzialmente un oggetto esistente (vengono modificati solo i campi forniti)
DELETE
Eliminare un oggetto
NOTE
Nota versione1: PATCH non è supportato nella versione 1. Utilizza PUT per tutti gli aggiornamenti.

Per i percorsi di endpoint completi e gli esempi di richieste/risposte, consulta il riferimento API in developer.adobe.com/wf-planning.

Codici di stato HTTP

L’API Planning restituisce i codici di stato HTTP standard:

Codice
Significato
200 OK
GET, PUT o PATCH riusciti
201 creato
POST riuscito (risorsa creata)
204 Nessun contenuto
DELETE riuscito
207 con più stati
Operazione in blocco completata con risultati misti, in cui alcuni elementi hanno avuto esito positivo e altri non sono riusciti. Per informazioni dettagliate, vedere le risposte dei singoli elementi.
400 - Richiesta non valida
Richiesta non valida. Per ulteriori informazioni consulta la risposta di errore.
401 Non autorizzato
Token di autenticazione mancante o non valido
403 - Non consentito
Autorizzazioni autenticate ma insufficienti
404 Non trovato
La risorsa non esiste
Conflitto 409
Conflitto di scrittura, la risorsa è stata modificata da un’altra richiesta. Riprova con la versione più recente.
429 Troppe richieste
Limite di frequenza superato
NOTE
Nota della versione 1: La versione 1 restituisce 200 OK per tutte le operazioni riuscite, inclusi POST e DELETE.

Gestione degli errori

L’API di Planning restituisce gli errori in un formato coerente. Ogni risposta di errore include un messaggio leggibile dall’utente, un codice di errore leggibile dal computer e un ID richiesta per l’escalation del supporto.

Esempio di risposta di errore:

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" }
  ]
}

Utilizzare errorCode (non status) per gestire gli errori a livello di programmazione. Fornisce la classificazione più specifica dell’errore.

NOTE
Nota della versione 1: le risposte di errore della versione 1 utilizzano un campo type numerico (ad esempio 40001) invece di una stringa errorCode e racchiudono i dettagli in un oggetto report anziché in un campo detail di primo livello.

Filtraggio dei record

Utilizzare il parametro filter nelle richieste di ricerca dei record per restituire solo i record che corrispondono a criteri specifici. Per le richieste POST, filter è una proprietà JSON nel corpo della richiesta. Per le richieste GET, filter è un parametro di query contenente un gruppo di filtri con codifica JSON. I filtri utilizzano una struttura composita tipizzata con operatori logici espliciti.

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

I filtri possono essere nidificati utilizzando gli operatori AND / OR per creare condizioni composte:

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
Nota versione 1: La versione 1 utilizza operatori non tipizzati Mongo in un oggetto filters. Gli operatori hanno il prefisso $ (ad esempio $and, $or, $is, $contains, $isBetween). I parametri di impaginazione (offset, limit) e recordTypeId vengono passati nel corpo della richiesta anziché come parametri di query e percorso URL.

Tipi di campi e modificatori di ricerca

È possibile utilizzare modificatori e filtri con i campi per controllare quali dati verranno restituiti nei risultati.

Per esempi, vedere la documentazione per gli sviluppatori API di Workfront Planning.

Utilizzo dei modificatori di ricerca

Workfront Planning supporta i seguenti modificatori di ricerca:

Modificatore
Esempio
Descrizione
Valori possibili
CONTAINS
{"fieldId":"<id>","condition":"CONTAINS","value":"product"}
Restituisce record il cui valore di campo contiene il filtro
"Lancio di nuovi prodotti"
DOES_NOT_CONTAIN
{"fieldId":"<id>","condition":"DOES_NOT_CONTAIN","value":"product"}
Restituisce record in cui il valore del campo non contiene il filtro
"Nuovo lancio"
È
{"fieldId":"<id>","condition":"IS","value":"new product launch"}
Restituisce record il cui valore di campo corrisponde esattamente al filtro
"Lancio di nuovi prodotti"
IS_NOT
{"fieldId":"<id>","condition":"IS_NOT","value":"product"}
Restituisce record il cui valore di campo non corrisponde esattamente al filtro
"Lancio di nuovi prodotti"
IS_EMPTY
{"fieldId":"<id>","condition":"IS_EMPTY"}
Restituisce record il cui valore di campo è vuoto
"" o null
IS_NOT_EMPTY
{"fieldId":"<id>","condition":"IS_NOT_EMPTY"}
Restituisce record il cui valore di campo non è vuoto
"Lancio di nuovi prodotti"
GREATER_THAN
{"fieldId":"<id>","condition":"GREATER_THAN","value":"10"}
Restituisce record il cui valore di campo è maggiore del filtro
"11"
GREATER_THAN_OR_EQUAL
{"fieldId":"<id>","condition":"GREATER_THAN_OR_EQUAL","value":"10"}
Restituisce record il cui valore di campo è maggiore o uguale al filtro
"10", "11"
LESS_THAN
{"fieldId":"<id>","condition":"LESS_THAN","value":"10"}
Restituisce record il cui valore di campo è minore del filtro
"9"
LESS_THAN_OR_EQUAL
{"fieldId":"<id>","condition":"LESS_THAN_OR_EQUAL","value":"10"}
Restituisce record il cui valore di campo è minore o uguale al filtro
"9", "10"
IS_BETWEEN
{"fieldId":"<id>","condition":"IS_BETWEEN","value":["2024-01-01","2024-12-31"]}
Restituisce record il cui valore di campo è compreso tra i due valori di filtro
["2024-03-01","2024-06-30"]
IS_NOT_BETWEEN
{"fieldId":"<id>","condition":"IS_NOT_BETWEEN","value":["2024-01-01","2024-12-31"]}
Restituisce record il cui valore di campo non rientra tra i due valori di filtro
["2023-01-01","2025-06-30"]
IS_AFTER
{"fieldId":"<id>","condition":"IS_AFTER","value":"2024-01-01"}
Restituisce record il cui valore del campo data è successivo al filtro
"2024-06-01"
IS_BEFORE
{"fieldId":"<id>","condition":"IS_BEFORE","value":"2024-12-31"}
Restituisce record il cui valore del campo data è precedente al filtro
"2024-06-01"
IS_ANY_OF
{"fieldId":"<id>","condition":"IS_ANY_OF","value":["Active","Planned"]}
Restituisce record il cui valore di campo corrisponde a qualsiasi valore nell'elenco dei filtri
["Attivo","Pianificato","Completo"]
IS_NONE_OF
{"fieldId":"<id>","condition":"IS_NONE_OF","value":["Active","Planned"]}
Restituisce record il cui valore di campo non corrisponde a nessuno dei valori nell'elenco dei filtri
["Attivo","Pianificato"]
HAS_ANY_OF
{"fieldId":"<id>","condition":"HAS_ANY_OF","value":["Tag1","Tag2"]}
Restituisce record il cui campo multivalore contiene uno dei valori del filtro
["Tag1","Tag2"]
HAS_ALL_OF
{"fieldId":"<id>","condition":"HAS_ALL_OF","value":["Tag1","Tag2"]}
Restituisce record il cui campo multivalore contiene tutti i valori del filtro
["Tag1","Tag2"]
IS_EXACTLY
{"fieldId":"<id>","condition":"IS_EXACTLY","value":["Tag1"]}
Restituisce record il cui campo multivalore contiene esattamente i valori del filtro e nessun altro
["Tag1"]
HAS_NONE_OF
{"fieldId":"<id>","condition":"HAS_NONE_OF","value":["Tag1"]}
Restituisce record il cui campo multivalore non contiene nessuno dei valori del filtro
["Tag1"]
NOTE
Nota della versione 1: i nomi dei modificatori V1 utilizzano $-prefixed camelCase (ad esempio $contains, $isNot, $isEmpty, $greaterThan, $greaterThanOrEqual, $lessThan, $lessThanOrEqual, $isBetween, $isNotBetween, $isAnyOf, $hasAllOf). Il comportamento di ciascun modificatore è lo stesso.

Condizioni di filtro supportate per tipo di campo

Tipo di campo
Condizioni supportate
testo, testo lungo
CONTAINS, DOES_NOT_CONTAIN, IS, IS_NOT, IS_EMPTY, IS_NOT_EMPTY
numero, percentuale, valuta
IS, IS_NOT, GREATER_THAN, GREATER_THAN_OR_EQUAL, LESS_THAN, LESS_THAN_OR_EQUAL, IS_EMPTY, IS_NOT_EMPTY
data
IS, IS_NOT, IS_AFTER, IS_BEFORE, IS_BETWEEN, IS_NOT_BETWEEN, IS_EMPTY, IS_NOT_EMPTY
selezione singola
IS, IS_NOT, IS_ANY_OF, IS_NONE_OF, IS_EMPTY, IS_NOT_EMPTY
selezione multipla, utente
HAS_ANY_OF, HAS_ALL_OF, IS_EXACTLY, HAS_NONE_OF, IS_EMPTY, IS_NOT_EMPTY
booleano
È
formula
CONTAINS, DOES_NOT_CONTAIN, IS, IS_NOT, IS_EMPTY, IS_NOT_EMPTY
creato da
IS, IS_NOT, IS_ANY_OF, IS_NONE_OF
aggiornato da
IS, IS_NOT, IS_ANY_OF, IS_NONE_OF, IS_EMPTY, IS_NOT_EMPTY
creato a
IS, IS_NOT, IS_AFTER, IS_BEFORE, IS_BETWEEN, IS_NOT_BETWEEN
update-at
IS, IS_NOT, IS_AFTER, IS_BEFORE, IS_BETWEEN, IS_NOT_BETWEEN, IS_EMPTY, IS_NOT_EMPTY
riferimento
HAS_ANY_OF, HAS_ALL_OF, IS_EXACTLY, HAS_NONE_OF, IS_EMPTY, IS_NOT_EMPTY
ricerca
Dipende dal tipo di campo collegato
NOTE
Nota della versione 1: La versione 1 utilizza nomi di operatori con prefisso $ (ad esempio $contains, $greaterThan, $isAnyOf, $hasAllOf). Il set di condizioni supportate per tipo di campo è lo stesso.

Filtrare per campi Persone

I filtri dei campi delle persone (user, created-by, updated-by, approved-by) accettano sia gli ID utente Adobe IMS che gli ID utente Workfront. Un valore di stringa semplice viene interpretato come un ID utente Adobe IMS.

Per impostare il tipo di identificatore per controllare l’ID utente di Workfront, è necessario trasmettere esplicitamente i parametri id e idType. I valori supportati per idType sono “WF” per gli ID utente di Workfront e “IMS” per gli ID utente di Adobe IMS.

{
  "filter": {
   "operator": "AND",
    "conditions": [
      {
        "fieldId": "<userFieldId>",
        "condition": "HAS_ANY_OF",
        "value": [
          { "id": "63e3b13000078c1795146248182d15dc", "idType": "WF" }
        ]
      }
    ]
  }
}
NOTE
Versione 1 nota: la versione 1 supporta solo il filtro per ID IMS degli utenti.

Filtraggio dei campi di riferimento esterni per ID esterno

I campi di riferimento esterni collegano i record a oggetti in altri sistemi Adobe (come progetti Workfront o AEM Assets). Internamente, Planning assegna gli ID record di Planning a questi oggetti. Per filtrare questi campi direttamente in base al loro ID oggetto originale, aggiungi "matchExternalId": true a una condizione di filtro.

Questo flag è valido solo per i campi di riferimento in cui referenceOptions.isExternal è true; viene ignorato per i campi di riferimento non esterni. Se non è possibile risolvere un singolo valore stringa, la richiesta non riesce con 400 Bad Request. Se viene fornito un valore di elenco, le voci non risolte passano attraverso invariate e semplicemente non corrispondono.

{
  "filter": {
    "operator": "AND",
    "conditions": [
      {
        "fieldId": "<externalReferenceFieldId>",
        "condition": "IS_ANY_OF",
        "value": [
          "5f6a4f6e00000123456789abcdef0123",
          "/content/dam/wknd/en/adventures/bali-surf-camp"
        ],
        "matchExternalId": true
      }
    ]
  }
}
NOTE
Versione 1 Nota: la versione 1 non supporta il filtro in base agli ID di oggetti esterni.

Campi di connessione esterna

I tipi di record di Planning possono ospitare campi di riferimento esterni che collegano i record a oggetti in altri sistemi Adobe anziché ad altri tipi di record di Planning.

Per creare un campo di riferimento esterno tramite API, impostare referenceOptions.recordTypeId su un nuovo campo REFERENCE sull’ID del tipo di record esterno desiderato. Il server deriva automaticamente referenceOptions.isExternal=true e i metadati di connessione (connectionName, objectName) dal tipo di record di destinazione.

I tipi di oggetti esterni supportati includono oggetti Workfront (progetti, attività, programmi, portfolio, aziende, gruppi, team, utenti) e AEM Assets (risorse, frammenti di contenuto).

NOTE
Versione 1 Nota: la versione 1 non supporta la creazione di campi di connessione esterni.

Ordinamento

Ordinare i risultati in base a qualsiasi campo includendo un array sort nella richiesta:

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

Più campi di ordinamento vengono valutati in ordine. Applica sempre un ordinamento durante la paginazione per garantire un ordinamento coerente tra le pagine.

Per raggruppare i risultati, includere una matrice di gruppi insieme all’ordinamento:

{
  "sort": [{ "fieldId": "F001", "direction": "asc" }],
  "group": [{ "fieldId": "F002", "direction": "asc" }]
}
NOTE
Versione 1 Nota: la versione 1 utilizza sorting (non sort), groupingFieldIds (array di ID campo, non group oggetti) e l'ora obsoleto rowOrderViewId per applicare l'ordine di riga di una visualizzazione esistente. Nessuno di questi parametri V1 è supportato nella versione

Proiezione sul campo

Per limitare i campi restituiti in una risposta, utilizzare i parametri di query fieldIds o fieldAliases con un elenco separato da virgole. Questo riduce le dimensioni del payload di risposta ed è consigliato per integrazioni con volumi elevati o sensibili alla latenza.

NOTE
Nota della versione 1: La versione 1 utilizza ?attributes= per la proiezione (ad esempio ?attributes=data,createdBy) anziché ?fieldIds= o ?fieldAliases=.

Paginazione

L’API di Planning supporta risposte impaginate per gestire set di dati di grandi dimensioni.

  • L’impaginazione basata su cursore viene utilizzata per aree di lavoro, tipi di record, campi e visualizzazioni. Passa un valore cursor dalla risposta precedente per recuperare la pagina successiva. Le risposte basate sul cursore includono un flag hasMore per indicare se sono presenti più pagine o meno.
  • La paginazione basata su pagina è utilizzata per la ricerca dei record. Utilizzare page e size come parametri di query. Applica sempre un ordinamento durante la paginazione per garantire un ordinamento coerente tra le pagine. Si noti che l’impaginazione è basata su zero, quindi per recuperare i risultati della seconda pagina, utilizzare “page=1” come parametro.

Ad esempio, utilizza la seguente richiesta per recuperare la seconda pagina di 500 record da una ricerca record:

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" }
  ] }
}

Tutte le risposte impaginate includono una busta strutturata che indica se sono disponibili più risultati. Applica sempre un ordinamento durante la paginazione per garantire un ordinamento coerente tra le pagine.

NOTE
Nota della versione 1: la versione 1 utilizza offset e limit sono stati passati nel corpo della richiesta (valore predefinito: 500, massimo 2.000). Per recuperare i record 2001-4000, impostare "offset": "2000", "limit": "2000" nel corpo della richiesta. La risposta restituisce una matrice di record flat con un campo totalCount.

Operazioni in blocco

L’API Planning supporta la creazione, l’aggiornamento, la correzione e l’eliminazione in blocco di record in una singola richiesta. Per i percorsi degli endpoint, i formati di richiesta e i limiti di record per operazione, fare riferimento al riferimento API in developer.adobe.com/wf-planning.

NOTE
Nota versione 1: le operazioni in blocco non sono disponibili nella versione 1.

Autorizzazioni

Le autorizzazioni per le entità vengono gestite tramite un’API di autorizzazioni dedicata, separata dagli endpoint di risorsa stessi. Questo consente di leggere le autorizzazioni correnti, gestire l’elenco di condivisione e gestire le richieste di accesso indipendentemente dalle operazioni sui dati. Per ulteriori informazioni, vedere la sezione “Riferimenti API” nell’articolo Workfront Planning API.

NOTE
Nota della versione 1: la versione 1 non espone un'API di autorizzazioni pubblica. Il livello di autorizzazione è incorporato direttamente nei DTO di risposta delle risorse.

Utilizzo dell’API di Planning con i moduli personalizzati di Workfront

È possibile chiamare l’API Planning da un campo di ricerca Esterna in un modulo personalizzato Workfront per rendere visibili i dati di Planning direttamente all’interno di oggetti Workfront. Per ulteriori informazioni, vedere Esempi del campo di ricerca esterna in un modulo personalizzato.

Risorse correlate

Per ulteriore documentazione relativa all’API, consulta anche i seguenti articoli:

recommendation-more-help
workfront-help-quicksilver