流程定义和部署管理——流程定义列表

流程定义列表

spring mvc的请求相对路径为:workflow/process-list

注入RepositoryService,它管理发布资源的所有方法:

protected RepositoryService repositoryService;

    /**
     * 流程定义列表
     *
     * @return
     */
    @RequestMapping(value = "/process-list")
    public ModelAndView processList(HttpServletRequest request) {
        ModelAndView mav = new ModelAndView("workflow/process-list");

    /*
     * 保存两个对象,一个是ProcessDefinition(流程定义),一个是Deployment(流程部署)
     */
        List<Object[]> objects = new ArrayList<Object[]>();

        Page<Object[]> page = new Page<Object[]>(PageUtil.PAGE_SIZE);
        int[] pageParams = PageUtil.init(page, request);

        ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery().orderByDeploymentId().desc();
        List<ProcessDefinition> processDefinitionList = processDefinitionQuery.listPage(pageParams[0], pageParams[1]);
        for (ProcessDefinition processDefinition : processDefinitionList) {
            String deploymentId = processDefinition.getDeploymentId();
            Deployment deployment = repositoryService.createDeploymentQuery().deploymentId(deploymentId).singleResult();
            objects.add(new Object[]{processDefinition, deployment});
        }

        page.setTotalCount(processDefinitionQuery.count());
        page.setResult(objects);
        mav.addObject("page", page);

        return mav;
    }

要点:

1、查询流程定义

ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery().orderByDeploymentId().desc();
List<ProcessDefinition> processDefinitionList = processDefinitionQuery.listPage(pageParams[0], pageParams[1]);
for (ProcessDefinition processDefinition : processDefinitionList) {}

其中listPage方法后才真正执行数据库查询,在mysql中如下sql:

SELECT DISTINCT RES.* FROM ACT_RE_PROCDEF RES ORDER BY RES.DEPLOYMENT_ID_ DESC LIMIT 15 OFFSET 0
结果:



关于流程部署,这个地方有几个比较重要的概念:

bpmn里有<process id="leave" name="请假流程">

KEY_对应的是bpmn里process id;(经常作为查询条件使用,不要和ID_混淆)

NAME_对应的是bpmn里process name;

VERSION_对应的是部署的版本号,因为这里spring自动部署了两次,所以同一个流程定义,版本号有1和2,以后默认会读版本号大的;

ID_是一个组合,NAME_ + VERSION_ + DEPLOYMENT_ID_;


2、关联查询流程部署

String deploymentId = processDefinition.getDeploymentId();
Deployment deployment = repositoryService.createDeploymentQuery().deploymentId(deploymentId).singleResult();

在mysql中执行如下sql:

SELECT DISTINCT RES.* FROM ACT_RE_DEPLOYMENT RES WHERE RES.ID_ = 1 ORDER BY RES.ID_ ASC LIMIT 2147483647 OFFSET 0
结果:


3、返回给页面的是

List<Object[]> objects = new ArrayList<Object[]>();
objects.add(new Object[]{processDefinition, deployment});
page.setResult(objects);
mav.addObject("page", page);

4、页面代码

<table width="100%" class="need-border">
		<thead>
			<tr>
				<th>ProcessDefinitionId</th>
				<th>DeploymentId</th>
				<th>名称</th>
				<th>KEY</th>
				<th>版本号</th>
				<th>XML</th>
				<th>图片</th>
				<th>部署时间</th>
				<th>是否挂起</th>
				<th>操作</th>
			</tr>
		</thead>
		<tbody>
			<c:forEach items="${page.result }" var="object">
				<c:set var="process" value="${object[0] }" />
				<c:set var="deployment" value="${object[1] }" />
				<tr>
					<td>${process.id }</td>
					<td>${process.deploymentId }</td>
					<td>${process.name }</td>
					<td>${process.key }</td>
					<td>${process.version }</td>
					<td><a target="_blank" href='${ctx }/workflow/resource/read?processDefinitionId=${process.id}&resourceType=xml'>${process.resourceName }</a></td>
					<td><a target="_blank" href='${ctx }/workflow/resource/read?processDefinitionId=${process.id}&resourceType=image'>${process.diagramResourceName }</a></td>
					<td>${deployment.deploymentTime }</td>
					<td>${process.suspended} |
						<c:if test="${process.suspended }">
							<a href="processdefinition/update/active/${process.id}">激活</a>
						</c:if>
						<c:if test="${!process.suspended }">
							<a href="processdefinition/update/suspend/${process.id}">挂起</a>
						</c:if>
					</td>
					<td>
                        <a href='${ctx }/workflow/process/delete?deploymentId=${process.deploymentId}'>删除</a>
                        <a href='${ctx }/workflow/process/convert-to-model/${process.id}'>转换为Model</a>
                    </td>
				</tr>
			</c:forEach>
		</tbody>
	</table>

从ProcessDefinition类的对象中得到流程定义的id、deploymentId、name、key、version、suspended;

从Deployment类的对象中得到流程部署的deploymentTime;


后续我们再介绍基于这个列表的一些操作,包括:查看流程的xml,图片,以及部署流程的激活、挂起、删除等操作。。。



  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值