65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Visual Studio 在 SharePoint 2013 中创建工作流

starIconstarIconstarIconstarIconemptyStarIcon

4.00/5 (1投票)

2016年1月12日

CPOL

8分钟阅读

viewsIcon

19220

使用 Visual Studio 在 SharePoint 2013 中创建工作流

SharePoint 2013 工作流体系结构 引入了工作流管理器场。工作流管理器使用 REST API 与 SharePoint 2013 进行通信。工作流管理器要求用户配置文件应用程序已创建并配置好。

请继续阅读以了解 SharePoint 2013 中的工作流。我们将通过一个为联系人列表创建工作流的示例,该工作流将创建一个任务来将联系人分类为开发人员、团队负责人或经理,而不是任务表单中的默认“批准”和“拒绝”选项。

使用 SharePoint 管理器创建的 SharePoint 2013 工作流仅支持声明式工作流。我们无法嵌入像 SharePoint 2010 风格工作流那样的代码。要添加自定义业务逻辑,我们可以使用 HttpSend 活动并进行 Web 服务调用来处理业务逻辑。

序列

当我们在 Visual Studio 中创建工作流时,会创建一个默认的空序列。序列是活动的容器。我们可以通过从工具栏拖放活动来在序列中添加活动。

我们可以通过单击名称来重命名序列。重命名序列是个好主意,因为我们可以在序列内添加序列。而且,如果我们双击子序列,它将在设计窗口中仅显示子序列。

这样我们就可以只专注于我们正在处理的特定序列。顶部会有面包屑导航来返回父序列。因此,重命名序列对于在嵌套序列之间导航非常有帮助。

Child Sequence

变量和参数

在设计器的底部,您会看到一个选项卡,可以在其中添加变量。这些变量可用于在工作流中传递值。您可以为变量指定一个作用域,该作用域设置为特定序列。如果作用域设置为根序列,那么子序列也可以使用它。

还有一个选项卡,可以在其中添加参数。参数用于向活动输入和输出值。

工作流任务和结果

SharePoint 2013 中的工作流任务列表使用一种不同的任务内容类型,称为“工作流任务 (SharePoint 2013)”。它继承自标准的“任务”内容类型。此内容类型添加了两个附加列。其中一列存储工作流实例 ID,另一列存储工作流的结果。

如果您想添加其他字段或创建自定义结果,您需要创建一个派生自“工作流任务 (SharePoint 2013)”内容类型的新内容类型,进行所需的更改,然后将其附加到工作流任务列表。

任务的结果由一个名为 TaskOutcome 的列管理,该列的类型为 OutcomeChoice(继承自 Choice)。此列具有 ApprovedRejected 等选项,这些选项会显示在任务表单上。

如果您想创建自定义结果,您需要创建一个类型为 OutcomeChoice 的自定义列,并将其包含在您的自定义内容类型中。此外,您需要删除开箱即用的 TaskOutcome 列。不过,这有点棘手。我们将在示例中进行演示。

演练

让我们通过一个示例来详细了解这些概念。假设我们需要一个联系人列表,该列表需要被分类为开发人员、团队负责人或经理。因此,我们将附加一个工作流,该工作流将任务分配给人力资源部,并向其发送电子邮件。人力资源部将在任务表单中选择相应的角色。

首先,让我们创建一个新项目

在 Visual Studio 中创建一个SharePoint 托管的应用项目。

创建一个列表

右键单击项目并添加一个“联系人”列表。

Contacts List

在“联系人”列表设计窗口中,添加一个“人力资源”列,类型为“人员或组”,并将其设置为必填。

Add HR Column

创建自定义结果列

现在,让我们创建一个自定义结果列来存储所需的选项。右键单击项目并添加一个站点列。我们称之为 RoleOutcome。在 elements.xml 文件中,将类型更改为 OutcomeChoice。并添加所需的选项。在我们的例子中,是“开发人员”、“团队负责人”和“经理”。

创建内容类型并向其添加自定义结果列

接下来,创建一个派生自“工作流任务(SharePoint 2013)”的内容类型。我们称之为 RoleAssignTaskCT

Custom WF Task CT

将我们的自定义结果列 RoleOutcome 添加到此内容类型。

Add Outcome Column To CT

添加工作流

现在向项目添加一个列表工作流。选择创建新工作流历史记录和任务列表的选项。

Add List Workflow

单击“下一步”。您可以选择“项目创建时自动启动工作流”选项。单击“完成”。

系统将创建一个工作流任务列表。转到该列表的 elements.xml 文件,复制现有的 ContentTypeBinding 标签,并将 ContentTypeId 替换为自定义结果内容类型 RoleAssignTaskCT 的 ID。

添加序列

在工作流设计器表面,会有一个序列。通过拖放“控制流”部分中的“序列”活动来添加两个子序列。将序列重命名为“获取联系人详细信息”和“分配任务”。

创建变量

添加一个名为 ContactDetails 的变量。在此变量的类型下拉列表中,选择“浏览类型”并选择 DynamicValue(您可以在顶部的类型名称文本框中搜索它)。当我们查找列表项时,该活动将以 DynamicValue 的形式返回数据。

LookupSPListItem

添加和配置活动

在“获取联系人详细信息”序列中,拖放一个 LookupSPListItem 活动,该活动位于“SP - 列表”部分。在此活动的属性窗口中,将 ListId 选择为(当前列表),将 ItemId 选择为(当前项)。

并将 Result 选择为上面创建的 DynamicValue 变量 – ContactDetails

LookupSPListItem Properties

现在,我们需要从 DynamicValue 类型中检索各个值。在“获取联系人详细信息”序列中,在 LookupSPListItem 活动下方添加一个 GetDynamicValueProperties 活动。在属性中将 DynamicValue 变量选为 Source

Sequence1

单击属性窗口中“(Dictionary)”旁边的“...”按钮。将实体类型选为“联系人的列表项”。在“Path”部分,选择您需要的列。在这种情况下,您可以选择“名字”、“姓氏”和“人力资源”。然后,单击“填充变量”。这将创建所需的用于从 Dynamic Value 填充的工作流变量。

确保“人力资源”变量的作用域设置为父级,因为我们将在“分配任务”序列中使用它。

Dictionary Settings

分配任务

在“分配任务”序列中,拖放一个 SingleTask 活动。单击此活动上的“配置”链接。

在结果选项中,选择自定义任务内容类型 – RoleAssignTaskCT,结果字段 – RoleOutcome 和默认结果。

Assign Task

SingleTask 活动下方拖放一个 WriteToHistory 活动。将消息设置为 “任务结果是 ” + outcome_0

outcome_0 是人力资源在任务中选择后生成的结果。

从任务表单中删除默认的批准和拒绝选项

现在,即使我们选择了自定义任务内容类型,在任务编辑表单中,它仍将同时显示开箱即用的字段和我们的自定义结果。这是因为父内容类型中存在我们继承的开箱即用的字段。我尝试使用 RemoveFieldRef 删除字段,但它不允许我修改,因为它是一个开箱即用的内容类型。

因此,我们将从自定义内容类型 ID 中删除父 ID 部分(应该是 3365C4474CAE8C42BCE396314E88E51F)。

如果您的生成的内容类型 ID 是 0x0108003365C4474CAE8C42BCE396314E88E51F00983676A53ED54E5787C8F2E381A04271,请删除父 ID 部分 3365C4474CAE8C42BCE396314E88E51F

因此,它将变成 0x010800983676A53ED54E5787C8F2E381A04271

现在,我们需要在工作流列表内容类型绑定和工作流 XML 代码中更新此新 ID(右键单击 workflow.xaml 并选择“查看代码”或按 F7)。将 ContentTypeId 的所有出现替换为更新后的 ID。

与其这样做,您可能会想到我们可以直接继承自“任务”内容类型而不是“工作流任务(SharePoint 2013)”,但问题是我们无法从 SingleTask 活动中选择它。Visual Studio 仅显示特定类型的内容类型。可以通过编辑工作流的 XML 来实现此目的,但我尚未尝试过。

部署和测试

部署解决方案。

由于这是一个 SharePoint 托管的应用,您将没有导航或站点内容链接。因此,您需要手动导航到 URL。为此,请导航到应用并删除“/Pages”及其之后的所有内容,然后插入“/lists/contacts”(针对联系人列表)或您为列表实例提供的任何 URL。您可以使用“/lists/WorkflowHistoryList”导航到工作流历史记录列表,使用“/Lists/WorkflowTaskList”导航到工作流任务列表。

创建一个新的联系人并分配人力资源字段。一旦人力资源通过选择联系人角色完成任务,工作流就应该完成。我们应该能够在工作流历史记录列表中看到记录的角色。

结论

我们可以将其扩展为更新联系人项,例如添加一个角色字段。或者,根据需求添加其他业务逻辑。

我们了解了使用 Visual Studio 在 SharePoint 2013 中创建工作流的概念。并且,我们通过示例演示了为 SharePoint 2013 创建 Visual Studio 工作流。

这篇文章 使用 Visual Studio 在 SharePoint 2013 中创建工作流 最先出现在 The SharePoint Guide

© . All rights reserved.