4.3. 一括処理できない¶
4.3.1. 一括処理で例外が発生する¶
条件¶
事象の発生時刻に該当する例外ログに下記のようなスタックトレースが出力されている
log.message=特定のユーザが特定のノードに対する処理を行うことができるかを判定で失敗しました。 jp.co.intra_mart.foundation.workflow.exception.WorkflowApiException: jp.co.intra_mart.system.workflow.engine.common.EngineException at jp.co.intra_mart.foundation.workflow.application.process.ProcessManager.isPossibleToProcess(ProcessManager.java:1096) at jp.co.intra_mart.system.workflow.javascript.application.process.ProcessManagerObject.jsFunction_isPossibleToProcess(ProcessManagerObject.java:585) (省略) Caused by: jp.co.intra_mart.system.workflow.engine.common.EngineException at jp.co.intra_mart.system.workflow.engine.tool.EngineMatterUtil.getLastProcessID4ActiveMatter(EngineMatterUtil.java:33) at jp.co.intra_mart.foundation.workflow.application.process.ProcessManager.isPossibleToProcess(ProcessManager.java:1080) ... 54 more
原因¶
製品の不具合です。一括承認処理ソースコードに、実装上の不具合があります。
対象ソース
pages/platform/src/workflow/common/proc/exec/lump_approve_jssp.js
[63行目] for (cnt=0; cnt<imwLumpProcParams.length; cnt++) { [142行目](63行目のループの中に記述された処理) for (cnt = 0, leng = executableProcessTypeList.length; cnt < leng; cnt++) {63行目でカウントアップしているカウンタ変数 cnt が、142行目で初期化(0が代入)されてしまい、意図しない動作が行われています。この影響により、一括処理の中で既に承認された案件に対し、再度承認を行ってしまう可能性があります。この場合、例外が発生し、一括処理が中止されます。なお、当事象の影響で案件の状態が不正となることはありません。承認されなかった案件は通常通り承認が可能です。以下の要件で対応を行っています。
iWP / iAF の場合
- 要件 [15807] 一括承認の実行時に失敗する場合があります。
intra-mart Accel Platform の場合
- 対象外
4.3.2. 『一括処理に失敗しました』というメッセージの表示後、再度一括処理を実行するとエラーとならず処理が終了した¶
対象バージョン¶
iWP / iAF の場合
- IM-Workflow 7.2.0 ~ 最新バージョン
intra-mart Accel Platform の場合
- 2012 Autumn(Alba) IM-Workflow 8.0.1 ~ 最新バージョン
現象¶
一括処理時、別のユーザが同案件を処理した場合に、『一括処理に失敗しました。』とエラーが発生します。その後、エラー画面(一括処理画面)を閉じずにそのまま再度承認ボタンを押下すると、エラーは表示されず、一括処理画面が表示されます。(承認行為ができたように見えます)この状況で処理済一覧等の処理結果を確認した際、一括処理対象の案件のうち、1件または複数件の処理者には別のユーザが表示されます。
原因¶
製品の仕様です。案件の状態が不正となることはありません。一括処理機能は、処理対象の案件の承認画面を表示することなく、かつ詳細な承認情報を入力することなく複数の案件の承認を行うもののため、承認の簡易機能として位置づけています。そのため、通常の承認とは、次の点では動作が異なります。
処理済みまたは削除済みの案件(ノード)に対して処理を行おうとした際、
- 通常の承認の場合 : 処理済みまたは削除済み案件である旨を画面に表示し、処理を中断
- 一括処理の場合 : 対象案件のノードの処理をスキップし、後続処理を続行
よって、今回の現象の結果としては、別のユーザが処理した案件はそのままとなり、残りの案件に対して一括処理が行われた状態に変わります。