共用方式為


在 Project Online 中大量更新自定義欄位,並從工作流程建立項目網站

為了協助客戶充分利用 Project Online 並改善我們的服務擴充性和彈性,我們已將兩種方法新增至客戶端物件模型,您可以在 Project Online 應用程式和工作流程中使用。

UpdateCustomFields
大量更新專案自定義欄位。 僅限 Project Online。 僅適用於 REST API。
CreateProjectSite
建立 Project 網站。 僅限 Project Online。 可在 REST API、受控客戶端物件模型和 JavaScript 用戶端物件模型中使用。

除了提供更大的彈性之外,這些方法也會在工作流程中儲存和發佈專案時提供顯著的效能改善。 本文說明如何使用 REST API 中的方法,並提供建立工作流程的指示,以大量更新自定義欄位和建立 Project 網站的工作流程。

注意事項

若要深入瞭解如何從 SharePoint 2013 工作流程呼叫 REST API,請參閱瞭解和使用 SharePoint 2013 REST 介面從 SharePoint Designer 工作流程呼叫 SharePoint 2013 Rest API

從工作流程大量更新專案自定義欄位

先前,工作流程一次只能更新一個自定義欄位。 當使用者在專案詳細數據頁面之間轉換時,一次更新一個專案自定義欄位可能會導致用戶體驗不佳。 每個更新都需要使用 [設定專案字段 ] 動作的個別伺服器要求,而在高延遲、低頻寬網路上更新多個自定義字段會導致非一般的額外負荷。 為了解決此問題,我們已將 UpdateCustomFields 方法新增至REST API,可讓您大量更新自定義欄位。 若要使用 UpdateCustomFields,您可以傳入字典,其中包含您想要更新之所有自定義欄位的名稱和值。

您可以在下列端點找到 REST 方法:

https://<site-url>/_api/ProjectServer/Projects('<guid>')/Draft/UpdateCustomFields()

注意事項

<site-url>將範例中的佔位元取代為您 Project Web App (PWA) 網站的 URL,並將 <guid> 佔位元取代為您的專案 UID。

本節說明如何建立工作流程,以大量更新專案的自定義欄位。 工作流程會遵循下列高階步驟:

  • 等候您想要更新的專案存回。

  • 建置數據集,以定義專案的所有自定義欄位更新。

  • 查看專案。

  • 呼叫 UpdateCustomFields 將自定義欄位更新套用至專案。

  • 如有需要,請將相關信息記錄到工作流程歷程記錄清單 () 。

  • 發佈專案。

  • 簽入專案。

最終的端對端工作流程如下所示:

端對端工作流程

建立大量更新自定義欄位的工作流程

  1. 選用。 將專案的完整 URL 儲存在可在整個工作流程中使用的變數中。

    將專案的 URL 儲存在變數中

  2. 將 [ 等候專案事件 ] 動作新增至工作流程,然後選擇 [ 當專案簽入 時] 事件。

    等候專案簽入等候

  3. 使用 [建置字典] 動作建立 requestHeader 字典。 您將針對此工作流程中的所有 Web 服務呼叫使用相同的要求標頭。

    建置 requestHeader 字典

  4. 將下列兩個專案新增至字典。

    名稱 Type
    接受
    String
    application/json;odata=verbose
    Content-Type
    String
    application/json;odata=verbose

    新增 Accept 標頭

  5. 使用 [建置字典] 動作建立 requestBody字典 。 此字典會儲存您想要套用的所有欄位更新。

    每個自定義欄位更新都需要四個數據列:欄位的 (1) 元數據類型、 (2 個) 鍵、 (3 個) 值,以及 (4 個) 值類型。

    • __metadata/類型 欄位的元數據類型。 此記錄一律相同,並使用下列值:

      • 名稱:customFieldDictionary (i) /__metadata/type (其中 i 是字典中每個自定義欄位的索引,從 0 開始)

      • 類型:字串

      • 值:SP。KeyValue

      定義自訂欄位更新

    • 關鍵 自定義欄位的內部名稱,格式為: Custom_ce23fbf43fa0e411941000155d3c8201

      您可以瀏覽至自訂欄位的 InternalName 端點,以尋找其內部名稱: https://<site-url>/_api/ProjectServer/CustomFields('<guid>')/InternalName

      如果您手動建立自定義欄位,這些值會因站對站而異。 如果您打算跨多個網站重複使用工作流程,請確定自定義字段標識碼正確無誤。

    • 價值 要指派給自定義欄位的值。 針對連結至查閱表格的自定義欄位,您必須使用查閱表格項目的內部名稱,而不是實際的查閱表格值。

      您可以在下列端點找到查閱表格項目的內部名稱: https://<site-url>/_api/ProjectServer/CustomFields('<guid>')/LookupEntries('<guid>')/InternalName

      如果您已將查閱表格自定義欄位設定為接受多個值,請使用 ;# 串連值 (,如下列範例字典所示) 。

    • ValueType 您要更新的自訂欄位類型。

      • 針對 [文字]、[持續時間]、[旗標] 和 [查閱表] 字段,請使用Edm.String

      • 針對 [數位] 欄位,請使用 Edm.Int32、Edm.Double 或任何其他 OData 接受的數字類型

      • 針對 [日期] 欄位,請使用 Edm.DateTime

      下列範例字典會定義三個自定義欄位的更新。 第一個適用於多重值查閱表格自定義欄位,第二個用於數位欄位,第三個則用於日期欄位。 請注意 customFieldDictionary 索引如何遞增。

      注意事項

      這些值僅供說明之用。 您將使用的索引鍵/值組取決於您的 PWA 資料。

      名稱 Type
      customFieldDictionary (0) /__metadata/type
      String
      Sp。KeyValue
      customFieldDictionary (0) /Key
      String
      Custom_ce23fbf43fa0e411941000155d3c8201
      customFieldDictionary (0) /Value
      String
      Entry_b9a2fd69279de411940f00155d3c8201;#Entry_baa2fd69279de411940f00155d3c8201
      customFieldDictionary (0) /ValueType
      String
      Edm.String
      customFieldDictionary (1) /__metadata/type
      String
      Sp。KeyValue
      customFieldDictionary (1) /Key
      String
      Custom_c7f114c97098e411940f00155d3c8201
      customFieldDictionary (1) /Value
      String
      90.5
      customFieldDictionary (1) /ValueType
      String
      Edm.Double
      customFieldDictionary (2) /__metadata/type
      String
      Sp。KeyValue
      customFieldDictionary (2) /Key
      String
      Custom_c6fb67e0b9a1e411941000155d3c8201
      customFieldDictionary (2) /Value
      String
      2015-04-01T00:00:00.00000000
      customFieldDictionary (2) /ValueType
      String
      Edm.DateTime

      定義自訂欄位更新的字典定義

  6. 新增 [呼叫 HTTP Web 服務 ] 動作來取出專案。

    呼叫 Checkout 方法

  7. 編輯 Web 服務呼叫的屬性,以指定要求標頭。 若要開啟 [ 屬性 ] 對話框,請以滑鼠右鍵按兩下動作,然後選擇 [ 屬性]

    在 Web 服務呼叫屬性中指定要求標頭

  8. 新增 呼叫 HTTP Web 服務 動作以呼叫 UpdateCustomFields 方法。

    建立通話 HTTP Web 服務動作

    請記下 /Draft/ Web 服務 URL 中的區段。 完整的 URL 看起來應該像這樣: https://<site-url>/_api/ProjectServer/Projects('<guid>')/Draft/UpdateCustomFields()

    呼叫 UpdateCustomFields 方法

  9. 編輯 Web 服務呼叫的屬性,以將 RequestHeaderRequestContent 參數係結至您建立的字典。 您也可以建立新的變數來儲存 ResponseContent

    將字典系結至要求標頭,並將

  10. 選用。 從回應字典讀取以檢查佇列作業的狀態,並記錄工作流程歷程記錄清單中的資訊。

    設定記錄

  11. 將 Web 服務呼叫新增至 發佈 端點,以發佈專案。 請一律使用相同的要求標頭。

    呼叫 Publish 方法

    發佈 Web 服務呼叫屬性的屬性

  12. 將最終 Web 服務呼叫新增至 Checkin 端點,以簽入專案。

    呼叫 Checkin 方法

    Checkin Web 服務呼叫

從工作流程建立 Project 網站

每個專案都可以有自己的專用 SharePoint 網站,小組成員可以在其中共同作業、共用檔、提出問題等等。 先前,只有項目經理在第一次發佈或手動發佈時,才能在 Project 專業版 或由 PWA 設定中的系統管理員自動建立網站,或者可以停用網站。

我們已新增 CreateProjectSite 方法,讓您可以選擇建立專案網站的時機。 當專案提案到達預先定義工作流程中的特定階段,而不是第一次發佈時,這對於想要自動建立其網站的組織特別有用。 後續項目網站建立可大幅改善建立專案的效能。

前提:在您可以使用 CreateProjectSite 之前,必須在 [PWA> 設定連線的SharePoint 網站設定] 中設定 [允許使用者選擇] 設定以建立項目網站>

在 PWA 設定設定中設定 [允許使用者選擇

建立建立 Project 網站的工作流程

  1. 建立或編輯現有的工作流程,然後選取您要建立專案網站的步驟。

  2. 使用 [建置字典] 動作建立 requestHeader 字典。

    建置 requestHeader 字典

  3. 將下列兩個專案新增至字典。

    名稱 Type
    接受
    String
    application/json;odata=verbose
    Content-Type
    String
    application/json;odata=verbose

    新增 Accept 標頭

  4. 新增 [呼叫 HTTP Web 服務 ] 動作。 將要求類型變更為使用 POST,並使用下列格式設定 URL:

    https://<site-url>/_api/ProjectServer/Projects('<guid>')/CreateProjectSite('New web name')

    建置 CreateProjectSite 端點 URI

    將 Project 網站的名稱當做字串傳遞給 CreateProjectSite 方法。 若要使用專案名稱作為網站名稱,請傳遞空字串。 請務必使用唯一的名稱,讓您建立的下一個專案網站能夠運作。

  5. 編輯 Web 服務呼叫的屬性,以將 RequestHeader 參數系結至您建立的字典。

    將字典系結至要求

另請參閱