你知道我要说什么的,当这个世界被XML符号标识后,我一直尽力向它靠拢。面向对象数据库都出现了,我还能不好好学习学习XML吗?
   
今天要说的如何将储存在Captaris Workflow 6.0工作流平台数据库中的业务数据保存到另一个业务系统中。

如大家所知,一个系统与另一个系统最难的就是交互,就算是使用XML这种通用、跨平台的方式也意味着添加或修改现有的接口。不幸的是,做为一个工作流系统,必须要具有这样的能力。为了满足这样的需求,大部分(包括Captaris)工作流平台都或多或少地使用了XML技术,以能对外宣称:“我的平台能跨越N个操作系统,支持N种交互方式”。

闲话少说,言归正传。Captaris Workflow 6.0的模型、流程实例的数据都以XML方式储存在SQL Server 2005的数据库中,常见的格式如下:


>

Captaris提供了很多种常见的与外部系统交互的功能(Action):

  1. WebService请求或响应;

  2. 文件系统监视;

  3. BizTalk事件;

  4. SharePoint事件;

遗憾的是没有提供对数据记录的事件响应,流程分析人员在把流程模型交给流程开发人员(IT)后,流程开发人员就要面临如何将工作流与各种业务系统连接起来,如人员招聘流程结束后如何反应到HR系统中,或费用报销流程结束后如何反应到财务系统中甚至反应到商业行为控制系统中(如果费用中包含礼品、应酬等费用时)。通常可用的连接方式如下:

  1. 通过WebService把记录插入到业务系统,或更新业务系统中的数据;(业务逻辑级别交互)

  2. 将记录直接插入到业务系统的数据库;(数据库级别交互,这种方式是我用得最多的了)

  3. 通过Windows服务将记录插入到业务系统;可使用WebService、数据库直接交互、MSMQ…

前两种方式都是即席(同步)的操作,Windows服务前两种方式的基础上添加了异步操作的特性,使得系统性能和执行效率得以提升。

不管是使用WebService还是数据库直接交互(特别是数据库直接交互),流程开发人员都要面临从Teamplate数据库中取得并分解业务数据,以符合WebService或业务系统数据库的接口要求。

SQL Server 2005原生支持XML。因此,可以通过Xquery来直接操作XML,就象SQL Server 2000中的OPENXML一样。只是在性能和效率上(特别是吃内存)提升得非非非常大。

示例如下:



 1如何获取Captaris Workflow 6.0工作流平台中的业务数据。set ANSI_NULLS ON
 2如何获取Captaris Workflow 6.0工作流平台中的业务数据。set QUOTED_IDENTIFIER ON
 3如何获取Captaris Workflow 6.0工作流平台中的业务数据。go
 4如何获取Captaris Workflow 6.0工作流平台中的业务数据。
 5如何获取Captaris Workflow 6.0工作流平台中的业务数据。
 6如何获取Captaris Workflow 6.0工作流平台中的业务数据。-- =============================================
 7如何获取Captaris Workflow 6.0工作流平台中的业务数据。-- Author:        <蒋勇星>
 8如何获取Captaris Workflow 6.0工作流平台中的业务数据。-- Create date: <2006-12-25>
 9如何获取Captaris Workflow 6.0工作流平台中的业务数据。-- Description:    <从Teamplate数据库中检索"产品更改单数据">
10如何获取Captaris Workflow 6.0工作流平台中的业务数据。-- =============================================
11如何获取Captaris Workflow 6.0工作流平台中的业务数据。ALTER PROCEDURE [dbo].[FetchProductChangeByPID] 
12如何获取Captaris Workflow 6.0工作流平台中的业务数据。    -- Add the parameters for the stored procedure here
13如何获取Captaris Workflow 6.0工作流平台中的业务数据。    @PID INT --流程编号
14如何获取Captaris Workflow 6.0工作流平台中的业务数据。AS
15如何获取Captaris Workflow 6.0工作流平台中的业务数据。BEGIN
16如何获取Captaris Workflow 6.0工作流平台中的业务数据。    -- SET NOCOUNT ON added to prevent extra result sets from
17如何获取Captaris Workflow 6.0工作流平台中的业务数据。    -- interfering with SELECT statements.
18如何获取Captaris Workflow 6.0工作流平台中的业务数据。    SET NOCOUNT ON;
19如何获取Captaris Workflow 6.0工作流平台中的业务数据。
20如何获取Captaris Workflow 6.0工作流平台中的业务数据。DECLARE @xmlOfFormData XML --承载"Common"字段的XML变量,包含PC单的基本信息
21如何获取Captaris Workflow 6.0工作流平台中的业务数据。DECLARE @xmlOfSignature XML --承载"SignData"字段的XML变量,包含PC单的签署信息
22如何获取Captaris Workflow 6.0工作流平台中的业务数据。DECLARE @FORMXMLNAME NVARCHAR(20)
23如何获取Captaris Workflow 6.0工作流平台中的业务数据。DECLARE @SIGNATUREXMLNAME AS NVARCHAR(20)
24如何获取Captaris Workflow 6.0工作流平台中的业务数据。DECLARE @PCNO NVARCHAR(16)
25如何获取Captaris Workflow 6.0工作流平台中的业务数据。DECLARE @FILENO NVARCHAR(100)
26如何获取Captaris Workflow 6.0工作流平台中的业务数据。DECLARE @PCNAME NVARCHAR(200)
27如何获取Captaris Workflow 6.0工作流平台中的业务数据。DECLARE @CHANGECATEGORIES INT
28如何获取Captaris Workflow 6.0工作流平台中的业务数据。DECLARE @CHANGETYPE INT
29如何获取Captaris Workflow 6.0工作流平台中的业务数据。DECLARE @CHANGEDREASON NVARCHAR(300)
30如何获取Captaris Workflow 6.0工作流平台中的业务数据。DECLARE @REQUESTDATE DATETIME
31如何获取Captaris Workflow 6.0工作流平台中的业务数据。DECLARE @INPRODUCECOMMENT NVARCHAR(200)
32如何获取Captaris Workflow 6.0工作流平台中的业务数据。DECLARE @PRODUCINGCOMMENT NVARCHAR(200)
33如何获取Captaris Workflow 6.0工作流平台中的业务数据。DECLARE @SENDPCOMMENT  NVARCHAR(200)
34如何获取Captaris Workflow 6.0工作流平台中的业务数据。DECLARE @NEEDVALIDATE INT
35如何获取Captaris Workflow 6.0工作流平台中的业务数据。DECLARE @CHNGCATEGORYEXT NVARCHAR(20)
36如何获取Captaris Workflow 6.0工作流平台中的业务数据。DECLARE @AFFECTEDPC NVARCHAR(100)
37如何获取Captaris Workflow 6.0工作流平台中的业务数据。DECLARE @PLANCOMTIME DATETIME
38如何获取Captaris Workflow 6.0工作流平台中的业务数据。DECLARE @FACTCOMTIME DATETIME
39如何获取Captaris Workflow 6.0工作流平台中的业务数据。
40如何获取Captaris Workflow 6.0工作流平台中的业务数据。SELECT  @FORMXMLNAME = 'Common'
41如何获取Captaris Workflow 6.0工作流平台中的业务数据。SELECT  @SIGNATUREXMLNAME = 'SignData'
42如何获取Captaris Workflow 6.0工作流平台中的业务数据。--查询PROCESSDATA表中的'Common'字段,给@xmlOfFormData赋值
43如何获取Captaris Workflow 6.0工作流平台中的业务数据。SELECT @xmlOfFormData = [DATA] 
44如何获取Captaris Workflow 6.0工作流平台中的业务数据。  FROM [Teamplate].[dbo].[PROCESSDATA]
45如何获取Captaris Workflow 6.0工作流平台中的业务数据。 WHERE([PID] = @PID AND
46如何获取Captaris Workflow 6.0工作流平台中的业务数据。       [NAME] = @FORMXMLNAME)
47如何获取Captaris Workflow 6.0工作流平台中的业务数据。--查询PROCESSDATA表中的'SignData'字段,给@xmlOfSignature赋值
48如何获取Captaris Workflow 6.0工作流平台中的业务数据。SELECT @xmlOfSignature =  [DATA] 
49如何获取Captaris Workflow 6.0工作流平台中的业务数据。  FROM [Teamplate].[dbo].[PROCESSDATA]
50如何获取Captaris Workflow 6.0工作流平台中的业务数据。 WHERE([PID] = @PID AND
51如何获取Captaris Workflow 6.0工作流平台中的业务数据。       [NAME] = @SIGNATUREXMLNAME)
52如何获取Captaris Workflow 6.0工作流平台中的业务数据。--分解XML并赋值到变量中
53如何获取Captaris Workflow 6.0工作流平台中的业务数据。SELECT
54如何获取Captaris Workflow 6.0工作流平台中的业务数据。        @PID = Table1.Column1.value('(/Common/PCOrderData/ProcessID)[1]','int'),
55如何获取Captaris Workflow 6.0工作流平台中的业务数据。        @PCNO = Table1.Column1.value('(/Common/PCOrderData/PCNO)[1]','nvarchar(16)'),
56如何获取Captaris Workflow 6.0工作流平台中的业务数据。        @FILENO = Table1.Column1.value('(/Common/PCOrderData/FileNO)[1]','nvarchar(100)'),
57如何获取Captaris Workflow 6.0工作流平台中的业务数据。        @CHANGECATEGORIES = Table1.Column1.value('(/Common/PCOrderData/ChangedCategoris)[1]','int'),
58如何获取Captaris Workflow 6.0工作流平台中的业务数据。        @CHANGETYPE = Table1.Column1.value('(/Common/PCOrderData/ChangedType)[1]','int'),
59如何获取Captaris Workflow 6.0工作流平台中的业务数据。        @CHANGEDREASON = Table1.Column1.value('(/Common/PCOrderData/ChangedReason)[1]','nvarchar(200)'),
60如何获取Captaris Workflow 6.0工作流平台中的业务数据。        @REQUESTDATE = Table1.Column1.value('(/Common/PCOrderData/RequestDate)[1]','datetime'),
61如何获取Captaris Workflow 6.0工作流平台中的业务数据。        @INPRODUCECOMMENT = Table1.Column1.value('(/Common/PCOrderData/InproduceIdea)[1]','nvarchar(200)'),
62如何获取Captaris Workflow 6.0工作流平台中的业务数据。        @PRODUCINGCOMMENT = Table1.Column1.value('(/Common/PCOrderData/producedIdea)[1]','nvarchar(200)'),
63如何获取Captaris Workflow 6.0工作流平台中的业务数据。        @SENDPCOMMENT = Table1.Column1.value('(/Common/PCOrderData/SendPIdea)[1]','nvarchar(200)'),
64如何获取Captaris Workflow 6.0工作流平台中的业务数据。        @NEEDVALIDATE = Table1.Column1.value('(/Common/PCOrderData/IsValidated)[1]','int'),
65如何获取Captaris Workflow 6.0工作流平台中的业务数据。        @CHNGCATEGORYEXT = Table1.Column1.value('(/Common/PCOrderData/ChangedCategorisTxt)[1]','nvarchar(20)'),
66如何获取Captaris Workflow 6.0工作流平台中的业务数据。        @AFFECTEDPC = Table1.Column1.value('(/Common/TogetherPC)[1]','nvarchar(200)'),
67如何获取Captaris Workflow 6.0工作流平台中的业务数据。        @PLANCOMTIME = Table1.Column1.value('(/Common/SubmitData/PlanComTime)[1]','datetime'),
68如何获取Captaris Workflow 6.0工作流平台中的业务数据。        @FACTCOMTIME = Table1.Column1.value('(/Common/SubmitData/FactComTime)[1]','datetime')
69如何获取Captaris Workflow 6.0工作流平台中的业务数据。FROM
70如何获取Captaris Workflow 6.0工作流平台中的业务数据。        @xmlOfFormData.nodes('/Common') AS Table1(Column1)
71如何获取Captaris Workflow 6.0工作流平台中的业务数据。
72如何获取Captaris Workflow 6.0工作流平台中的业务数据。
73如何获取Captaris Workflow 6.0工作流平台中的业务数据。SELECT @PID AS [PID],
74如何获取Captaris Workflow 6.0工作流平台中的业务数据。       @PCNO AS [PCNO],
75如何获取Captaris Workflow 6.0工作流平台中的业务数据。       @FILENO AS [FILENO],
76如何获取Captaris Workflow 6.0工作流平台中的业务数据。       @CHANGECATEGORIES AS [CHANGECATEGORIES],
77如何获取Captaris Workflow 6.0工作流平台中的业务数据。       @CHANGETYPE AS [CHANGETYPE ],
78如何获取Captaris Workflow 6.0工作流平台中的业务数据。       @CHANGEDREASON AS [CHANGEDREASON],
79如何获取Captaris Workflow 6.0工作流平台中的业务数据。       @REQUESTDATE AS [REQUESTDATE],
80如何获取Captaris Workflow 6.0工作流平台中的业务数据。       @INPRODUCECOMMENT AS [INPRODUCECOMMENT],
81如何获取Captaris Workflow 6.0工作流平台中的业务数据。       @PRODUCINGCOMMENT AS [PRODUCINGCOMMENT],
82如何获取Captaris Workflow 6.0工作流平台中的业务数据。       @SENDPCOMMENT AS [SENDPCOMMENT],
83如何获取Captaris Workflow 6.0工作流平台中的业务数据。       @NEEDVALIDATE AS [NEEDVALIDATE],
84如何获取Captaris Workflow 6.0工作流平台中的业务数据。       @CHNGCATEGORYEXT AS [CHNGCATEGORYEXT],
85如何获取Captaris Workflow 6.0工作流平台中的业务数据。       @AFFECTEDPC AS [AFFECTEDPC],
86如何获取Captaris Workflow 6.0工作流平台中的业务数据。       @PLANCOMTIME AS [PLANCOMTIME],
87如何获取Captaris Workflow 6.0工作流平台中的业务数据。       @FACTCOMTIME AS [FACTCOMTIME]
88如何获取Captaris Workflow 6.0工作流平台中的业务数据。END

套用最近流行的一句话:球进了他不是一个人

相关文章:

  • 2021-12-21
  • 2021-12-21
  • 2021-12-06
  • 2021-10-17
  • 2021-06-08
  • 2021-11-02
  • 2021-11-17
猜你喜欢
  • 2021-12-27
  • 2021-06-12
  • 2022-03-05
  • 2021-12-01
  • 2021-12-04
  • 2021-08-15
相关资源
相似解决方案