<fpdl:StartNodeDisplayName="开始"Id="myFirstProcess.START_NODE" Name="START_NODE">
<fpdl:ExtendedAttributes>
<fpdl:ExtendedAttributeName="FIRE_FLOW.bounds.height" Value="20"/>
<fpdl:ExtendedAttributeName="FIRE_FLOW.bounds.width"Value="20"/>
<fpdl:ExtendedAttributeName="like"Value="1"/>
<fpdl:ExtendedAttributeName="FIRE_FLOW.bounds.x"Value="9"/>
<fpdl:ExtendedAttributeName="FIRE_FLOW.bounds.y"Value="23"/>
</fpdl:ExtendedAttributes>
</fpdl:StartNode>
扩展属性,是一个key-value组成的Map。您可以根据需要给元素增加任意多的扩展属性。默认的应该有:FIRE_FLOW.bounds.heightFIRE_FLOW.bounds.width(主要是为了图标的大小)FIRE_FLOW.bounds.x FIRE_FLOW.bounds.y(为了图标在画布上的位置)
xml中该有的元素以及元素所对应的属性:
所有元素共有的属性:同如下A的startNode的属性
A.工作流元素
工作流元素 | |||
元素 | 属性名称 | 属性说明(红色部分表示重点看) | |
startNode | ID | 元素的ID。 | |
Name | 元素的名称 | ||
DisplayName | 元素的显示名称,例如在中文应用系统中可以为元素命名一个通俗易懂的中文名称。 | ||
Description | 元素描述 | ||
ExtendAttribute | 扩展属性,是一个key-value组成的Map。您可以根据需要给元素增加任意多的扩展属性。默认的应该有:FIRE_FLOW.bounds.heightFIRE_FLOW.bounds.width(主要是为了图标的大小)FIRE_FLOW.bounds.x FIRE_FLOW.bounds.y(为了图标在画布上的位置) | ||
具体代码参考: | <fpdl:StartNodeDisplayName="开始"Id="myFirstProcess.START_NODE" Name="START_NODE"> <fpdl:ExtendedAttributes> <fpdl:ExtendedAttributeName="FIRE_FLOW.bounds.height" Value="20"/> <fpdl:ExtendedAttributeName="FIRE_FLOW.bounds.width"Value="20"/> <fpdl:ExtendedAttributeName="like"Value="1"/> <fpdl:ExtendedAttributeName="FIRE_FLOW.bounds.x"Value="9"/> <fpdl:ExtendedAttributeName="FIRE_FLOW.bounds.y"Value="23"/> </fpdl:ExtendedAttributes> </fpdl:StartNode> | ||
Synchronizer,EndNode的属性同StartNode。代码部分将<fpdl:StartNode>改为<fpdl:Synchronizer>,<fpdl:EndNode >。Activity,Transition,Loop都有同StartNode的属性,以下属性是Activity,Transition,Loop独有的属性。 | |||
activity | CompleteStrategy | Activity实例的完成策略。取值为any或者all,默认是all。 当取值是any时,他下的任何任务实例完成时都可以使ActivityInstance执行Complete()操作。 当取值是all时,只有当他所有的TaskInstance完成时,才触发ActivityInstance执行Complete()操作。 | |
具体参考代码如下: | <fpdl:ActivityCompletionStrategy="ALL"DisplayName="申请"Id="myFirstProcess.Fulfill_The_ApplicationForm_Activity"Name="Fulfill_The_ApplicationForm_Activity"> | ||
其他属性同NodeStart的属性 | |||
Transition | Condition | 转移条件。是一个EL表达式,如果此EL表达式的计算结果为true,则此转移分支将被执行,否则不执行。缺省值为空,为空时其值为true。 转移条件除了EL表达式外,还可以取值为一个字符串常量“DEFAULT”,只有当其他所有条件的值都是false时,此转移才被执行,否则此转移不被执行。 | |
具体代码如下: | <fpdl:Transitions> <fpdl:TransitionDisplayName=""From="myFirstProcess.START_NODE"Id="myFirstProcess.Transition1"Name="Transition1"To="myFirstProcess.Fulfill_The_ApplicationForm_Activity"> <fpdl:Condition><%=request.getParameter(“username”)% ></fpdl:Condition> </fpdl:Transition> | ||
其他属性同NodeStart的属性 | |||
Loop | Condition | 循环条件。是一个EL表达式,如果此EL表达式的计算结果为true,则此循环将被执行,否则不执行。缺省值是空,为空时其值为false(和transition缺省情况取值正好相反) | |
具体代码如下: | 在xml中加入<fpdl:Loops> <fpdl:LoopId="myFirstProcess.Loop1"From="myFirstProcess.Synchronizer2"To="myFirstProcess.Synchronizer1" Name="Loop1"/> </fpdl:Loops> 同时在和loop相连接的两个synchronizer的task任务后加入LoopStrategy=“REDO” <fpdl:TaskId="Fulfill_The_ApplicationForm_Task"Name="Fulfill_The_ApplicationForm_Task" Priority="1"LoopStrategy="REDO"> | ||
其他属性同NodeStart的属性 |
B.业务元素
Task的公共属性
元素 | 属性名称 | 属性说明 |
Tooltask,Formtask,Subflowtask的通用属性。 | Duration | 执行该TaskInstance所需的时间 |
TaskInstanceCreator | 一个实现了ITaskInstenceCreator接口的类,负责创建任务实例。 如果Task定义了该属性,则它具有最高优先级,覆盖WorkflowProcess的TaskInstanceCreator属性和BasicTaskInstanceManager中的缺省实现。一般情况下,Task不需要定义该属性。 | |
TaskInstanceRunner | 一个实现了ITakInstanceRunner接口的类,负责该Task实例的运行。一般情况下无须定制这个类,采用BasicTaskInstanceManager的缺省实现即可。 如果Task定义了该属性,则它具有最高优先级,覆盖WorkflowProcess的相关的TaskInstanceRunner属性和BasicTaskInstanceManager中的缺省实现。 有些业务场景中需要动态创建子流程,此时需要在特定的SubflowTask上定义该属性。 | |
TaskInstanceCompletionEvaluator | 一个实现了ITaskInstanceCompletionEvaluator接口的类,负责检查Task实例是否可以结束。如果Task定义了该属性,则它具有最高优先级,覆盖 WorkflowProcess的相关的TaskInstanceCompletionEvaluator属性和BasicTaskInstanceManager中的缺省实现。 在某些业务场景中,例如M:N形式的会签,需要在Task上定义该属性。 | |
LoopStrategy | 控制Task在循环体中的行为特征。该属性有3个取值,含义如下:REDO表示重做该Task,对于FormTask,其WorkItem会被自动分配给上一次完成该Task的操作者;skip表示该Task仅执行一次,在循环的情况下不被执行;None也表示重做Task,对于FormTask而言,其WorkItem的分配仍然通过解析AssignmentHandler完成,而不是分配给上一次完成该Task的操作者。 | |
代码: | <fpdl:TaskCompletionStrategy="ALL"TaskInstanceCompletionEvaluator="org.fireflow.example.loan_process.workflowextension.ApproveApplicationTaskCompletionEvaluator"Type="FORM">
缺省值的时候,代码不生成。 | |
FormTask | Performer | 操作者 |
Assignment | 任务分配策略,取值为ANY或ALL,默认值是ANY或All,默认值是ANY.ANY表示任何一个操作员完成该其工作项则任务实例可以结束。All表示收到工作项的所有操作员都必须完成其工作项,任务实例才能结束。 | |
Duration | 任务完成期限 | |
DefaultView | 缺省视图,取值为EditForm,ViewForm,ListForm,缺省值为ViewForm | |
EditForm | 可编辑的表单信息,在此填入相关的url可以用于链接业务表单 | |
ViewForm | 只读表单信息。 | |
ListForm | 列表表单信息。 | |
具体实例代码如下: | <fpdl:Tasks> <fpdl:TaskCompletionStrategy="ANY"DefaultView="EDITFORM"DisplayName="填写请假单"Id="myFirstProcess.Fulfill_The_ApplicationForm_Activity.Fulfill_The_ApplicationForm_Task"LoopStrategy="REDO"Name="Fulfill_The_ApplicationForm_Task"Priority="1"Type="FORM"> <fpdl:PerformerDisplayName="当前用户"Name="Self"> <fpdl:Description/> <fpdl:AssignmentHandler>org.fireflow.example.leaveapplication.workflowextension.CurrentUserAssignmentHandler</fpdl:AssignmentHandler> </fpdl:Performer> <fpdl:EditFormDisplayName="请假申请表"Name="ApplicationForm"> <fpdl:Description/> <fpdl:Uri>/org/fieflow/example/leaveapplication/bizpages/SubmitApplicationForm.jsp</fpdl:Uri> </fpdl:EditForm> <fpdl:ViewFormDisplayName="请假申请表"Name="ApplicationForm"> <fpdl:Description/> <fpdl:Uri>/org/fieflow/example/leaveapplication/bizpages/SubmitApplicationForm.jsp</fpdl:Uri> </fpdl:ViewForm> | |
Subflowtask | Sub-Workflow | 子流程的相关信息,如:子流程的ID,Name,DisplayName等。 |
具体实例代码如下: | <fpdl:Tasks> <fpdl:TaskDisplayName=""Id="myFirstProcess.Activity4.Task4"LoopStrategy="REDO"Name="Task4"Priority="1"Type="SUBFLOW"/> </fpdl:Tasks> | |
ToolTask | Execution | 取值为SYNCHR或者ASYNCHR,缺省为SYNCHR,SYNCHR是同步执行对应Application,ASYNCHR为异步执行对应的Application
|
Duration | 目前的engine对此属性没有处理 | |
Application | Task执行的application,该applicationhandler必须实现org.fireflow.engine.taskinstance.IApplicationHandler(下述代码中<fpdl:Handler>下的java文件实现了该接口) | |
具体代码如下:
| <fpdl:Tasks> <fpdl:TaskDisplayName="邮件通知审批人结果"Execution="SYNCHR"Id="myFirstProcess.Send_Email_Activity.Send_Email_Task"LoopStrategy="REDO"Name="Send_Email_Task"Priority="1"Type="TOOL"> <fpdl:ApplicationDisplayName="邮件发送接口程序"Name="EmailSender"> <fpdl:Description/> <fpdl:Handler>leaveapplicaiton.workflowextension.EmailSender.java</fpdl:Handler> </fpdl:Application> </fpdl:Task> </fpdl:Tasks> |
C.WorkflowProcess
元素 | 属性 | 属性说明 |
WorkflowProcess | EventListeners | 事件监听器列表 |
TaskInstanceCreator | 一个实现了ITaskInstanceCreator接口的类,负责创 建任务实例。通常每个WorkflowProcess都要定义一个自身特有的TaskInstanceCreator。 | |
FormTaskInstanceRunner | 一个实现了ITaskInstanceRunner接口的类,负责所 有ForTask实例的运行。一般情况下无须定制这个类,采用BasicTaskInstanceManager的缺省实现即可。 | |
ToolTaskInstanceRunner | 一个实现了ITaskInstanceRunner接口的类,负责所有ToolTask实例的运行。一般情况下无须定制这个类,采用BasicTaskInstanceManager的缺省实现即可。 | |
SubflowTaskInstanceRunner | 一个实现了ITaskInstanceRunner接口的类,负责所有SubflowTask实例的运行。一般情况下无须定制这个类,采用BasicTaskInstanceManager的缺省实现即可。 | |
FormTaskInstanceCompletion | 一个实现了ITaskInstanceCompletionEvaluator接口的
Evaluator类,负责检查该流程的FormTask实例是否可以结束。一 般情况下WorkflowProcess无须定制这个类。 | |
ToolTaskInstanceCompletion | 一个实现了ITaskInstanceCompletionEvaluator接口的Evaluator类,负责检查该流程的ToolTask实例是否可以结束。一 般情况下WorkflowProcess无须定制这个类。 | |
SubflowTaskInstanceComplet | 一个实现了ITaskInstanceCompletionEvaluator接口的ionEvaluator类,负责检查该流程的SubflowTask实例是否可以结束。 一般情况下WorkflowProcess无须定制这个类。 | |
具体实例代码如下: | <fpdl:WorkflowProcessxmlns:fpdl="http://www.fireflow.org/Fireflow_Process_Definition_Language"Id="myFirstProcess"Name="myFirstProcess"DisplayName="myFirstProcess"ResourceFile=""ResourceManager=""TaskInstanceCreator="Gfgfg.java"> |
D流程变量
属性
DataType, 数据类型
initialvalue,初始值
源代码如下:
<fpdl:DataFields>
<fpdl:DataFieldDataType="INTEGER"DisplayName="请假天数"Id="myFirstProcess.leaveDays"InitialValue="1"Name="leaveDays"/>
<fpdl:DataFieldDataType="BOOLEAN"DisplayName="审批标志"Id="myFirstProcess.approvalFlag"InitialValue="true"Name="approvalFlag"/>
</fpdl:DataFields>
要更好的理解fireflow需要以下知识:
-
WFMC的工作流参考模型
-
XPDL(xml流程描述语言)
-
离散数学相关知识
-
petri网相关知识