批量更新自定义字段并通过 Project Online 中的工作流创建项目网站

为了帮助客户充分利用Project Online并提高服务扩展性和灵活性,我们向客户端对象模型添加了两种方法,可在Project Online应用和工作流中使用。

UpdateCustomFields
批量更新项目自定义域。 仅适用于Project Online。 仅在 REST API 中可用。
CreateProjectSite
创建项目网站。 仅适用于Project Online。 在 REST API、托管客户端对象模型和 JavaScript 客户端对象模型中可用。

除了提供更大的灵活性外,这些方法还可以在工作流中保存和发布项目时提供显著的性能改进。 本文介绍如何使用 REST API 中的方法,并提供有关如何创建批量更新自定义字段的工作流和创建项目网站的工作流的说明。

注意

若要详细了解如何从 SharePoint 2013 工作流调用 REST API,请参阅了解和使用 SharePoint 2013 REST 接口从 SharePoint Designer工作流调用 SharePoint 2013 Rest API

从工作流批量更新项目自定义域

以前,工作流一次只能更新一个自定义字段。 当用户在项目详细信息页之间切换时,一次更新一个项目自定义字段可能会导致最终用户体验不佳。 每次更新都需要使用 “设置项目域” 操作的单独服务器请求,并在高延迟、低带宽网络上更新多个自定义字段会导致不小的开销。 为了解决此问题,我们向 REST API 添加了 UpdateCustomFields 方法,可用于批量更新自定义字段。 若要使用 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. 将以下两项添加到字典。

    名称 类型
    Accept
    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

      如果手动创建了自定义字段,则这些值将因站点而异。 如果计划跨多个网站重复使用工作流,请确保自定义字段 ID 正确。

    • 价值 要分配给自定义字段的值。 对于链接到查阅表格的自定义字段,需要使用查阅表格条目的内部名称,而不是实际的查阅表格值。

      可以在以下终结点找到查阅表项的内部名称: https://<site-url>/_api/ProjectServer/CustomFields('<guid>')/LookupEntries('<guid>')/InternalName

      如果已将查阅表格自定义字段设置为接受多个值,请使用 ;# 连接 (值,如下面的示例字典) 所示。

    • ValueType 要更新的自定义字段的类型。

      • 对于“文本”、“持续时间”、“标志”和“LookupTable”字段,请使用 Edm.String

      • 对于“数字”字段,请使用 Edm.Int32、Edm.Double 或任何其他 OData 接受的数字类型

      • 对于“日期”字段,请使用 Edm.DateTime

      下面的示例字典定义了三个自定义字段的更新。 第一个用于多值查找表自定义字段,第二个用于数字字段,第三个用于日期字段。 请注意 customFieldDictionary 索引如何递增。

      注意

      这些值仅用于说明目的。 将使用的键值对取决于 PWA 数据。

      名称 类型
      customFieldDictionary (0) /__metadata/type
      String
      Sp。KeyValue
      customFieldDictionary (0) /Key
      字符串
      Custom_ce23fbf43fa0e411941000155d3c8201
      customFieldDictionary (0) /Value
      String
      Entry_b9a2fd69279de411940f00155d3c8201;#Entry_baa2fd69279de411940f00155d3c8201
      customFieldDictionary (0) /ValueType
      字符串
      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.0000000
      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 服务的属性调用

从工作流创建项目网站

每个项目都可以有自己的专用 SharePoint 网站,团队成员可以在其中进行协作、共享文档、提出问题等。 以前,网站只能在首次发布时自动创建,或者由Project Professional中的项目经理或 PWA 设置中的管理员手动创建,或者可以禁用它们。

我们添加了 CreateProjectSite 方法,以便你可以选择何时创建项目网站。 这对于希望在项目建议到达预定义工作流中的特定阶段(而不是首次发布时)自动创建其网站的组织特别有用。 推迟项目网站创建可显著提高创建项目的性能。

前提:在使用 CreateProjectSite 之前,必须在 PWA 设置连接 SharePoint网站设置”中设置“允许用户选择”>设置,以便创建项目网站>。

在 PWA 设置中设置“允许用户选择”

创建创建项目网站的工作流

  1. 创建或编辑现有工作流,然后选择要在其中创建项目网站的步骤。

  2. 使用“生成字典”操作创建 requestHeader 字典。

    生成 requestHeader 字典

  3. 将以下两项添加到字典。

    名称 类型
    Accept
    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 参数绑定到创建的字典。

    将字典绑定到请求

另请参阅