20.14.13 タスクのトラブルシューティング

タスクと承認コンポーネントの問題をトラブルシューティングする方法。

タスクのトラブルシューティング

問題 解決策
エラーORA-20987: APEX: complete_task、リリース、委任、cancel_taskなどのタスク操作に対して認可されていませんが発生します

APEX_TASKS_PARTICIPANTのユーザー名の大/小文字と、ログイン名のユーザー名の大/小文字が同じことを確認します。

APEXユーザーは大文字(USER)で保存されます。タスク定義で固有の潜在的所有者は、大文字で指定する必要があります。

多くの認可の例外は、大/小文字の間違いによる誤報です。

DBスケジューラ・ジョブによってタスクを承認すると、「タスクが見つかりません」エラーがスローされます。

DBMSスケジューラ・ジョブを使用してapex_approval APIまたはapex_human_task APIを実行すると、ユーザー・セッションにはタスクがないために見つかりません。

このエラーを解決するには、ユーザー名として承認者の名前を渡すapex_session.create_session()を使用してジョブで有効なAPEXセッションを作成してから、approve_task APIをコールします。
PROCEDURE CREATE_SESSION (
p_app_id IN NUMBER,
p_page_id IN NUMBER,
p_username IN VARCHAR2,
p_call_post_authentication IN BOOLEAN DEFAULT FALSE );

create_sessionの実行後は、apex_approval APIまたはapex_human_task APIをコールしてタスクを承認または却下できます。

apex_approval.set_task_dueまたはapex_human_task.set_task_dueを使用して期日を設定した後で、タスクが失効しません

APEXには、期日を過ぎたタスクについて1時間に1回チェックするスケジュール済ジョブがあります。このスケジュール済ジョブが実行されるまで、期限切れタスクは期限切れとして表示されません。

スケジュール済ジョブは、APEX_APPROVAL.HANDLE_TASK_DEADLINESまたはAPEX_HUMAN_TASK.HANDLE_TASK_DEADLINESを実行すると手動でトリガーできます。このAPIを実行して、タスク定義の有効期限ポリシーで指定したとおりに、タスクが期限切れ状態になることを確認します。これは、バックグラウンド・ジョブの実行を待機することなく、タスク有効期限ポリシーをテストする場合に便利です。

APEX$TASK_ID置換文字列は、「タスク定義の編集」ページの「アクションSQL問合せ」で使用すると機能しません

IDはタスクの作成後にのみ生成されるため、アクション・ソースではAPEX$TASK_IDを使用できません。これは、今後のリリースで修正される予定の既知の不具合です。

回避策として、可能場合はAPEX$TASK_PK置換文字列を使用してください。