2017-10-12 73 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應該使用當前進程狀態而不是查詢數據庫。