4

TaskServiceを使用してすべてのプロセスまたはタスク変数を取得することは可能ですか:

processEngine.getTaskService.createTaskQuery().list();

経由で変数を取得する機会があることは知っています processEngine.getTaskService().getVariable()

また

processEngine.getRuntimeService().getVariable()

しかし、上記のすべての操作はデータベースに行きます。100 個のタスクのリストがある場合、DB に対して 100 個のクエリを作成します。私はこのアプローチを使用したくありません。タスクまたはプロセス関連の変数を取得する他の方法はありますか?

4

3 に答える 3

5

残念ながら、「公式」クエリ API を介してそれを行う方法はありません。ただし、ここで説明されているように、カスタム MyBatis クエリを作成することもできます。

https://app.camunda.com/confluence/display/foxUserGuide/Performance+Tuning+with+custom+Queries (注: この記事で説明されていることはすべて、ベア Activiti でも機能します。これには fox エンジンは必要ありません!)

このようにして、タスクと変数を 1 ステップで選択するクエリを作成できます。私の会社では、まったく同じパフォーマンスの問題があったため、このソリューションを使用しました。

このソリューションの欠点は、カスタム クエリを維持する必要があることです。たとえば、Activiti のバージョンをアップグレードする場合、カスタム クエリが引き続きデータベース スキーマに適合することを確認する必要があります (たとえば、統合テストを介して)。

于 2012-12-17T06:26:55.107 に答える
1

elvene が言うように API を使用できない場合は、自分でデータベースにクエリを実行できます。Activiti は、データベース上にいくつかのテーブルを持っています。

あなたはact_ru_variable、現在実行中のプロセスが変数を保存していました。すでに終了したプロセスについては、act_hi_procvariable. おそらく、Activiti ユーザーガイドで各テーブルの内容に関する詳細な説明を見つけることができます。

したがって、次のようなクエリを作成するだけです

SELECT *
FROM act_ru_variable
WHERE *Something*
于 2012-12-17T11:09:44.007 に答える