批量更新自定义字段并通过 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 以将自定义字段更新应用于项目。
如果需要,) (将相关信息记录到工作流历史记录列表。
发布项目。
签入项目。
最终的端到端工作流如下所示:
创建批量更新自定义字段的工作流
可选。 将项目的完整 URL 存储在可在整个工作流中使用的变量中。
将 “等待项目事件” 操作添加到工作流,然后选择“ 签入项目时 ”事件。
使用“生成字典”操作创建 requestHeader 字典。 对于此工作流中的所有 Web 服务调用,将使用相同的请求标头。
将以下两项添加到字典。
名称 类型 值 Accept String application/json;odata=verbose Content-Type String application/json;odata=verbose 使用“生成字典”操作创建 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
添加调用 HTTP Web 服务操作以检查项目。
编辑 Web 服务调用的属性以指定请求标头。 若要打开“ 属性 ”对话框,请右键单击该操作并选择 “属性”。
添加 调用 HTTP Web 服务 操作以调用 UpdateCustomFields 方法。
/Draft/
请注意 Web 服务 URL 中的段。 完整 URL 应如下所示:https://<site-url>/_api/ProjectServer/Projects('<guid>')/Draft/UpdateCustomFields()
编辑 Web 服务调用的属性,将 RequestHeader 和 RequestContent 参数绑定到创建的字典。 还可以创建一个新变量来存储 ResponseContent。
可选。 从响应字典中读取,检查队列作业的状态,并在工作流历史记录列表中记录信息。
向 发布 终结点添加 Web 服务调用以发布项目。 始终使用相同的请求标头。
将最终 Web 服务调用添加到 Checkin 终结点,以检查项目。
从工作流创建项目网站
每个项目都可以有自己的专用 SharePoint 网站,团队成员可以在其中进行协作、共享文档、提出问题等。 以前,网站只能在首次发布时自动创建,或者由Project Professional中的项目经理或 PWA 设置中的管理员手动创建,或者可以禁用它们。
我们添加了 CreateProjectSite 方法,以便你可以选择何时创建项目网站。 这对于希望在项目建议到达预定义工作流中的特定阶段(而不是首次发布时)自动创建其网站的组织特别有用。 推迟项目网站创建可显著提高创建项目的性能。
前提:在使用 CreateProjectSite 之前,必须在 PWA 设置“连接 SharePoint网站设置”中设置“允许用户选择”>设置,以便创建项目网站>。
创建创建项目网站的工作流
创建或编辑现有工作流,然后选择要在其中创建项目网站的步骤。
使用“生成字典”操作创建 requestHeader 字典。
将以下两项添加到字典。
名称 类型 值 Accept String application/json;odata=verbose Content-Type String application/json;odata=verbose 添加 “调用 HTTP Web 服务 ”操作。 将请求类型更改为使用 POST,并使用以下格式设置 URL:
https://<site-url>/_api/ProjectServer/Projects('<guid>')/CreateProjectSite('New web name')
将 Project 网站的名称作为字符串传递给 CreateProjectSite 方法。 若要使用项目名称作为站点名称,请传递一个空字符串。 请务必使用唯一名称,以便创建下一个项目网站。
编辑 Web 服务调用的属性,将 RequestHeader 参数绑定到创建的字典。