向 SharePoint 托管的 SharePoint 加载项添加工作流

这是关于开发 SharePoint 托管的 SharePoint 外接程序的基础知识系列文章中的第 6 篇文章。你应该首先熟悉SharePoint 外接程序以及本系列中之前的文章,可在开始创建 SharePoint 托管的 SharePoint 外接程序 | 后续步骤中找到相关内容。

注意

建议将 Microsoft Power Automate 用于应用和流程自动化。 从 Visual Studio 2022 开始,工作流模板已从 SharePoint 外接程序项目中删除。 有关详细信息,请参阅指南:从经典工作流迁移到 SharePoint 中的 Power Automate 流

提示

如果已完成有关 SharePoint 托管加载项的本系列文章之一,便已生成 Visual Studio 解决方案,可以在继续阅读本主题的过程中使用。 也可以从 SharePoint_SP-hosted_Add Ins_Tutorials 下载存储库,再打开 BeforeWorkflow.sln 文件。

本文将介绍如何向“员工入职培训”SharePoint 加载项添加工作流,以通知人力资源 (HR) 部门有新员工已准备好填写 HR 书面材料。

向加载项添加工作流

  1. 在“解决方案资源管理器”中,右键单击项目,再依次选择“添加”>“新文件夹”。 将文件夹命名为“工作流”

  2. 右键单击新文件夹,再依次选择“添加”>“新项”。 此时,“添加新项”对话框打开,并展开“Office/SharePoint”节点。

  3. 选择“工作流”,并将它命名为“HR_Intake”。 如果向导提示选择工作流类型,请依次选择“列表工作流”和“下一步”

  4. 在向导的下一页上,启用“是,关联...”选项,并将下拉控件设置为下列值:

    • 要与工作流关联的库或列表:西雅图新员工
    • 历史记录列表<create new>
    • 任务列表<create new>
  5. 选择“下一步”

  6. 在向导的最后一页上,启用在某项更改时自动启动工作流的选项。

  7. 选择“完成”

    然后,Visual Studio 的 Office 开发人员工具执行下列操作:

    • 在“工作流”文件夹中创建“HR_Intake”工作流,以及在工作流设计器中打开的子 Workflow.xaml 文件。
    • 创建“WorkflowTaskList”列表实例(在其中创建和更新工作流任务)。
    • 创建“WorkflowHistoryList”列表实例,其中记录了每次执行工作流时发生的各个步骤。

设计工作流

工作流会发送电子邮件,通知 HR 人员新员工已完成入职培训的“了解如何构建”阶段,并已准备好填写 HR 新聘员工书面材料。 如果“西雅图新员工”列表中的现有项发生任何变化,都会触发此工作流,但只有当列表项的“入职培训阶段”字段设置为“HR 书面材料”时,此工作流才会执行操作。 如果是,将会向 HR 人员发送电子邮件,并将相应员工的任务添加到“WorkflowTaskList”中。

注意

在设计工作流时的不同时间,带有感叹号的蓝色菱形符号 (带有 白色感叹号的小蓝色菱形形状 。) 将显示在工作流设计器中的一个或多个项上。 这些表示出现临时错误。 (将光标悬停在符号上以查看简短消息,或在 Visual Studio 错误列表中 查看详细信息。) 这些是工作流不完整的副作用。 完成此过程时,这些符号应该会全部消失。

  1. 在 Visual Studio 中,打开“工具箱”窗格,展开“SP - 列表”节点,再将“LookupSPListItem”拖到设计器的“序列”中。

  2. 选择“LookupSPListItem”,让它的属性出现在 Visual Studio 的“属性”窗格中。 将下图中的属性设置为下列值:

    • ItemID:(当前项)
    • ListId:(当前列表)
    • DisplayName:LookupCurrentNewEmployee

    此时,“属性”窗格应如下所示:

    图 1. LookupSPListItem 的“属性”窗格

    “查阅列表项”工作流活动的“属性”窗格,其中设置了“ItemID”、“ListID”和“DisplayName”属性

  3. 选择窗格外的任意位置,以保存更改。 此时,设计器图面应如下所示:

    图 2. 工作流设计器中的序列

    包含“序列”框的工作流设计器,框内包含“LookupCurrentNewEmployee”活动

  4. 选择设计器中(重新命名的)“LookupCurrentNewEmployee”活动内的“获取属性”链接。 这会将“GetDynamicValueProperties”活动添加到序列中。

  5. GetDynamicValueProperties 活动中选择“定义...”文本。 这会打开“属性”对话框。

  6. “实体类型设置为“列表项”list_instance_name,其中list_instance_name“西雅图的新员工”。

  7. 在“路径”列中,选择最上面的单元格,再从下拉列表中选择“入职培训阶段”

  8. 选择它下面的单元格,再从下拉列表中选择“员工”。

  9. 选择“填充变量”。 这会创建名为“OrientationStage”和“Title”的变量,并分配“西雅图新员工”列表中当前项内相应字段的各个值。 此时,“属性”对话框应如下所示:

  10. 选择“确定”。 此时,设计器图面应如下所示:

    图 4. 工作流设计器

    包含“列表项查询”和“获取动态值”这两个活动的工作流设计器。

  11. 在 Visual Studio 中,打开“工具箱”窗格,展开“控制流”节点,再将“If”拖到“GetDynamicValueProperties”下方的“序列”底部。

  12. 在“If”的“条件”框中,输入“OrientationStage=="HR paperwork"”

  13. 在 Visual Studio 中,打开“工具箱”窗格,展开“SP - 实用工具”节点,再将“Email”拖到“If”活动的“Then”框中。

  14. 选择“Email”活动。 在“属性”窗格中,设置“Body”、“Subject”和“To”属性的值。 在每种情况下,选择属性的标注按钮 .. .. ,并使用打开的 表达式编辑器 设置属性的值,如下表所示。 由于这些是 C# 字符串表达式,因此请严格按照下表所示使用引号。 此处的 Title 是之前分配给列表项的“Title”字段的变量(包含员工姓名)。

    • 身体:Title + " is waiting in the lobby to fill out benefits and employment forms."
    • 主题:Title + " is ready for HR paperwork"
    • 自:new System.Collections.ObjectModel.Collection<string>() {"your_O365_email"}

    将占位符 your_O365_email 替换为登录 Office 365 开发人员帐户时使用的标识(如 *alias*@*O365domain*.sharepoint.com)。 由于这是 C# 字符串,因此两边必须有引号。

  15. 在 Visual Studio 中,打开“工具箱”窗格,展开“运行时”节点,再将“TerminateWorkflow”拖到“If”活动的“Else”框中。

  16. 选择“TerminateWorkflow”活动,并在“属性”窗格中将“Reason”设置为 "Not at HR paperwork stage."含引号)。 此时,设计器应如下所示:

    图 5. 工作流完成时的工作流设计器

    包含“列表项查找”、“获取动态值”活动和“If Then Else”结构的工作流设计器。电子邮件是“Then”部件中的活动,“终止工作流”是“Else”中的活动。

运行并测试加载项

  1. 使用 F5 键部署并运行外接程序。 Visual Studio 在测试 SharePoint 网站上临时安装并立即运行此加载项。 工作流管理器的“测试服务主机”控制台也随即打开。

  2. 在加载项的默认页面打开后,打开某一项进行编辑,并将“入职培训阶段”的值设置为“HR 书面材料”

    “测试服务主机”控制台中指明工作流已启动。 很快就又指明工作流已完成。 示例如下:

    图 6. 测试服务主机控制台

    工作流“测试服务主机”窗口中的行提示工作流已启动,紧随其后的行提示已完成。工作流实例的 GUID 位于每行的开头。

    注意

    如果“测试服务主机”控制台未打开,您可能需要启用工作流调试。 右键单击“解决方案资源管理器”中的项目名称,再选择“属性”。 打开“属性”窗格上的“SharePoint”选项卡,再选中“启用工作流调试”复选框。

  3. 转到 Office 365 开发人员帐户的电子邮件收件箱 (Outlook)。 其中有一封主题为“员工已准备好填写 HR 书面材料”的电子邮件(其中,员工是已编辑其项的员工姓名)。 电子邮件正文显示“员工 正在大厅等待填写福利和就业表单。下面是一个示例:

    图 7. 工作流发送的电子邮件

    Outlook 中一封来自工作流的电子邮件,主题为“Cassie Hicks 已准备好 HR 文书工作”,正文为“Cassie Hicks 正在大厅等候填写我们的福利和职位表。”

    提示

    如果工作流开始而永未完成,则不会发送电子邮件。请尝试结束调试会话,并再按 F5 几次,然后才能确定代码是否有错。 有时,问题会出在 SharePoint Online 上。 如果问题仍未解决,请尝试向 schema.xml 文件的“ContentTypes”部分添加“ListFieldsContentType”内容类型(如果还没有的话)。 下面的示例展示了标记:

    <ContentType ID="0x0100781dd48170b94fdc9706313c82b3d04c" Name="ListFieldsContentType" Hidden="TRUE"></ContentType>

    将“NewEmployee”内容类型的整个“FieldRefs”部分复制到这一新内容类型。 保存项目,然后撤回并再按 F5。

  4. 若要结束调试会话,请关闭浏览器窗口或停止在 Visual Studio 中进行调试。 每次按 F5,Visual Studio 都会撤回旧版加载项并安装最新版本。

  5. 将在其他文章中使用此加载项和 Visual Studio 解决方案,因此最好在使用一段时间后,再最后撤回一次加载项。 在“解决方案资源管理器”中,右键单击此项目,再选择“撤回”

后续步骤

本系列的下一篇文章将介绍如何向 SharePoint 托管 SharePoint 加载项添加自定义页面和样式