Adobe Workfront Planning API基本需知

IMPORTANT
本文資訊說明Adobe Workfront的額外功能Adobe Workfront Planning。
如需存取Workfront Planning的需求清單,請參閱Adobe Workfront Planning存取總覽
如需Workfront Planning的一般資訊,請參閱開始使用Adobe Workfront Planning

Adobe Workfront Planning API的目標是引入透過HTTP運作的RESTful架構,簡化與Planning的整合建置。 本檔案假設您熟悉REST和JSON回應。

如需完整的端點參考、要求/回應結構描述和版本特定詳細資訊,請參閱Workfront Planning API開發人員檔案

Authentication

Workfront Planning API使用OAuth 2.0進行驗證。 認證是透過Adobe Developer Console設定的。

根據您的整合型別,我們支援下列兩個流程:

  • 伺服器對伺服器驗證(JWT):針對沒有使用者互動的自動整合與後端服務。 使用OAuth伺服器對伺服器認證(使用者端認證授予 — 您的應用程式會使用其使用者端ID和密碼直接驗證,以取得存取權杖,無需使用者登入或同意步驟)。

    如需詳細資訊,請參閱伺服器對伺服器驗證

  • 使用者驗證(授權碼流程):代表特定使用者執行整合作業。 使用OAuth網頁應用程式或單頁應用程式認證(授權代碼授予 — 使用者登入並同意,之後您的應用程式會收到授權代碼,然後交換存取權杖)。

    如需詳細資訊,請參閱使用者驗證

若要開始使用,請在Adobe Developer Console中建立專案,並新增Workfront Planning API以取得您的認證。

若要設定認證,請在Workfront中建立OAuth2應用程式。

如需詳細資訊,請參閱為Workfront整合建立OAuth2應用程式

NOTE
Workfront Planning不支援/login端點和API金鑰驗證。 請勿使用sessionIDapiKey引數。

API版本設定

Planning API是透過URL路徑建立版本。

以下是目前支援的版本:

版本
發行日期
第1版
2024 年 7 月
第2版
2026年5月
NOTE
適用於Workfront Fusion的Workfront Planning聯結器尚未更新為API版本2,在進一步通知之前,它將繼續使用版本1。

如需目前支援版本的詳細資訊,請參閱文章Workfront Planning API開發人員檔案

我們建議在所有整合中明確鎖定版本:

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

發行新的主要版本時,在傳達淘汰日期之前,將繼續提供舊版。

請依照Workfront發行說明操作,及時瞭解API變更。

URL結構和操作

透過傳送HTTP請求至物件的唯一URI來控制物件。 操作由HTTP方法指定。

方法
作業
GET
依ID擷取單一物件,或搜尋/列出物件
張貼
建立新物件
PUT
取代現有物件(完整更新)
PATCH
部分更新現有物件(僅修改提供的欄位)
DELETE
刪除物件
NOTE
版本1不支援 PATCH。 使用PUT進行所有更新。

如需完整的端點路徑和要求/回應範例,請參閱developer.adobe.com/wf-planning上的​API參考

HTTP狀態碼

Planning API會傳回標準HTTP狀態代碼:

程式碼
含義
200 OK
成功的GET、PUT或PATCH
201已建立
成功發佈(已建立資源)
204無內容
成功的DELETE
207多重狀態
大量作業已完成,但結果有好有壞,有些專案成功,有些專案失敗。 如需詳細資訊,請檢視個別專案回應。
400錯誤請求
無效的請求 — 如需詳細資料,請參閱錯誤回應
401未獲授權
缺少驗證權杖或驗證權杖無效
403禁止
已驗證但許可權不足
404找不到
資源不存在
409衝突
寫入衝突,資源已由另一個請求修改。 請使用最新版本重試。
429太多請求
超出速率限制
NOTE
第1版備註:​第1版為所有成功的作業(包括POST和DELETE)傳回200 OK

錯誤處理

Planning API會以一致的格式傳回錯誤。 每個錯誤回應都包含可讀取的訊息、機器可讀取的錯誤代碼以及支援升級的請求ID。

範例錯誤回應:

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

使用errorCode (非status)來驅動程式化錯誤處理。 它提供最具體的失敗分類。

NOTE
第1版備註:​第1版錯誤回應使用數值type欄位(例如40001)而非字串errorCode,並將詳細資料包裝在report物件而非最上層detail欄位中。

篩選記錄

在記錄搜尋要求中使用filter引數,僅傳回符合特定條件的記錄。 對於POST要求,filter是要求內文中的JSON屬性。 對於GET要求,filter是包含JSON編碼篩選群組的查詢引數。 篩選器使用具有明確邏輯運運算元的型別化複合結構。

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

篩選器可以使用AND / OR運運算元巢狀化以建置複合條件:

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
第1版備註:​第1版在filters物件中使用Mongo樣式無型別運運算元。 運運算元以$為前置詞(例如$and$or$is$contains$isBetween)。 分頁引數(offsetlimit)和recordTypeId是在要求內文中傳遞,而非作為URL路徑和查詢引數。

欄位型別和搜尋修飾詞

您可以使用包含欄位的修飾詞和篩選器來控制要在結果中傳回哪些資料。

如需範例,請參閱Workfront Planning API開發人員檔案

使用搜尋修飾元

Workfront Planning支援下列搜尋修飾元:

修飾詞
範例
說明
可能的值
CONTAINS
{"fieldId":"<id>","condition":"CONTAINS","value":"product"}
傳回其欄位值包含篩選器的記錄
"新產品上市"
DOES_NOT_CONTAIN
{"fieldId":"<id>","condition":"DOES_NOT_CONTAIN","value":"product"}
傳回欄位值不含篩選器的記錄
"新增啟動項"
{"fieldId":"<id>","condition":"IS","value":"new product launch"}
傳回其欄位值完全符合篩選器的記錄
"新產品上市"
IS_NOT
{"fieldId":"<id>","condition":"IS_NOT","value":"product"}
傳回欄位值不完全符合篩選器的記錄
"新產品上市"
IS_EMPTY
{"fieldId":"<id>","condition":"IS_EMPTY"}
傳回欄位值空白的記錄
「」或null
IS_NOT_EMPTY
{"fieldId":"<id>","condition":"IS_NOT_EMPTY"}
傳回欄位值非空白的記錄
"新產品上市"
GREATER_THAN
{"fieldId":"<id>","condition":"GREATER_THAN","value":"10"}
傳回欄位值大於篩選器的記錄
"11"
GREATER_THAN_OR_EQUAL
{"fieldId":"<id>","condition":"GREATER_THAN_OR_EQUAL","value":"10"}
傳回欄位值大於或等於篩選器的記錄
"10", "11"
LESS_THAN
{"fieldId":"<id>","condition":"LESS_THAN","value":"10"}
傳回欄位值小於篩選器的記錄
"9"
LESS_THAN_OR_EQUAL
{"fieldId":"<id>","condition":"LESS_THAN_OR_EQUAL","value":"10"}
傳回欄位值小於或等於篩選器的記錄
"9", "10"
IS_BETWEEN
{"fieldId":"<id>","condition":"IS_BETWEEN","value":["2024-01-01","2024-12-31"]}
傳回欄位值介於兩個篩選值之間的記錄
["2024-03-01","2024-06-30"]
IS_NOT_BETWEEN
{"fieldId":"<id>","condition":"IS_NOT_BETWEEN","value":["2024-01-01","2024-12-31"]}
傳回欄位值未介於兩個篩選值之間的記錄
["2023-01-01","2025-06-30"]
IS_AFTER
{"fieldId":"<id>","condition":"IS_AFTER","value":"2024-01-01"}
傳回日期欄位值在篩選器之後的記錄
"2024-06-01"
IS_BEFORE
{"fieldId":"<id>","condition":"IS_BEFORE","value":"2024-12-31"}
傳回日期欄位值在篩選器之前的記錄
"2024-06-01"
IS_ANY_OF
{"fieldId":"<id>","condition":"IS_ANY_OF","value":["Active","Planned"]}
傳回其欄位值符合篩選器清單中任何值的記錄
["Active","Planned","Complete"]
IS_NONE_OF
{"fieldId":"<id>","condition":"IS_NONE_OF","value":["Active","Planned"]}
傳回欄位值不符合篩選器清單中所有值的記錄
[「作用中」,「計畫」]
HAS_ANY_OF
{"fieldId":"<id>","condition":"HAS_ANY_OF","value":["Tag1","Tag2"]}
傳回多值欄位包含任何篩選值的記錄
["Tag1","Tag2"]
HAS_ALL_OF
{"fieldId":"<id>","condition":"HAS_ALL_OF","value":["Tag1","Tag2"]}
傳回多值欄位包含所有篩選值的記錄
["Tag1","Tag2"]
IS_EXACTLY
{"fieldId":"<id>","condition":"IS_EXACTLY","value":["Tag1"]}
傳回其多值欄位只包含篩選值而不包含其他值的記錄
["Tag1"]
HAS_NONE_OF
{"fieldId":"<id>","condition":"HAS_NONE_OF","value":["Tag1"]}
傳回多值欄位不含任何篩選值的記錄
["Tag1"]
NOTE
版本1備註: V1修飾詞名稱使用$-prefixed camelCase (例如$contains$isNot$isEmpty$greaterThan$greaterThanOrEqual$lessThan$lessThanOrEqual$isBetween$isNotBetween$isAnyOf$hasAllOf)。 每個修飾元的行為都相同。

依欄位型別支援的篩選條件

欄位型別
支援的條件
文字,長文字
包含、DOES_NOT_CONTAIN、IS、IS_NOT、IS_EMPTY、IS_NOT_EMPTY
數字,百分比,貨幣
IS、IS_NOT、GREATER_THAN、GREATER_THAN_OR_EQUAL、LESS_THAN_OR_EQUAL、IS_EMPTY、IS_NOT_EMPTY
日期
IS、IS_NOT、IS_AFTER、IS_BEFORE、IS_BETWEEN、IS_NOT_BETWEEN、IS_EMPTY、IS_NOT_EMPTY
單選
IS、IS_NOT、IS_ANY_OF、IS_NONE_OF、IS_EMPTY、IS_NOT_EMPTY
多選,使用者
HAS_ANY_OF, HAS_ALL_OF, IS_EXACTLY, HAS_NONE_OF, IS_EMPTY, IS_NOT_EMPTY
布林值
公式
包含、DOES_NOT_CONTAIN、IS、IS_NOT、IS_EMPTY、IS_NOT_EMPTY
建立者
IS、IS_NOT、IS_ANY_OF、IS_NONE_OF
更新者
IS、IS_NOT、IS_ANY_OF、IS_NONE_OF、IS_EMPTY、IS_NOT_EMPTY
建立時間
IS、IS_NOT、IS_AFTER、IS_BEFORE、IS_BEGIN、IS_NOT_BETWEEN
更新時間
IS、IS_NOT、IS_AFTER、IS_BEFORE、IS_BETWEEN、IS_NOT_BETWEEN、IS_EMPTY、IS_NOT_EMPTY
參考
HAS_ANY_OF, HAS_ALL_OF, IS_EXACTLY, HAS_NONE_OF, IS_EMPTY, IS_NOT_EMPTY
查詢
取決於連結的欄位型別
NOTE
第1版備註:​第1版使用$首碼運運算元名稱(例如$contains$greaterThan$isAnyOf$hasAllOf)。 每個欄位型別的支援條件集是相同的。

依人員欄位篩選

人員欄位篩選器(usercreated-byupdated-byapproved-by)同時接受Adobe IMS使用者ID和Workfront使用者ID。 純字串值會解譯為Adobe IMS使用者ID。

若要設定識別碼型別以檢查Workfront使用者識別碼,您必須明確傳遞ididType引數。 idType支援的值在Workfront使用者ID為"WF",在Adobe IMS使用者ID為"IMS"。

{
  "filter": {
   "operator": "AND",
    "conditions": [
      {
        "fieldId": "<userFieldId>",
        "condition": "HAS_ANY_OF",
        "value": [
          { "id": "63e3b13000078c1795146248182d15dc", "idType": "WF" }
        ]
      }
    ]
  }
}
NOTE
第1版注意:V1僅支援依使用者的IMS ID篩選。

依外部ID篩選外部參考欄位

外部參考欄位會將記錄連結到其他Adobe系統(例如Workfront專案或AEM Assets)中的物件。 在內部,Planning會將Planning記錄ID指定給這些物件。 若要直接依原始物件識別碼篩選這些欄位,請新增"matchExternalId": true至篩選條件。

此旗標僅適用於referenceOptions.isExternaltrue的參考欄位;非外部參考欄位會忽略此旗標。 如果無法解析單一字串值,則要求會失敗,並產生400 Bad Request。 如果提供清單值,未解析的專案會透過未變更且完全不相符。

{
  "filter": {
    "operator": "AND",
    "conditions": [
      {
        "fieldId": "<externalReferenceFieldId>",
        "condition": "IS_ANY_OF",
        "value": [
          "5f6a4f6e00000123456789abcdef0123",
          "/content/dam/wknd/en/adventures/bali-surf-camp"
        ],
        "matchExternalId": true
      }
    ]
  }
}
NOTE
版本1注意: V1不支援依外部物件ID篩選。

外部連線欄位

Planning記錄型別可以託管外部參考欄位,這些欄位將記錄連結到其他Adobe系統中的物件,而不是其他Planning記錄型別。

若要透過API建立外部參考欄位,請將新REFERENCE欄位上的referenceOptions.recordTypeId設定為所需外部記錄型別的識別碼。 伺服器會自動從目標籤錄型別衍生referenceOptions.isExternal=true和連線中繼資料(connectionName, objectName)。

支援的外部物件型別包括Workfront物件(專案、工作、方案、產品組合、公司、群組、團隊、使用者)和AEM Assets (資產、內容片段)。

NOTE
第1版注意: V1不支援建立外部連線欄位。

排序

在您的要求中加入sort陣列,依任何欄位排序結果:

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

系統會依順序評估多個排序欄位。 編頁時一律套用排序,以確保跨頁面順序一致。

若要將結果分組,請在排序時加入群組陣列:

{
  "sort": [{ "fieldId": "F001", "direction": "asc" }],
  "group": [{ "fieldId": "F002", "direction": "asc" }]
}
NOTE
第1版備註: V1使用sorting (非sort)、groupingFieldIds (欄位識別碼陣列,非group物件)以及現在已棄用的rowOrderViewId套用現有檢視的列順序。 版本不支援這些V1引數

欄位投影

若要限制回應中傳回的欄位,請使用逗號分隔清單中的fieldIdsfieldAliases查詢引數。 這樣會減少回應裝載大小,建議用於高容量或對延遲敏感的整合。

NOTE
第1版備註:​第1版使用?attributes=來投影(例如?attributes=data,createdBy),而非?fieldIds=?fieldAliases=

分頁

Planning API支援分頁回應,以管理大型資料集。

  • 以游標為基礎的分頁​用於工作區、記錄型別、欄位和檢視。 傳遞上一個回應中的cursor值以擷取下一個頁面。 游標型回應包含hasMore旗標,以指出是否有更多頁面。
  • 以頁面為基礎的分頁​用於記錄搜尋。 使用pagesize作為查詢引數。 編頁時一律套用排序,以確保跨頁面順序一致。 請注意,分頁是以零為基準,因此若要擷取第二頁的結果,請使用"page=1"作為引數。

例如,使用以下請求,從記錄搜尋中擷取500筆記錄的第二頁:

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

所有分頁回應都包含一個結構化信封,指示是否有更多可用結果。 編頁時一律套用排序,以確保跨頁面順序一致。

NOTE
第1版備註: V1使用傳入要求內文中的offsetlimit (預設為500,最大為2,000)。 若要擷取記錄2001-4000,請在要求內文中設定"offset": "2000","limit": "2000"。 回應會傳回含有totalCount欄位的純資料記錄陣列。

大量作業

Planning API支援大量建立、更新、修補及刪除單一請求中的記錄。 如需端點路徑、要求格式和每個作業的記錄限制,請參閱developer.adobe.com/wf-planning的​API參考

NOTE
第1版注意:​第1版不提供大量作業。

權限

實體的許可權透過專用許可權API進行管理,與資源端點本身分開。 這可讓您讀取目前許可權、管理共用清單,以及獨立於資料作業處理存取請求。 如需詳細資訊,請參閱文章Workfront Planning API中的「API參考」一節。

NOTE
第1版注意:​第1版未公開公開公開許可權API。 許可權層級會直接內嵌在資源回應DTO中。

搭配Workfront自訂表單使用Planning API

您可以從Workfront自訂表單中的外部查閱欄位呼叫Planning API,以直接在Workfront物件中呈現Planning資料。 如需詳細資訊,請參閱自訂表單🔗中的外部查閱欄位範例。

相關資源

如需更多API相關檔案,另請參閱下列文章:

recommendation-more-help
workfront-help-quicksilver