【问题标题】:How can I get tasks of a group which I belong to (jBPM 6.2)如何获得我所属组的任务(jBPM 6.2)
【发布时间】:2015-06-12 10:05:25
【问题描述】:

我正在尝试使用 jBPM 6.2 创建 BPM。流程如下:

用户创建一个请求。他的经理将评估接受或拒绝。如果他的经理接受,IT 部门的人将执行该请求

但是我无法从我所属的组中获得任务。在我的 BPM 中,人工任务被分配给 IT 组。我尝试使用帐户:salaboy,jack(在 IT 部门),但我没有看到与这些帐户相关的任何任务

下面是我的流程截图,可以看到组ID是IT

我没有更改服务器的任何配置。角色如下:

admin=admin,analyst,kiemgmt
krisv=admin,analyst
john=analyst,Accounting,PM
mary=analyst,HR
sales-rep=analyst,sales
jack=analyst,IT
katy=analyst,HR
salaboy=admin,analyst,IT,HR,Accounting

要测试的代码是:

public static void main(String[] args) {
    KieServices ks = KieServices.Factory.get();
    KieContainer kContainer = ks.getKieClasspathContainer();
    KieBase kbase = kContainer.getKieBase("kbase");

    RuntimeManager manager = createRuntimeManager(kbase);
    RuntimeEngine engine = manager.getRuntimeEngine(null);
    KieSession ksession = engine.getKieSession();
    TaskService taskService = engine.getTaskService();

    ksession.startProcess("com.sample.bpmn.hello");

    // let john execute Task 1
    List<TaskSummary> list = taskService.getTasksAssignedAsPotentialOwner("john", "en-UK");
    TaskSummary task = list.get(0);
    System.out.println("John is executing task " + task.getName());

    taskService.start(task.getId(), "john");
    taskService.complete(task.getId(), "john", null);

    // let mary execute Task 2
    list = taskService.getTasksAssignedAsPotentialOwner("mary", "en-UK");
    task = list.get(0);
    System.out.println("Mary is executing task " + task.getName());
    taskService.start(task.getId(), "mary");
    Map<String, Object> params = new HashMap<>();
    params.put("output", true);
    taskService.complete(task.getId(), "mary", params);

    // let salaboy execute Task 3


    list = taskService.getTasksAssignedAsPotentialOwner("salaboy", "en-UK");
    task = list.get(0);

    System.out.println("salaboy is executing task " + task.getName());
    taskService.start(task.getId(), "salaboy");
    taskService.complete(task.getId(), "salaboy", null);

    manager.disposeRuntimeEngine(engine);
    System.exit(0);
}

private static RuntimeManager createRuntimeManager(KieBase kbase) {
    JBPMHelper.startH2Server();
    JBPMHelper.setupDataSource();
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("org.jbpm.persistence.jpa");
    RuntimeEnvironmentBuilder builder = RuntimeEnvironmentBuilder.Factory.get()
        .newDefaultBuilder().entityManagerFactory(emf)
        .knowledgeBase(kbase);
    return RuntimeManagerFactory.Factory.get()
        .newSingletonRuntimeManager(builder.get(), "com.sample:example:1.0");
}

如果我将实施任务分配给 salaboy,它就像一个魅力

如果您有任何建议,请告诉我

谢谢

【问题讨论】:

  • 如果您向我们展示一些代码示例可能会有所帮助。从理论上讲,您使用 RuntimeDataService.getTasksAssignedAsPotentialOwner 方法应该返回用户可以声明/启动的任务集合。您是否验证了用户实际上是该角色? UserGroupCallback 是否正确设置?是否为步骤指定了 GroupID?
  • 非常感谢迈克,我刚刚更新了我的帖子,提供了更多信息。你能看看和建议。正如您在我的帖子中看到的,我使用 TaskService 来获取任务。 RunTimeDataService 和 TaskService 有什么区别?
  • 我注意到 Salaboy 是管理员,而您不是。我的想法是您没有在数据库的用户角色表中设置适当的角色。
  • 好吧,据我所知,用户和角色的默认配置在属性文件中。我没有改变任何东西,只是添加了一个新项目来玩,所以我不认为这是一个原因。无论如何,我会仔细检查一下。是否有 GUI 来检查用户的角色
  • 我想你可能把 John 和 Jack 弄糊涂了。

标签: jbpm business-process-management


【解决方案1】:

我们应该使用 Workbench(Web 版本)而不是 Eclipse。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-14
    • 1970-01-01
    相关资源
    最近更新 更多