00:00
各位同学大家好,刚才呢,咱们完成了activity相关的入门操作,咱们分别完成了流程定义,流程定义部署启动流程实例以及相关的任务操作,那下面呢,我们继续往下来看这个activity,首先啊,咱们再次说这个流程实例,里边特别在说两个概念,流程定义DeFinition流程实例,它就类似于Java类和Java实例之间的关系。比如说我们现在把一个流程完成了部署,那这个时候每个人请假是不是要请一个流程实例,比如现在啊,张三请假启动一个实例,李四请假启动一个实例,这两个流程之间他们互相执行,不受影响,好比说一个Java类里面有多个对象的这么一个关系,所以这个关系各位要明确。而现在呢,我们在启动流程实例的时候,大家注意啊,找一下咱们之前的代码,咱们找一下之前我们是如何启动流程实例的,我们到啊,就是个咱们用法,通过你这个就是流程定义中的key是不是进行启动,这是我们之前做法,而现在呢,咱们把它的源码打开,大家看啊,在这个方法中啊,它是不是重载了很多,你看里边是不是有很多的参数,而我现在在使用过程中,刚才咱用的是第一个里面加上你那个流程定义的key,但是现在我们在启动实例的过程中,我们还可以做个操作,什么操作,让你的实际业务跟activity进行关联,比如说指定你这个业务的标识,或者说叫业务。
01:53
咱们在创建实例中可以把业务key进行指定,那这业务key或者业务标识指定具体是什么意思,给大家来举个例子解释一下啊,大家想一下,比如现在啊,我们做这个审批的这个流程,比如咱们的这个流程,我把这个图给大家打开。
02:13
咱们这个流程,比如这个流程中呢,现在啊,我这里边,比如现在我这个人啊,他叫赵六,他发起一个请假申请,然后请假申请之后,张三他是部门经理,是不是要审批,而审批过程中大家注意啊,张三实际中并不是只看到这个赵六请假,他是要看到一些信息,比如说赵六啊,他里边具体是哪个部门的,包括他是什么职位,另外可能看到赵六请假一些证明的材料,比如说赵六生病了,他可能提交医院开出那个诊断证明,比如说赵六啊,有其他原因,可能有一些其他的证明,他是不是要看到,而这些呢,咱要跟我们这个数据库中的业务表进行关联,就是我实际数据库里边那个业务那个表跟这个activity进行关联,那怎么关联,我们用这个。
03:03
Business可以跟他关联,比如说现在,比如这个是一,那我根据一,我能查到我当前假人的他的一些其他的证明文件或者证明资料,然后这里边进行审批,再往后进行实现,这就是让实际业务与activity表进行关联,咱们在创建实例的过程中,可以指定你的业务key或者说业务标识,这是我们提到的啊。当然这个业务key呢,可以是你那个数据中那个ID址,也可以是一些其他数据,比如说是一段Jason数据也是可以的。但是一个原则啊,你这个数据有一个长度限制,最长不能超过你数据库表的最大限制,这个明确。而我们经常是用ID表示,当然也可以传一段这些数据,那下面呢,咱们写个代码带着各位来测试一下啊,就是我们启动一个实例的时候,添加上这个业务标识,或者说叫业务key,下面咱来做一下啊。
04:04
我们来到这个里边,然后在最上边我们加上这个方法。我想这位置啊,创建一个流程实例。指定我们这个就是你的业务。然后下面呢,我来写上这个方法,咱们加上一个导。Public,我加这个方法setup business。然后在里边咱来做这个具体实现啊,这个过程跟之前这个类似,咱们还是用runtime中的方法进行实现,这个方法还是之前个方法,也就是这个大家看啊,就是只是里边呢,咱们传两个参数,注意是两个参数啊,第一个参数是你流程定义的K,但之前都写过了,就这个请假。
05:02
啊,就这个K,比如咱们在里边定义的这个请假,这是流程定义的K,然后第二个呢,加上你那个业务K,或者说叫业务标识,比如现在啊,我就加上一个值,假如这里边这个信息的ID是1001啊,当然可以加别的,这里边也可以加一段这些数据,但是注意它的长度,然后最终它会返回这么一个对象,就这个process。Intense。所以现在啊,这个就完成了,然后完成之后咱们把这个执行,其实最终呢,在咱的表里面能看到你的UK的值是否能加进去,就咱一块看啊,我在里边给它做一个输出。输出一下啊,通过这个里有一个方法叫business key,就是把里这个务key或者务给它输入出来,如果说能输出,认为你就添加成功了,咱们把值得到,就是咱们可以再查我们数据库表,得到它的其他信息,完成咱们最终的业务,这就叫做创建流程实例,指定业务标识u key。
06:10
那下面呢,咱们把它执行一下啊,看一下这个效果是怎么样的,现在我开始执行,然后执行之后咱们先看输出,再看一下数据库表,看这个值有没有加进去。等他进行出来啊。好,大家看啊,现在已经执行完成了,然后咱看它最终输出的这个值是不是就是1001,比如说现在啊,咱们把业务key已经加进去了,然后加之咱们打数里,首先如咱们这个表,他那个历史那个信息表,你看里有这个B括,咱们看那个ru头个。这个表里边是不是有这个业务key叫1001啊,就是我们那个就是流程这个执行的这个过程啊,通过这个表能看到101,所以现在啊,证明咱们完成这过程,在创建流程实例的过程中,可以让你的这个BCK跟这个activity的表进行关联,咱通过它进行实现,为了满足咱们最终的业务场景,所以这个我们就说到这里啊。
07:20
然后这个之后我们下面的继续往下来看啊,现在咱们做什么呢?大家看我课件里边就是现在我这个流程实例可以进行挂起,然后又可以激活,那先说一下啊,这个挂起是怎么样一个背景,然后咱们用代码给大家做个测试,其实它里边呢,也是调这些API中的方法进行实现,那咱们下面啊做一个具体说明。那这个挂机有什么场景呢?咱们举个例子啊,比如说我现在啊,这个公司里边约定在每月的最后一天,公司要进行封账,就不再做这个报销处理了,那这个时候如果你申请报销,这流程是不是就不能往下执行,这个时候怎么做,咱可以把这实例进行挂起。
08:07
那又比如说,比如说这几天我们这个系统正在维护中,这个时候比如你再进行申请,那咱就不再受理,这个时候可以把实力进行挂起,这是它一个基本的场景,在诗句中也很场见,那在下面演示一下这个该怎么来做啊,我这里边有两个场景,第一个场景就是全部流程实例都进行挂起,比如说现在啊,大家注意啊,一个流程定义是不能启动多个实例,咱可以把多个实例都进行挂起,这么做是可以的。另外你可以怎么做,你可以把单个实例挂起,比如现在啊,我这里边啊,这个流程定义中有两个事例,那我把第二个事例挂起,这么做也可以,第一个是全部,第二个是单个,那怎么做?咱们看一下很简单啊,先看全部,咱们做法就是用中这个service里边的方法,然后指定你那个就是流程定义的key,然后在里边用这个。
09:07
方法进行挂起啊,包括你看啊,比如现在我们挂起用这个方法,然后激活用这个activity这个方法,最终进行实现,我这个是代码中做了一个判断啊,如果它里边比如说是暂停,咱就激活,如果说它是激候状态,那咱给他暂停挂起。这是我们看到这个代码,那下面把这个代码带着各位来写一下,咱们先实现第一个就是把全部的流程实例进行挂起,然后再把单个的实例进行挂起,那咱们快速写下这个代码。我们现在啊,来到这里边,首先我们写第一个方法,就刚才提到的啊,咱们现在就是把我这个流程定义中的全部流程实例进行挂起啊,包括咱把激活写到一起,那咱们加上方法,我加上test public,我们这个process,把所有的流程实行起来,一个O区分一下啊,这我们方法。
10:11
然后写完方法之后,在里边我们写一下它的具体代码,那代码怎么做呢?我强调啊,首先我先把步骤写一下,然后按照步骤进行实现。位置啊,首先第一步我们先获取一下这个流程定义的这个对象,就那个DeFinition对象,就是咱们刚特别提概念清啊,DeFinition程定义流程实例,咱目前把这个流程定这个给得到,得到这是我们的第一部分。然后得到之后,我们的第二部分写一下啊,就是第二步的做法。在这位置咱们的做法就是调用对象里边的方法,就是流程定义对象里边的方法,判断当前的它的一个状态,就当前你的流程啊,你是暂停状态还是激活状态,咱们做一个状态的判断。
11:17
写到这个位置啊,你是这个挂起或者暂停还是一个激活,这是第二步,然后第三步咱们做一个判断,如果说啊,你这个状态是一个就是挂起的状态,那咱把它就激活。就实现激活,如果说你是激活状态,那我们把它就挂起啊,这里边我们做个判断,就是如果说是激活状态,我们就实现。挂器,这是我们基本的过程啊,那下面按照这步骤咱们把代码写下。首先我们看第一部分啊,得到这个流程定义对象,咱怎么做呢?用这个service叫Rep service,它能得到流程定义信息,这个是做流程实例的,这个做任务的,这个做历史相关操作的,那咱现在用这个Rep service进行实现,我写一下啊。
12:13
里边我们加上一个方法叫做。啊,你这个名字里就看不是啊,一个方法叫create。Query,法定那个。加个请的名字,然后个法个。那目前啊,只有这一个啊,这个实例。
13:01
流程定义。啊,但是你加例子取多个,我们目前应该只有一个啊,如果你有多个加上例,现在我把这个得到,这是我们做到第一部分,给它起个名字啊,咱就叫这个请假了,给它看着方便啊,然后这个之后下面呢,我们调方法,看一下当前这个基本的一个状态,那怎么做呢?请假里面有一个方法叫意思sense啊这个方法。Spend啊,然后加上一个值,它反应是一个布尔类型,就是看它是挂起还是激活的状态,现在第二步就完成。这个完成之后,下面呢,我们进行一个判断,如果说啊,这个since判的这个值它是处,表示是挂起状态,那咱就给它激活,如果它是false,那就是激活,咱就给它挂起啊,就是里边要做一个判断,为了咱这代码更加完善啊,就是激活挂起在里边咱都写出来,那我做个判断啊,首先since如果它的支是处,表示当前是挂起状态。
14:06
挂起的话,那咱怎么做,那咱就实现激活了啊,我给他写一下啊,给它实现一个激活,那怎么激活repnderary里边有个方法,这方法很好记啊,大家看这方法是不是就激活,用里边一个方法叫DeFinition by ID啊,通过它我们做一个激活,那就这个啊。白,因为这方注意啊,你调的时候注意自己看一下,有的方法它长得比较,但是它不这方法都比较长,解的时候自己特别看一下啊,根据ID把它激活,然后里面加上你那个定义的ID,我们加一个请假点get ID啊,这是咱传的参数啊,然后在里边再传入其他参数,第一个是你的这个流程定义ID,第二个咱加个true。
15:04
表示它激活,然后第三个其实有一个叫时间点,咱目前没有就来一个,那所以现在啊,我们加入这个参数,我在里边写一下啊。第一个参数。是什么呢?是咱说这个定义就是流程定义的ID,这是第一个参数,然后里边的第二个参数是一个布尔类型。写到这里啊,第二个参数是一个布尔类型,它的值是处,表示是否是激活,如果处,那就是激活。第三个是一个时间点。啊,参数是一个那个激活的一个时间点,但咱目前没有,我就来一个那了,所以现在啊,把这一部分我们就完成了啊,咱往下弄一下啊,各位看着更方便点。第一个ID啊,第二个是否激活,第三个是一个时间点,所以现在这部分就完成了啊,完成之后在里边为了咱看着方便,我把它做个输出啊,输出一下啊,就写下这个。
16:07
我们这个ID的。就是请假点ID这里的已经完成了激活。啊,就是他已经这个。激活了,为了咱们测试方便啊,所以现在这部分完成,然后完成之后看咱下面一个逻辑啊,如果说他是挂起咱就激活,如果说它当前是激活状态,咱是不是就挂起,最后再加上一个else,在else里边实现一个挂起这个过程。我在这个位置写一下啊,然后怎么做跟上面类似,咱们调用service里边有一个方法。这个方法名字叫这个process DeFinition跟上那个类似啊,就是它在里边还是这个ID值参数也是一致的啊,就是第一个表示流程定义的ID。
17:02
就是它第二个就是是否这个被挂起,第三个是时间点,咱们也是几格纳。你现在啊,这部分我们就完成。我加到这里啊。然后完成之后,同样啊,我在里边最终也是做过输出,为了咱们测试方便。请假点get ID,然后加上我们这边已经被。起啊,所以现在啊,这部分咱们就完成了,这就是我们实现这个挂起和激活的一个过程,咱目前做的是把全部这个流程实例进行挂起,这个咱们就做到这里啊,然后这个之后下面呢,咱们把它啊就是执行一下,看一下最后结果怎么样,我们来执行一下啊,我们试一下。现在啊,把它执行。稍微慢点啊,他们稍微等一会儿。
18:00
啊,现在啊,执行完成了,然后咱们看最终的输出告诉我们啊,这个请假里面的这个部分已经被挂起了,所以现在啊,这个实例我们就完成了挂起啊,这是我们做的这个过程啊,然后挂起之后呢,这里边啊,咱们可以简单做个测试,试一下当前事为挂起。那咱们怎么来测试一下这个效果呢?咱这么来做啊,因为当前我们的第一个流程应该是到张三这里边,那我们来查一下啊,当张三他目前的代办任务是什么,把任务查询之后,咱们进行完成,看他能不能完成,正常来讲应该是不能完成,因为当前这个实力已经被挂起了,那我们现在先查一下啊,查应该能查到,但最终完成应该完成不了,所以咱们先试一下啊,我先做个查询,看张三当前这个代办的任务。然后等他出来啊,咱们看一下这个效果是怎么样,验证一下我们这个圆过程啊。然后大家看啊,张三目前是不是有一个带班任务,然后现在我们做个执行,来到张三的这个位置,这叫张三把这个执行一下啊,来看下效果。
19:09
就是返回他的任务,然后处理完成他当前这个任务,看他最终会怎么样。我们啊,稍等一下啊。然后大家看啊,当前已经执行完成了,然后这位置是报错了,咱们看他报的什么错啊,这错误应该很明确,什么错误这句话各位应该都认识啊,怎么样不能完成一个什么是被挂起的任务,这任务是有,但任务被挂起了,你不能往下执行了,因为当时咱们已经完成这个代码的实现,挂起这个任务,所以现在啊,这部分我们就完成了,验证一下我们当前这过程就实现出来了,把你的流程实例进行挂起。
20:00
然后这个时候呢,比如现在我把它再执行一下,它就会被激活,然后任务就可以往下去完成了,啊,这是我们看到这个就是第一段代码。把全部的这个流程实例经挂起,然后这个之后我们还一个效果,你可以怎么做,你可以把单个的流程实例净挂起,就是你单个某一个净挂器,这个我们也可以做到啊,那这个怎么做,咱们也可以看一下啊,其实刚才代码类似我们的过程中,通过service指定是某一个,然后里边的方法指定你的这个,这个是什么啊,是你这个流程实例的ID,通过它我们把这个挂起,然后这个时候我们最终可以实现,那下面呢,我把这个给大家也写下代码,咱们也看一下这个过程该怎么去做啊,那我们来试一下这个代码啊。下面啊,我们来到这个类里边,然后在里边呢,我们来创建这么一个方法进行实现,这个方法部分我就从里边复制了,然后里边内容我们来详细写一下啊。
21:05
就是现在我们做这个过程,就是把单个的流程实例进行挂起,我加个注释。单个的流程实例。挂起,那咱看怎么来做啊,在里边,首先我们的做法就是。调用runtime service这个方法它叫做。Process query,然后咱们继续调用里边一个方法叫process ID,你根据ID把它挂起,里边加上你那个流程实例的ID啊,这个ID呢,到表里找一个啊,ID是什么呢?其实就是这个值,我把这个啊,咱给它拿过来啊,就是这个请假冒号一啊,加上里边这个值,这是那个流程实例的ID这么一个写法。然后加上之后我们继续啊,加上里边的这个叫single,把这个加上,最终返回一个流程实例这个对象啊,这个我们就得到,然后得到之后呢,下面做法跟刚才的代码应该说都类似的,咱们同样就是。
22:17
得到当前这实例的状态,如果它是激活挂起,如果它是挂起给它就激活啊,我们写一下啊,加这个方法意思sense。然后反一个值,这个值我们做个判断,就是它是true还是false。小这位置啊,如果说这值等于处表示当前就是挂起状态,那咱做个激活,激活的话,用这个runtime service里面一个方法,这个方法跟刚才一样啊。Instance by ID,然后入你这个流程实例的ID,就把ID给得到啊,ID应该就是我们的这个。
23:02
呃,这个值我在上面啊,写个变量,为了方便啊,我就叫这个,呃,就叫PID了啊。呃,PI名字太好换D。然后里边啊,加上我们的这个值,把它拿过来啊。啊,这里。这位置用这个变量。就是它啊,然后下面加上这个流程实例的ID,这样的话就完成了激活,在最后我们做个输出啊,就这个ID,这个流程实例已经被激活了,然后之后呢,我们再加上一个else else里边我们把它就做这么一个。挂起啊,用这个边这个方法,它叫做跟刚才一样啊ID,然后最我们可以输,这已经被。
24:08
挂起。我写到这里啊,被挂起了,所以现在啊,我们把这段最基础的代码咱们就完成了,就是。挂起单个的这个流程事例啊,这是我们写到的啊,给各位把这过程给定要清楚啊,这以上我们写到这里,然后写到这里之后,下面呢,咱把它做一个测试,试一下这个效果啊,现在我就是单个流程事宜这个操作,咱们把方法执行一下,然后看它最终输出什么样的结果。啊,大家看啊,执行之后呢,这里边报了一个错,咱看报什么错啊,这里写了一个空指针异常,那应该是我们这个实例ID可能不太对啊,那这ID咱这么来做啊,这个我先去掉。然后咱们下面我们看啊,咱们刚才呢,有一个代码,就是我们那个启动一个实例指定业务,咱们把这个实例给它输出一下,然后把这个值给它写过去,这个肯定是对的啊,那我现在啊把这个执行一下,咱们看一下这个10K是什么,等它输出之后,然后咱们把它写过去,最终啊再完成我们这个单个实例的挂起或者说激活。
25:22
等他输出啊,咱们试一下。啊,现在执行啊,然后咱们看这里边遇到一个小问题啊,它有一个输出,你看什么。这各位应该能看懂啊,因为我刚才啊,把全部的这个是不是都给它挂起了,他告诉我们说这个流程定义是呢,这值没有,所以咱们怎么做呢,把刚才那个方法再重新执行一遍,就是全部这个给它先激活出来,然后咱们得到流程实例那个ID,把它再挂起,包括说带激活啊,给他签执行一下啊给它都给它。激活起来啊,因为刚才这个方法执行之后,我们应该都给它挂起了,他告诉我们这个流程定义是呢,所以他现在不能启动一个流程实例。
26:06
等他执行啊,然后咱们再执行它,把这个输出值复制过来,最终再测试应该就可以了。啊,同学可能没听清楚啊,我再说一遍,刚才问题是什么呢?第一个我这个就是实例ID值应该写的不对,他告诉我们这个是控制针异常,这应该写不对,所以他又是咱找个值,但是找值的时候呢,刚才我把全部流程实例是不是都挂起了,咱们启动一个实例的时候,他告诉我们这个流程定义等于空,所以我现在把这个实例给它重新激活起来,咱们再启动就可以了,启动之后把它ID得到复制过去,最终把这个再挂起,或者说再激活。啊,那得等他执行之后啊,然后咱们得到它那个ID值,最终再做最后的测试。等他啊,出来。
27:02
执行之后,我到里边把它那个ID值复制,也就这个啊,咱们给它拿到最上面来。是在我们这里边,然后拿出来之后,现在我们来执行,这个执行呢,应该是把这个流程实例给他做一个就是挂起的操作啊,那咱看最终输出能不能挂起,如果可以挂起对门咱这个代码就最终完成了。等他啊,先执行着,咱们把刚才写这个过程,我们再通过课件来做一个基本的分析啊,就是刚才我们的过程中,第一部分我们可以让我们的业务标识跟activity进行关联,比如说你在做审批的时候,我们要得到当前的个证明材料,那根据业务这个可以关联你的业务表,最终得到你的相关数据,然后第二部分我们可以让这个流程实例挂起,包括激活,可以让全部的或者单个的做这个操作,我最后演示这个就是单个的,然后大家看啊,最后给我们一个提示,说这个流程是不是已经被挂起了,证明在这个过程就完成了。
28:04
所以以上啊,咱就做了这个流程实例的相关操作。
我来说两句