osworkflow还是有些东西不太明白是怎么回事
网上的例子也是千篇一律
兄弟们有没有简单完整点的例子给小弟看看呢
不要osworkflow自带的例子
最好是自己完成的可以运行的

解决方案 »

  1.   

    网上的例子都 很多啊,而且介绍也算比较清楚的。osworkflow的大致使用就是这样:
    先写配置文件:osworkflow.xml——配置文件,指定存储方法等<osworkflow>
    <!--  内存维持流程状态,测试用。在实际生产环境中应该使用JDBC或者Hibernate等维持状态 -->
        <persistence class="com.opensymphony.workflow.spi.memory.MemoryWorkflowStore" /><!-- 使用XML文件定义流程,指定流程列表文件为workflows.xml -->
        <factory class="com.opensymphony.workflow.loader.XMLWorkflowFactory">
            <property key="resource" value="workflows.xml" />
        </factory> 
    </osworkflow> workflows.xml——流程列表文件,指定流程名称及定义文件位置,这里只包含一个名为DefaultWorkFlow的流程<workflows>
        <workflow name="DefaultWorkFlow" type="resource" location="workflow.xml"/>
    </workflows>
      

  2.   

    workflow.xml——流程定义文件
    <?xml version="1.0" encoding="GB2312"?>
    <!DOCTYPE workflow PUBLIC "-//OpenSymphony Group//DTD OSWorkflow 2.8//EN" "http://www.opensymphony.com/osworkflow/workflow_2_8.dtd">
    <workflow>
    <initial-actions>
    <!-- 初始化的可用action -->
    <action id="1" name="Create">
    <results>
    <!-- 指定在初始化后, 跳转到id为20的step -->
    <unconditional-result old-status="Finished" step="20" status="Open"/>
    </results>
    <post-functions>
    <function type="class">
    <arg name="class.name">chdw.CreateFunction</arg>
    </function>
    </post-functions>
    </action>
    </initial-actions>
    <steps>
    <step id="20" name="Open">
    <actions>
    <!-- 指定对于该步骤可用的动作 -->
    <action id="2001" name="完成">
    <restrict-to>
    <conditions type="AND">
    <condition type="class">
    <arg name="class.name">chdw.CanCloseFunction</arg>
    </condition>
    </conditions>
    </restrict-to>
    <results>
    <unconditional-result old-status="Finished" step="21" owner="${caller}" status="Underway"/>
    </results>
    <post-functions>
    <function type="class">
    <arg name="class.name">chdw.CloseFunction</arg>
    </function>
    </post-functions>
    </action>
    </actions>
    </step>
    <step id="21" name="Close">
    </step>
    </steps>
    </workflow>
      

  3.   

    DefaultConfiguration config = new DefaultConfiguration();
    //指定加载osworkflow.xml配置文件
    config.load(new File("src/osworkflow.xml").toURL());//初始化Workflow对象,指定当前用户名称为MyName
    Workflow workflow = new BasicWorkflow("MyName");//调用流程名称为DefaultWorkFlow、id为1的初始化动作。jira会自动调用在xml中指定的CreateFunction类中的方法
    long flowId = workflow.initialize("DefaultWorkFlow", 1, new HashMap());//该flowId就是对应该次流程的唯一编号,以后的流转中是不会发生改变的。
    System.out.println(flowId);//取出可用的动作,jira会根据CanCloseFunction中的返回值进行判断,当前的用户是否可用。
    int[] steps = workflow.getAvailableActions(flowId, null);
    System.out.println(steps[0]);

    //继承下一步的动作。
    workflow.doAction(flowId, steps[0], null);System.out.println(workflow.getAvailableActions(flowId, null).length);
    public class CreateFunction implements FunctionProvider { public void execute(Map transientVars, Map args, PropertySet propertyset) throws WorkflowException {
    }
    }
    public class CanCloseFunction implements Condition { public boolean passesCondition(Map transientVars, Map args, PropertySet propertyset)
    throws WorkflowException {
    return true;
    }
    }
    public class CloseFunction implements FunctionProvider { public void execute(Map transientVars, Map args, PropertySet propertyset) throws WorkflowException {
    }
    }
      

  4.   

    public void execute(Map transientVars, Map args, PropertySet propertyset) throws WorkflowException {
        }
    这个方法在编译完成后,启动tomcat会自动运行么?
      

  5.   

    java.lang.NullPointerException
    at java.net.URLClassLoader$1.run(URLClassLoader.java:190)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:282)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
    at com.opensymphony.module.propertyset.PropertySetManager.getInstance(PropertySetManager.java:51)
    at com.opensymphony.module.propertyset.PropertySetManager.getInstance(PropertySetManager.java:31)
    at com.opensymphony.workflow.spi.memory.MemoryWorkflowStore.getPropertySet(MemoryWorkflowStore.java:56)
    at com.opensymphony.workflow.AbstractWorkflow.initialize(AbstractWorkflow.java:601)
    at com.yourcompany.struts.Test.main(Test.java:27)
    Exception in thread "main" 这个是为什么呢?package com.yourcompany.struts;import java.io.File;
    import java.net.MalformedURLException;
    import java.util.HashMap;import com.opensymphony.workflow.InvalidActionException;
    import com.opensymphony.workflow.InvalidEntryStateException;
    import com.opensymphony.workflow.InvalidInputException;
    import com.opensymphony.workflow.InvalidRoleException;
    import com.opensymphony.workflow.Workflow;
    import com.opensymphony.workflow.WorkflowException;
    import com.opensymphony.workflow.basic.BasicWorkflow;
    import com.opensymphony.workflow.config.DefaultConfiguration;
    public class Test {
    public static void main(String args[]) throws InvalidActionException, InvalidRoleException, InvalidInputException, InvalidEntryStateException, WorkflowException, MalformedURLException{
    DefaultConfiguration config = new DefaultConfiguration();
    // 指定加载osworkflow.xml配置文件
    config.load(new File("src/osworkflow.xml").toURL());// 初始化Workflow对象,指定当前用户名称为MyName
    Workflow workflow = new BasicWorkflow("MyName");// 调用流程名称为DefaultWorkFlow、id为1的初始化动作。jira会自动调用在xml中指定的CreateFunction类中的方法
    long flowId = workflow.initialize("DefaultWorkFlow", 1, new HashMap());// 该flowId就是对应该次流程的唯一编号,以后的流转中是不会发生改变的。
    System.out.println(flowId);// 取出可用的动作,jira会根据CanCloseFunction中的返回值进行判断,当前的用户是否可用。
    int[] steps = workflow.getAvailableActions(flowId, null);
    System.out.println(steps[0]);
            
    // 继承下一步的动作。
    workflow.doAction(flowId, steps[0], null); System.out.println(workflow.getAvailableActions(flowId, null).length);
    }
    }
      

  6.   

    这个没有遇到,所有xml文件你的放到了src目录中了吗?
      

  7.   

    嗯 放进去了,osuser.xml osworkflow.xml,test.xml,workflow.xml
    把你的代码放进对应的文件里就可以直接运行了嘛,好用做什么配置么?
            DefaultConfiguration config = new DefaultConfiguration();
    //        指定加载osworkflow.xml配置文件
            config.load(new File("src/osworkflow.xml").toURL());//        初始化Workflow对象,指定当前用户名称为MyName
            Workflow workflow = new BasicWorkflow("MyName");//        调用流程名称为DefaultWorkFlow、id为1的初始化动作。jira会自动调用在xml中指定的CreateFunction类中的方法
            long flowId = workflow.initialize("DefaultWorkFlow", 1, new HashMap());//        该flowId就是对应该次流程的唯一编号,以后的流转中是不会发生改变的。
            System.out.println(flowId);//        取出可用的动作,jira会根据CanCloseFunction中的返回值进行判断,当前的用户是否可用。
            int[] steps = workflow.getAvailableActions(flowId, null);
            System.out.println(steps[0]);
                    
    //        继承下一步的动作。
            workflow.doAction(flowId, steps[0], null);        System.out.println(workflow.getAvailableActions(flowId, null).length);
    上面这段代码可以直接放到main方法里运行吧
      

  8.   

    运行main方法的时候还会弹出一个对话框,提示Fatal exception occurred. Program will exit
    那是什么意思呢
      

  9.   

    放到main方法就可以运行,弹出那个框就是表示你的程序出现了异常退出了。
      

  10.   

    嗯,为什么会出现空指针异常呢?还提示27行
    27行是:long flowId = workflow.initialize("DefaultWorkFlow", 1, new HashMap());那会是什么原因呢
      

  11.   

    你就单步跟踪一下啦。这个本身不会空指针,应该是它在初始化配置文件时候可能出错了吧。可能是你的依赖jar少了吧你是否在类路径中存在propertyset.xml这个文件,我是没有这个文件的,让它使用propertyset.jar中带的文件的
      

  12.   

    你说的那个也有啦 该有的包我都导进来了
    你说的单步跟踪是什么意思呢,long flowId = workflow.initialize("DefaultWorkFlow", 1, new HashMap());
    把id换成其他的值么,我换过了,还是一样的错误
      

  13.   

    哈哈 太好了 谢谢啦  [email protected]