`
wuxufeng8080
  • 浏览: 49585 次
  • 性别: Icon_minigender_1
  • 来自: 浙江
社区版块
存档分类
最新评论

流程控制的实现类

    博客分类:
  • jBPM
阅读更多

这是第一个版本,写的可能比较龊,还请大家见谅

java 代码 (创建StartTask)
  1. public long createTask(String strProcessName, String strRequisitioner, Map taskVariables, String transition) {   
  2.         log.debug("Process Info --> Create new Process Start, creator: "+ strRequisitioner);   
  3.            
  4.         //create new process instance   
  5.         ProcessDefinition processDefinition = null;   
  6.         ProcessInstance processInstance = null;   
  7.         try{   
  8.             processDefinition = graphSession.findLatestProcessDefinition(strProcessName);   
  9.             processInstance = new ProcessInstance(processDefinition);   
  10.         }catch (JbpmException e) {   
  11.             throw new ProcessDefinitionNotFindException(   
  12.                     "Process definition not find by process name " + strProcessName);   
  13.         }   
  14.         //if (processDefinition == null)    
  15.            
  16.            
  17.         log.debug("Process Info --> New process created, PID: "+processInstance.getId());   
  18.            
  19.         // set actorid and create start task instance   
  20.         jbpmContext.setActorId(strRequisitioner);   
  21.         taskInstance = processInstance.getTaskMgmtInstance().createStartTaskInstance();   
  22.         //taskInstance.start();   
  23.            
  24.         // add process Variables   
  25.         taskVariables.put("StartActorId", strRequisitioner);   
  26.            
  27.         taskInstance.addVariables(taskVariables);   
  28.            
  29.         //end  save task and close jbpmContext    
  30.         taskInstance.end(transition);   
  31.         jbpmContext.save(taskInstance);   
  32.            
  33.         //commit();   
  34.            
  35.         return processInstance.getId();   
  36.     }  

 这个存了一个variable (StartActorId),用来保存起草人,不知道jbpm有没有直接的API,来获得流程的起草人的。

java 代码(返回代办事项)
  1. public List<task></task> findToDoTask(String strRequisitioner) {   
  2.                    
  3.         List<taskinstance></taskinstance> tasks = taskMgmtSession.findTaskInstances(strRequisitioner);   
  4.         List<taskinstance></taskinstance> pooledTasks = taskMgmtSession.findPooledTaskInstances(strRequisitioner);   
  5.         tasks.addAll(pooledTasks);   
  6.            
  7.         List<task></task> resultTaskList = new ArrayList<task></task>();   
  8.         for (TaskInstance item : tasks) {   
  9.             ProcessInstance processInstance = item.getTaskMgmtInstance().getProcessInstance();   
  10.             ContextInstance contextInstance = processInstance.getContextInstance();   
  11.                
  12.             Task task = new Task();   
  13.             task.setTaskId(item.getId());   
  14.             task.setTaskName(item.getName());   
  15.             task.setProcessId(processInstance.getId());   
  16.             task.setWorkflowId(item.getTaskMgmtInstance().getProcessInstance().getProcessDefinition().getName());   
  17.             task.setRequisitionerFK((String)contextInstance.getVariable("StartActorId"));   
  18.                
  19.             resultTaskList.add(task);   
  20.         }   
  21.         //commit();   
  22.            
  23.         log.info("Process Info --> User ("+ strRequisitioner +") find tasks, size:"+ tasks.size());   
  24.            
  25.         return resultTaskList;   
  26.     }  

 

java 代码(结束任务并转移到指定的transition)
  1. private String taskEnd(long nTaskID, String strRequisitioner, String comment, String transition, Map variables) {   
  2.         String msg = "";   
  3.         try{   
  4.             taskInstance = loadAndEndTaskInstance(nTaskID, strRequisitioner, transition, variables);   
  5.             //taskInstance.start();   
  6.             //if (taskInstance.getActorId() == null) taskInstance.setActorId(strRequisitioner);   
  7.                
  8.             //add comment to this task instance   
  9.             if (comment != null && !comment.equals("")) taskInstance.addComment(comment);   
  10.             msg = getAssignLog();   
  11.             //commit();   
  12.         }catch(Exception e) {   
  13.             e.printStackTrace();   
  14.             throw new WorkflowException("can't end task id: "+nTaskID+ "("+e.getMessage()+")");   
  15.         }   
  16.         return msg;   
  17.     }  

 

其他就没什么了,大体上就是这样,这个是我这个流程处理类的主要方法。然后在这个基础上做了一次web service的封装。感觉这个封装还是蛮不错的,主要是我老大的意见,哈哈哈。感觉在做简单流程的时候,使用jbpm感觉超级简单,基本上不需要手工写什么东西,拖拖拉拉就弄好了 ,然后给相应的transition命名,这样在task end的时候指定相应的名字,流程也就过去了,非常的简单。在使用会签的时候应该说也是很简单的,哈哈哈。一个字,很爽。当初就看着jbpm 的demo,参考里面的代码,一点一点读懂整理出来了。现在回头看看,好辛苦啊,不过好简单啊。最烦的还是页面,这是我今天完成第一个流程之后的唯一感觉。

分享到:
评论
1 楼 huangguan 2007-07-04  
一个字,很爽?

这里是两个字吧 呵呵

不过看了你写的东西,有收获,谢谢。。。

有空多交流吧,我现在在做工作流与web service的结合

相关推荐

    神经·模糊·预测控制及其MATLAB实现PDF + MATLAB程序.zip

    MATLAB作为强大的数学计算和建模工具,被广泛用于这类高级控制策略的模拟和实现。 神经网络是一种模仿人脑神经元结构的计算模型,它能够通过学习过程从数据中自动提取特征和模式。在控制领域,神经网络常用于系统...

    远程控制程序的一种编制方法及实现.pdf

    ### 远程控制程序编制与实现的...综上所述,刘逸教授的研究不仅深入探讨了远程控制程序的编制方法,还详细介绍了基于Winsock技术和CSocket类的实现细节,为远程控制程序的设计与开发提供了宝贵的理论指导和技术支持。

    JBPM4.4 API 【最全API 包含所有实现类】

    JBPM4.4 API,全称为Java Business Process Management 4.4 Application Programming Interface...全面的实现类列表则为开发者提供了宝贵的资源,帮助他们更深入地理解和利用这个框架,实现高效、灵活的业务流程管理。

    实现windows控制面板的基础类.zip

    这个压缩包"实现windows控制面板的基础类.zip"显然包含了一些源代码文件,用于创建自定义的控制面板小应用程序,也就是我们常说的"控制面板项"。这些文件可能是为了帮助开发者理解如何扩展或自定义Windows控制面板的...

    程序设计全套3程序流程控制.pptx

    程序设计全套3程序流程控制 ...程序设计全套3程序流程控制是指使用结构化程序设计方法来控制程序的执行流程,包括顺序结构、选择结构和循环结构,并通过输入与输出来实现数据处理过程中的基本功能。

    远程控制java实现

    通常,这样的文件可能包含了实现远程控制的类、方法,或者是使用 RMI、JMX 或 SSH 的实例代码。分析这些代码可以帮助我们更好地理解远程控制的实现细节和最佳实践。 总的来说,Java 远程控制技术涵盖了多种技术和...

    最优控制 优化控制的matlab代码实现

    MATLAB作为一种强大的数学计算软件,提供了实现这些控制策略的工具箱,使得研究人员和工程师能够便捷地设计和分析控制系统。 在“最优控制”问题中,目标是找到一个控制策略,使得系统在满足一定约束条件下,性能...

    远程控制示例程序(C#实现)

    本示例程序是用C#编程语言在Visual Studio 2008(VS2008)环境下实现的远程控制解决方案。C#作为一种面向对象的编程语言,因其丰富的类库和强大的功能,常被用于开发Windows应用程序,包括网络通信相关的应用。 ...

    1272+C#+六轴运动控制+实例源码 (1)_C#+六轴运动控制+实例源码_运动控制_运动控制卡_

    在六轴运动控制中,C#可以用来编写上位机程序,负责与运动控制卡进行通信,发送指令,接收反馈,并处理各种控制逻辑。 运动控制卡,也称为运动控制器,是连接到计算机并控制电机或其他执行机构的硬件设备。它们通常...

    51汇编之控制转移类指令

    在51汇编语言编程中,控制转移类指令是一组至关重要的指令,它们负责改变程序的执行流程,使得程序能够实现复杂的逻辑控制和循环结构。这些指令允许我们根据不同的条件跳转到程序的不同部分,或者无条件地执行特定的...

    C#实现远程屏幕控制的程序(可远程监控)

    总的来说,"C#实现远程屏幕控制的程序"是一个综合性的项目,涉及到网络编程、图形处理、安全性和用户体验等多个方面的知识。这个程序的实现展示了C#在构建高效、安全的远程控制应用上的强大能力。通过深入理解这些...

    java实现流量控制流量控制

    在Java中,我们可以利用Socket类和相关的API来实现TCP连接,并通过设置缓冲区大小来间接控制流量。 1. **Socket类和BufferedInputStream/BufferedOutputStream** Java的Socket类提供了与服务器建立TCP连接的功能。...

    springboot实现远程控制

    在本项目中,"springboot实现远程控制"是一个利用Spring Boot技术栈构建的后端服务,结合了Java的Robot类和WebSocket技术,旨在创建一个简单的远程控制应用。这个应用允许用户通过浏览器(B/S架构)进行远程操作,实现...

    CsGo并发流程控制框架

    《CsGo并发流程控制框架详解》 在编程领域,尤其是高性能和实时性要求较高的系统设计中,并发控制是至关重要的。本文将深入探讨基于C#的并发流程控制框架,特别是针对高并发场景下的多线程管理和线程安全问题。我们...

    项目运行期间热插拔接口实现类

    同时,需要有版本控制策略,避免不同版本的实现类冲突。 6. **配置管理**:通过配置文件或API接口来管理加载的接口实现,这样用户可以根据需求动态切换。 7. **测试与调试**:热插拔特性增加了系统的复杂性,因此...

    音量控制封装类,Visual C++下控制音量程序.rar

    在音量控制封装类的项目中,我们主要探讨的是如何在Visual C++环境下实现对系统音量的控制。Visual C++是一种强大的开发环境,尤其适用于Windows平台上的应用程序开发。在这个项目中,开发者可能使用了MFC...

    软件产品设计控制程序-.docx

    该程序详细定义了设计控制的各个环节,包括开发策划、需求分析、设计、实现、设计更改以及相关文档的管理和评审。 1. **目的**:设计控制程序的主要目的是通过严格的流程控制,保证设计过程的有效性和产品质量,...

    程序控制结构 JAVA

    在编程领域,程序控制结构是实现程序逻辑的关键部分。在这个"程序控制结构 JAVA"的主题中,我们将探讨如何使用Java语言中的基本控制结构来编写一个能够实现华氏温度和摄氏温度互相转换的程序。该程序将通过对话框...

Global site tag (gtag.js) - Google Analytics