首页 > 编程知识 正文

creo模流分析(java中的工作流)

时间:2023-05-05 08:09:01 阅读:73185 作者:1367

1.JBPM工作流引擎是用来做什么的

首先,工作流引擎不仅是指JBPM,还说明JBPM是一种工作流引擎。 JBPM使用JPDL流程定义语言来抽象在现实生活中处理事务的业务流程,从而形成一组业务流程规则。 只要处理此业务,就必须按照此流程规则运行。 举个简单的例子,就是去看医生。 整个看医生的过程,都需要先挂号,再看病,再抓药。 只要做好看医生的业务,就必须按照这个流程进行。 说白了,工作流引擎只是把我们的人工处理过程信息化了,不是很高级的思想。 但是,JBPM并不像我说的那样简单,只是一个相对成熟的技术,其功能非常强大,顺序流程结构的定义、流程结构的选择(即,通过条件判断决定下一步执行哪个任务)以及多任务都是非常重要的总之,JBPM是将生活中的各种业务处理情况抽象化而制定的一系列业务处理规则。

2.JBPM的应用方法

JBPM工作流引擎的使用一般分为五个部分:部署流程、创建流程实例、获取当前活动、获取特定用户的任务和完成任务。 其中的每个部分都通过JBPM服务进行。 按照看上面的医生的流程来说明JBPM的使用方法。

首先,让我们看看jpdl文件。

? XML版本=' 1.0 '编码=' utf-8 '? process key=' test ' name=' test ' xmlns=' http://jbpm.org/4.4/jpdl ' startg=' 275、16、48、48 ' name=' start 1 101、92、-20' name='挂号' transition g='-69-20 ' name='医生' to='医生就诊'/tasktaskassignee=' doctor ' g=' 2229

上面的jpdl文件定义了查看医生的整个过程,包括四个节点、开始节点、开具挂号证的节点、就医节点和结束节点。 让我们看看上述具体的五个部分是如何进行的。

publicclassseedoctorextendstestcase {/* * *部署进程*/publicvoiddeploy((//创建进程引擎processengineprocessengine=configine //部署进程repository service.create deployment (.addresourcefromclasspath (' see doctor.jpdl.XML ' ).deploy ); }/** *创建流程实例*/public void createInstance () /流程引擎processengineprocessengine=configuration.getprocessenging executionserviceexecutionservice=process engine.getexecutionservice (; processinstanceprocessinstance=execution service.startprocessinstancebykey (see doctor ); System.out.println (流程实例id==================' process instance.getid () ); //查询流程实例当前所在的节点publicvoidgetcurrentactivity ({ processengineprocessengine=configuration.getprocessengine ); executionserviceexecutionservice=process engine.getexecutionservice (; stringactivityname=execution service.createprocessinstancequery ().processinstanceid ) ' seedoctor.10001 ' ).unique rrre

n("当前任务所在节点======" + activityName);}/** * 获取对应人员的任务 */public void getTask(){ProcessEngine processEngine = Configuration.getProcessEngine();TaskService taskService = processEngine.getTaskService();List<Task> tasks = taskService.findPersonalTasks("nurse");Task task = tasks.get(0);System.out.println("任务数量===" + tasks.size() );System.out.println("任务名词===" + task.getActivityName());System.out.println("任务人员===" + task.getAssignee() + "任务ID===" + task.getId());}//完成任务public void completeTask(){ProcessEngine processEngine = Configuration.getProcessEngine();TaskService taskService = processEngine.getTaskService();taskService.completeTask("20001");}}

下面我们来一次讲解每个部分所完成的主要功能。

Deploy()部署流程的作用顾名思义,就是部署一个已经制定好的jpdl文件,它的作用类似一个具有版本号的类,流程实例就是这个流程的实例化。在jpdl文件中我们通常通过指定key值来区分所部署的各个流程,如果key相同则规定创建流程实例时按最高版本进行实例化。

 

createInstance()创建流程实例就是根据key值来确定实例化哪个流程,如果有多个流程的key相同则取最高版本。

 

getCurrentActivity()查询流程实例当前所在节点。该函数的作用在于根据流程实例ID,来获取该流程实例当前执行到了哪个节点,如本例中的流程实例有进行挂号和医师看病两个节点,该函数就是用来确定当前流程实例执行到了进行挂号还是医师看病环节。

 

getTask()函数中,之所以用Task task = tasks.get(0)语句来取得第一个任务是因为可能有多个完全不同的流程实例中都有一个为nurse的角色名字,假如恰好出现了这种情况则该函数会取出所有流程实例中角色名称为nurse的任务。

 

completeTask()完成任务,该函数的作用比较清晰就是根据任务ID,将该任务结束,然后进入到下一节点中,比如当前所在任务节点是进行挂号,该任务ID是10001,则完成该任务后,则会自动进入到医师看病这个节点,当完成医师看病这个任务后则会自动进入到end节点,也就是完成了整个流程。

 

3.      JBPM中每个服务所对应的数据库表。

在上面的代码中我们可以很明显的看出在每一部分中都对应着一个Service,也就是一个服务,而所有的服务都是由JBPM引擎来创建的。

在部署流程环节,它所对应的是RepositoryService服务,当部署完流程后,在jbpm4_deployment中会插入一条部署流程记录,同时在jbpm4_deployprop表中会记录该流程的详细信息。

 

在创建流程实例环节,所对应的的是ExecutionService服务,该服务可以根据流程的key值用来启动一个具体的流程实例。启动一个具体的流程实例后会在jbpm4_execution表中插入一条流程实例记录。

 

getCurrentActivity()获取当前流程实例环节对应的也是ExecutionService,它操作的表同样是jbpm4_execution,但是该服务对该表进行的查询操作而并非插入操作,根据流程实例ID来查询出该流程实例当前所在的节点。

 

getTask()获取对应人员的任务环节对应的是TaskService服务,该服务的作用是获取特定角色名的人员的所有任务,它所操作的表示jbpm4_task表,该表所存储的是各个实例的当前任务,所以根据角色名所查询出的很可能是不同实例的相同角色名对应的所有任务。

 

最后一个是completeTask()环节,该环节对应的同样是TaskService服务,它的作用也十分的单一,就是根据任务ID来结束任务,使得流程实例进入到下一个节点。


版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。