2017-10-12 76 views
0

我创建使用博尼塔BPM API Java应用程序,我用一个简单的代码是这样的:博尼塔BPM不要等到博尼塔的功能结束

ProcessInstance processInstance = App.getProcessAPI().startProcess(App.getProcessDefinitionId(),App.getListOperation(), listVariablesSerializable); 
    processId = processInstance.getId(); 
    Thread.sleep(1000); 
    App.getBuilder().filter(ProcessInstanceSearchDescriptor.STARTED_BY, App.getAPISession().getUserId()); 
    App.setPendingTasks(0, 30, null); 

这个代码启动一个新的进程,并设置新任务给用户。但只适用于“Thread.sleep(1000)”,因为“App.setPendingTasks(0,30,null)”不想等待“App.getProcessAPI()。startProcess(App.getProcessDefinitionId(),App.getListOperation() ,listVariablesSerializable);“结束。我知道“Thread.sleep(1000)”不是一个好的编程习惯,我需要其他解决方案。

+0

您是否看过Bonita BPM API文档和示例? https://documentation.bonitasoft.com/?page=manage-a-process – bated

+0

是的,我做到了。 (复制 - 粘贴) –

+0

它在调试模式下工作非常完美。但在正常开始时需要睡眠功能 –

回答

0

当创建实例并将其详细信息保存到数据库时,您显然正在经历竞争状态。

由于您有从start命令返回的ProcessInstance。 为什么不直接使用ProcessAPI检索实例的活动(任务)?

List<ActivityInstance> activities = App.getProcessAPI().getActivities(processId, 0, 10); 

此API应该使用当前进程状态而不是查询数据库。