OSWorkflow的第四支程式

本文介绍了一个用于检查员工请假申请中员工编号是否符合规定的四码格式的工作流实例。通过使用特定的验证器,确保只有正确的员工编号才能通过审批流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值