FileNet概述自己.docx_第1页
FileNet概述自己.docx_第2页
FileNet概述自己.docx_第3页
FileNet概述自己.docx_第4页
FileNet概述自己.docx_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、FileNet P8系列产品,包括后端服务、开发工具,以及适应企业对内容和流程管理需求的应用程序。2、企业内容管理(ECM:) 业务流程管理(BPM:Business Process Management) 工作流引警(PE:Process Engine)3、FileNet P8 BPM (Business Process Management) 是 IBM 在以内容和人员为中心的流程建设方面的明星产品,尽管它有一个自带的流程管理器(Process Administrator)和流程跟踪器(Process Tracker)来监控和管理运行时流程,但这两个应用比较适合于专业的 IT 人员,而且界面风格比较固定和单一,难以适应企业多变的需求。本文向读者介绍 FileNet P8 工作流生命周期以及相应的用于观察和管理运行时工作流的 PE API(Process Engine Application Programming Interface),这些知识对于构建客户定制的FileNet工作流管理应用是基础性的。概述FileNet P8 是 IBM 新一代的、统一的企业级内容和流程管理平台,它包含广泛的产品和服务,帮助用户在面向服务架构(SOA)的环境中构建,部署,运行和管理企业的内容和流程。它在分布式 (distributed),可获取性 (availability),可调控性 (scalability),安全,标准化等诸多方面都有很强的表现。它包含三大产品组:内容管理 (FileNet Content Manager),流程管理 (FileNet Business Process Manager) 和记录管理 (FileNet Records Manager) 。流程管理包含流程配置控制台 (Process Configuration Console),流程设计器 (Process Designer),流程引擎 (Process Engine),应用引擎 (Application Engine) 等产品和应用。本文内容主要涉及流程引擎(以下简称 PE)。与 FileNet PE 相配套的有两个应用:流程管理器 (Process Administrator) 和流程跟踪器 (Process Tracker),它们可以用来监控和管理 PE 中正在运行的流程实例。但流程管理器和流程跟踪器中的概念和操作相对来说比较复杂,更适合于专门的 IT 人员,对于企业的业务人员来说,通常更希望在一个统一的业务应用里来监控和管理企业里所有的流程实例,这个业务应用将底层的 IT 技术屏蔽,而且很可能集成了其他的日常应用,如办公系统。另外,不同的企业对于流程监控和管理的业务需求很可能有差别,对用户界面的要求也有差别,如有的企业喜欢 Web2.0,有的喜欢桌面软件。因此,开发人员有必要掌握 FileNet PE 中工作流(即流程)的生命周期以及 FileNet 提供的 PE API(用于观察和改变工作流的状态),从而能够为不同的企业开发定制化的流程监控和管理软件。本文主要是为此目的而撰写,但对于想了解 FileNet PE 工作流生命周期及相关底层知识的开发者和架构师来说,本文亦有参考价值。本文假设读者已经具有 FileNet P8 流程管理产品的一些基本知识,能够使用流程设计器创建工作流定义 (Workflow Definition),保存成内容引擎 (Content Engine,以下简称 CE) 中的文档并且转移(Transfer)至 PE 引擎,了解工作区(Workplace)的基本使用方法。相关知识生命周期图一个流程会经历定义,持久化(即保存定义文档),转移(Transfer)至 PE,启动,运行,结束,版本管理等多个过程,本文介绍的是流程定义转移至 PE 后,在 PE 中启动和运行的流程实例的生命周期,而流程实例在运行过程中的主要表现是工作项(Work Item)的生命周期。PE 数据库介绍FileNet PE 运行时数据和状态是保存在数据库中的,这是因为 PE 里的流程都是长流程,要求当电脑发生故障重新启动之后,流程依然能够继续运行,没有任何数据损失。您可以通过查看数据库数据的变化来观察工作流和工作项内容和状态的变化。下面介绍一下 PE 数据库的基本情况,本文假设 FileNet PE 所用的数据库为 DB2,不过即使用的是其他数据库产品,本文的介绍也是类似的。PE 数据库默认名称为 VWDB,其中的表名(不包括 DB2 的系统表)均以 VW 开头,本文关注的有下面这些表: VWRoster 表 如 VWROSTER2_112,这里 2 代表独立区域号 (Isolated Region Number),112 为该独立区域里一个表序号,下文同。 VWRoster 表用来装载工作流实例的根工作项 (Root Work Item) 以及部分一般工作项 (Normal Work Item) 的记录,这些会在下文提到。 VWQueue 表 如 VWQUEUE2_100 。 VWQueue 表主要有两种类型,一种是 User Queue 表,一个独立区域只有一个,用来装载所有该独立区域里的用户收件箱 (My Inbox) 里的工作项的记录,这些会在下文提到,另一种是 Work Queue 表,一个独立区域可以有多个 Work Queue 表,每个对应独立区域里的一个 Work Queue,装载相应公共收件箱 (Public Inbox) 里的工作项的记录。 VWLog 表 如 VWLOG2_113 。是 PE 里的事件日志表,记录流程的启动,运行,一般工作项的打开,移动,完成等事件。 回页首实例简介一个流程定义里可能有许多节点 (Step),但基本的节点种类并不多,我们这里举两个非常简单的流程例子,每个例子只包含一个启动节点 (Launch Step) 和一个通用节点 (General Step),这已经可以用来讲述本文主要内容了。而且,我们只讲基本知识,不会面面俱到,流程定义细节除非特别指出,否则用的都是默认值。我们有 5 个用户 (User): administrator,属于 Administrators 组 (Group) jordan, mark, david,属于 Checkers 组 bill,属于 Adjustors 组 Checkers 组有权访问 Checkers 工作队列 (Work Queue),Adjustors 组有权访问 Adjustors 工作队列。工作队列是在独立区域 (Isolated Region) 里定义的一种组件,其中保存某些用户或组的公共工作项。关于独立区域的设置,请参考 FileNet P8 平台文档 Process Configuration Console (http:/:/ecm_help/pe_help/config.htm) 。第一个流程的定义图如下。图 1. 工作流定义 SampleParticipantFlow定义文档的名称为 SampleParticipantFlow 。节点 ParticipantStep 的目标 (Step Destination) 是 Participants: david, jordan 和 mark 。第二个流程定义图如下。图 2. 工作流定义 SampleWorkQueueFlow定义文档的名称为 SampleWorkQueueFlow 。节点 WorkQueueStep 的目标是 Checkers 工作队列 (Work Queue) 。您可以下载这两个流程定义文件并通过流程设计器导入到您的 CE 中(参见参考资源)。我们假定流程定义已经经过了创建,编辑,保存在 CE 中,转移至 PE 中这些阶段,并且假定流程所运行的独立区域使用的是默认的用户收件箱 (User Inbox), 登记簿 (Roster) 和事件日志 (EventLog) 。以下对流程实例和工作项生命周期中的每个步骤的解说都有三个方面:工作区 (Workplace) 中的操作,VWDB 数据库中相应的数据和变化,相应的用 PE API 查看或管理流程实例或工作项的代码片段和代码执行结果。数据库数据有些时候比较容易观察,有些时候由于涉及到多个数据库表的关联操作而不太容易观察,本文在讲解例子的时候列出了作者的一些观察结果,但只是起到抛砖引玉的作用,不会列出所有的观察结果,读者有兴趣可以进一步尝试。对于代码这一方面,有的介绍的详细些,有的介绍的简单些,避免赘述。下文中的代码都是假设 VWSession 已经通过 administrator 用户获取。另外,代码清单中执行结果(输出)附在代码的后面并用不同的字体显示。回页首流程启动工作区操作我们同时启动两个流程例子。以 administrator 用户登录工作区,定位到工作流定义文档所在的位置,右键选中工作流定义文档 SampleParticipantFlow,然后选择 Launch,如下图所示。图 3. 启动工作流(第一步)在弹出的界面里点 Launch 链接,如下图所示。图 4. 启动工作流(第二步)输入主题 (Subject) SampleParticipantFlowInstance1 ,然后点 Launch 按钮完成流程启动,如下图所示。图 5. 启动工作流(第三步)以同样的方式启动流程 SampleWorkQueueFlow,输入主题 SampleWorkQueueFlowInstance1 。主题可以用来跟踪流程实例运行的状态。数据库变化一个根工作项记录被插入到了 VWRoster 表。代码清单 1. 通过 SQL 语句查看根工作项记录select * from F_SW.VWROSTER2_112 where F_WobNum=F_WorkFlowNumber and F_SUBJECT=SampleParticipantFlowInstance1; F_WOBNUM F_WORKCLASSID F_UNIQUEID F_TIMEOUT F_SERVERID F_BASEVIEWID F_TAG F_TAGTYPE F_ORIGINATOR F_WORKFLOWNUMBER F_STARTTIME F_SUBJECT F_TRACKERSTATUS x59304C5DFA7D2A47A621C41A6BE08AF0 15 +7.49000000000000E+002 - 0 101 * 0. 50 x59304C5DFA7D2A47A621C41A6BE08AF0 1223475598 SampleParticipantFlowInstance1 0 1 record(s) selected.清单 2. 通过 PE API 查看根工作项public void testRetrieveWorkflowInstance() throws VWException VWRoster vwRoster = vwSession.getRoster(DefaultRoster);String filter = F_WobNum=F_WorkFlowNumber and F_SUBJECT=:subject;String subject = SampleParticipantFlowInstance1;Object substitutionVars = new Object subject ;VWRosterQuery rQuery = vwRoster.createQuery( null, null, null, VWRoster.QUERY_NO_OPTIONS, filter, substitutionVars, VWFetchType.FETCH_TYPE_WORKOBJECT);while (rQuery.hasNext() VWWorkObject workObject = (VWWorkObject) rQuery.next(); printFlowInstance(workObject); private void printFlowInstance(VWWorkObject flowInstance) throws VWException System.out.println(t*);System.out.println(tWork Class Name: + flowInstance.getWorkClassName();System.out.println(tWorkflow Number: + flowInstance.getWorkflowNumber();System.out.println(tSubject: + flowInstance.getSubject(); System.out.println(tLaunch Date: + flowInstance.getLaunchDate();System.out.print(tAll Data Fields: );VWDataField dataFields = flowInstance.getDataFields( VWWorkObject.FIELD_USER_AND_SYSTEM_DEFINED, VWWorkObject.FIELD_USER_AND_SYSTEM_DEFINED);printDataFields(dataFields); private void printDataFields(VWDataField dataFields) throws VWException for (int i = 0; i dataFields.length; i+) System.out.print(dataFieldsi.getName() + = + dataFieldsi.getValue() + , ); System.out.println(n);*Work Class Name: SampleParticipantFlowWorkflow Number: 59304C5DFA7D2A47A621C41A6BE08AF0Subject: SampleParticipantFlowInstance1Launch Date: Wed Oct 08 22:19:58 CST 2008All Data Fields: F_WobNum=59304C5DFA7D2A47A621C41A6BE08AF0, F_WorkSpaceId=241, F_Locked=0, F_LockMachine=0, F_LockUser=0, F_BindPending=0, F_BoundUser=0, F_BoundMachine=0, F_Tag=*, F_OperationId=-1, F_WorkClassId=15, F_QueueWPClassId=-6, F_InstrSheetId=-2, F_WorkOrderId=3, F_Class=SampleParticipantFlow, F_Operation=, F_WorkFlowNumber=59304C5DFA7D2A47A621C41A6BE08AF0, F_Originator=50, F_ParentWobNum=00000000000000000000000000000000, F_SplitLeg=-1, F_TrackerStatus=0, F_Overdue=0, F_Response=, F_TransferUser=50, F_StepProcId=5, F_MinMilestone=0, F_MaxMilestone=0, F_Occurrence=1223475599, F_StepName=ParticipantStep, F_StepDescription=, F_LastErrorNumber=0, F_LastErrorText=, F_InstrSheetName=Workflow, F_WsPortType=, F_WsOperation=, F_WsCorrelation=, F_WorkClassRevision=1, F_WFDeadline=0, F_WFReminder=0, F_Trackers=Ljava.lang.String;1ee40a4, F_Comment=, F_Responses=Ljava.lang.Integer;d5e270, F_ResponseCount=0, F_Subject=SampleParticipantFlowInstance1, F_SourceDoc=3:3:P8ObjectStore:E9B66E22-99BF-49BB-BDFF-523C0060593C:D28FD1D2-1A96-43E4-9DB6-18ADE9829F8A, 这里需要注意的是 VWWorkObject 类表示工作项 (Work Item),可以是根工作项或一般工作项,其中根工作项中保存了工作流实例的基本信息。以上代码片段查找到的就是根工作项。判断一个工作项是否为根工作项的标准是:如果它的 F_WobNum 数据字段值等于 F_WorkFlowNumber 数据字段值,它就是一个根工作项,否则它是一个一般工作项。下文如果不特别指出,工作项指的都是一般工作项。您可以看到 VWWorkObject 中数据字段比直接用 SQL 语句查询数据库表得到的记录的数据字段要多,这是因为 VWWorkObject 中的数据来自多个数据库表的集成,PE API 自动帮您把相关数据集成到 VWWorkObject 中。另外一个常见需求:查看一个工作流有多少实例在运行。清单 3. 列出一个工作流的所有实例public void testListWorkflowInstancesByWorkClassName() throws VWException String workClassName = SampleParticipantFlow; VWRoster vwRoster = vwSession.getRoster(DefaultRoster); String filter = F_WobNum = F_WorkFlowNumber; Object substitutionVars = null; VWRosterQuery rQuery = vwRoster.createQuery( null, null, null, VWRoster.QUERY_NO_OPTIONS, filter, substitutionVars, VWFetchType.FETCH_TYPE_WORKOBJECT); while (rQuery.hasNext() VWWorkObject flowInstance = (VWWorkObject) rQuery.next(); if (workClassName.equals(flowInstance.getWorkClassName() printFlowInstance(flowInstance); 这段代码的输出和清单2中的一样。这里 workClassName 指的是工作流定义转移至 PE 时所起的名字。回页首流程运行主要介绍工作项生命周期。工作项的产生和分派 (assign)工作区操作流程例子 SampleParticipantFlow 的节点 ParticipantStep 的节点目标为 Participants,对于这种情况,当流程实例运行到该节点时,会为每位参与者 (participant) 创建一个工作项并发送到他(她)的收件箱 (My Inbox) 里,他(她)可以登录到工作区,到任务 (Tasks) 版块的“我的收件箱” (My Inbox) 里查看这个工作项,这个工作项只有他(她)自己可以看到。在这个例子中,有三个工作项被创建,分别发送到 david, jordan 和 mark 的收件箱里,下图显示了 david 的收件箱。图 6. david 的收件箱流程例子 SampleWorkQueueFlow 的节点 WorkQueueStep 的节点目标为工作队列 Checkers,对于这种情况,当流程实例运行到该节点时,只会创建一个工作项并发送到公共收件箱 (Public Inbox) Checkers 里。任何有权访问 Checkers 公共收件箱的用户都可以在登录到工作区之后,到任务版块的“公共收件箱” (Public Inboxes) 里找到 Checkers 公共收件箱,打开 Checkers 就可以看到那个工作项。下图显示了 jordan 打开 Checkers 公共收件箱。图 7. 公共收件箱 Checkers对于一个可见的工作项,用户可以在工作区中查看它的属性 (Properties),附件 (Attachments),数据字段 (Data Fields) 等,还可以对它进行操作,如打开 (Open) 它,完成 (Complete) 它或重新分配 (Reassign) 它给别的用户,这些会在接下来的几个小节中讲解。数据库变化对于流程例子 SampleParticipantFlow 目标为 Participants 的节点,当只有一个用户 (User) 参与的时候,一个工作项记录被插入到 User Queue 表;当有多个用户参与的时候,对应每个参与者,一个工作项记录被分别插入到 User Queue 表和 VWRoster 表。对于流程例子 SampleWorkQueueFlow 目标为 Work Queue 的节点,一个工作项记录被插入到了 Checkers 工作队列所对应的 Work Queue 表。我们可以总结:所有的工作项记录都存在 VWQueue 表里 (User Queue 表或 Work Queue 表 ),但不是所有的工作项记录都存在 VWRoster 表里;然而,所有的根工作项记录都存在 VWRoster 表而非 VWQueue 表里。代码关于查找工作项,有三个常见的需求。一个是查看某用户收件箱里有哪些工作项正在等待处理(一个用户可能同时参与多个流程实例,因而他(她)的收件箱里可能有多个工作项)。清单 4. 查看 mark 的收件箱public void testListUserInboxWorkItems() throws VWException String userName = mark;String queueNames = vwSession.fetchQueueNames(VWSession.QUEUE_USER_CENTRIC);for (int i = 0; i queueNames.length; i+) String queueName = queueNamesi;VWQueue vwQueue = vwSession.getQueue(queueName); int queryFlags = VWQueue.QUERY_READ_LOCKED; if (queueName.startsWith(Inbox() VWQueueQuery qQuery = vwQueue.createQuery( null, null, null, queryFlags, null, null, VWFetchType.FETCH_TYPE_WORKOBJECT);while (qQuery.hasNext() VWWorkObject workObject = (VWWorkObject) qQuery.next();VWParticipant participant = workObject.getParticipantNamePx();if (participant != null & userName.equals(participant.getParticipantName() printNormalWorkObject(workObject); private void printNormalWorkObject(VWWorkObject workObject) throws VWException System.out.println(t*);System.out.println(tWork Object Number: + workObject.getWorkObjectNumber(); System.out.println(tWork Object Subject: + workObject.getSubject();System.out.println(tWorkflow Name: + workObject.getWorkflowName();System.out.println(tWorkflow Number: + workObject.getWorkflowNumber();System.out.println(tWorkflow Map Name: + workObject.getCallMap();System.out.println(tWorkflow Step Name: + workObject.getStepName();System.out.print(tAll Data Fields: );VWDataField dataFields = workObject.getDataFields(VWWorkObject.FIELD_USER_AND_SYSTEM_DEFINED, VWWorkObject.FIELD_USER_AND_SYSTEM_DEFINED);printDataFields(dataFields); *Work Object Number: 2CA9351E1819C34480A59DF3BF548DD0Work Object Subject: SampleParticipantFlowInstance1Workflow Name: SampleParticipantFlowWorkflow Number: 59304C5DFA7D2A47A621C41A6BE08AF0Workflow Map Name: nullWorkflow Step Name: ParticipantStepAll Data Fields: F_WobNum=2CA9351E1819C34480A59DF3BF548DD0, F_WorkSpaceId=241, F_Locked=0, F_LockMachine=0, F_LockUser=0, F_BindPending=0, F_BoundUser=257, F_BoundMachine=0, F_Tag=*, F_OperationId=-1, F_WorkClassId=15, F_QueueWPClassId=1, F_InstrSheetId=-2, F_WorkOrderId=3, F_Class=SampleParticipantFlow, F_Operation=, F_WorkFlowNumber=59304C5DFA7D2A47A621C41A6BE08AF0, F_Originator=50, F_ParentWobNum=59304C5DFA7D2A47A621C41A6BE08AF0, F_SplitLeg=257, F_TrackerStatus=0, F_Overdue=0, F_Response=, F_TransferUser=50, F_StepProcId=5, F_MinMilestone=0, F_MaxMilestone=0, F_Occurrence=1223475599, F_StepName=ParticipantStep, F_StepDescription=, F_LastErrorNumber=0, F_LastErrorText=, F_InstrSheetName=Workflow, F_WsPortType=, F_WsOperation=,F_WsCorrelation=, F_WorkClassRevision=1, F_WFDeadline=0, F_WFReminder=0, F_Trackers=Ljava.lang.String;e222eb, F_Comment=, F_Responses=Ljava.lang.Integer;62af46, F_ResponseCount=0, F_Subject=SampleParticipantFlowInstance1, F_SourceDoc=3:3:P8ObjectStore:E9B66E22-99BF-49BB-BDFF-523C0060593C: D28FD1D2-1A96-43E4-9DB6-18ADE9829F8A,另一个是查看某工作队列里有哪些正在等待处理的工作项。清单 5. 查看 Checkers 工作队列public void testListWorkQueueWorkItems() throws VWException String workQueueName = Checkers; String queueNames = vwSession.fetchQueueNames(VWSession.QUEUE_PROCESS);for (int i = 0; i queueNames.length; i+) String queueName = queueNamesi;VWQueue vwQueue = vwSession.getQueue(queueName); int queryFlags = VWQueue.QUERY_READ_LOCKED; if (workQueueName.equals(queueName) VWQueueQuery qQuery = vwQueue.createQuery( null, null, null, queryFlags, null, null, VWFetchType.FETCH_TYPE_WORKOBJECT); while (qQuery.hasNext() VWWorkObject workObject = (VWWorkObject) qQuery.next(); printNormalWorkObject(workObject); *Work Object Number: 78C985FD93FF404BB6989D79E35CFA7EWork Object Subject: SampleWorkQueueFlowInstance1Workflow Name: SampleWorkQueueFlowWorkflow Number: 78C985FD93FF404BB6989D79E35CFA7EWorkflow Map Name: nullWorkflow Step Name: WorkQueueStepAll Data Fields: F_WobNum=78C985FD93FF404BB6989D79E35CFA7E, F_WorkSpaceId=262, F_Locked=0, F_LockMachine=0, F_LockUser=0, F_BindPending=0, F_BoundUser=0, F_BoundMachine=0, F_Tag=*, F_OperationId=-1, F_WorkClassId=16, F_QueueWPClassId=6, F_InstrSheetId=-2, F_WorkOrderId=3, F_Class=SampleWorkQueueFlow, F_Operation=, F_WorkFlowNumber=78C985FD93FF404BB6989D79E35CFA7E, F_Originator=50, F_ParentWobNum=00000000000000000000000000000000, F_SplitLeg=-1, F_TrackerStatus=0, F_Overdue=0, F_Response=, F_TransferUser=50, F_StepProcId=5, F_MinMilestone=0, F_MaxMilestone=0, F_Occurrence=1223475753, F_StepName=WorkQueueStep, F_StepDescription=, F_LastErrorNumber=0, F_LastErrorText=, F_InstrSheetName=Workflow, F_WsPortType=, F_WsOperation=, F_WsCorrelation=, F_WorkClassRevision=1, F_WFDeadline=0, F_WFReminder=0, F_Trackers=Ljava.lang.String;54643, F_Comment=, F_Responses=Ljava.lang.Integer;481958, F_ResponseCount=0, F_Subject=SampleWorkQueueFlowInstance1, F_SourceDoc=3:3:P8ObjectStore:2B4580BC-EBA5-4370-BC79-DF3B36F3C328: 15F32C47-A80D-4792-92C1-A4BBCBC96AD1,再一个是查看一个流程实例当前有多少工作项正在等待处理。清单 6. 查看一个流程实例的活动工作项public void testListWorkflowInstanceWorkItems() throws VWException String workflowNumber = 59304C5DFA7D2A47A621C41A6BE08AF0;String queueNames = vwSession.fetchQueueNames(VWSession.QUEUE_PROCESS | VWSession.QUEUE_USER_CENTRIC);for (int i = 0; i queueNames.length; i+) String queueName = queueNamesi; VWQueue vwQueue = vwSession.getQueue(queueName); int queryFlags = VWQueue.QUERY_READ_LOCKED; VWQueueQuery qQuery = vwQueue.createQuery(null, null, null, queryFlags, null, null, VWFetchType.FETCH_TYPE_WORKOBJECT); while (qQuery.hasNext() VWWorkObject workObject = (VWWorkObject) qQuery.next(); if (workflowNumber.equals(workObject.getWorkflowNumber() printNormalWorkObject(workObject); *Work Object Number: 4F9A0983DDDC6B438EEC6DF1D40FC203Work Object Subject: SampleParticipantFlowInstance1Workflow Name: SampleParticipantFlowWorkflow Number: 59304C5DFA7D2A47A621C41A6BE08AF0Workflow Map Name: nullWorkflow Step Name: ParticipantStepAll Data Fields: F_WobNum=4F9A0983DDDC6B438EEC6DF1D40FC203, F_WorkSpaceId=241, F_Locked=0, F_LockMachine=0, F_LockUser=0, F_BindPending=0, F_BoundUser=255, F_BoundMachine=0, F_Tag=*, F_OperationId=-1, F_WorkClassId=15, F_QueueWPClassId=1, F_InstrSheetId=-2, F_WorkOrderId=3, F_Class=SampleParticipantFlow, F_Operation=, F_WorkFlowNumber=59304C5DFA7D2A47A621C41A6BE08AF0, F_Originator=50, F_ParentWobNum=59304C5DFA7D2A47A621C41A6BE08AF0, F_SplitLeg=255, F_TrackerStatus=0, F_Overdue=0, F_Response=, F_TransferUser=50, F_StepProcId=5, F_MinMilestone=0, F_MaxMilestone=0, F_Occurrence=1223475599, F_StepName=ParticipantStep, F_StepDescription=, F_LastErrorNumber=0, F_LastErrorText=, F_InstrSheetName=Workflow, F_WsPortType=, F_WsOperation=, F_WsCorrelation=, F_WorkClassRevision=1, F_WFDeadline=0, F_WFReminder=0, F_Trackers=Ljava.lang.String;e15a69, F_Comment=, F_Responses=Ljava.lang.Integer;f6af3b, F_ResponseCount=0, F_Subject=SampleParticipantFlowInstance1, F_SourceDoc=3:3:P8ObjectStore:E9B66E22-99BF-49BB-BDFF-523C0060593C:D28FD1D2-1A96-43E4-9DB6-18ADE9829F8A, *Work Object Number: FE20BFB3C16A964981B7270D8A1CB4CAWork Object Subject: SampleParticipantFlowInstance1Workflow Name: SampleParticipantFlowWorkflow Number: 59304C5DFA7D2A47A621C41A6BE08AF0Workflow Map Name: nullWorkflow Step Name:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论