IDEA創(chuàng)建Activiti工作流開發(fā)

IDEA創(chuàng)建Activiti工作流開發(fā)

一爸吮、 安裝Activiti插件

1. 首先打開FIle的setting功能低缩,搜索Plugins:?


2. 輸入actiBPM损俭,然后點(diǎn)擊搜索:


3. 點(diǎn)擊安裝音五、應(yīng)用:


安裝好之后點(diǎn)擊apply(應(yīng)用),之后重啟idea

二辣恋、 創(chuàng)建Activiti工作流并導(dǎo)出流程圖圖片

1. 重啟IDEA之后亮垫,點(diǎn)擊File文件中的New下的BpmnFile:


2. 給這個(gè)文件起好名字后拖動(dòng)右邊的圖標(biāo)到左邊:


3. 把鼠標(biāo)放到節(jié)點(diǎn)中心,中心會(huì)變成黑白扇形:


4. 拖拽連線到另一個(gè)圖標(biāo)進(jìn)行畫圖:


5. 左鍵單擊節(jié)點(diǎn)就會(huì)出現(xiàn)左邊的修改按鈕:


Id命名規(guī)范: 要以字母或下劃線 () 字符開頭伟骨,后接 XML 規(guī)范中允許的任意字母饮潦、數(shù)字、重音字符携狭、變音符號(hào)继蜡、句點(diǎn) (.)、連字符 (-) 和下劃線 () 的組合。

否則》》》(報(bào)org.activiti.bpmn.exceptions.XMLException: cvc-datatype-valid.1.2.1: '' 不是 'NCName' 異常)

6. 接著修改文件的后綴名為.xml:


打開該文件可以看到稀并,流程圖以xml代碼格式呈現(xiàn)(當(dāng)然也可以在重命名改回去)

7. 接著右鍵該文件:


如果沒有出現(xiàn)圖中的按鈕仅颇,可以按快捷鍵Ctrl+alt+Shift+U,按了以后,以后這個(gè)圖標(biāo)就會(huì)出現(xiàn)了


8. 導(dǎo)出圖片


可以點(diǎn)擊該按鈕保存這圖片稻轨,后綴名自己設(shè)置下.png

三灵莲、 解決圖片亂碼bug

如果圖片中有中文會(huì)出現(xiàn)亂碼,需要在這兩個(gè)文件下的后面都加上

-Dfile.encoding=UTF-8


然后重啟IDEA殴俱,把原來的PNG圖片刪掉政冻,再生成一次就不會(huì)出現(xiàn)亂碼了

四、 測(cè)試(test)工作流開發(fā)

1. 引入pom.xml依賴

<!--JUnit測(cè)試-->

? ? ? ? <dependency>

? ? ? ? ? ? <groupId>junit</groupId>

? ? ? ? ? ? <artifactId>junit</artifactId>

? ? ? ? ? ? <version>4.12</version>

? ? ? ? </dependency>

<!--- Activiti依賴導(dǎo)入 -->

? ? ? ? <dependency>

? ? ? ? ? ? <groupId>org.activiti</groupId>

? ? ? ? ? ? <artifactId>activiti-spring</artifactId>

? ? ? ? ? ? <version>5.18.0</version>

? ? ? ? </dependency>

? ? ? ? <dependency>

? ? ? ? ? ? <groupId>org.activiti</groupId>

? ? ? ? ? ? <artifactId>activiti-engine</artifactId>

? ? ? ? ? ? <version>5.18.0</version>

? ? ? ? ? ? <exclusions>

? ? ? ? ? ? ? ? <exclusion>

? ? ? ? ? ? ? ? ? ? <artifactId>slf4j-api</artifactId>

? ? ? ? ? ? ? ? ? ? <groupId>org.slf4j</groupId>

? ? ? ? ? ? ? ? </exclusion>

? ? ? ? ? ? ? ? <exclusion>

? ? ? ? ? ? ? ? ? ? <artifactId>spring-eans</artifactId>

? ? ? ? ? ? <groupId>org.springframework</groupId>

? ? ? ? ? ? ? ? </exclusion>

? ? ? ? ? ? ? ? <exclusion>

? ? ? ? ? ? ? ? ? ? <artifactId>jackson-core-asl</artifactId>

? ? ? ? ? ? ? ? ? ? <groupId>org.codehaus.jackson</groupId>

? ? ? ? ? ? ? ? </exclusion>

? ? ? ? ? ? ? ? <exclusion>

? ? ? ? ? ? ? ? ? ? <artifactId>commons-lang3</artifactId>

? ? ? ? ? ? ? ? ? ? <groupId>org.apache.commons</groupId>

? ? ? ? ? ? ? ? </exclusion>

? ? ? ? ? ? ? ? <exclusion>

? ? ? ? ? ? ? ? ? ? <artifactId>commons-lang3</artifactId>

? ? ? ? ? ? ? ? ? ? <groupId>org.apache.commons</groupId>

? ? ? ? ? ? ? ? </exclusion>

? ? ? ? ? ? </exclusions>

? ? ? ? </dependency>

2. 在src/main/resources下面新建一個(gè)BPMN文件

(同上文操作的創(chuàng)建工作流)

3. 畫完流程圖之后要更改對(duì)應(yīng)元素的name和assignee线欲,Id


然后點(diǎn)擊空白地方明场,把流程ID和名稱改掉,如下圖:


4. 之后把數(shù)據(jù)庫建好李丰,建一個(gè)activiti.cfg.xml在resource下面

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

? ? ? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

? ? ? ? ? ? ? ? xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

? ? ? ? ? ? <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">

? ? <property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property>

? ? ? ? ? ? ? <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/demo?useUnicode=true&amp;characterEncoding=utf8"></property>

? ? <property name="jdbcUsername" value="root"></property>

? ? <property name="jdbcPassword" value="root"></property>

? ? <property name="databaseSchemaUpdate" value="true"></property>

? </bean>

</beans>

5. 新建一個(gè)java類苦锨,用來生成表


@Test

public void crateTable(){

? ? ? ? ? ? ? ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine();

}

運(yùn)行這個(gè)類之后數(shù)據(jù)庫里面會(huì)生成24張表, 23-25張表都是有可能的趴泌,我這里是生成了24張表舟舒,多了一張act_evt_log,事件處理日志表嗜憔。最主要的還是那23張表


6. 之后就可以開始部署流程


代碼:

ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();

? ? //部署流程

? ? @Test

? ? public void deployProcess(){

? ? ? ? RepositoryService repositoryService=processEngine.getRepositoryService();

? ? ? ? DeploymentBuilder builder=repositoryService.createDeployment();

? ? ? ? builder.addClasspathResource("myWork.bpmn");

? ? ? ? builder.deploy();

}

部署之后就可以在act_re_procdef表中看到對(duì)相應(yīng)的流程信息

7. 啟動(dòng)流程


代碼:

ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();

? ? @Test

? ? public void startProcess(){

? ? ? ? RuntimeService runtimeService=processEngine.getRuntimeService();

? ? ? ? runtimeService.startProcessInstanceByKey("myProcess_1");

}

啟動(dòng)流程之后就會(huì)有相應(yīng)的任務(wù)產(chǎn)生秃励,存在act_ru_task表中,可以查看任務(wù)節(jié)點(diǎn)


代碼:

ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();

? ? @Test

? ? public void queryProcess(){

? ? ? ? TaskService taskService=processEngine.getTaskService();

? ? ? ? String assigne="student";

? ? ? ? List<Task> tasks=taskService.createTaskQuery().taskAssignee(assigne).list();

? ? ? ? int size=tasks.size();

? ? ? ? for(int i=0;i<size;i++){

? ? ? ? ? ? Task task=tasks.get(i);

? ? ? ? }

? ? ? ? for (Task task:tasks){

? ? ? ? ? ? System.out.println("taskId=" +"流程任務(wù)節(jié)點(diǎn)信息ID:"+ task.getId() +

? ? ? ? ? ? ? ? ? ? ",taskName:" +"流程任務(wù)節(jié)點(diǎn)名稱ID:" +task.getName() +

? ? ? ? ? ? ? ? ? ? ",assignee:" + "流程任務(wù)節(jié)點(diǎn)接受人:"+task.getAssignee() +

? ? ? ? ? ? ? ? ? ? ",createTime:" +"流程任務(wù)節(jié)點(diǎn)創(chuàng)建時(shí)間:"+ task.getCreateTime());

? ? ? ? }

? ? }

首次運(yùn)行的時(shí)候這個(gè)沒有輸出吉捶,因?yàn)榈谝淮芜\(yùn)行的時(shí)候掃描act_ru_task的表里面是空的夺鲜,但第一次運(yùn)行完成之后里面會(huì)添加一條記錄,之后每次運(yùn)行里面都會(huì)添加一條記錄

8. 查詢流程明細(xì)定義明細(xì)


代碼:

ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();

@Test

public void queryProcdef(){

? ? ? ? RepositoryService repositoryService=processEngine.getRepositoryService();

? ? ? ? ? ? ? ? ? ProcessDefinitionQuery query=repositoryService.createProcessDefinitionQuery();

? ? ? ? query.processDefinitionKey("myProcess_1");

? ? ? ? List<ProcessDefinition> pds=query.list();

? ? ? ? System.out.println(">>>>>>>>>>>>>>>>>>>>>");

? ? ? ? for (ProcessDefinition pd:pds){

? ? ? ? ? ? System.out.println("ID:"+pd.getId()+",NAME:"+pd.getName()+

? ? ? ? ? ? ? ? ? ? ",KEY:"+pd.getKey()+",VERSION:"+pd.getVersion()+

? ? ? ? ? ? ? ? ? ? ",RESOURCE_NAME:"+pd.getResourceName()+

? ? ? ? ? ? ? ? ? ? ",DGRM_RESOURCE_NAME:"+pd.getDiagramResourceName());

? ? ? ? }

}

9. 審核過程完成任務(wù)節(jié)點(diǎn)審批


代碼:

ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();

? ? @Test

? ? public void startProcessApproval(){

? ? ? ? TaskService taskService=processEngine.getTaskService();

? ? ? ? //taskId 就是查詢?nèi)蝿?wù)中的 ID

? ? ? ? String taskId="2504";

? ? ? ? //完成請(qǐng)假申請(qǐng)任務(wù)

? ? ? ? taskService.complete(taskId);

}

10. 流程詳細(xì)步驟:

部署流程》》》》》》啟動(dòng)流程》》》》》》查詢用戶id》》》》用戶完成任務(wù)》》》流程結(jié)束

五呐舔、 生成流程報(bào)表


流程部署表

SELECT * FROM `act_re_deployment`

流程定義表

SELECT * FROM `act_re_procdef`

資源文件表

SELECT * FROM `act_ge_bytearray`

系統(tǒng)配置表

SELECT * FROM `act_ge_property`

啟動(dòng)流程實(shí)例涉及到的表

流程實(shí)例運(yùn)行時(shí) 執(zhí)行對(duì)象表

SELECT * FROM `act_ru_execution`

流程實(shí)例運(yùn)行時(shí) 身份聯(lián)系表

SELECT * FROM `act_ru_identitylink`

流程實(shí)例運(yùn)行時(shí) 用戶任務(wù)表

SELECT * FROM `act_ru_task`

活動(dòng)節(jié)點(diǎn)歷史表

SELECT * FROM `act_hi_actinst`

身份聯(lián)系表 歷史

SELECT * FROM `act_hi_identitylink`

流程實(shí)例表 歷史

SELECT * FROM `act_hi_procinst`

歷史任務(wù)表

SELECT * FROM `act_hi_taskinst`

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末币励,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子珊拼,更是在濱河造成了極大的恐慌食呻,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件杆麸,死亡現(xiàn)場(chǎng)離奇詭異搁进,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)昔头,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門饼问,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人揭斧,你說我怎么就攤上這事莱革【撸” “怎么了?”我有些...
    開封第一講書人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵盅视,是天一觀的道長捐名。 經(jīng)常有香客問我,道長闹击,這世上最難降的妖魔是什么镶蹋? 我笑而不...
    開封第一講書人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮赏半,結(jié)果婚禮上贺归,老公的妹妹穿的比我還像新娘。我一直安慰自己断箫,他們只是感情好拂酣,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著仲义,像睡著了一般婶熬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上埃撵,一...
    開封第一講書人閱讀 49,806評(píng)論 1 290
  • 那天赵颅,我揣著相機(jī)與錄音,去河邊找鬼暂刘。 笑死性含,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鸳惯。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼叠萍,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼芝发!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起苛谷,我...
    開封第一講書人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤辅鲸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后腹殿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體独悴,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年锣尉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了刻炒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡自沧,死狀恐怖坟奥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤爱谁,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布晒喷,位于F島的核電站,受9級(jí)特大地震影響访敌,放射性物質(zhì)發(fā)生泄漏凉敲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一寺旺、第九天 我趴在偏房一處隱蔽的房頂上張望爷抓。 院中可真熱鬧,春花似錦迅涮、人聲如沸废赞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽唉地。三九已至,卻和暖如春传透,著一層夾襖步出監(jiān)牢的瞬間耘沼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來泰國打工朱盐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留群嗤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓兵琳,卻偏偏與公主長得像狂秘,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子躯肌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容