2017-10-12 6 views
0

を待たないで、私はこのような単純なコード使用しています:ボニータBPMは、私はボニータBPMのAPIを使用するJavaアプリケーションを作成していボニータの機能を終了

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); 

をこのコードは、新しいプロセスを起動して、新しい設定しますタスクをユーザに提示する。しかし、 "App.setPendingTasks(0、30、null)"が "App.getProcessAPI()。startProcess(App.getProcessDefinitionId()、App.getListOperation()"を待たずに "Thread.sleep(1000) 、listVariablesSerializable); "終わり。私は "Thread.sleep(1000)"は良いプログラミングの練習ではないと私は他の解決策を必要と知っている。

+0

Bonita BPM APIのドキュメントと例はありますか? https://documentation.bonitasoft.com/?page=manage-a-process – bated

+0

はい、しました。 (コピーペースト) –

+0

これはデバッグモードで完璧に動作します。しかし、通常の起動では、スリープ機能が必要です –

答えて

0

インスタンスが作成されてからその詳細がデータベースに保持されるまでの間に競合状態が発生していることは明らかです。

開始コマンドからProcessInstanceが返されているためです。 ProcessAPIを使用して直接インスタンスのアクティビティ(タスク)を取得するのはなぜですか?

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

このAPIは現在のプロセス状態を使用し、データベースにクエリを行わないでください。

関連する問題