国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
activiti自定義流程之整合(四):整合自定義表單部署流程定義
綜合前幾篇博文內(nèi)容,我想在整合這一部分中應(yīng)該會(huì)有很多模塊會(huì)跳過不講,就如自定義表單的表單列表那一塊,因?yàn)檫@些模塊在整合的過程中都幾乎沒有什么改動(dòng),再多講也是重復(fù)無用功。
正因?yàn)槿绱?,在?chuàng)建了流程模型之后,模型列表的展示也是和之前的沒有什么區(qū)別,而且都是很簡單的后臺(tái)查詢以及前臺(tái)展示,這一部分也就不過多的講了。
模型列表頁面如下:
至于其中的修改和刪除也沒什么多講的,刪除很簡單,而修改也是activiti-modeler實(shí)現(xiàn)的主要功能,我們只需要跳轉(zhuǎn)過去就行。
重要的部分在于部署,因?yàn)辄c(diǎn)擊部署到達(dá)后臺(tái)以后,activiti就要和自定義的form表單打賞關(guān)系。
以上頁面的html代碼如下:
[html] view plain copy
<div id="logdiv1" ng-init="init();">
<p style="font-size:24px;margin:3px">模型列表</p>
<center>
<table border="1px" style="margin-top:1px;width:87%;font-size:18px;text-align:center;margin-left:2px;margin-top:auto;position:relative;float:left;" cellSpacing="0px" cellPadding="0px">
<tr style="background-color:#ccc">
<td>ID</td>
<td>NAME</td>
<td>KEY</td>
<td>描 述</td>
<td>版本</td>
<td>創(chuàng)建時(shí)間</td>
<td>修改時(shí)間</td>
<td>操 作</td>
</tr>
<tr ng-repeat="model in modelList | orderBy:'id'" >
<td>{{model.id}}</td>
<td>{{model.name}}</td>
<td>{{model.key}}</td>
<td>{{model.metaInfo}}</td>
<td>{{model.version}}</td>
<td>{{model.createTime | date:"yyyy-MM-dd HH:mm:ss"}}</td>
<td>{{model.lastUpdateTime | date:"yyyy-MM-dd HH:mm:ss"}}</td>
<td><a href="script:;" ng-click="deploye(model)">部署</a>
<a href="script:;" ng-click="delete(model)">刪除</a>
<a href="script:;" ng-click="update(model.id)">修改</a>
</td>
</tr>
</table>
</center>
</div>
點(diǎn)擊部署要走到后臺(tái),前臺(tái)就需要js控制,相應(yīng)的js代碼如下:
[javascript] view plain copy
angular.module('activitiApp')
.controller('modelCtr', ['$rootScope','$scope','$http','$location', function($rootScope,$scope,$http,$location){
$scope.init=function(){
$http.post("./modelList.do").success(function(result) {
if(result.isLogin==="yes"){
$rootScope.userName=result.userName;
console.log(result.data);
$scope.modelList=result.data;
}else{
$location.path("/login");
}
});
}
$scope.deploye=function(model){
console.log(model);
$http.post("./deploye.do",model).success(function(deployResult){
$location.path("/processList");
});
}
$scope.update=function(modelId){
window.open("http://localhost:8080/activitiTest1/service/editor?id="+modelId);
}
}])
而后程序到達(dá)后臺(tái),后臺(tái)代碼如下:
[java] view plain copy
/**
* 根據(jù)模型id部署流程定義
*
* @author:tuzongxun
* @Title: deploye
* @param @param activitiModel
* @param @param redirectAttributes
* @param @return
* @return Object
* @date Mar 17, 2016 12:30:05 PM
* @throws
*/
@RequestMapping(value = "/deploye.do", method = RequestMethod.POST, produces = "application/json;charset=utf-8")
@ResponseBody
public Object deploye(@RequestBody ActivitiModel activitiModel,
HttpServletRequest req) {
Map<String, Object> map = new HashMap<String, Object>();
boolean isLogin = this.isLogin(req);
if (isLogin) {
String modelId = activitiModel.getId();
try {
// 獲取forms拿到formname
Model modelData = repositoryService.getModel(modelId);
ObjectNode modelNode = (ObjectNode) new ObjectMapper()
.readTree(repositoryService
.getModelEditorSource(modelData.getId()));
byte[] bpmnBytes = null;
BpmnModel model = new BpmnJsonConverter()
.convertToBpmnModel(modelNode);
bpmnBytes = new BpmnXMLConverter().convertToXML(model);
DeploymentBuilder db = repositoryService.createDeployment()
.name(modelData.getName());
//區(qū)別在這里
List<JsonNode> forms = modelNode
.findValues("formkeydefinition");
for (JsonNode node : forms) {
// aaa.form
String formName = node.textValue();
if (!"".equals(formName)) {
// 就是頁面的html代碼根據(jù)formName找到
String formContent = myFormService
.findFormByFormName(formName);
ByteArrayInputStream bi = new ByteArrayInputStream(
formContent.getBytes());
db.addInputStream(formName, bi);
break;
}
}
Deployment deployment = db.addString(
modelData.getName() + ".bpmn20.xml",
new String(bpmnBytes)).deploy();
if (deployment != null && deployment.getId() != null) {
map.put("isLogin", "yes");
map.put("userName",
(String) req.getSession().getAttribute("userName"));
map.put("result", "success");
}
} catch (Exception e) {
e.printStackTrace();
}
} else {
map.put("isLogin", "no");
}
return map;
}
拿這段代碼和之前單獨(dú)的activiti流程部署的代碼相比,就可以看到這里多出了查詢form的操作以及部署時(shí)新的inputStream的設(shè)置。
在這段代碼中,需要我們自己根據(jù)formKey(即自定義的表單的文件名)從數(shù)據(jù)中查詢出相應(yīng)的html表單代碼,這段代碼也是自己寫的,如下:
[java] view plain copy
public Connection getDb() {
Connection connection = null;
try {
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/testtu", "root", "123456");
} catch (Exception e) {
e.printStackTrace();
}
return connection;
}
public String findFormByFormName(String formName) {
String formString = null;
Connection connection = this.getDb();
Statement statement;
try {
statement = connection.createStatement();
PreparedStatement ps = connection
.prepareStatement("select * from formtest where formType=?");
ps.setString(1, formName);
ResultSet resultSet = ps.executeQuery();
while (resultSet.next()) {
formString = resultSet.getString(3);
}
;
} catch (Exception e) {
e.printStackTrace();
}
return formString;
}
實(shí)現(xiàn)這個(gè)表單設(shè)置的目的實(shí)際上是為了之后啟動(dòng)流程時(shí)的操作,因?yàn)椴渴鹬缶陀辛肆鞒潭x列表,在流程定義列表中就可以啟動(dòng)流程,只有在這里設(shè)置了,那么點(diǎn)擊啟動(dòng)流程時(shí)才能調(diào)用activitiService的相關(guān)方法獲取對應(yīng)節(jié)點(diǎn)的表單。
有了這個(gè)操作,在我們部署成功之后,可以看到與之前的部署相比,在數(shù)據(jù)庫ac_ge_bytearray表中會(huì)再多出一條表單相關(guān)的數(shù)據(jù),如圖:
那么至此,整合自定義表單部署流程結(jié)束。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
activiti流程圖小紅框繪制
activiti學(xué)習(xí)筆記1
從零開始學(xué)習(xí)和改造activiti流程引擎的13天,自己記錄一下
Activiti最全入門教程
Activiti初學(xué)者教程
工作流選型專項(xiàng),Camunda or flowable or?
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服