`

OSWorkflow的第四个程序

阅读更多

OSWorkflow的第四支程式

在workflow執行的過程中,有時需要做一些條件的檢查,例如,公司員工編號都是四碼,如果有個工作流的員工編號只有三碼,就要能檢查出來,下面我們就來做這樣的檢查,各位可以試著用四碼的員工編號請假,確定可以通過檢查後,再用非四碼的員工編號測試,將會出現最後面顯示的exception。

程式
leave.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE workflow PUBLIC "-//OpenSymphony Group//DTD OSWorkflow 2.7//EN"
"http://www.opensymphony.com/osworkflow/workflow_2_7.dtd">
<workflow>
  <initial-actions>
   <action id="0" name="開始">
      <pre-functions>
  <function type="class">
      <arg name="class.name">com.opensymphony.workflow.util.Caller</arg>
    </function>
        <function type="beanshell">
           <arg name="script">
              propertySet.setString("type", transientVars.get("type"));
              propertySet.setString("employee", transientVars.get("caller"));
           </arg>
        </function>
      </pre-functions>
      <results>
        <unconditional-result old-status="Finished" status="Queued"
step="1" owner="${caller}" />
      </results>
      <post-functions>
            <function type="class">
              <arg name="class.name">
              tw.idv.idealist.OutputPropertySet
              </arg>
              <arg name="author">Steven Shi</arg>
            </function>
      </post-functions>
    </action>
  </initial-actions>

  <steps>
    <step id="1" name="填假單">
      <actions>
        <action id="1" name="送出">
          <restrict-to>
            <conditions>
              <condition type="class">
                <arg name="class.name">
                  com.opensymphony.workflow.util.AllowOwnerOnlyCondition
                </arg>
              </condition>
            </conditions>
          </restrict-to>
<validators>
  <validator type="class">
    <arg name="class.name">
      tw.idv.idealist.MyValidator
    </arg>
  </validator>
</validators>
          <pre-functions>
    <function type="class">
      <arg name="class.name">com.opensymphony.workflow.util.Caller</arg>
    </function>
          </pre-functions>
          <results>
            <unconditional-result old-status="Finished" status="Queued"
step="2"  owner="${caller}" />
          </results>
        </action>
      </actions>
    </step>

    <step id="2" name="批假單">
      <actions>
        <action id="2" name="准許">
<pre-functions>
  <function type="class">
    <arg name="class.name">com.opensymphony.workflow.util.Caller</arg>
  </function>
</pre-functions>
        <results>
            <unconditional-result old-status="Finished" status="Queued"
step="3"  owner="${caller}"/>
        </results>
        </action>

        <action id="3" name="駁回">
          <pre-functions>
    <function type="class">
      <arg name="class.name">com.opensymphony.workflow.util.Caller</arg>
    </function>
  </pre-functions>
          <results>
            <unconditional-result old-status="Finished" status="Queued"
step="1"  owner="${caller}"/>
          </results>
        </action>
      </actions>     
    </step>

    <step id="3" name="停止" />
  </steps>
</workflow>
MyValidator.java
package tw.idv.idealist;

import java.util.Map;
import com.opensymphony.module.propertyset.PropertySet;
import com.opensymphony.workflow.InvalidInputException;
import com.opensymphony.workflow.Validator;
import com.opensymphony.workflow.WorkflowException;

/**
* @author steven
*/
public class MyValidator implements Validator {

public void validate(Map transientVars, Map args, PropertySet ps)
throws InvalidInputException, WorkflowException {
if (ps.getString("employee").length() != 4) {
throw new InvalidInputException("員工編號錯誤");
}
}

}

Exception
當輸入的員工編號非四碼時,會有如下錯誤…
[InvalidInputException: [Error map: [{}]] [Error list: [[員工編號錯誤]]]
at tw.idv.idealist.MyValidator.validate(MyValidator.java:17)
at com.opensymphony.workflow.AbstractWorkflow.verifyInputs(AbstractWorkflow.java:1025)
at com.opensymphony.workflow.AbstractWorkflow.transitionWorkflow(AbstractWorkflow.java:1248)
at com.opensymphony.workflow.AbstractWorkflow.doAction(AbstractWorkflow.java:551)
at tw.idv.idealist.Leave.send(Leave.java:55)
at tw.idv.idealist.actions.LeaveAction.doPost(LeaveAction.java:26)
at tw.idv.idealist.actions.LeaveAction.doGet(LeaveAction.java:17)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2422)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:163)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:199)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:828)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:700)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:584)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)
分享到:
评论

相关推荐

    osworkflow_bundle2

    OSWorkflow 是一个开源的工作流引擎,它允许开发者在应用程序中实现复杂的业务流程。"osworkflow_bundle2" 是一个专门用于学习 OSWorkflow 的示例集合,它包含了一系列的资源和实例,帮助用户理解并掌握如何使用这个...

    osworkflow-2.8.0.zip

    `lib`目录下是一些osWorkflow运行所依赖的第三方库,比如数据库连接池、XML解析库等。了解这些库可以帮助开发者更好地理解和配置osWorkflow的运行环境,确保其正常运行。 总的来说,osworkflow-2.8.0.zip提供了一...

    OSWorkflow源码及电子书

    1. **入门教程**:介绍如何安装和配置OSWorkflow,以及如何创建第一个工作流实例。 2. **API参考**:详细说明了OSWorkflow的各个类和接口,帮助开发者理解和使用API进行开发。 3. **最佳实践**:提供一些实际案例和...

    osworkflow-2.7.0.zip

    2. **osworkflow-2.7.0-example.war**:这是一个Web应用程序的WAR文件,包含了osworkflow的示例应用。解压并部署到Servlet容器(如Tomcat)后,可以用来快速了解osworkflow的功能和用法,通过实际操作学习如何集成到...

    流程引擎OSworkflow2.8资料(所有jar包,学习资料,api)

    OSWorkflow 是一个强大的开源工作流引擎,主要用于管理应用程序中的复杂业务流程。在2.8版本中,它提供了全面的功能和良好的可扩展性,是Java开发者处理流程自动化的重要工具。在这个压缩包中,你将找到一系列资源,...

    osworkflow-2.8.0

    这个版本提供了全面的功能,帮助开发者在应用程序中实现灵活的工作流程。工作流管理是组织和自动化业务过程的关键工具,它使得任务分配、审批流程和文档管理等变得更为高效。 OSworkflow的核心特性包括: 1. **...

    工作流引擎 Osworkflow 及其持久化机制的研究

    当有多个条件结果时,仅执行第一个满足条件的结果;若未定义条件结果或无条件满足,则执行无条件结果。 执行完当前步骤后,工作流可能停留在当前步骤、跳转到另一个新步骤、进入分支(Split)或合并节点(Join)。...

    JBPM、OSWORKFLOW分析报告

    2. **分页问题**:基于第1个问题的解决方案,可以在自定义的Hibernate查询基础上实现分页功能。 3. **统计流程实例状态**:可以通过查询JBPM系统表中的流程实例来统计各个流程实例的状态。另一种方法是在业务表中...

    Quartz-Job-Scheduling-Framework-中文版-V0.9.1.zip

    第四章. 部署 Job (第一部分) 内容提要:介绍 Scheduler 和 SchedulerFactory 有哪些类型、SchedulerFactory 的关键 API 方法;以及如何通过 java.util.Properties 实例或默认 quartz.properties 文件创建 ...

    Java开源工作流引擎.pdf

    它不仅提供Web应用程序,还有一个调度程序,适用于J2EE环境,能够轻松集成到各种企业应用中。 4. OpenEbXML:此项目专注于提供ebXML框架,以支持即将发布的ebXML规范。虽然主要关注的是企业间的数据交换标准,但其...

    JBPM 工作流 PPT

    JBPM可以作为Web服务被第三方应用调用,而且具有轻量级的依赖性,可以方便地集成到各种环境,包括J2EE应用服务器。 【工作流】是自动化一系列任务的过程,而【工作流管理系统(WFMS)】则是一组工具和技术,用于...

    activiti-学习第一天

    通过以上介绍,我们可以看到Activiti不仅是一个强大的工作流框架,还提供了完善的工具集来帮助开发者快速构建高效、可扩展的应用程序。无论是从理论还是实践的角度来看,掌握Activiti都将极大地提升工作效率。

Global site tag (gtag.js) - Google Analytics