00:00
各位同学大家好,刚才呢给大家演示了流程实例的相关操作,包括如何和我们的业务key进行关联,以及流程实例如何挂起,如何激活,那下面呢,我们继续往下来演示,下面给大家演示什么呢?就是关于我们这个任务的分配,什么叫任务分配呢?给大家说明啊,比如说我现在啊,在这个图里边,大家看第二个这里边是不是叫李四,第一个是不是叫张三,那现在在这里边张三是不是要审批,这里边李四是不是要审批,每个里边要指定你的这个任务人进行相关的操作,那这过程就叫任务分配,然后任务分配怎么做呢?这里边有三种方式可以实现,第一种方式叫固定分配。第二种方式通过表达式分配,第三种方式通过监听器进行分配,那我下面啊把三种方式给各位分别进行演示,首先我们先看第一种方式,其实咱们之前做的就是第一种方式,那第一种方式怎么做的呢?给大家做个说明,比如现在啊,打开咱们之前画的这个流程图,我把它点击编辑,大家看到啊,在张三审批这个用户任务中,我们在里边之前是固定指定的,它是由张三进行审批,然后在这里边固定指定是不是叫李四,这就是第一种方式,也就是我们在画这个流程图的时候,固定指定由谁进行这个任务的这个相关的操作,这是第一种方式固定分配,比如你指定张三或者李四,咱之前体现那就是在这个位置。
01:39
通过它进行固定分配,然后这个之后呢,我们下面呢,还有第二种方式,因为第一种方式大家看到虽然说它很方便,但是它里面是写固定的,你想进行修改并不是很方便,我们还需要改它流程图里边包括改它的相关的文件等内容,所以咱们这里边可以用第二种方式,第二种怎么做呢?通过表达式进行分配,咱们可以通过一个变量,然后通过代码指定由谁进行任务的操作,那咱看一下第二种方式怎么来做,先做个介绍,然后咱们进行演示。
02:14
大家看到啊,在里边有一种表达式遵循,然后表达里里对它有支持,我们可以通过u l y u l method进行相关的操作,这个叫表达式分配,也就它是一种统一的表达式语言,Activity对它有相关支持。那这个怎么做,咱们做个说明啊,首先我们现在这么来做,咱们新建一个流程,然后在流程中给大家做个演示,那咱写个流程啊,这个流程呢,比如说是一个加班流程,这流程很简单啊,比如现在我们申请加班,首先由你的部门经理审批,然后由人事审批,最终结束,那咱就画一下这个流程,然后进行实现啊,那咱们看怎么来做啊。
03:09
首先我来到这里边就先关掉,咱们在这过程中呢,新建一个模型,我起个名字就叫加班。点击创建,把这创建出来,然后创建之后呢,在里边画个图,首先我们画一个开始,然后在里边画入两个用户任务啊,咱画两个。就是放到这个位置,最后有一个结束,我们找到一个结束世界放到这位置,现在这个就完成,完成之后在里边咱给它连到一起去啊,用这个流向给它连到一起。也就是这个。点上啊,给它连接到一起去,这之前我们都画过啊,这里边我就快速画一下。然后画完之后在里边,首先啊,给它起个这个名字,我们叫这个。
04:03
加班啊,这是咱们起的名字,然后这个起完之后我们再来看啊,在这里首先第一个起个名字,比如我们叫这个经理审批。这位啊经理审批这个我们完成,完成之后,这里边我们加一个叫人事审批。现在就完成了啊,然后完成之后各位注意啊,咱们就是在之前写的过程中呢,我们是这么一个特点,不是各位是否记得啊,就之前写的时候呢,在这里边,比如现在我们点它。这过程中啊,点这个。咱们在里边可以指定是由谁完成这个任务,就这位置我可以进行指定,当时咱是这么做的,包括在人事审批中,我在这里边也可以进行指定,但是现在咱们不这么做,而我们怎么做呢?通过表达式进行实现,那怎么实现?给各位具体来写一下这个过程啊。
05:02
我们啊来到这里边,比如说第一个经理审批,咱们找到还是这个位置,然后在里边的这个位置呢,我们之前怎么做,咱是不是起个名字,比如叫张三,但是现在咱不这么做,我们加上一个表达式,注意它的写法,加上一个Dollar符号,大括号里边加上一个名字,这个名字呢,理论上是随便写的,我为了各位看着方便,我就跟课件中保持一致的,比如我叫这个名字,叫我塞一啊,叫它当然也可以叫别的名字啊,加上一个表达式,然后加上之后我点保存,现在就完成了,然后这里边表示用表达式,就用你这个任务人,这个之后我们再来写,在人事审批中,我们同样这么来做,点击这个里边,然后加上一个表达式。这个表达式我们叫二,指定另外一个人,然后点保存,所以现在啊,这部分我们就完成了,这是我们用这个UY这种方式进行这么一个表达式的分配。
06:07
我再说一遍啊,然后咱们写代码,在这过程中呢,咱们刚才做法就是我新建一个流程,也就是一个简单的加班流程,我们通过经理审批,通过人事审批,首先起个名字叫加班,在经理审批中指行名字叫经理审批,在呃善里边指行它的任务人,而里边我不是写固定值,加了一个表达式,通过表达式我们来选择,就是它里边这个东西啊,那我们给他加上啊。这个位置找到啊,在这里。通过表达式我们给它加上,然后在人事审批中,同样我们也是加了一个表达式,然后把这个我们最终给它做到,这是我们啊,就是刚才看到的这么一个特点。这大家注意啊,这个写法,然后表达式里面注意啊,这里边是起了一个名字叫A31或者A32,这个名字理论上随便写,我为了各位看得清楚,跟课件中我就保持一致了,一个叫一,一个叫二,所以现在啊,这个流程图就完成了,完成之后咱把它保存一下。
07:17
比如说就叫这个加班啊,保存。在我们这个位置保存之后,同样啊,把它导出咱们的叉L文件啊,注意加班这个文件。我给它保存一下啊。保存,然后之后呢,把这个图片我们给它也是做一个另存为。这个图片啊,我们就叫加班。点偏低,所以现在啊,这个我们就完成了通过表达式我们做的这个任务的分配,然后这个之后呢,下面我们继续往下来做,然后下面怎么做呢?跟之前一样啊,首先咱把这两文件就是加班这文件先给它复制到我们这个项目里边来,那我给做复制啊,放到我们这个process下,我们有两个文件,一个叫加班L,一个加班P啊这个完成完成之后呢,下面我们开始写这代码。
08:17
然后代码怎么做,注意啊,跟之前应该是一样的,我们的做法就是呢,看这里啊,比如说我们启动一个流程实例啊,然后这个时候方法之前基本一致,只是我们加了一个参数,这个参数位置就是加了这个,比如这里边指定张三,这里指定例四啊,通过它这个实现所下面啊,咱们来具体实现一下这个过程。这里边啊,我来写一下啊。然后这个写的时候呢,为了各位看的更明确,我再重新建个测试类了,你在之前里边写也没有错啊,咱为了各位看的更方便,我再重新建个类,咱们重新进行实现,那我在里边创建啊。这个类我就叫。
09:00
Test。DEMO1,为了跟之前区分,然后在上边加上注解,不test加上之后在里边注入相关的内容啊,这个注入我就复制了,因为咱们之前刚写过啊,一个这个Rep service,用于流程定义的一个runtime service,由于我们的流程实例的task service,由于我们的任务的,还有一个history,用于相关操作历史的这几个都给它注进来。然后注入之后,下面呢,我们加上它具体的方法,首先啊,我们写第一个方法,就是咱之前说到的,我们这里边做这个流程定义的一个部署啊,把这个先部署一下,就是之前我们做的。这个过程啊,流程定义部署,然后部署之后我们启动一个流程实例,只是目前启动过程中需要指定你那个任务人,就是给谁做这个任务的审批,那咱们做一下啊第一个。部署。
10:01
我们的流程定义。然后第二个启动流程的实例,那咱们啊先做第一个。我加上一个test,然后加一个public with啊,咱就叫这个deep。这是第一部分啊,然后在里边把代码咱们快速写一下啊,通过p service里这个方法叫,然后在里边继续上咱们那个法,这咱之前都做过啊,这不再重复了,然后加上我们那个插的文件,包括P啊,咱加其实加个M文件就可以了啊,那我加上这个process。然后加上里面那个文件的名字啊,为了防止写错,我把名字直接给他拿过来。就是我们的这个名字。
11:00
就是啊T,然后这里呃,就是加班申请流程了。然后最后啊,调用里面这个方法,Deep play,现在啊,这个就完成了流程定义部署。然后完成之后在里边我们可以做一些输出,那咱们看着更方便啊输出一下。就是上get ID啊这个ID,然后再把它那个名字我们也做一个输出get,所以现在啊,第一部分完成流程定义部署。然后完成之后,下面呢,咱就启动一个流程实例,我们把这个写完,然后最终做个测试啊。其中一个流程实例。这个啊,太。加上public,我叫这个start启动流程实例,加上一个这个。
12:08
呃,看着更方便,然后在里边我们来做一下啊,注意一下这个怎么做啊,咱们之前应该写过用runtime service里边的方法,因为这个专门做流程实例的,这个方法是什么呢?我一下啊,它叫做通过进实,而这里边注意啊,咱们之前写的应该是那个K的值,比如之前我们叫请假啊,现在咱应该叫这个加班。写他,但是加的时候呢,在里边咱目前啊再指定一个值,这个值是什么呢?就是咱们说那个任务的那个人的这个指令,比如说现在第一个这个图里边是由张三,第二个是李四把这个需要指定,刚才在里边注意啊,我们是不是加过表达式啊,所以咱们用到这里边把这个进行指定,比如第一个张三,第二个李四,那咱看怎么来做啊。
13:03
首先啊,因为咱们有多个值,所以咱们先建一个map集合,我加上string啊,加上object,然后起个名字,我就叫map,等于上一个这个哈希map。啊,给它加上啊。哈希map这是第一部分,先new个map集合,然后通过map集合来设置它那个任务人啊,设置任务人就是给谁来分配这个任务,那咱设置啊,首先第一个put。注意啊,这个该怎么去写。在map中的第一个值就是你在那个流程里加这个或AB啊,那咱把它加上,第二个是你这个人的明字,比如第一个我们为了明确啊,我就叫这个啊,比如咱们叫Lucy,看着方便啊,跟之前区分一下。然后第二个我来一个put,这个名字我们这里写过了,看一下啊,它叫这个S2。
14:07
咱们把它也是复制过来,注意跟它必须要保持一致啊。其实这个名字我们叫这个。现在指定出来了,然后指定之后咱们把这个map给它直接传进去,这样的话就完成这个操作之后,我们返回它这个对象啊,就是你的流程对象现在就完成了,完成之后啊,咱们把它相关的内我们做一个输出。比如第一个它那个流程定义的ID。输出一下啊,Get这个。ID。然后第二个流程实例ID,我们也输出一下。Get ID,所以现在啊,这个过程我们就完成了,咱通过它做这么一个指定啊,这是我们做的这个部分啊,然后只能之后下面呢,咱把它执行一下,看一下里边的基本效果是怎么样,咱们试一下啊。
15:09
首先我先把流程定义进行部署,这个先执行一下,注意这里边这些名字啊,一定不要写错。等它进行出来啊,然后咱们再启动实例。运行完成我们看到啊,最终输出的有这么两个值,一个ID啊,一个他的名字,咱们叫加班申请流程的这个完成,然后完成之后第二部分把流程实例我们进行启动啊,那我们来写一下啊,这里边我们叫加班啊,反正这个名字。现在这个启动一下啊。把它执行,等他请完成,如果启动之后,那咱这个。相关的操作应该就完成了。好,咱们看到啊,这个也运行完成了,我们看最终返回到有我这个ID啊,包括有里边这个流程实例I,所以现在这个就做到了啊,然做到呢,我们这么看好像效果看是特,所以咱们下做作大家看啊,咱们之前呢,曾经写过这么一个方法,这方法我因为我们之前写过,这里边我就不再敲一遍了,咱直接复制用一下啊,咱之前写过做什么呢?就是查询个人的代办任务,比如咱们之前查的是张三,目前咱不是张三,为了跟之前区分我们叫什么,是不是Lucy和Mary啊,所以咱现在根据他我们来查下啊,查下当前这个就是个人的代办任务,我们到这里边咱来查下这个内容。
16:45
那咱来试一下啊。我现在做个查询,咱们查到不是张三,是这个Lucy,因为我特别改了一个名字啊,为了跟之前区分,那Lucy这个写完之后,咱来查一下当前这个代办的任务是怎么样,我们来执行一下啊,看一下这效果,如果能查到,那这边这个任务就正常分配了。
17:07
好的,咱们看啊,现在已经执行完成了啊,然后咱们看它输出的信息里边,我们发现啊,这知识表就是目前是Lucy啊,然后他是经理审批,这个能查到,那证明我们现在这个通过表达式就完成了任务的分配,这个咱们就做到这里啊,所以各位注意这个事前的过程啊。然后这个之后我们再来看啊,就是咱们刚才写的过程中,通过叫UELY方式进行实现,而在这过程中还有一种方式叫做什么method。Method什么意思?就是方法可以实现,就是它里边啊,也是用这种表达式,只是写法一个变化,那怎么做,咱们同样先看一遍,然后给大家做个实现啊。那我们看一下啊,在这过程中,比如现在我们写的时候呢,可以这么写,这么写,你看这个写法啊,叫user b.get username里边传个一,这里边要传个二,那什么意思呢?我强调啊,首先第一个user b理解为是死文中的一个B,或者说是一个实例对象啊,然后对象中咱可以调它的方法,叫get username这个一和二质变的参数,比如说我现在啊,我调方法传一返回一定的数据,我传二,返回二定的数据,通过调我们这个并中的方法得到不同的值,下面有这个具体方法,当然我这个写的比较简单啊,实际中可能有复杂的这个业务,但以它为例,你看我的过程中啊,我传一。
18:40
返回什么是不是张三,我传二返回什么是不是李四,如果这里边不是一不是二,那就返回额的密啊,通过它我们做这个就是相关的这个任务的分配,这也是我们说的另外一种方式,通过表达式叫uell method的进行实现,那下面呢,把这个给各位来具体写一下啊,讲看他怎么来做。
19:04
当然我强调啊,你的bin的名字和方法名字可以写的,不一定非要写user get username啊,你写的也可以,我只是以这个为例给大家说明,这要明确啊,不要求你会举一反三,但你要会举一反一,你知道这个名字啊,但是随便写一个名字,你叫别的名字完全也是可以的。那下面啊,咱们做一个具体测试啊,看一下怎么来做。首先啊,我现在还是来到咱们这个图里边,在这图里边,比如我现在啊,咱们这么来做,把这值改一下,大家看之前他叫这个。这个一,那这位改成当前这个user b get userme里加个一啊,当然可以加的啊,我就以这个为例,我加上这个写法。Userb.get username get username是个方法加个一,这是我们的一个。
20:05
这个啊,咱们完成,然后你看里边这个写法啊,然后这个之后我在人事审批中同样加上这个部分,我这里加一下啊,这个我们叫get username加上一个二。然后保存,所以现在啊,这两部分我们就完成了,你看里边啊,经理审批中username,人事审批中USERNAME2,现在我们完成,完成之后把它保存下啊,继续保存成这个加分。保存啊,然后保存之后我把这个啊重新给他。导出一下啊,因为刚才有一点变化啊,给它重新导出一下。然后现在这一部分就完成了啊,完成之后我把它呢,还是放到咱们这个项目中。啊,这个啊,为了区分,把名字我稍微改一下啊。咱们叫加班。
21:04
这个我们叫这个。零一啊,就是给它稍微改一下啊,为了咱一会儿看着更加方便啊,然后通过它进行实现,然后把这个同样我们给它复制过来。到咱们这个位置啊,就是加班零一这个值,所以现在啊,这部分我们就完成了啊,然后完成之后下面怎么做呢?我们就是通过代码给它完善,但是代码中需要建个B,里面有方法,有这个参数值,然后最后还是流程定义部署启动流程实例跟之前应该都类似啊,那下面我们来具体写一下啊。首先咱们来到这个过程中啊,把掉我们在activity呢,现在我建一个这个咱们名。右侧B。然后创建之后在bin上面加个注解,我们就加个这注解各位要清楚啊,表示把这bin的操作交给容器中进行管理,然后在B里边呢,按照我们刚才那个写的表达式中的特点,在里边加上一个叫get username方法,因为咱们刚才写的咱可以再看一下啊。
22:14
你看这个方法里边这位置我们是不是叫get username里面有参数,所以下面啊,咱需要加上这么一个方法,我加到这位置啊,加上get username,然后里边咱一个ID。参数里边呢,做一个简单的一个判断。如果说啊,这个ID值等于一。那咱们就一个值,这个值呢,为了跟之前区分,咱换个名字啊,因为之前我们叫张三李四Lucy,咱们换名字。李雷啊,叫他了啊,然后再加一个异火。来做下一个判断,If,如果说这个ID值等于二,咱们继续成一个值,这个值比如说我叫这个什么韩梅梅啊,叫他了啊,李雷韩梅梅嘛,啊,这两个人如果说它不是一也不是二,那我们叫蕊吞一个值,就是叫这个我的in。
23:21
所以现在啊,大家看到这个方法咱就完成了啊,咱刚才配置的其实就是它。这要明确啊,另外注意这个过程中啊,Spring里边有个基础,咱们这个类的名字叫UB,它在创建实例的时候,或者创建对象那个生成bin的时候,它的名字是你的类名的首字母小写就是U的小写。这要知道啊,如果这个你不清楚啊,那你把人的这个框架先好好学一学,再来看我们这个内容啊,因为咱重点不是讲框架,是讲我们这个项目中的知识,这个啊完成完成之后呢,下面我们开始写这个具体的代码,跟刚才过程是一样的。
24:04
只是说里边一些文件的名字啊,这些需要改一下,包括写法有些变化,咱为了明确啊,我把这个就重新写一下。这个位置啊,我先加上一个注释。这里边咱们做的是用UE。Y6方式进行实现,然后下面咱要做的是用U进行实现。那咱们看一下啊,第一个部署流程定义。我加上方法啊,Public啊,然后方法给它起个名字叫,咱为了区分我叫零一。然后在里边写一下啊这个做法。啊,虽然跟刚才一样,为了各位加一下印象,我这里再写一遍啊,如果后面再有这个代码,我就直接复制了,我这里再写一遍啊,你看我都所以特别悉啊上们这个process加上叉文件,叉M文件呢,用咱们最后复制的这个。
25:13
多个零一这个啊,咱为了区分一下用它。然后这个。答过来。放到我们的D位置。在里边我们指定它的一个名字啊,咱们叫这个。加班申请流程,为了区分啊,多一个零一。然后点上一个叫最终返回这对象现在就完成啊,完成之后咱们可以做一些基本的输出,Deployment get ID啊,包括在get这个名称现在啊第一部分完成,完成之后下面咱们启动一个流程的实例。加上等public,我们叫start process instance,然后加上一个零。
26:05
这个方法啊,然后方法写完之后,在里边我们进行实例的启动,那怎么做呢?注意啊,因为刚才呢,咱是通过这个变量啊,里边指定现在咱是用这个就是method的方式进行操作,所以现在咱就不需要再写这个变量这个过程,因为目前不是这个样子,咱是调用方法,方法中传参数如果是一李雷是二还没酶,如果都不是,那就是我的命。啊,那现在我们就直接启动就可以了,用里这个方法BY,咱们只用一个K的名字,比如叫这个啊,就是加班零一啊,咱做个指定。最终返回这么一个B项,我们就叫,然后最终啊,我们做一个输出就可以了。比如说这个。
27:00
Get DeFinition这个ID。然后包括我们再做个输出。点上get这个ID啊,现在这个我们就完成了啊,所以以上我们写的这个代码,然后这个完之后,下面呢,咱把它执行下,然后咱们来测试一下最终的效果怎么样,我们来执行啊,首先第一部分我们先。流程定义,先进行部署。等他啊,提出来。啊,咱们看啊,这个已经完成了,然后最终也做了这个输出啊,然后第二部分咱们启动流程实例等他盯出来啊。然后这个过程中,他会做那个任务人的分配,因为咱们做的这个方法的这个各种判断啊,这些都有了,等他执行完成。我们啊里错啊,这个这个名字应该叫加班啊,咱不叫零一啊,咱们可以给这改一下啊,我改成这个加班零一,或者把这个改成加班都可以。
28:20
啊,那我就改一下这个啊,咱就改成这个加班零一。改一下啊。这个值,呃,做一个修改。包括你看里边啊,有咱们写那个表达式的部分在这里啊,这里边改成这个加班定义。这个啊,那就手动改一下,然后改完之后我把这个再重新执行一下啊,啊,咱再重新操作一下。啊,当然过程中因为这个咱们都改了,我给它重新加载一下啊,重新部署,然后重新启动,然后最终我们来试一下这个效果。流程定义部署之后,我们启动流程实例啊,然后再做一个最终的测试啊。
29:03
啊,咱们看啊,现在这部分就完成了,他把值做了输出啊,然后我强调啊,我这个录视频过程中为了节约时间,因为中间在执行过程中,这里边时间可能稍微长点,所以我把这时间给大家省略了,你自己在测试过程中,可能这个时间需要多等一会儿,我这里直接让大家看到最终结果啊,咱就省略这个没有必要的时间。然后之后呢,这个完成之后,咱们怎么做呢?按照刚才的方式啊,咱们还是再查一下,查询一下当前这个人的这个代办任务,咱们目前这第一个人我们还记得吧,啊第一个人是这个ME1,然后me是谁各位应该记得啊,是谁咱们看一下啊,是不是这个李雷所下面咱就查一下李雷这个相关的任务信息啊,看能不能查到,如果能查到,证明这个过程就正确的。那咱们啊,最终把这个来试一下啊,试一下这个最后结果。
30:00
等他执行啊。各位最终看到啊,执行完成,你看最后的输出是不是叫李雷尽力审批证明咱这任务就完成了分配,所以咱们到这里啊,就完成了前两种方式说明,第一种就是固定分配,你在画流程图的时候,直接指定这个任务人是谁,然后第二个用表达式,表达式中两种方式,一种叫UE ly6,一种叫UE l method,通过方法进行分配,所以以上啊,咱们把前两种方式就演示完成了。完成之后呢,下面还有第三种方式,它叫做监听器分配,那咱们一会儿进行具体演示。
我来说两句