关于JBPM总结

开发环境
Eclipse+tomcat+jbpm.GPD


安装过程
安装GPD(图形化设计)
help--->Install...--->add   找到jbpm下install\src\gpd(关网安装)
配置runtime环境
window--->perferences--->JBoss jbpm-->add   找到jbpm文件
配置JPDL xml的schema
window--->perferences--->xml--->XML Catalog--->add 找到jpdl-4.4.xsd
导入开发用的jbpm包
不要servlet api与odbc
建立配置文件jbpm.cfg.xml和jbpm.hibernate.xml
设置自己的流程定义和Java类,正式开发


开发步骤
1.分析业务,建立流程process definition(业务人员)rose 建模等
2.开发人员,根据活动图建立jpdl流程定义
3.开发人员,或者是系统管理员,部署流程
4.开发人员,编写处理这个流程的代码
5.用户:发起流程实例processInstance  张三
6.用户:审批流程  李四




JBPM最大特色


JBPM益处
实现了无纸化的工作模式,
过程可监控:便于对执行过程的跟踪和监控
数据可管理:便于对数据进行检索,分析
可靠性:减少人人交互的主观错误的机率


JBPM常用领域
行政管理:行政,事业型单位
产品研发和制造:
电子商务:订单处理
其他


JBPM表结构介绍
资源库和运行时表结构
JBPM4_DEPLOYMENT,JBPM4_DEPLOYPROP,JBPM4_LOB存储流程定义相关的部署信息
JBPM4_DEPLOYMENT,JBPM4_DEPLOYPROP,JBPM4_LOB存储流程定义相关的部署信息
JBPM4_TASK存放需要人来完成的Activities(活动),需要人来参与完成的Activity 被称为Task
JBPM4_PARTICIPATION参与者表,存放参与者信息,参与者的种类有Candidate、Client、Owner、Replaced Assignee和Viewer。而具体的参与者既可以是单一用户,也可以是用户组 
JBPM4_SWIMLANE泳道表。SwimLane是一种Runtime Process Role。通过SwimLane,多个Task可以一次分配到同一Actor身上
JBPM4_JOB  存放的是Timer 的定义
JBPM4_VARIABLE 存的是进行时的临时变量。
历史数据库表结构
JBPM4_HIST_PROCINST 与JBPM4_HIST_ACTINST 分别存放Process Instance和Activity Instance的历史记录
JBPM4_HIST_DETAIL 保存 Variable的变更记录
JBPM4_HIST_VAR 保存历史的变量 JBPM4_HIST_TASK Task的历史信息
JBPM4_ID_GROUP ,JBPM_ID_MEMBERSHIP ,JBPM4_ID_USER 这三张表很常见,基本的权限控制,关于用户认证方面建议还是自己开发一套,组件自带的功能太简单,使用中有很多需求难以满足 

除了前面述及的17张表外,还有一张引擎参数表,这是一张独立的表,在此没有单独列出


运用请假

实例化JBPM

private ProcessEngine processEngine;
private RepositoryService repositoryService;
private ExecutionService executionService;

private void init()
{
        repositoryService=processEngine.getRepositoryService();
        executionService=processEngine.getExecutionService();
        taskService=processEngine.getTaskService(); 

 }

部署:

public String deploy()
{
        System.out.println("部署");
        init();
//        String did=repositoryService.createDeployment().addResourceFromClasspath("leave2.jpdl.xml").deploy();
        ZipInputStream zis = new ZipInputStream(this.getClass().getResourceAsStream("/leave2.zip"));
        //发起流程,仅仅就是预定义任务,即在系统中创建一个流程,这是全局的,与具体的登陆 用户无关。然后,在启动流程时,才与登陆用户关联起来
        String did=repositoryService.createDeployment().addResourcesFromZipInputStream(zis).deploy();
        
        //使用zip方式
//        ZipInputStream zis = new ZipInputStream(this.getClass().getResourceAsStream("/leave2.zip"));
//        //发起流程,仅仅就是预定义任务,即在系统中创建一个流程,这是全局的,与具体的登陆 用户无关。然后,在启动流程时,才与登陆用户关联起来
//        String did=repositoryService.createDeployment().addResourcesFromZipInputStream(zis).deploy();
    
        System.out.println("did: "+did);
        return SUCCESS;
}

启动:

 public String start()
{
        init();
        Map map = new HashMap();
        //在启动任务时,等于就是一个用户要请假了,那么,此时,要把流程信息关联到此用户上,在开始的下一个节点(也就是第一个任务节点),是指派给。所以用户名要与其对应的变量关联起来
        map.put("owner", getLoginedUserName());
        System.out.println("id_: "+id);
        ProcessInstance processInstance=executionService.startProcessInstanceById(id, map);
        System.out.println("启动时processInstance: "+processInstance.getId());
        return SUCCESS;  

}

申请:

 public String submit()
{
        init();
        Map map = new HashMap();
        //此day, 在xml文件中,有一个decision标签,里面有一个表达式:expr="#{day > 3 ? '老板审批' : '结束'}" 
        //即它与表达式中的day关联
        map.put("day", processVo.getDay());
        map.put("reason", processVo.getReason());
        map.put("name", "张伟林submit");
        //如果第二个参数为字符串,则是指定要向哪个方向完成,此是指定要向testhaha完成,并且如果线条上指定了文字,
        //就只能按着文字去指定方向,如果没有文字,才能用map,
        //也就是说,如果传递的参数为map,则流程会去寻找没定义名称的线条走,如果没找到。就抛出No unnamed transitions were found for the task 异常
        //taskService.completeTask(taskId, "testhaha");
        //如果第二个参数为map,则表示只是传递参数而已
        System.out.println("提交完毕");
        taskService.completeTask(processVo.getTaskId(), map);
        return SUCCESS;
}

 taskService.completeTask(id号,申请信息)


经理审批:

public String manager()
    {
        init();
        Task task = taskService.getTask(id);                      //得到要审批的id'
        String taskId=task.getId();
        Set<String> strSet=new HashSet<String>();
        strSet.add("owner");
        strSet.add("day");
        strSet.add("reason");
        strSet.add("name");
//        taskService.getVariable(taskId, "owner");
        map=taskService.getVariables(taskId, strSet);              //传值到前台
        System.out.println("map: "+map);
        return SUCCESS;
}

经理提交

public String submitManager()
{
        init();
        taskService.completeTask(id, result);     //result表示申请通过和不通过
        return SUCCESS;
}

显示:

public String view()
    {
        init();
      //通过id查到流程实例
        ProcessInstance processInstance = executionService.findProcessInstanceById(id);
        Set<String> activityNames = processInstance.findActiveActivityNames();
        
        //Coordinates为相依衣物
        ac = repositoryService.getActivityCoordinates(processInstance.getProcessDefinitionId(),activityNames.iterator().next());
        return SUCCESS;
    }
























  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值