jbpm4.4用户手册(5)

2019-05-18 12:56

在配置中定义的这些流程引擎(ProcessEngine)对象, 也可以根据类型processEngine.get(Class) 或者根据名字processEngine.get(String)来获得。

5.3. Deploying a process部署流程

RepositoryService包含了用来管理发布资源的所有方法。 在第一个例子中,我们会使用RepositoryService 从classpath中部署一个流程资源。 String deploymentid = repositoryService.createDeployment() .addResourceFromClasspath(\xml\ .deploy(); 通过上面的addResourceFromClass方法, 流程定义XML的内容可以从文件, 网址,字符串,输入流或zip输入流中获得。

每次部署都包含了一系列资源。每个资源的内容都是一个字节数组。 jPDL流程文件都是以.jpdl.xml作为扩展名的。 其他资源是任务表单和java类。 部署时要用到一系列资源, 默认会获得多种流程定义和其他的归档类型。 jPDL发布器会自动识别后缀名是.jpdl.xml 的流程文件。

在部署过程中,会把一个id分配给流程定义。 这个id的格式为{key}-{version}, key和version之间使用连字符连接。

如果没有提供key, 会在名字的基础自动生成。 生成的key会把所有不是字母和数字的字符替换成下划线。

同一个名称只能关联到一个key, 反之亦然。

如果没有为流程文件提供版本号, jBPM会自动为它分配一个版本号。 请特别注意那些已经部署了的名字 相同的流程文件的版本号。 它会比已经部署的同一个key的流程定义 里最大的版本号还大。 没有部署相同key的流程定义的版本号会分配为1。

在下面第1个例子里,我们只提供了流程的名字,没有提供其他信息: 假设这个流程是第一次部署, 下面就是它的属性:

表 5.1. 没有key值的属性流程 Property name key Value Source process xml generated generated Insurance claim Insurance_claim version 1 id Insurance_claim-1 generated 第2个例子我们将演示如何通过设置流程的key 来获得更短的id。 这个流程定义的属性就会像下面这样: 表 5.2. 有key值属性的流程 Property name key Value Source Insurance claim process xml ICL process xml generated generated version 1 id ICL-1 5.4. 删除流程定义

删除一个流程定义会把它从数据库中删除。

repositoryService.deleteDeployment(deploymentId); 如果在发布中的流程定义还存在活动的流程实例, 这个方法就会抛出异常。 如果希望级联删除一个发布中流程定义的 所有流程实例, 可以使用deleteDeploymentCascade。

5.5. 启动一个新的流程实例

5.5.1. 最新的流程实例

下面是为流程定义启动一个新的流程实例的最简单也是 最常用的方法: ProcessInstance processInstance = executionService.startProcessInstanceByKey(\上面service的方法会去查找 key为ICL的最新版本的流程定义, 然后在最新的流程定义里启动流程实例。

当insurance claim流程部署了一个新版本, startProcessInstanceByKey方法会自动切换到 最新部署的版本。

5.5.2. 指定流程版本

换句话说,你如果想根据特定的版本启动流程实例, 便可以使用流程定义的id启动流程实例。如下所示:

ProcessInstance processInstance = executionService.startProcessInstanceById(\5.5.3. 使用key

我们可以为新启动的流程实例分配一个key, 这个key是用户执行的时候定义的,有时它会作为“业务key”引用。 一个业务key必须在流程定义的 所有版本范围内是唯一的。通常很容易 在业务流程领域找到这种key。 比如,一个订单id或者一个保险单号。

ProcessInstance processInstance = executionService.startProcessInstanceByKey(\key可以用来创建流程实例的id, 格式为{process-key}.{execution-id}。 所以上面的代码会创建一个id为 ICL.CL92837的流向 (execution)。 如果没有提供用户定义的key,数据库就会把主键作为key。 这样可以使用如下方式获得id:

ProcessInstance processInstance = executionService.startProcessInstanceByKey(\String pid = processInstance.getId(); 最好使用一个用户定义的key。 特别在你的应用代码中,找到这样的key并不困难。提供给一个用户定义的key, 你可以组合流向的id,而不是执行一个基于流程变量的搜索 - 那种方式太消耗资源了。

5.5.4. 使用变量

当一个新的流程实例启动时就会提供一组对象参数。 将这些参数放在variables变量里, 然后可以在流程实例创建和启动时使用。

Map variables = new HashMap(); variables.put(\variables.put(\variables.put(\ ProcessInstance processInstance = executionService.startProcessInstanceByKey(\5.6. 执行等待的流向

当使用一个state活动时,执行(或流程实例) 会在到达state的时候进行等待,直到一个signal(也叫外部触发器)出现。 signalExecution方法可以被用作这种情况。 执行通过一个执行id(字符串)来引用。

在一些情况下,到达state的执行会是流程实例本身。 但是这不是一直会出现的情况。在定时器和同步的情况, 流程是执行树形的根节点。所以我们必须确认你的signal 作用在正确的流程路径上。

获得正确的执行的比较好的方法是给state活动分配一个事件监听器, 像这样: ... 在事件监听器StartExternalWork中,你可以执行那些需要额外完成的部分。 在这个时间监听器里,你也可以通过execution.getId()获得确切的流程id。 那个流程id,在额外的工作完成后, 你会需要它来提供给signal操作的: executionService.signalExecutionById(executionId); 这里有一个可选的(不是太推荐的)方式,来获得流程id, 当流程到达state活动的时候。 只可能通过这种方式获得执行id,如果你知道哪个jBPM API调用了之后, 流程会进入state活动:

// assume that we know that after the next call // the process instance will arrive in state external work ProcessInstance processInstance = executionService.startProcessInstanceById(processDefinitionId); // or ProcessInstance processInstance = // executionService.signalProcessInstanceById(executionId); Execution execution = processInstance.findActiveExecutionIn(\work\String executionId = execution.getId(); 要注意上面的解决方式和应用逻辑联系(太)紧密 通过使用真实业务结构的知识。

5.7. TaskService任务服务

TaskService的主要目的是提供对任务列表的访问途径。 例子代码会展示出如何为id为johndoe 的用户获得任务列表

List taskList = taskService.findPersonalTasks(\一般来说,任务会对应一个表单,然后显示在一些用户接口中。 表单需要可以读写与任务相关的数据。

// read task variables Set variableNames = taskService.getVariableNames(taskId); variables = taskService.getVariables(taskId, variableNames); // write task variables variables = new HashMap(); variables.put(\variables.put(\taskService.setVariables(taskId, variables); taskSerice也用来完成任务。

taskService.completeTask(taskId); taskService.completeTask(taskId, variables);


jbpm4.4用户手册(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2012年度安全生产工作计划(厂级)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: