使用 BizTalk Server 2006 和 Sharepoint Server 2003 实施请假申请工作流系统






3.67/5 (2投票s)
本文描述了如何使用 BizTalk Server 和 SharePoint Server 设计和开发简单的工作流系统。InfoPath 也用于编辑 XML 文档。
引言
本文描述了如何使用 BizTalk Server 和 SharePoint Server 设计和开发简单的工作流系统。InfoPath 也用于编辑 XML 文档。
人工工作流 – 它意味着什么?
工作流是文档或任务在几个人之间的移动。在人工工作流中,几个人使用业务流程进行通信。这个业务流程被实现为工作流。例如,一篇文章(文档)可能会被发送给几个人进行审阅,在一个出版公司。在本文中,我们将考虑一个“请假审批工作流”。员工提交的请假申请会路由给经理和他的上司,以获取他们的意见或批准。
BizTalk、SharePoint 和 InfoPath 的作用
BizTalk Server 2006 – BizTalk 用于组织工作流并确定文档的路由。它还用于进行与工作流相关的数据库更改。
SharePoint Server 2003 – SharePoint 用作请假申请文档的存储库。它还包含几个视图,供 BizTalk 获取正确的文档。
InfoPath 2003 – InfoPath 2003 用于从 XML 架构编辑 XML 实例文档。
目标读者
本文使用 BizTalk 2006、SQL Server 2005、Visual Studio 2005、SharePoint Server 2003 和 InfoPath 2003。本文的读者应具有这些产品相当的工作经验。
请假工作流系统
在本文中,我们将考虑一个用于请假审批流程的工作流系统。员工通过将文档放入文件夹来提出请假请求。然后系统会获取该文档并将其路由给员工的经理。经理可以“批准”或“拒绝”请假请求。如果经理休假或不在,请假请求将路由给经理的上司进行审批。如果经理和他的上司未能回应请假申请,请假请求将“超时”并返回给员工。请参考图 1。
数据库设计
数据库由两个表组成:“Employee”表和“EmployeeLeaveHistory”表。
列名和主键如图 2 所示。
注意事项
- 当员工的请假请求获得“批准”时,根据请假类型,所请求的请假天数将从“病假余额”或“年假余额”中扣除。
- 如果请求的请假天数大于可用请假天数,则请假请求将自动“拒绝”,然后再路由给员工的经理。
- “Employee Leave History”表维护员工请假记录。当请假请求获得“批准”时,会在此表中插入一行。
存储过程
已经编写了几个存储过程,用于图 2 中所示表的查询和记录插入等常见任务。存储过程列表如图 3 所示。
数据库库
数据库库用于与 SQL Server 数据库进行交互。这个数据库库被 BizTalk 项目引用,并直接由 Orchestration 调用以执行数据库相关操作。由于所有被 BizTalk 引用的程序集都必须放置在全局程序集缓存 (GAC) 中,因此这个数据库库必须存在于 GAC 中。数据库库的类图如图 4 所示。
BizTalk 工件
BizTalk 解决方案通常包括以下内容:
- 一个架构 – LeaveApp.xsd
- 一个属性架构(用于将架构属性公开到业务流程和端口中)
- 一个业务流程 – RouteLeaveApplications.odx & ProcessLeaveApplications.odx
- 一个管道(可选)
架构
请假申请架构封装了请假处理所需的所有相关信息。设计架构是任何 BizTalk 项目的第一步。请参阅图 5 中的请假申请架构。架构的元素是自解释的。
业务流程
业务流程本质上是一个业务流程。在本例中,业务流程工作流被分为两部分。第一部分将员工提交的请假申请路由给经理。第二部分负责获取“批准/拒绝/超时”的请假请求并采取适当的行动。
业务流程中的消息绑定到架构,在本例中是图 5 所示的“LeaveApp”架构。业务流程中有两条消息,一条是传入消息,另一条是传出消息。
“RouteLeaveApplications
”业务流程执行以下操作…
- 业务流程从 SharePoint 文件夹中获取请假请求消息。
- 消息根据“Employee”表中可用的请假天数进行验证。如果没有可用请假,则由存储过程引发异常。此异常由业务流程捕获,并将消息发送回请求员工的文件夹。请参阅图 6。
“ProcessLeaveApplications
”业务流程执行以下操作。
- BizTalk 引擎监视 SharePoint 中经理的文件夹,并检查是否发生了以下情况,然后获取消息。
- 请假申请消息状态字段设置为“APPROVED”或“REJECTED”。
- 请假申请消息状态字段设置为默认值“REQUEST”,在经过设定的超时时间后仍未更改。
- 在上一步中获取的消息被路由到经理的上司,在本例中是 Jack,以供审批。如果 Jack 未批准且经过设定的超时时间,则消息再次被获取,其状态被设置为“TIMEOUT”,并路由回提出此请求的员工,在本例中是“JOE”。请参阅图 7。
动态端口
用于与 SharePoint 交互的 BizTalk 端口是动态端口。BizTalk 只有在收到请假请求消息并检索到员工的经理姓名后,才能确定目标文件夹。
超时消息处理的代码清单
LeaveAppOut = LeaveAppIn; LeaveAppOut(LeaveWorkflowSystem.Status) = "TIMEDOUT"; LeaveAppOut(LeaveWorkflowSystem.Comments) = "Leave request timed out even after escalation."; destinationFolder = LeaveAppIn(LeaveWorkflowSystem.EmpName); SendLeaveAppPort(Microsoft.XLANGs.BaseTypes.Address) = "wss://win2k-2005-pc:80/sites/BizTalkDemos/" + destinationFolder + "";
注意:代码中的最后一行通过设置动态端口的值来指定消息的目的地。不用担心 SharePoint 路径的硬编码,这可以移到环境变量中。
与 SharePoint 的集成
BizTalk 与 SharePoint 的集成是本文最重要的部分。Windows SharePoint Services 适配器将文档库与 BizTalk 系统集成。
文档库
文档库只是一个文件的存储库。它还提供签入、签出和版本控制等附加功能。
图 8 显示了为组织中的员工创建的各种文档库。重要提示:创建文档库时,请确保其架构模板是请假申请架构的模板,否则 SharePoint 无法处理请假申请属性。
视图
图 9 显示了两个视图。
- TimedOutForms – 此视图仅显示“超时”的请假申请。这是通过设置视图的筛选属性来实现的,以显示已逾期 1 天的请假申请。这意味着前一天逾期的请假申请将在今天“超时”。
- ApprovedRejectedDocs – 此视图仅显示“批准”或“拒绝”的请假申请。
注意:视图用于 BizTalk 获取请假申请消息。那些未出现在视图中的消息将被 BizTalk 忽略。
图 10 显示了 Joe 文件夹中一条“超时”消息。
InfoPath – 使用 InfoPath 编辑 XML 文档
图 11 显示了使用 InfoPath 填写“JoeLeaveApplication”XML 文档的过程。
事件查看器 – 可用于监控工作流。
请注意图 12 中的消息,这些消息记录在事件查看器中,是关于 Joe 的请假申请一直处于“超时”状态。
关于可下载代码…
- 解压并将数据库备份文件 EmployeeDB.zip 还原到您电脑上的 SQL 数据库服务器中。该文件已在 SQL Server 2005 上创建。
- 解压 BizTalk 项目 zip 文件到 C:\ 驱动器,并保留文件夹名。使用绑定文件设置端口。在 Visual Studio 2005 中编辑 BizTalk 项目并更新 SharePoint 连接字符串。
- 添加用户环境变量 "
DBLIB.EMPLOYEEUTIL
",其值为数据库连接字符串。 - 将 LeaveRequestMessage 放入 LeaveApplication 文档库文件夹中,并检查事件查看器。