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

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

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.67/5 (2投票s)

2013年11月19日

CPOL

7分钟阅读

viewsIcon

28613

本文描述了如何使用 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

在本文中,我们将考虑一个用于请假审批流程的工作流系统。员工通过将文档放入文件夹来提出请假请求。然后系统会获取该文档并将其路由给员工的经理。经理可以“批准”或“拒绝”请假请求。如果经理休假或不在,请假请求将路由给经理的上司进行审批。如果经理和他的上司未能回应请假申请,请假请求将“超时”并返回给员工。请参考图 1。

数据库设计

数据库由两个表组成:“Employee”表和“EmployeeLeaveHistory”表。

列名和主键如图 2 所示。

图 2

注意事项

  • 当员工的请假请求获得“批准”时,根据请假类型,所请求的请假天数将从“病假余额”或“年假余额”中扣除。
  • 如果请求的请假天数大于可用请假天数,则请假请求将自动“拒绝”,然后再路由给员工的经理。
  • “Employee Leave History”表维护员工请假记录。当请假请求获得“批准”时,会在此表中插入一行。

存储过程

已经编写了几个存储过程,用于图 2 中所示表的查询和记录插入等常见任务。存储过程列表如图 3 所示。

图 3

数据库库

数据库库用于与 SQL Server 数据库进行交互。这个数据库库被 BizTalk 项目引用,并直接由 Orchestration 调用以执行数据库相关操作。由于所有被 BizTalk 引用的程序集都必须放置在全局程序集缓存 (GAC) 中,因此这个数据库库必须存在于 GAC 中。数据库库的类图如图 4 所示。

图 4

BizTalk 工件

BizTalk 解决方案通常包括以下内容:

  • 一个架构 – LeaveApp.xsd
  • 一个属性架构(用于将架构属性公开到业务流程和端口中)
  • 一个业务流程 – RouteLeaveApplications.odx & ProcessLeaveApplications.odx
  • 一个管道(可选)

架构

请假申请架构封装了请假处理所需的所有相关信息。设计架构是任何 BizTalk 项目的第一步。请参阅图 5 中的请假申请架构。架构的元素是自解释的。

图 5

业务流程

业务流程本质上是一个业务流程。在本例中,业务流程工作流被分为两部分。第一部分将员工提交的请假申请路由给经理。第二部分负责获取“批准/拒绝/超时”的请假请求并采取适当的行动。

业务流程中的消息绑定到架构,在本例中是图 5 所示的“LeaveApp”架构。业务流程中有两条消息,一条是传入消息,另一条是传出消息。

RouteLeaveApplications”业务流程执行以下操作…

  • 业务流程从 SharePoint 文件夹中获取请假请求消息。
  • 消息根据“Employee”表中可用的请假天数进行验证。如果没有可用请假,则由存储过程引发异常。此异常由业务流程捕获,并将消息发送回请求员工的文件夹。请参阅图 6。

图 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 路径的硬编码,这可以移到环境变量中。

图 7

与 SharePoint 的集成

BizTalk 与 SharePoint 的集成是本文最重要的部分。Windows SharePoint Services 适配器将文档库与 BizTalk 系统集成。

文档库

文档库只是一个文件的存储库。它还提供签入、签出和版本控制等附加功能。

图 8

图 8 显示了为组织中的员工创建的各种文档库。重要提示:创建文档库时,请确保其架构模板是请假申请架构的模板,否则 SharePoint 无法处理请假申请属性。

视图

图 9

图 9 显示了两个视图。

  • TimedOutForms – 此视图仅显示“超时”的请假申请。这是通过设置视图的筛选属性来实现的,以显示已逾期 1 天的请假申请。这意味着前一天逾期的请假申请将在今天“超时”。
  • ApprovedRejectedDocs – 此视图仅显示“批准”或“拒绝”的请假申请。

注意:视图用于 BizTalk 获取请假申请消息。那些未出现在视图中的消息将被 BizTalk 忽略。

 

图 10 显示了 Joe 文件夹中一条“超时”消息。

图 10

InfoPath – 使用 InfoPath 编辑 XML 文档

图 11 显示了使用 InfoPath 填写“JoeLeaveApplication”XML 文档的过程。

图 11

事件查看器 – 可用于监控工作流。

请注意图 12 中的消息,这些消息记录在事件查看器中,是关于 Joe 的请假申请一直处于“超时”状态。

图 12

关于可下载代码…

  • 解压并将数据库备份文件 EmployeeDB.zip 还原到您电脑上的 SQL 数据库服务器中。该文件已在 SQL Server 2005 上创建。
  • 解压 BizTalk 项目 zip 文件到 C:\ 驱动器,并保留文件夹名。使用绑定文件设置端口。在 Visual Studio 2005 中编辑 BizTalk 项目并更新 SharePoint 连接字符串。
  • 添加用户环境变量 "DBLIB.EMPLOYEEUTIL",其值为数据库连接字符串。
  • 将 LeaveRequestMessage 放入 LeaveApplication 文档库文件夹中,并检查事件查看器。
© . All rights reserved.