SPD有很强的能力去构建自定义工作流,能满足复杂的业务需求和流程。SPD充分体现了工作流体系结构,通过产生XOML建立SharePoint工作流。 声明式工作流标记语言我们在第一章简要的提到。SPD发布这个XOML到SharePoint,SharePoint Designer中的工作流通常被称为声明性工作流, 而Visual Studio 工作流被称作编译型工作流。
SPD最大的好处是非技术人员可以设计工作流,然后转换成平台需求以运行它们。SPD工作流有易用性和速度这两个优势 。
SPD工作流由几个类型的组件构成,包括步骤(Step),动作(Action),和条件(condition)。这些组件是所有SPD工作流的基石。 步骤组织工作流从一个步骤流向另一个步骤,例如,你可以在步骤里检查条件。动作(Action)做一些工作,类似发送电子邮件或者创建列表项这些工作。这章将使用所有的组件去管理员工的支付审批流程请求。
3.1 介绍SharePoint Designer的工作流
在简要中提到,SPD是一个用于定制你的SharePoint 站点极好的工具。特别是,SPD有一个强大的工作流引擎,你可以用来建立模型,添加逻辑 和发布工作流到SharePoint给用户交互。SharePoint Designer 2007 提供只有一种类型工作流,列表工作流。在SharePoint Designer2010 我们有很多选择和更大的灵活性。这章将只覆盖列表工作流详细。无论你创建什么类型的工作流,生产工艺和工具是一样的。 下面是SharePoint Designer2010中所有可用的不同类型工作流。
3.1.1 列表工作流
列表工作流是类似SharePoint 2007中的定义。列表工作流创建去工作在指定的SharePoint列表上的数据, 一般使用一次性的情景,你需要运行指定设置动作一个单独的列表。列表工作流也可以访问其他列表中的数据, 就像你看到本章最后的例子。列表工作流不能轻易复制和使用其他SharePoint列表,但是他们很容易创建。
3.1.2 站点工作流
站点工作流不依赖一个单独的列表的,相反,它们是创建在站点级别和可以从站点里的任何列表的数据执行操作的。 当你需要运行进程涉及多个列表时,站点工作流是很有用的。例如一个站点工作流能分析所有的创建在站点的,某个时间范围的数据(不管哪个列表)。因为它们没有依赖指定的列表,站点工作流不能自动启动当列表项创建或修改,其他工作流可以。相反,它们必须手工以站点管理员 从查看所有内容中启动。
3.13 可重用工作流
可重用工作流是不关联指定的列表,但关联站点。当创建它,它们可以添加到任何类型的列表,使用列表设置屏幕。 默认审批工作流和收集签名工作流使用同样的方式添加到列表。因为他们是重复使用的,它们可以添加到站点里的许多必要列表。 如果默认工作流,如审批和收集签名,不符合你的要求,你可以按你的需求通过可重用工作流创建你的版本。
3.1.4 全局可重用工作流
全局可重用工作流是和可重用工作流相似的。除了它们可用于整个站点集,不只是单个站点。它们可以添加到 网站集内的任何列表,正常的可重用工作流只能在创建的站点中使用到列表。如果 你需要实现全部网站流程和需要站点集中所有站点去使用相同的工作流完成这个流程,全局可重用工作流将比较方便。3.1.5 工作流模板
创建工作流后,你可以保存它为模板,导出为.WSP文件。工作流能不输到另外的SharePoint站点或者Farm。 在此之前,这个只可能在Visual Studio 工作流实现。对于如何使用此模板,请参阅5.1节。
3.1.6 SPD用户界面
任何人使用SharePoint Designer2010打开之前的版本将更改界面。微软现在采用相同的界面到所有的Office2010产品。 这个界面包含新的文件标签,它取代office orb和用来连接并打开站点。它也包含用户界面,访问工具命令。
首先你看当你打开SharePoint Designer2010是文件菜单。图3.1显示,包含打开和创建SharePoint站点的工具。
图3.1
编辑界面,是连接到SharePoint站点后显示,包括三个主要区域:Ribbon,站点对象在左边,和“主页”选项卡。见图3.2的编辑界面的例子。Ribbon提供访问SharePoint网站的工作和这本书的目的SharePoint工作流。站点对象区域是使用访问SharePoint站点不同区域的。最后,“主页”选项卡是你将要创建和编辑列表和工作流的地方。
图3.2
Ribbon是使用访问工具和功能编辑SharePoint站点和工作流。Ribbon上显示的选项将改变你的工作习惯。 例如,如果你是编辑一个列表,选项在列表上具体显示。动态的Ribbon意味着你将花更少的时间寻找选项和工具, 你需要更多时间去创建功能。
图3.3
网站对象面板(图3.4)可以让你访问SharePoint2010站点中不同的组件。 这是你将去创建新页面,新列表和新的内容类型的地方。它是让你如何访问存在的工作流和创建一个新的。 点击不同的对象根据站点对象类型,将允许你工作在不同对象类型上。当你点击了不同对象类型, 通知Ribbon主页选项卡的变化,显示给你相关选项。
图3.4
在主页选项卡和其他面板选项卡,你可以更改设置和编辑SharePoint对象。 图3.5显示主页选项卡,当你首次打开SharePoint站点的地方。例如当你第一次链接到站点, 你可以改变网站名称和修改安全在主页选项卡。图3.5
当编辑工作流,你能调整工作流是如何开始和如何开发工作流----都在这些选项卡上。 当你打开和工作在这些对象上,它们将作为额外的选项卡在内容顶部的区域出现,让你快速的切换它们。
3.2 SharePoint Designer 工作流中的组件
SPD工作流包含许多组件,包括步骤,条件和动作。 传统的编程语言编写的代码,这些组件被使用控制工作流,它采取的行动和它的结果。幸运的是,对于非开发人员, 所以的组件都很容易添加和配置。此外,所有的组件都使用简单的英文语句“Calculte 100 plus50” 计算100加50, 这使它们很容易配置,你在本章结束将看到工作中的一些列子。
工作流的组件分为6个功能种类:
■步骤-帮助你组织工作流
■条件-添加到工作流的决策逻辑
■动作-让工作流做事情
■变量-存储临时数据
■否则-如果条件-添加另外的决策
■表单-允许用户提供数据给工作流
3.2.1 步骤
步骤是任何工作流的基础,允许你组织它到逻辑部分。 第一个步骤通常包括准备工作流之后需要使用的数据, 这可能包含准备变量,我们使用它存储临时数据(工作流在运行时从用户收集的数据)。 而后的步骤是使用数据去工作流并处理命令。 这就是在工作流中大量数据工作流完成的地方,例如执行计算和等待用户去完成数据更改。 最后的步骤通常是记录工作流结果和发送通知给用户或管理员如果有需求。 这个可能包含发送表明工作流结束的Email或为故障排除记录错误消息。
虽然它是可能去创建一个大的工作流在仅有的一个步骤,打散它到多个步骤可以是它更简单的理解和修改。
你的步骤的名字在工作流中应是易读的。步骤可命名和重命名通过点击已存在的标题。 此外,步骤能被移动或删除使用上移,下移,和删除键,如图3.6
图3.6
在图3.7,Finish Step被放置在Start Step之前,使用这个方法。 虽然不符合逻辑,它只是掩饰你可以重新安排你的工作流步骤在开发过程中的任何时间。
图3.7
同样,如果你需要删除一个步骤,点击在步骤头选择它并点击在Ribbon或者你的键盘的Delete按钮。 图3.6显示Delete按钮。请记住,没有撤销选项,所以确保你确实要删除这个步骤。
嵌套的步骤如图3.8所示。这些允许你组织你的工作流到主步骤和子步骤中。由于你的工作流变得更加复杂, 嵌套步骤将允许你一次性移动整个命令,似的你的工作流开发和修改更容易。
图3.8
并行块是另一个的步骤层。并行块是类似的步骤,除非他们让你连续运行多个动作。 对于一个复杂的工作流不一定互相依赖许多步骤,并行快将允许你完成工作流或至少进展下一个非平行活动。 注意并行块只能在步骤上创建。你可以放置步骤在一个并行块上图3.9
图3.9
3.2.2 条件
条件允许工作流去做决定和响应基于不同的SharePoint列表或最终用户提供的数据。 在本章末尾的例子显示如果经理批准一个项目如何执行和如果项目被拒绝采取不同的行动。 当你需要执行一系列命令,多个步骤能被包含在条件里。
随着在SPD2010中条件的定义。一些只适用确定类型的工作流。如站点工作流,他们是少一些条件的,因为他们不依赖于指定的列表。
常见的条件:这些条件是你最常用的
■ If any value equals value(如果任何值等于值)-允许你去比较一个值从任何数据源。如图3.10 这写数据源可以包括从SharePoint数据列表,变量或者静态值。
图3.10
■ If field equals value(如果字段等于值)-允许你比较当前项目中的字段值与任何其他数据源的值。 这种情况和之前的条件不一样,因为它必须从项目中比较数据。在创建网站工作流此条件不可用,因为它必须使用一个列表项。
其他条件:
■Created by a specific person(创建通过特定的人)-检查当前项目是否由指定的人创建。
■Created in a specific data span(创建在一个特定数据范围)-检查当前项目是否创建在一定范围内的数据
■Modified by a specific person(通过特定的人修改)-检查当前项目是否由指定的人修改
■Modified in a specific data span(修改在一个指定数据范围)— 检查当前项目是否修改在一定范围内的数据
■Person is a valid SharePoint User(用户是否是有效的SharePoint用户)-检查指定的用户是否经过SharePoint验证
因为他们是为某一特定目的配置的,它们更快、更容易的去配置。但是,因为他们是相当具体的,你可能不会经常使用它们。 条件能被配置给检查工作流数据,哪些类型数据可以被工作流使用,包含从列表项的数据, 变量或者其他数据源。 此工作流数据可以与静态录入信息比较,当工作流是写入。
对于这些条件,类型的比较,同样知道的操作(图3.10),是可以允许为其他类型的比较而改变。默认情况下,操作设置为等于,但是你能改变它到其他选项,通过点击当前使用的操作,并选择一个不同的操作。
这里有你数据类型比较可用的操作列表。例如,当比较一个值与一个日期或时间字段,开始和结束操作无法使用。 在SPD 工作流中的可以用操作定义:
■ Equals(等于)-检查2个值是否完全相等,工作在所有的数据类型。条件的大小写敏感。 -Summer Equals Summer=True -Summer Equals summer=False(提醒小写的s)
■ Not Equals(不等于)-检查2个值是否不相等,工作在所有的数据类型。 -Summer not Equals Winter=True
■ Is Empty(是空)-检查引用字段是空值。
■ Is Not Empty(是非空)-检查引用字段不是空值。
■Begins With(开始于)-检查字段开始于一个值 -Summer Begin With Sum=True
■Does Not Begin With(不开始于)-检查第一个字符不是匹配的字符 -Summer Does Not Begin With Wint=True
■Ends With (结束于)-检查字段结束于一个值 -Summer Ends With er=True
■Does Not End With(不结束于)-检查字符串不结束于另一个字符串 -Summer Does Not End with ter=True
■Contains(包含)-检查一个字符串包含另一个字符串 -Summer Contains int=False
■Does Not Contain(不包含)-检查是否不包含另一个字符串 -Sumer Does Not Contain int=True
■Matches Regular Expression(匹配正则表达式)-字符串匹配格式。
■Equals(ignoring case)等于(忽略大小写)-不比较大小写的字符串匹配 -Summer equals(ignoring case)summer=True
■Contains(ignoring case)包含(忽略大小写)-相同内容不比较大小写。 -Sumer contains(ignoring case)MME=True
当有疑问时,可以使用任何值等于任何值的比较,因为它提供了最大的灵活性,可以让你比较广泛的数据。
3.2.3 动作(Action)
到目前为止,我们看到的只有在将一个工作流如何作决定。工作流只做决定,不执行任何操作是没有用的。 为了使我们的工作流有用,我们需要添加动作。SharePoint Designer2010中有很多可用的动作,每个动作设计执行不同的 功能。可用动作按种类可分为6组,再加上最近使用过的动作为第7组。 在添加动作到工作流使用Ribbon按钮,如图(3.11)
图3.11
大多是动作都是自解释的。一些更复杂的动作被包含在本章的例子中。 这里是最流行的动作清单:
SharePoint Designer2010 比SharePoint Designer 2007允许你执行更多类型的动作。核心和列表动作将经常被使用因为它们允许你与SharePoint 数据交互(类似最终用户交互的方式)。设置工作流变量动作是比较重要的,因为它必须被用来捕捉外部来源的数据,然后你在执行更多复杂的动作,如做计算。
3.2.4 变量
如前所述,变量用于当工作流存储和运行数据。各自新工作流实例运行时,新的变量被设置使用, 即时如果多个工作流拷贝多个用户初始化。当一个工作流完成,在变量中的数据将丢失,除非你第一时间将数据存储 到SharePoint列表项的字段中或者保留数据到其他地方,例如把数据放在Email消息中。
当你第一次创建工作流,它并不具有任何变量。在某些情况下,添加动作到你的工作流将自动创建变量。 例如,添加一个做计算动作将自动创建一个Calc变量。添加第二个计算动作将创建一个Calc1变量。 所有的变量必须具有唯一的名称,所以SharePoint Designer添加数字到自动创建的变量之后以保证它们唯一。 你可以重命名任何变量,无论它是手动还是自动创建的,来满足你的需求。
变量设置允许仅有的一些类型的数据,叫数据类型。有些动作需要某些数据类型才能正常工作。 当创建工作流变量时,以下的数据类型是可用的:
■ String—任何长度的文本字符串, ABC.这些都是不言自明的,除了列表项ID。这种数据类型允许你去存储列表项的唯一标识符。 如果你需要在工作流中引用指定的列表项,这可能有用。
你的工作流中的动作使用来分配值给变量。有些动作自动做这个事情,而另外的你需要使用设置工作流变量动作去分配你的值。 当动作本身分配值,你只需要去选择变量在哪里输出就可以了。类型相同的变量会显示,防止你选择不同数据类型的变量。
当使用设置工作流值动作,所有可用变量都会显示,甚至它们不兼容。在这些情况下,有可能分配不兼容的值。这个叫强迫。当使用强迫分配一个值给变量,在查找对话康上的下拉列表让它返回字符串,如图3.12。
图3.12
并非所有的数据类型都可以转换成其他数据类型的,即时这些数据类型在返回字段的下拉列表中, 你不能强制转换一个字符串到列表项ID。设置工作流值的动作不会阻止你尝试一个无效的转换, 但,当你运行工作流时,你将在工作流历史列表中收到错误,如图3.13
如果发生这样的情况,你将需要调整你正在执行强制转换的类型或者分配给变量输入的数据类型。
3.2.5 Else-if branches(其他分支)
Else-if 分支直接参与条件工作为了更好的做出决策。 它们可以设置去执行前面条件为False的判定(类似于Else语句)。 要做到这一点,在现有的条件下放置光标,然后点击Ribbon上的Else If语句块。 使用Else-if分支无需额外的配置。图3.14显示Else-if添加到条件。
图3.14
如果一个额外比较,可以使用Else-if块,你可以添加其他的条件,再点击条件按钮。 你选择可用条件的任何类型并不需要和初始条件相同。图3.15显示Else-if被添加到条件。
图3.15
最后,你可以比较多个数据在一个条件上。这是通过在已存在条件后立即添加另外条件和更改必要的操作。 SharePoint Designer2010 将自动合并成一个单一的块。如图3.16
图3.16
3.2.6 Workflow forms(工作流表单)
用户可以通过表单和工作流进行交互。表单是通过浏览器进行页面查看,允许用户添加额外的数据给工作流。 最简单的方法是使用表单去添加初始化参数给你的工作流。初始化参数类似于变量,除非它们手工启动时显示给用户。 用户可以选择键入数据到参数,变量。另一方面,使用列表中数据可以不允许直接与数据进行交互。 表单在第7章和第10章中详细涵盖。
3.3 创建你的第一个SharePoint Designer 工作流
现在你已经了解了SPD工作流的核心组件,现在我们将获取一些实践经验。我们将使用SharePoint列表和工作流创建一个PTO请求系统。这个例子分为几个部分,侧重于不同工作流组件。此外,每一节都建立在前一节的基础上,所以一定要保证按顺序完成例子。
第一部分将集中精力建立所需的列表去支持PTO工作流。在第二街,我们将创建一个简单的日志记录工作流。 然后添加基本功能处理当一个PTO请求被提交时的通知,最后,我们将添加高级功能跟踪PTO可用的时间。
PTO请求日历将允许员工到日历创建一个新的项目(这个项目涵盖他们要求的时间长度)。 工作流(下一节创建)将路由请求给员工的经理。但是我们在创建工作流之前,我们首先需要创建日历,并设置要批准的内容。 按照在镖3.1的步骤去创建这个PTO日历列表。
随着PTO日历设置完成,员工们可以开始提交他们的PTO请求了。 现在我们建立工作流来帮助促进他们的审批.
3.3.2 创建一个新的工作流,它的日志记录到历史列表
在我们的日历列表,我们现在可以建立PTO请求工作流,在添加工作流的逻辑之前,让我们建立一个简单工作流 它将执行日志记录和发布工作流到日历列表。按照表3.2步骤创建一个基本的SPD工作流,并发布这个工作流到PTO日历。
表3.2
图3.17
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
这里要注意,很多人和我一样,都喜欢在学习的时候用系统账户,就是你登陆SharePoint后,显示System的账户,请注意,如果你使用System去创建PTO Calendar的新项的话,工作流不会自动启动,请使用非系统账户,也就是你自己多申请几个账户,以做测试用。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
3.3.3 添加通知到自定义的PTO请求工作流
现在这个工作流是自动运行和日志记录成功的。现在添加更多高级功能。我们将添加条件和动作去通知用户的经理, 当一个用户申请PTO请求时。我们也将添加逻辑和动作通知用户该请求是被批准还是被拒绝。最后,我们将在这个例子中添加错误处理。 该PTO请求审批将完成。按照表3.3的步骤添加管理审批PTO请求工作流。
表3.3
到这里,我们要暂停工作流,直到用户的经理批准或拒绝PTO请求。我们还需要检查项上的审批状态字段(知道经理如何响应的) 需要注意的是审批状态的值是特定的一些字符文本。它们需要使用等于进行比较。你可以使用包含,但是等于会更有效。 因为它并不需要逐个检查字符串中的字符。
如果邮件不可用,使用日志记录到历史列表来替代发送邮件动作。为确保设计工作,日志消息包含所有引用字段。
继续进入表步骤:
如果审批状态字段是不等于审批或者拒绝的,那么工作流出现问题了。最重要的是要让用户知道,而不是停止工作流。 在现实世界,它也将通知维护工作流的人。这个通知可以被加入另一个否则条件。 发布工作流,创建两个测试项。经理会收到两封电子邮件。作为经理,批准一个请求,拒绝另外一个。测试用户 收到两个电子邮件通知。
3.3.4 添加计算逻辑到工作流
最后步骤将配置第二个列表来跟踪剩余的PTO时间。这份名单将帮助经理决定是否批准或拒绝请求,因为 它跟踪每个用户的累积和剩余PTO小时数。如果PTO申请被批准,这个新的列表将被跟新, 以反映用于请求PTO小时数。
在开始前,让我们先设置PTO跟踪列表。在SharePoint Designer中,点击站点对象菜单下的列表和库。 点击在Ribbon上的自定义列表按钮去创建一个新的自定义列表名字叫PTO Tracker.
创建列表后,添加一个人员或组类型的列,取名 叫Employee。 点击确认去保存Employee列。切回到SharePoint Designer,然后添加两列数字类型的列到PTO Tracker列表。 一个列叫Available Hours,另外一个列叫Used Hours(见图3.18)
图3.18
在SharePoint Designer做出的列表更改知道你按下保存按钮才会生效。其结果就是任何你正在编辑的工作流,将不知道新增加的列表或列, 直到列表的更改被保存。在SharePoint上的直接操作,这些更改是直接生效的,保存按钮不是必须的。这些不同的行为可能会造成混淆, 所以当使用SharePoint Designer时,更改后进行保存,成为你的习惯。
点击“保存”按钮去保存列表的更改。在SharePoint打开PTO Tracker列表,为测试用户添加一项, 设置可用时间为80小时,使用小时数为0小时,并保存此项(图3.19)
图3.19
从PTO Tracker列表中去使用和修改这些数据在你的工作流,你需要捕捉到数据使用变量。然后,这些变量可以根据需要 修改并最终应用于PTO Tracker列表。你还可以添加这些变量到邮件消息的主题,这样经理能够在电子邮件中看到 如果PTO请求者确实有PTO余额。按照表3.4的步骤设置这些执行PTO Tacker列表的变量,并在电子邮件正文中引用他们。
表3.4
图3.20
邮件给经理显示和更新的数据,你需要获取经理响应。如果经理批准请求, 请求PTO时间需要从PTO 跟踪列表中扣除。按照在表3.5的步骤完成这个动作。
表3.5
现在你已经更新好变量中的数据,你需要将数据写回到PTO Tracker列表永久存储它。请记住,当工作流完成, 变量中的数据将丢失。使用更新列表项动作,你可以设置多个字段值。如果PTO被批准,你只要去保存 数据到PTO Tracker裂口表。如果它被拒绝,你不需要保存数据。执行如下动作去保存数据到PTO Tracker 列表。
表3.5(续)
发布这个工作流,并在PTO Calendar使用测试用户创建一个新项。 使用测试用户经理批准此项。 在PTO Tracker列表,你应该通知可用和使用过的时间已经正确更新(图3.21)
图3.21
本章结束
下一章
一步一步学习sharepoint2010 workflow 系列第二部分:sharepoint无代码工作流 第4章 SharePoint Designer工作流中的任务处理
本人声明