allocateWorkItemEx
インタフェース名:CIWServer
構文
public CIWWorkItem allocateWorkItemEx( String aParticipant, String aFilter, String aSort, Set<CIWWorkItem.AttributeName> aAttributeNames, int aFetchCount )
機能
指定したフィルター条件とソート条件を満たす作業群に対して,指定した割り当て先の作業者IDへ作業を割り当てます。最初に割り当てに成功した作業オブジェクトを返します。
割り当てる際に,作業オブジェクトを「実行開始可能」状態から「作業者実行」状態に変更します。指定したフィルター条件を満たす作業がない場合や,作業者を割り当てられる作業がない場合はnullを返します。
フィルター条件には次の2つの条件をAND条件で自動的に追加します。
-
StateCodeが"j"(実行開始可能)と一致する
-
一般作業である
引数
allocateWorkItemExの引数を次の表に示します。
仮引数名 |
名称 |
in/out |
説明 |
---|---|---|---|
aParticipant |
作業者ID |
in |
割り当てる作業者IDを<SYSTEMID>_WORK_ITEMテーブルのParticipantカラムのバイト数以下で指定します。 nullは指定できません。 |
aFilter |
フィルター条件 |
in |
作業を取得する場合のフィルター条件を指定します。 フィルター条件を指定しない場合は,nullを指定します。フィルター条件の指定方法については,「付録B 参照系APIで指定できる属性」を参照してください。 |
aSort |
ソート条件 |
in |
作業を取得する場合のソート条件を指定します。 ソート条件を指定しない場合は,nullを指定します。ソート条件の指定方法については,「付録B 参照系APIで指定できる属性」を参照してください。 |
aAttributeNames |
属性名のセット |
in |
取得したい作業の属性名のセットを指定します。 取得属性名を指定しない場合は,サイズ0の属性名のセットまたはnullを指定します。取得属性名にnullは指定できません。取得属性名を指定しない場合でも,作業のID,作業が所属する案件のID,作業者のID,作業の状態,および作業の開始日時は必ず取得します。取得可能な属性は,CIWWorkItem.AttributeName列挙型で指定できる属性です。 |
aFetchCount |
最大取得数 |
in |
作業を取得する場合の最大取得数を指定します。 すべてを取得する場合は,-1を指定します。-1未満の値は設定できません。 |
戻り値
取得したCIWWorkItem(作業)オブジェクトを返します。取得したCIWWorkItem(作業)オブジェクトがない場合はnullを返します。
例外
allocateWorkItemExで発生する例外を次の表に示します。
発生する例外 |
説明 |
---|---|
一時的なエラーが発生した場合 |
|
処理を続行できない障害が発生した場合 |
注意事項
-
メソッド実行直後に,トランザクションをコミットしてください。メソッド発行からコミットまでの間に,業務テーブルの更新などを実行しないでください。
-
このメソッドで取得した作業を返却する場合は,CIWWorkItemクラスのfreeメソッドを実行します。
-
引数aFetchCountで指定した数の作業群の中から,先頭の作業に対して実行します。失敗した場合は,それ以降ランダムに割り当てを実行します。つまり,順番に並んでいる作業のうち,2件目からaFetchCount分の範囲内ではソートの順番が無視されます。ソートの順番を保証するには,aFetchCountを1に指定してください。しかし,aFetchCountを1にした場合,このメソッドが同時に多数発行されると作業の割り当てが重複して,レスポンスが悪くなります。
-
取得した作業群に対して,一定回数(作業群の作業の4割)作業の割り当てを失敗した場合は,指定したフィルター条件とソート条件を満たす作業群を取得し直します。
-
割り当てる作業者IDに空文字列またはnullを指定した場合は,例外(java.lang.IllegalArgumentException)が発生します。
-
割り当てる作業者IDに<SYSTEMID>_WORK_ITEMテーブルのParticipantカラムのバイト数を超える文字列を指定した場合は,例外(java.lang.IllegalArgumentException)が発生します。
-
一般作業だけが対象になります。組み込み作業は対象外です。
-
引数aFetchCountは,同時実行するAPIの数より多く指定してください。少ない場合,同時実行されたAPI同士の衝突が多く発生し,効率が悪くなります。
-
Oracleはダーティリードをサポートしていません。そのため,コミットしていないの別トランザクションの更新を読み取れません。その結果,Oracleを利用している場合は,APIの更新処理が同時に複数実行できないため効率的に処理ができません。