现在的位置: 首页 > 综合 > 正文

Shark工作流的实现和WMFC&OMG规范的对比

2013年08月14日 ⁄ 综合 ⁄ 共 5070字 ⁄ 字号 评论关闭

Shark工作流的实现和WMFC&OMG规范的对比

                                 -----第七部分:工作流信息和业务信息如何建立连接

 

关键字:Shark 工作流 WMFC OMG 规范

  

   工作流实例化后就需要把具体的活动和业务过程连接起来,如果是用户交互的活动,还需要指定与这个活动相关的界面。

   这一部分的工作是具体实现的内容,WMFC规范没有提及。

   下面我们看看jbpm的做法:jbpm-1.0-src/jbpm-1.0/examples/process/holiday/processdefinition.xml

   Jbpm并没有采用标准的xpdl工作流描述语言,具体如下:

<?xml version="1.0"?>

<process-definition>

  <name> Holiday request</name>

  <description>This process manages a planned absence of an employee.</description>

  <responsible>ae</responsible>

  <start-state name="start holiday request">

    <description>start a request for a holiday</description>

    <role>requester</role>

    <field attribute="start date" access="write-only-required" />

    <field attribute="end date"   access="write-only-required" />

    <field attribute="comment"    access="write-only" />

    <transition to="evaluating">

      <action event="transition" handler="org.jbpm.workflow.delegation.impl.action.MsgQueueAction" on-exception="log">

        <parameter name="msg.destination.jndi.name">queue/A</parameter>

        <parameter name="msg.connection.factory.jndi.name">ConnectionFactory</parameter>

        <parameter name="msg.text">a holiday was requested from ${start date} to ${end date} with comment ${comment}</parameter>

      </action>

      <action event="transition" handler="org.jbpm.workflow.delegation.impl.action.EmailAction" on-exception="log">

        <parameter name="to">previousActor</parameter>

        <parameter name="subject">you requested a holiday</parameter>

        <parameter name="message">you requested a holiday from ${start date} to ${end date} with comment ${comment}</parameter>

      </action>

    </transition>

  </start-state>

 

  <end-state name="end" />

  <attribute name="requester" type="actor" />

  <attribute name="boss" type="actor" />

  <attribute name="hr-responsible" type="actor" />

  <attribute name="start date" type="date" />

  <attribute name="end date" type="date" />

  <attribute name="comment" type="text" initial-value="Put your comments here." />

  <attribute name="evaluation result" type="evaluation" />

<activity-state name="evaluating">

    <description>In this activity, You have to evaluate the holiday-request of your employee.</description>

    <assignment handler="org.jbpm.workflow.delegation.impl.assignment.AssignmentExpressionResolver">

      <parameter name="expression" >previousActor->group(hierarchy)->role(boss)</parameter>

    </assignment>

    <role>boss</role>

    <field attribute="requester"         access="read-only" />

    <field attribute="start date"        access="read-only" />

    <field attribute="end date"          access="read-only" />

    <field attribute="evaluation result" access="write-only" />

    <transition to="evaluation" />

  </activity-state>

 

  <decision name="evaluation" handler="org.jbpm.workflow.delegation.impl.decision.EvaluationDecision">

    <parameter name="attribute">evaluation result</parameter>

    <transition name="approve"    to="approved holiday fork" />

    <transition name="disapprove" to="disapproval notification" />

  </decision>

 

  <activity-state name="disapproval notification">

    <description>This is a notification of the refusal of your holiday request. By submitting this form you declare to have taken notice of the refusal.</description>

    <role>requester</role>

    <transition to="end" />

  </activity-state>

  <concurrent-block>

    <fork name="approved holiday fork">

      <transition name="hr"        to="HR notification" />

      <transition name="requester" to="approval notification" />

    </fork>

   

    <join name="join before finish">

      <transition to="end" />

    </join>

 

    <activity-state name="HR notification">

      <description>In this activity, You have to register that an employee is taking holiday.</description>

      <assignment handler="org.jbpm.workflow.delegation.impl.assignment.AssignmentExpressionResolver">

        <parameter name="expression" >role(boss)->group(hierarchy)->role(hr-responsible)</parameter>

      </assignment>

      <role>hr-responsible</role>

      <transition to="join before finish" />

    </activity-state>

 

    <activity-state name="approval notification">

      <description>You get notified that your holiday request has been approved.</description>

      <assignment handler="org.jbpm.workflow.delegation.impl.assignment.AssignmentExpressionResolver">

        <parameter name="expression" >role(requester)</parameter>

      </assignment>

      <transition to="join before finish" />

    </activity-state>

  </concurrent-block>

 

</process-definition>

  


  
如果熟悉struts的读者看到上面的描述会发现,    <transition to="join before finish" /> 这样的写法和struts配置文件中的页面跳转十分类似。

   上面的写法非常直观,不过比较SharkXPDL实现。推荐还是使用XPDL的流程描述。

XPDL jbpm中分散的跳转放到了一起:

  <xpdl:Transitions>

        <xpdl:Transition Id="3cb3f6d1-56c6-11d8-8fe6-8f02bbfa91d7" From="提交辞职申请" To="部门经理批准" Name=""/>

        <xpdl:Transition Id="6264b4f6-56c6-11d8-8fe6-8f02bbfa91d7" From="部门经理复查" To="总经理批准" Name=""/>

        <xpdl:Transition Id="b612ac69-56c6-11d8-8fe6-8f02bbfa91d7" From="部门经理批准" To="财务审查" Name=""/>

        <xpdl:Transition Id="b762d31a-56c6-11d8-8fe6-8f02bbfa91d7" From="部门经理批准" To="人力资源审查" Name=""/>

        <xpdl:Transition Id="b8a983eb-56c6-11d8-8fe6-8f02bbfa91d7" From="人力资源审查" To="部门经理复查" Name=""/>

        <xpdl:Transition Id="bd8394ac-56c6-11d8-8fe6-8f02bbfa91d7" From="财务审查" To="部门经理复查" Name=""/>

      </xpdl:Transitions>

 

 

但是jbpm的做法也有一个非常好的地方,就是把工作流程和业务系统建立了关系。

下文将具体的说说jbpm中做法的优点。

待续

田春峰

accesine@163.com

 

 

 

 

 

抱歉!评论已关闭.