タスクやプロセスの状況を検索したい
BAWには製品提供のダッシュボードがあり、ユーザーに割り当てられたタスクやプロセスの状況を確認することが可能です。
実際に業務で使用する際には、そのまま使用するのではなく、表示項目などのカスタマイズを行って利用することも多いです。この記事では、ダッシュボードをカスタマイズするために必要なタスク検索の基本的な情報を整理します。
検索の方法
検索をカスタマイズする方法には大きく以下の3つがあります。実装の難易度も異なりますが、要件によっても使い分ける必要があります。
- 保存済み検索の作成
- RESTAPIによる検索
- TWSearchAPIによる検索
保存済み検索の作成
保存済み検索は、ProcessPortalもしくはWorkplaceでGUIを用いて定義可能な検索です。Portalの左側メニューより、「保存済み検索の作成」をクリックすることでプログラミング無しに作成が可能です。
Workplaceの場合は、「ビューのカスタマイズ」から構成することが可能です。
以下のような画面が表示され、表示したいカラムや、フィルター条件を実際の適用結果を確認しながら定義することが可能です。
また、作成した保存済み検索を共有するチームを指定することが可能です。Workplaceの場合は画面は多少異なりますが同様です。
RESTAPIによる検索
2つ目の方法はRESTAPIによる検索です。タスクを検索してリストを取得するためのAPIには以下の2つのAPIが利用可能です。
- 保存済み検索実行
- アドホック検索実行
なお、RESTAPIのテストはbpmrest-uiを用いると便利です。https://BAWHOST/bpmrest-uiにアクセスすることで利用が可能です。
保存済み検索実行
保存済み検索実行APIは、先ほど作成した保存済み検索を実行するものです。実は保存済み検索は、Portalから作成するだけでなく、APIでも作成可能です。どちらの場合でも、保存済み検索を作成するとIDが生成されます。このIDを用いてAPIを呼び出します。
作成した保存済み検索のIDは保存済み検索定義リストの取得APIを呼び出すことで取得することが可能です。また、呼び出し時に追加でフィルターを設定することなども可能です。大量の検索を行う場合などにはパフォーマンスが課題になるケースもあります。詳細については下記リンクを参照してください。
https://www.ibm.com/support/pages/twsearch-and-saved-search-performance
アドホック検索実行
アドホック検索は、保存済み検索の様に事前に検索を定義するのではなく、その名の通り、アドホックに検索を定義して実行します。通常の保存済み検索と同様、パフォーマンスの問題などが発生する可能性があることにも注意が必要です。
アドホック検索実行時の検索定義の例を以下に示します。
{
"interaction": "all",
"fields": [
"taskId",
"taskSubject",
"taskStatus",
"taskActivityName",
"taskActivityType",
"assignedToUser",
"assignedToUserFullName",
"assignedToRoleDisplayName",
"taskActivityType"
],
"sort": [
{
"field": "taskDueDate",
"order": "ASC"
}
],
"conditions": [
{
"field":"taskActivityType",
"operator":"Equals",
"value":"USER_TASK"
}],
"organization": "byTask",
"size": 25,
"shared": false
}
なお、保存済み検索、RESTによる保存済み/アドホック検索はどちらも、自分に割り当てられたタスクのみ閲覧することが可能です。インスタンス・オーナーなど、タスクの表示権限がある場合も、検索でそれらのタスクを取得することはできません。(単一のタスクの詳細の取得は可能です。)
一覧を取得したい場合などは、次に説明するTWSearchを利用する必要があります。
TWSearchによる検索
TWSearchはサーバーサイドで動作するjavascriptのAPIで、タスクやプロセスの検索を行うことが可能です、その際、取得する項目やフィルター条件などを細かく設定することが可能です。また、インスタンス・オーナーなどが検索した場合、自分に割り当てられていないタスクなどについてもデータを取得が可能です。ClientSideヒューマン・サービスから呼び出すだけでなく、サービス・フローの中で検索を実行し、そのサービス・フローをRESTのAPIとして公開して利用することも可能です。
TWSearchに関する詳細なドキュメントはこちらを参照してください。
TWSearchの基本的な実行手順は以下の通りです。
- TWSearchの生成
- 検索カラムの定義
- 検索条件の定義
- 結果順序の定義
- 編成の定義(タスク/プロセス)
- 検索の実行
1.TWSearchの生成
まず初めに、検索オブジェクトを生成します。
var search = new TWSearch();
2.検索カラムの定義
次に検索するカラムを定義します。プロセス、タスク、ビジネス・データの3種類のカラムのタイプがあります。
検索で取得したい数だけカラムを定義します。検索フィルターで使用したいカラムがある場合にはそちらも定義する必要があります。
var colInstanceId = new TWSearchColumn();
colInstanceId.type = TWSearchColumn.Types.ProcessInstance;
colInstanceId.name = TWSearchColumn.ProcessInstanceColumns.ID;
カラムを全て作成したら、それらを配列に格納し、search.columnsにセットします。
search.columns = new Array( colInstanceStatus, colInstanceId, colInstanceName, colTaskId, colTaskStatus, colClosedDateTime, colDueDateTime, );
3.検索条件の定義
次に検索フィルターの条件を定義します。
var condInstanceName = new TWSearchCondition;
condInstanceName.column = colInstanceName;
condInstanceName.operator = TWSearchCondition.Operations.StartsWith;
condInstanceName.value = "Service Order Fulfillment:";
必要な条件を全て定義したら、カラムと同様配列に格納し、search.conditionsにセットします。
var conditions = new Array(condInstanceName, condInstanceStatus, condTaskStatus);
search.conditions = conditions;
4.検索順序の定義
以下の様に、検索の順序を定義します。
var orderInstanceId = new TWSearchOrdering();
orderInstanceId .column = colInstanceId;
orderInstanceId .order = TWSearchOrdering.Orders.Ascending;
これまでと同様に配列に格納してorderByにセットします。
search.orderBy = new Array(orderInstanceId );
5.編成の定義
取得したデータを、プロセスとして編成するのか、タスクとして編成するのかを定義します。
タスクの一覧を取得したい場合にはタスクとして編成します。
search.organizedBy = TWSearch.OrganizeByTypes.Task;
6.検索の実行
最後に検索を実行します。
var results = search.execute();
結果はTWSearchResultsオブジェクトとして返されます。
以下に、実際のデータ取得のためのコード・サンプルを示します。
tw.local.serviceOrderTasks = new tw.object.listOf.ServiceOrderTask();
for(var i = 0; i < results.rows.length; i++) {
var row = results.rows[i]; tw.local.serviceOrderTasks[i] = new tw.object.ServiceOrderTask(); t
w.local.serviceOrderTasks[i].processInstanceId = row.values[0].toString();
tw.local.serviceOrderTasks[i].processInstanceName = row.values[1].toString();
tw.local.serviceOrderTasks[i].taskId = row.values[2].toString();
tw.local.serviceOrderTasks[i].taskStatus = row.values[3].toString();
if(null != row.values[4]) {
tw.local.serviceOrderTasks[i].closedDate = row.values[4].toString(); }
if(null != row.values[5]) {
tw.local.serviceOrderTasks[i].dueDate = row.values[5].toString(); } }
取得したデータをテーブルなどにバインドし、画面に表示するか、サービス・フローをRESTサービスとして公開して、RESTサービスとして使用することが可能です。TWSearchを使用した場合には保存済み検索と異なり、自分にアサインされていないタスクを取得することが可能です。
まとめ
この記事では、タスクを検索する際に利用可能な保存済み検索やRESTAPI、TWSearchについて説明しました。
保存済み検索はコーディングの必要が無く、気軽に利用可能な一方、細かいカスタマイズには不向きです、TWSearchAPIを使用した場合には動的にカラムや検索条件を追加するなど細かくカスタマイズすることが可能です。
#Business Automation Workflow (BAW)
#BusinessAutomationWorkflow(BAW)