如何在jbpm4.0中给任务分配执行人

2019-03-25 13:43|来源: 网路

按照jbpm4.0自带的例子,给一个任务分配执行人,必须在流程实例开始的时候,就以参数的形式代入。
如下所示:
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("order", new Order("johndoe"));
ProcessInstance processInstance = executionService.startProcessInstanceByKey("TaskAssignee", variables);

其中的order变量,是在流程实例开始时就去调用new Order("johndoe")方法将参数代入的。

我想请问,如何才能在流程执行到任务节点之前再给它分配执行人?
例如这个流程定义
<?xml version="1.0" encoding="UTF-8"?>
<process name="TaskAssignee" xmlns="http://jbpm.org/4.0/jpdl">
  <start g="20,20,48,48">
    <transition to="state1"/>
  </start>
  <state name="state1" g="101,107,92,52">
      <transition name="to review" to="review" g="-50,-18"/>
  </state>
  <task assignee="#{order.owner}" g="242,17,127,52" name="review">
      <transition name="to end1" to="end1" g="-42,-18"/>
  </task>
  <end name="end1" g="485,20,48,48"/>
</process>
我想在执行完state1这步时才去分配任务执行人,而不是在一开始startProcessInstanceByKey的时候就用参数代入分配,请问应该如何操作?
谢谢!

相关问答

更多

如何在Swift中执行人脸检测(How do I perform Face Detection in Swift)

Xcode 9•Swift 4 extension NSImage { var ciImage: CIImage? { guard let data = tiffRepresentation else { return nil } return CIImage(data: data) } var faces: [NSImage] { guard let ciImage = ciImage else { return [] } ...

执行人没有完成所有任务(Executors not completing all the task)

HashSet不是线程安全的。 您可以使用创建synchronizedSet public static volatile Set<String> task = Collections.synchronizedSet(new HashSet<String>()); HashSet is not thread safe. You can create a synchronizedSet with public static volatile Set<String> task = Collectio ...

在Swift中如果让任务分配的位置的使用(Usage of where in if let assignment in Swift)

在Swift 3中,此语法已更改。 什么是 if let x = y, a = b where a == x { 就是现在 if let x = y, let a = b, a == x { 理由是if ... {每个子条款现在是一个独立的布尔测试。 有关此更改的更多信息,请参阅Xcode 版本说明和Swift Evolution提案 。 Example with two conditions if let x = y, let a = b, a == x && !x.isEmpty {

Spark Standalone集群中的工作人员,执行人员,核心人员是什么?(What are workers, executors, cores in Spark Standalone cluster?)

Spark使用主/从架构。 如图所示,它有一个与许多分布式工作人员(执行者)进行通信的中央协调员(司机)。 驱动程序和每个执行程序都在自己的Java进程中运行。 DRIVER 驱动程序是主方法运行的过程。 首先,将用户程序转换为任务,然后在执行程序上安排任务。 遗嘱执行人 执行者是在给定的Spark作业中负责运行单个任务的工作节点的进程。 它们在Spark应用程序的开始时启动,通常在应用程序的整个生命周期中运行。 一旦他们运行任务,他们将结果发送给驱动程序。 它们还为通过块管理器用户程序缓存的RD ...

在jbpm中将任务分配给新创建的用户(Assign tasks to newly created user in jbpm)

默认情况下,jbpm-installer使用UserGroupCallback来查找使用JAAS的有效用户,因此它委派给应用程序服务器身份验证。 使用user.properties和roles.properties时,如果不重新启动服务器,则不支持动态更新这些文件,但仅用于演示目的。 重新配置安全域以获取更多高级选项。 By default the jbpm-installer uses a UserGroupCallback that looks up valid users using JAA ...

我在哪里可以找到JBPM 6中的客户(Where can i find customeditors in JBPM 6)

它位于项目的“全局”文件夹中。 如果将Project Explorer切换到“Repository View”并单击顶级全局文件夹,您将找到customditors json配置文件。 请参阅http://i.imgur.com/yufVf0m.png以供参考。 It's in the "global" folder of your project. If you switch your Project Explorer to "Repository View" and click on the ...

查询JBPM(queries on JBPM)

问)如何在JBPM中存档数据? A)存档历史记录的集合,或它们所在的物理位置https://community.jboss.org/message/622804#622804根据上述链接,存储过程是存档旧数据的最佳选择需要了。 或 - 不关心旧历史,只需删除/删除。 - 有BAM报告,所以必须保持,然后迁移到不同的格式/位置/数据库,以允许继续报告。 - 应用企业流程(例如,我在应用数据仓库技术的企业中工作)来收集和存储报告所有历史数据 - 保留原位,但最终必须扩大您的数据库机器! ;-) htt ...

jbpm - 查询所有未分配的任务(jbpm - query all unassigned tasks)

我使用BAMTASKSUMMARY表做了它,不确定它是否是唯一的方法。 为此,我首先在RuntimeManager上尝试了BAMTaskEventListener(因此它开始记录到表中): DefaultRegisterableItemsFactory registerableItemsFactory = new DefaultRegisterableItemsFactory(); registerableItemsFactory.addTaskListener(BAMTaskEventListe ...

工人为什么要杀死执行人?(Why did Worker kill executor?)

你的火花版是什么? 这是一个火花已知的错误,并在版本1.6中修复。 你可以看到更多细节[SPARK-9844] What's your spark version? This is a spark's known bug, and fixed in version 1.6. More detail u can see [SPARK-9844]

任务分配算法(Task assigning algorithm)

请考虑在更高的层面上看这个。 到目前为止,这些建议一直很贪婪。 他们制定了一个时间表并希望做到最好。 你需要决定的第一件事是这是否是你想要的。 贪婪的任务会对某些输入产生非常糟糕的答案,但如果输入是“合理的”,并且你想要的只是一个合理的答案,那么它可能会很好。 另一方面,找到最佳的任务分配是NP难的。 您需要输入大小的时间指数,以确保您有最好的答案。 有两种中间方法。 随机任务调度算法。 这是一个很大的话题。 这篇论文仍然是一个不错的起点,虽然它现在已经过时了。 理查德卡普很棒。 随机算法的好处是 ...