建議妳可以看壹下咖啡兔的相關技術博文:
網頁鏈接
,
activiti6和activiti5整合方式壹致
1.為什麽要整合
Activiti5.10版本把原本獨立的ActivitiModeler模塊整合到了ActivitiExplorer中,兩者相結合使用起來很方便,通過Modeler設計的流程模型可以直接部署到引擎,也可以把已經部署的流程轉換為Model從而在Modeler中編輯。
在實際應用中也有這樣的需求,把Modeler整合到業務系統中可以供管理員使用,或者作為BPM平臺的壹部分存在,很遺憾官方沒有給出如何整合Modeler的文檔。
2.整合工作
2.1下載源碼
首先需要從Github下載源碼:
2.2復制文件
復制的所有文件均在activiti-webapp-explorer2目錄中。
src/main/resources中的、、到項目源碼的源碼根目錄,保證編譯之後在classes根目錄
src/main/webapp中的api、editor、explorer、libs到項目的webapp目錄(與WEB-INF目錄同級)
2.3添加依賴
123456789101112131415161718192021222324
<dependency>__<groupid></groupid>__<artifactid>activiti-explorer</artifactid>__<version>5.14</version>__<exclusions>____<exclusion>______<artifactid>vaadin</artifactid>______<groupid></groupid>____</exclusion>____<exclusion>______<artifactid>dcharts-widget</artifactid>______<groupid></groupid>____</exclusion>____<exclusion>______<artifactid>activiti-simple-workflow</artifactid>______<groupid></groupid>____</exclusion>__</exclusions></dependency><dependency>__<groupid></groupid>__<artifactid>activiti-modeler</artifactid>__<version>5.14</version></dependency>
2.4添加Java類
添加壹個類保存到項目中,註冊了壹些REST路由。
1234567891011121314151617181920212223242526272829
package;
import;import;import;import;import;import;
publicclassExplorerRestApplicationextendsActivitiRestApplication{
publicExplorerRestApplication(){__super();_}_/**_*CreatesarootRestletthatwillreceiveallincomingcalls._*/_@Override_publicsynchronizedRestletcreateInboundRoot(){__Routerrouter=newRouter(getContext());__();__(router);__(router);__JsonpFilterjsonpFilter=newJsonpFilter(getContext());__(router);__returnjsonpFilter;_}
}
2.5配置
在文件中添加如下配置:
12345678910111213141516
<!--Restletadapter,usedtoexposemodelerfunctionalitythroughREST--><servlet>__<servlet-name>RestletServlet</servlet-name>__<servlet-class></servlet-class>__<init-param>____<!--Applicationclassname-->____<param-name></param-name>____<param-value></param-value>__</init-param></servlet>
<!--Catchallservicerequests--><servlet-mapping>__<servlet-name>RestletServlet</servlet-name>__<url-pattern>/service/*</url-pattern></servlet-mapping>
2.6控制器
使用SpringMVC做了壹個簡單的封裝,也可以使用其他的MVC實現。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
package;
import;import;
import;import;
import;import;import;import;import;import;import;import;import;import;import;import;import;import;import;import;import;import;import;import;import;
/***流程模型控制器**@authorhenryyan*/@Controller@RequestMapping(value="/workflow/model")publicclassModelController{
protectedLoggerlogger=(getClass());
@Autowired_RepositoryServicerepositoryService;
/**_*模型列表_*/_@RequestMapping(value="list")_publicModelAndViewmodelList(){__ModelAndViewmav=newModelAndView("workflow/model-list");__List<model>list=().list();__("list",list);__returnmav;_}
/**_*創建模型_*/_@RequestMapping(value="create")_publicvoidcreate(@RequestParam("name")Stringname,@RequestParam("key")Stringkey,@RequestParam("description")Stringdescription,_____HttpServletRequestrequest,HttpServletResponseresponse){__try{___ObjectMapperobjectMapper=newObjectMapper();___ObjectNodeeditorNode=();___("id","canvas");___("resourceId","canvas");___ObjectNodestencilSetNode=();___("namespace","#");___("stencilset",stencilSetNode);___ModelmodelData=();
ObjectNodemodelObjectNode=();___(_NAME,name);___(_REVISION,1);___description=(description);___(_DESCRIPTION,description);___(());___(name);___((key));
(modelData);___((),().getBytes("utf-8"));
(()+"/service/editor?id="+());__}catch(Exceptione){___("創建模型失敗:",e);__}_}
/**_*根據Model部署流程_*/_@RequestMapping(value="deploy/{modelId}")_publicStringdeploy(@PathVariable("modelId")StringmodelId,RedirectAttributesredirectAttributes){__try{___ModelmodelData=(modelId);___ObjectNodemodelNode=(ObjectNode)newObjectMapper().readTree((()));___byte[]bpmnBytes=null;
BpmnModelmodel=newBpmnJsonConverter().convertToBpmnModel(modelNode);___bpmnBytes=newBpmnXMLConverter().convertToXML(model);
StringprocessName=()+".";___Deploymentdeployment=().name(()).addString(processName,newString(bpmnBytes)).deploy();___("message","部署成功,部署ID="+());__}catch(Exceptione){___("根據模型部署流程失敗:modelId={}",modelId,e);__}__return"redirect:/workflow/model/list";_}
/**_*導出model的xml文件_*/_@RequestMapping(value="export/{modelId}")_publicvoidexport(@PathVariable("modelId")StringmodelId,HttpServletResponseresponse){__try{___ModelmodelData=(modelId);___BpmnJsonConverterjsonConverter=newBpmnJsonConverter();___JsonNodeeditorNode=newObjectMapper().readTree((()));___BpmnModelbpmnModel=(editorNode);___BpmnXMLConverterxmlConverter=newBpmnXMLConverter();___byte[]bpmnBytes=(bpmnModel);
ByteArrayInputStreamin=newByteArrayInputStream(bpmnBytes);___(in,());___Stringfilename=().getId()+".";___("Content-Disposition","attachment;filename="+filename);___();__}catch(Exceptione){___("導出model的xml文件失敗:modelId={}",modelId,e);__}_}
}</pre>
###2.7註意事項
如果使用Spring代理引擎,並且在項目中同時有文件(不管在main/resources還是test/resources目錄),在裏面的引擎中添加下面的配置參數,否則會導致打開Modeler的編輯頁面時讀取數據返回**204**狀態碼。
<preclass="brush:xml"><propertyname="processEngineName"value="test"></property></pre>
引擎默認名稱為default,()查詢時會先檢索main/resources,然後再檢索test/resources的和文件,所以當main/resources監測不到指定文件時就會導致該引擎被當做web應用的引擎對象,這樣會導致有兩個引擎,所以把引擎的名稱改為非默認的“default”。
##3.中文亂碼問題解決辦法
在JVM參數中添加參數:
>-=UTF-8-=UTF-8
**參考**:[在ActivitiModeler中設計的流程包含奇數個中文時不能部署問題](
##4.效果截圖
在最新的kft-activiti-demo版本(1.7.0)中已經集成了ActivitiModeler,可以在線訪問,也可以下載源碼學習如何配置。
登錄[
![kft-activiti-demo中的效果截圖](/files/2013/03/)![kft-activiti-demo中的效果截圖](/files/2013/03/)</model>
Activiti6.0中如何設計和關聯表單?新增了環節用戶任務,這時緊跟著新增壹個表單即可,以及腳本、樣式、WebAPI;刪除了環節用戶任務,這時可以不用管,為顧及舊版本的流程定義,其對應的表單還需要保留,並不能刪除;修改了環節用戶任務,比如在A環節新增了兩個字段,同時在B環節減少了兩個字段,這時就要為A、B兩個環節各自重新創建表單、重新創建腳本、樣式、以及重新創建WebAPI,因為表單變了,那麽業務也就變了,SQL(表)也都跟著變了。
《Activiti實戰》epub下載在線閱讀全文,求百度網盤雲資源《Activiti實戰》(閆洪磊)電子書網盤下載免費在線閱讀
鏈接:
提取碼:xdni
書名:Activiti實戰
豆瓣評分:7.2
作者:閆洪磊
出版社:_倒ひ黨靄嬪
出版年:2015-1-1
頁數:508
內容簡介:
《Activiti實戰》立足於實踐,不僅讓讀者知其然,全面掌握Activiti架構、功能、用法、技巧和最佳實踐,廣度足夠;而且讓讀者知其所以然,深入理解Activiti的源代碼實現、設計模式和PVM,深度也足夠。
《Activiti實戰》壹***四個部分:準備篇(1~2章)介紹了Activiti的概念、特點、應用、體系結構,以及開發環境的搭建和配置;基礎篇(3~4章)首先講解了ActivitiModeler、ActivitiDesigner兩種流程設計工具的詳細使用,然後詳細講解了BPMN2.0規範;實戰篇(5~14章)系統講解了Activiti的用法、技巧和最佳實踐,包含流程定義、流程實例、任務、子流程、多實例、事件以及監聽器等;高級篇(15~21)通過集成WebService、規則引擎、JPA、ESB等各種服務和中間件來闡述了Activiti不僅僅是引擎,實際上是壹個BPM平臺,最後還通過源代碼對它的設計模式及PVM進行了分析。
作者簡介:
閆洪磊(咖啡兔)資深軟件開發工程師和架構師,為Activiti貢獻了大量代碼,為Activiti在中國的推廣與普及做了大量的工作,在社群中有很高的威望和知名度,被稱為中國Activiti領域的第壹人。多年來壹直從事OA、ERP等系統的開發與架構設計工作,持續關註並深入研究工作流引擎,目前就職於小馬購車,擔任架構師壹職,並負責公司內部工作流平臺的建設工作。