4.2. 処理できない¶
関連する現象
4.2.1. 申請や承認の際に「一時領域のディレクトリが見つかりません」というエラーが発生する¶
対象バージョン¶
iWP / iAF の場合
- IM-Workflow 7.2.0 ~ 最新バージョン
intra-mart Accel Platform の場合
- 2012 Autumn(Alba) IM-Workflow 8.0.1 ~ 2016 Spring(Maxima) IM-Workflow 8.0.13
条件¶
別PCや、同一ブラウザの複数タブにて、同一ユーザコードで複数ログインを行い、 IM-Workflow の処理画面を表示している
事象の発生時刻に該当する例外ログに下記のようなスタックトレースが出力されている
log.message=一時領域のディレクトリが見つかりません。 jp.co.intra_mart.foundation.workflow.exception.WorkflowApiException at jp.co.intra_mart.system.workflow.internal.manager.attachfile.AttachFileManager.checkDirectory(AttachFileManager.java:350) at jp.co.intra_mart.system.workflow.internal.manager.attachfile.AttachFileManager.addFileToTemp(AttachFileManager.java:144) at jp.co.intra_mart.foundation.workflow.util.WorkflowAttachFileManager.addFileToTemp(WorkflowAttachFileManager.java:116) at jp.co.intra_mart.system.workflow.javascript.util.WorkflowAttachFileManagerObject.jsFunction_addFileToTemp(WorkflowAttachFileManagerObject.java:211) (省略)
原因¶
製品の仕様です。
添付ファイルの一時アップロード先ディレクトリは、ユーザ単位で一意です。別PCや、同一ブラウザの複数タブにて、同一ユーザコードで複数ログインを行い、 IM-Workflow の処理画面を表示すると、添付ファイルの一時アップロード先ディレクトリの初期化が不正に実行されるため、当事象が発生します。上記の操作は、リリースノートの制限事項に、サポート対象外であることが明記されています。以下の要件で対応を行っています。
iWP / iAF の場合
- 対象外
intra-mart Accel Platform の場合
- 要件 #1192 添付ファイルの一時領域ディレクトリをSessionScopeStorageに変更します。
4.2.2. 初期ソート条件に案件プロパティを指定すると、案件に対する処理が実行できない¶
現象¶
以下の一覧を表示し、案件に対する処理用アイコンをクリックしたとき、ユーザコンテンツ画面の表示は行われるがサーバで例外が発生し、案件の処理が実行できません。
- 一時保存一覧(「申請」アイコンの押下時)
- 未処理一覧(「処理」アイコンの押下時)
- 未処理 - 連続処理一覧(「連続処理開始」アイコンの押下時)
- 確認一覧(「確認」アイコンの押下時)
- 確認 - 連続確認一覧(「連続確認開始」アイコンの押下時)
条件¶
対象の一覧画面に対する一覧表示パターン定義にて、案件プロパティを第1初期ソート条件として設定している
事象の発生時刻に該当する例外ログに下記のようなスタックトレースが出力されている
(省略) log.message=引数が不正です。 jp.co.intra_mart.foundation.workflow.exception.WorkflowApiException: Unexpected character (u) at position 160. at jp.co.intra_mart.system.workflow.taglib.WorkflowOpenPage.getStartTagData(WorkflowOpenPage.java:555) at jp.co.intra_mart.system.workflow.taglib.imarttag.ImartTag4WorkflowOpenPage.doTag(ImartTag4WorkflowOpenPage.java:74) at jp.co.intra_mart.system.javascript.imapi.ImartTagTypeManager.invoke(ImartTagTypeManager.java:200) at jp.co.intra_mart.system.javascript.imapi.ImartObject.callFunction(ImartObject.java:70) at jp.co.intra_mart.system.javascript.imapi.ImartObject.callFunction(ImartObject.java:55) at jp.co.intra_mart.system.jssp.script.view.ImartTag.execute(ImartTag.java:157) at jp.co.intra_mart.system.jssp.script.view.Composition.execute(Composition.java:237) (省略) Caused by: Unexpected character (u) at position 160. at org.json.simple.parser.Yylex.yylex(Unknown Source) at org.json.simple.parser.JSONParser.nextToken(Unknown Source) at org.json.simple.parser.JSONParser.parse(Unknown Source) at org.json.simple.parser.JSONParser.parse(Unknown Source) at org.json.simple.parser.JSONParser.parse(Unknown Source) at org.json.simple.JSONValue.parseWithException(Unknown Source) at jp.co.intra_mart.system.workflow.taglib.WorkflowOpenPage.getStartTagData(WorkflowOpenPage.java:553) ... 70 more
4.2.3. 承認ノードの処理時に「処理に失敗しました」が発生して処理できない¶
対象バージョン¶
iWP / iAF の場合
- IM-Workflow 7.2.0 ~ IM-Workflow 7.2.6
intra-mart Accel Platform の場合
- 2012 Autumn(Alba) IM-Workflow 8.0.1 ~ 2012 Winter(Bourbon) IM-Workflow 8.0.2
条件¶
以下の条件をすべて満たす場合に、承認時にエラーが発生します。
該当の案件のルート上の同期開始ノード~同期終了ノードの間に、承認ノード1つだけが未処理となっている。残っている未処理の承認ノードの承認を行うと、同期終了ノード、さらにその次のノードに処理が遷移する状態となっている。 「IMW_T_CPL_TASK」テーブルにおいて、以下のレコードの処理終了時刻(end_date)が 1/1000 秒まで一致している。 事象の発生時刻に該当する例外ログに以下のようなスタックトレースが出力されている。(省略) log.message=同期標準到達判定処理で失敗しました。 jp.co.intra_mart.foundation.workflow.exception.WorkflowPluginException: jp.co.intra_mart.system.workflow.engine.database.WorkflowDAOException: org.postgresql.util.PSQLException: ERROR: 副問い合わせで1行を超える行を返すものが式として使用されました at jp.co.intra_mart.system.workflow.plugin.rule.condition.SynchronousEndCondition.execute(SynchronousEndCondition.java:135) at jp.co.intra_mart.system.workflow.listener.context.WorkflowRuleConditionEventListenerContext.execute(WorkflowRuleConditionEventListenerContext.java:69) at jp.co.intra_mart.system.workflow.engine.core.event.ExtensionEventExecutor.executeProgramConditionCount(ExtensionEventExecutor.java:827) at jp.co.intra_mart.system.workflow.engine.core.event.AbstractForwardEventBase.doBranchUnionLogic(AbstractForwardEventBase.java:465) at jp.co.intra_mart.system.workflow.engine.core.event.AbstractForwardEventBase.doUserExtensionLogic(AbstractForwardEventBase.java:397) at jp.co.intra_mart.system.workflow.engine.core.event.AbstractForwardEventBase.executeUserExtensionLogic(AbstractForwardEventBase.java:288) at jp.co.intra_mart.system.workflow.engine.core.event.AbstractForwardEventBase.execute(AbstractForwardEventBase.java:197) at jp.co.intra_mart.system.workflow.engine.core.base.AbstractWorkflowEvent.fire(AbstractWorkflowEvent.java:117) at jp.co.intra_mart.system.workflow.engine.action.AbstractActionEventBase.forwardNextNode(AbstractActionEventBase.java:392) at jp.co.intra_mart.system.workflow.engine.action.ActionEventApprove.execute(ActionEventApprove.java:99) at jp.co.intra_mart.system.workflow.engine.action.AbstractActionEventBase.fire(AbstractActionEventBase.java:194) at jp.co.intra_mart.system.workflow.internal.manager.action.ActionManager.approve(ActionManager.java:271) at jp.co.intra_mart.foundation.workflow.application.process.ProcessManager.approve(ProcessManager.java:858) at jp.co.intra_mart.system.workflow.javascript.application.process.ProcessManagerObject.jsFunction_approve(ProcessManagerObject.java:217) (省略) Caused by: org.postgresql.util.PSQLException: ERROR: 副問い合わせで1行を超える行を返すものが式として使用されました at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2284) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2003) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:200) at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:424) at org.postgresql.jd0bc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:161) at org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:114) at com.caucho.sql.UserPreparedStatement.executeQuery(UserPreparedStatement.java:108) at com.caucho.sql.UserPreparedStatement.executeQuery(UserPreparedStatement.java:108) at jp.co.intra_mart.system.database.PreparedStatementWrapper.executeQuery(PreparedStatementWrapper.java:274) at jp.co.intra_mart.system.workflow.engine.database.SelectDao4Engine.getAfterApprovedNodeList(SelectDao4Engine.java:3932) ... 75 more(省略) log.message=承認で失敗しました。 jp.co.intra_mart.foundation.workflow.exception.WorkflowApiException: jp.co.intra_mart.system.workflow.engine.common.EngineException: jp.co.intra_mart.foundation.workflow.exception.WorkflowPluginException: jp.co.intra_mart.system.workflow.engine.database.WorkflowDAOException: org.postgresql.util.PSQLException: ERROR: 副問い合わせで1行を超える行を返すものが式として使用されました at jp.co.intra_mart.foundation.workflow.application.process.ProcessManager.approve(ProcessManager.java:860) at jp.co.intra_mart.system.workflow.javascript.application.process.ProcessManagerObject.jsFunction_approve(ProcessManagerObject.java:217) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at jp.co.intra_mart.system.javascript.MemberBox.invoke(MemberBox.java:126) at jp.co.intra_mart.system.javascript.FunctionObject.call(FunctionObject.java:442) at jp.co.intra_mart.system.javascript.optimizer.OptRuntime.call2(OptRuntime.java:42) (省略) Caused by: org.postgresql.util.PSQLException: ERROR: 副問い合わせで1行を超える行を返すものが式として使用されました at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2284) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2003) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:200) at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:424) at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:161) at org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:114) at com.caucho.sql.UserPreparedStatement.executeQuery(UserPreparedStatement.java:108) at com.caucho.sql.UserPreparedStatement.executeQuery(UserPreparedStatement.java:108) at jp.co.intra_mart.system.database.PreparedStatementWrapper.executeQuery(PreparedStatementWrapper.java:274) at jp.co.intra_mart.system.workflow.engine.database.SelectDao4Engine.getAfterApprovedNodeList(SelectDao4Engine.java:3932) ... 75 moreコラム
上記は、データベースが PostgreSQL の場合の例外ログです。ご利用のデータベースの種類によってメッセージは異なりますが、「単一行を返すSQLで複数行が返却されているためにエラーとなっている」という内容のメッセージが出力されます。
4.2.4. 未処理一覧から案件の処理画面が表示できない、または、処理ボタン押下後に「処理画面の表示に失敗しました」が表示される¶
対象バージョン¶
iWP / iAF の場合
- IM-Workflow 7.2.0 ~ 最新バージョン
intra-mart Accel Platform の場合
- 2012 Autumn(Alba) IM-Workflow 8.0.1 ~ 最新バージョン
現象¶
本件では、エラーのタイミングによって、発生する現象が異なります。
未処理一覧から案件の「処理」をクリックすると、「対象の案件が既に処理されたか、削除された、または他ノードの非同期処理が実行中の可能性があるため、案件情報が取得できません。」と表示される。
ユーザコンテンツ画面で「承認」などの処理ボタンをクリックすると、標準処理画面(Greybox)に「処理画面の表示に失敗しました。」と表示される。
標準処理画面(Greybox)の「承認」などの処理ボタンをクリックすると、「処理に失敗しました。」と表示される。その後、未処理一覧を表示すると、該当の案件が表示されない。
- 参照一覧や前処理者の処理済一覧からフローを参照すると、他のユーザによって処理が正常に行われた情報が確認できる。
条件¶
下記の条件のいずれかを満たし、複数のユーザが同じタイミングで同じ案件の画面を表示したり、処理(承認など)した場合に発生します。
- 対象の案件(ノード)の処理対象者となるユーザが複数存在する
- 対象の案件(ノード)の処理対象者のユーザが代理設定を行っており、代理先のユーザでも処理が可能となっている
4.2.5. 引戻し元ノードの既処理者名が基準日において取得不可の場合、引戻しが行えません¶
対象バージョン¶
iWP / iAF の場合
- IM-Workflow 7.2.0 ~ 最新バージョン
intra-mart Accel Platform の場合
- 2012 Autumn(Alba) IM-Workflow 8.0.1 ~ 2022 Spring(Eustoma) IM-Workflow 8.0.31
現象¶
引戻し元ノードの既処理者名が基準日 [1] において取得不可の場合、引戻しが行えません。
[1] (1, 2, 3) 基準日「対象者を展開する日付」です。デフォルトでは「申請基準日」に該当します。IM-Workflow 2014 Winter(8.0.9)以降の場合、フロー定義の「対象者を展開する日」の設定値に基づいて異なります。 再現手順の例は以下の通りです。
ユーザ aoyagi が申請を行う
ユーザ aoyagi のユーザプロファイルを無効化する
承認ノードでユーザ ueda が差戻しを行う
ユーザ ueda が引戻し(差戻し後引戻し)を行うこの際に例外が発生し、引戻しができません。
条件¶
以下の条件に合致する場合に発生します。
利用しているデータベースが Oracle(バージョン問わず)である。
基準日 [1] 時点の既処理者のユーザプロファイルが無効化している。
事象の発生時刻に該当する例外ログに下記のようなスタックトレースが出力されている。
(省略) log.message=特定のユーザが引戻し先として指定可能なノードを取得で失敗しました。 jp.co.intra_mart.foundation.workflow.exception.WorkflowApiException: jp.co.intra_mart.system.workflow.engine.database.WorkflowDAOException: java.sql.SQLIntegrityConstraintViolationException: ORA-01400: ("%テナントDBのスキーマ名%"."IMW_T_CPL_USER"."AUTH_USER_NAME")にはNULLは挿入できません。 at jp.co.intra_mart.foundation.workflow.application.process.PullBackManager.pullBack(PullBackManager.java:177) at jp.co.intra_mart.system.workflow.javascript.application.process.PullBackManagerObject.jsFunction_pullBack(PullBackManagerObject.java:194) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at jp.co.intra_mart.system.javascript.MemberBox.invoke(MemberBox.java:126) at jp.co.intra_mart.system.javascript.FunctionObject.call(FunctionObject.java:442) at jp.co.intra_mart.system.javascript.optimizer.OptRuntime.call2(OptRuntime.java:42) (中略) Caused by: jp.co.intra_mart.system.workflow.engine.database.WorkflowDAOException: java.sql.SQLIntegrityConstraintViolationException: ORA-01400: ("%テナントDBのスキーマ名%"."IMW_T_CPL_USER"."AUTH_USER_NAME")にはNULLは挿入できません。 at jp.co.intra_mart.system.workflow.engine.database.UpdateDAOImpl.executeUpdate(UpdateDAOImpl.java:293) at jp.co.intra_mart.system.workflow.engine.database.UpdateDAOImpl.insert(UpdateDAOImpl.java:94) at jp.co.intra_mart.system.workflow.engine.core.event.TaskCompleteEvent.addTaskCompleteUser(TaskCompleteEvent.java:337) at jp.co.intra_mart.system.workflow.engine.core.event.TaskCompleteEvent.execute(TaskCompleteEvent.java:109) at jp.co.intra_mart.system.workflow.engine.core.base.AbstractWorkflowEvent.fire(AbstractWorkflowEvent.java:117) at jp.co.intra_mart.system.workflow.engine.core.ActiveTask.complete(ActiveTask.java:110) at jp.co.intra_mart.system.workflow.engine.core.event.AbstractForwardEventBase.execute(AbstractForwardEventBase.java:121) at jp.co.intra_mart.system.workflow.engine.core.base.AbstractWorkflowEvent.fire(AbstractWorkflowEvent.java:117) at jp.co.intra_mart.system.workflow.engine.action.AbstractActionEventBase.forwardAppointNode(AbstractActionEventBase.java:946) at jp.co.intra_mart.system.workflow.engine.action.ActionEventPullBack.pullBackForward(ActionEventPullBack.java:555) at jp.co.intra_mart.system.workflow.engine.action.ActionEventPullBack.execute(ActionEventPullBack.java:93) at jp.co.intra_mart.system.workflow.engine.action.AbstractActionEventBase.fire(AbstractActionEventBase.java:227) at jp.co.intra_mart.system.workflow.internal.manager.action.ActionManager.pullBack(ActionManager.java:382) at jp.co.intra_mart.foundation.workflow.application.process.PullBackManager.pullBack(PullBackManager.java:174) ... 65 more Caused by: java.sql.SQLIntegrityConstraintViolationException: ORA-01400: ("%テナントDBのスキーマ名%"."IMW_T_CPL_USER"."AUTH_USER_NAME")にはNULLは挿入できません。 at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:447) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396) at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:951) at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:513) at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:227) at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531) at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:208) at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1046) at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1336) at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3613) at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3694) at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1354) at com.caucho.sql.UserPreparedStatement.executeUpdate(UserPreparedStatement.java:132) at jp.co.intra_mart.system.database.PreparedStatementWrapper.executeUpdate(PreparedStatementWrapper.java:310) at jp.co.intra_mart.system.workflow.engine.database.UpdateDAOImpl.executeUpdate(UpdateDAOImpl.java:289) ... 78 more
4.2.6. 申請や承認などの処理後の画面遷移で HTTP 404 エラーが発生し、画面遷移できない¶
対象バージョン¶
iWP / iAF の場合
- IM-Workflow 7.2.0 ~ 最新バージョン
intra-mart Accel Platform の場合
- 2012 Autumn(Alba) IM-Workflow 8.0.1 ~ 最新バージョン
原因¶
Internet Information Services(IIS) の仕様です。Internet Information Services(IIS) の「 Request Limits <requestLimits> 」に抵触する HTTP リクエストを送信した場合、HTTP 404 エラーが発生します。
解決方法¶
ありません。
回避方法¶
以下のいずれかの対応を検討してください。
URLが長くなっている場合は、URL設計に問題がある可能性が考えられます。URLの短縮を検討してください。 クエリ文字列が長くなっている場合は、画面遷移に関する処理に問題がある可能性が考えられます。以下のような実装が存在しないかを確認し、必要に応じて修正してください。
- workflowOpenPage タグの利用の際、method 属性に明示的に “GET” を指定している
- 独自実装されたユーザコンテンツにおいて、「戻る」用 form のmethod 属性が “GET” となっている
- 画面遷移時にクエリ文字列を独自に付加している
Internet Information Services(IIS) の「 Request Limits <requestLimits> 」に関する設定値の変更を検討してください。設定値を変更する場合には、お客様の責任で検証を行った上で実施してください。