アクティビティー・インスタンスまたはタスク・インスタンスの存続時間中に、オブジェクトに関連したユーザーのセットが変わる場合があります。例えば、社員が休暇に入ったり、
新しい社員を雇用したり、またはワークロードを異なった
方法で分散させる必要がある場合です。
このような変更に対応するために、
作業項目を作成、削除、または転送するように
アプリケーションを開発することができます。
作業項目は、特定の理由でのユーザーまたはユーザーのグループへのオブジェクトの割り当てを表します。通常、このオブジェクトは、staff アクティビティー・インスタンス、プロセス・インスタンス、ヒューマン・タスクのいずれかです。理由は、ユーザーがアクティビティーまたはタスクに対して持っているロールから派生します。ユーザーは、アクティビティーまたはタスクとの関連において異なるロールを持つことができ、作業項目はこのようなロールそれぞれに対して作成されるため、1 つのアクティビティーやタスクが複数の作業項目を持つことが可能です。
作業項目を管理するために実行可能なアクションは、ユーザーのロールによって異なります。例えば、管理者は作業項目を作成、削除、および転送できますが、タスク所有者は作業項目の転送のみが可能です。
- 作業項目を作成します。
// query the task instance for which an additional
// administrator is to be specified
QueryResultSet result = task.query("TASK.TKIID",
"TASK.NAME='CustomerOrder'",
(String)null, (Integer)null,
(TimeZone)null);
if (result.size() > 0)
{
result.first();
// create the work item
task.createWorkItem((TKIID)(result.getOID(1)),
WorkItem.REASON_ADMINISTRATOR,"Smith");
}
このアクションに
よって、管理者のロールがあるユーザー Smith の作業項目が
作成されます。
- 作業項目を削除します。
// query the task instance for which a work item is to be deleted
QueryResultSet result = task.query("TASK.TKIID",
"TASK.NAME='CustomerOrder'",
(String)null, (Integer)null,
(TimeZone)null);
if (result.size() > 0)
{
result.first();
// delete the work item
task.deleteWorkItem((TKIID)(result.getOID(1)),
WorkItem.REASON_READER,"Smith");
}
このアクションに
よって、リーダーのロールがあるユーザー Smith の作業項目
が削除されます。
- 作業項目を転送します。
// query the task that is to be rescheduled
QueryResultSet result =
task.query("DISTINCT TASK.TKIID",
"TASK.NAME='CustomerOrder' AND
TASK.STATE=TASK.STATE.STATE_READY AND
WORK_ITEM.REASON=WORK_ITEM.REASON.REASON_POTENTIAL_OWNER AND
WORK_ITEM.OWNER_ID='Miller'",
(String)null, (Integer)null, (TimeZone)null);
if (result.size() > 0)
{
result.first();
// transfer the work item from user Miller to user Smith
// so that Smith can work on the task
task.transferWorkItem((TKIID)(result.getOID(1)),
WorkItem.REASON_POTENTIAL_OWNER,"Miller","Smith");
}
このアクションに
よって、作業項目をユーザー Smith に転送するので、
Smith は作業項目で作業することができます。