20.13 よくある質問

ワークフローに関するよくある質問のリストを参照してください。

ワークフロー・デザイナ

トピック 質問 回答
切替えアクティビティ より複雑な条件の場合、true/falseタイプのスイッチと、ブール結果を返すPL/SQL式またはファンクション本体を使用する必要がありますか?

より複雑な条件は、if-elsif-elseスイッチを使用することで作成できます。これにより、スイッチ・ブランチごとに異なるタイプの条件を柔軟に指定できます。

true/falseタイプのスイッチは、利用可能な結果がtrue、falseまたはnullのみであるため、最も単純な条件です。

待機アクティビティ プロパティ・エディタで待機アクティビティの最終期限セクションが表示されないのはなぜですか? 待機アクティビティには、独自のタイムアウト属性があります。一般的な最終期限セクションは表示されません。
エラー接続 ワークフロー・モデルで、エラー接続を効果的に使用するにはどうすればよいですか? あるオーダー管理ワークフローについて考えてみます。このワークフローには、次のアクティビティに進む前に、ORDERS表からオーダー番号をフェッチする「APIの呼出し」アクティビティがあるとします。

問合せでレコードが返されない場合、請求書APIアクティビティはno_data_found例外をスローし、ワークフロー・ステータスは失敗に遷移します。

エラー接続を構成すると、このメッセージを回避できます。エラー接続の設定で、条件として=を選択し、値としてno_data_foundに対応するSQLエラー・コード(01403)を選択します。このエラーを処理するには、欠落しているオーダーを作成して、それをORDERS表に追加するように「APIの呼出し」アクティビティを設定します。

この方法によって、エラーを効率的に処理し、ワークフローが失敗状態にならないようにします。

ワークフロー変数とアクティビティ変数 ワークフロー変数とアクティビティ変数を使用する状況はどのように決定しますか? ワークフロー変数は、ワークフロー・インスタンスの存続している間は有効です。それらの値には、すべてのワークフロー・アクティビティからアクセスと変更ができます。アクティビティ変数は、特定のアクティビティの実行中にのみ存続します。一般に、アクティビティ変数は、アクティビティの実行中に必要になることがある追加データをフェッチします。

ワークフロー・ランタイム

トピック 質問 回答
タスクとワークフロー - 最終期限と有効期限 ワークフローに最終期限が指定されているタスク・アクティビティと、タスク定義に指定されている最終期限が含まれている場合、どの最終期限が適用されますか? ワークフロー・アクティビティの最終期限が、タスクの最終期限より優先されます。ワークフロー・アクティビティの最終期限がない場合、ワークフローはタスク定義の最終期限を使用します。
タスクとワークフロー - 最終期限と有効期限 タスクは、失効と自動更新ができます。これは、ワークフローを使用して作成したタスクにも適用されますか?

実行時に、タスクが期限までに完了できなかった場合は、タスク定義の有効期限ポリシーがアクティブになり、それに応じて自動的にタスクが更新されるか失効されます。

タスク定義での有効期限ポリシーがNONEの場合でも、そのタスクは、ワークフローで生成されたタスクであり、ワークフロー・タイムアウトで制御されている間はアクティブ状態に保つことができないため、失効します。

タスクが失効すると、制御はワークフロー・エンジンに戻り、エンジンはワークフロー定義のタイムアウト接続に従います。タイムアウト接続がない場合、ワークフローは失敗状態に遷移します。

タスクとワークフロー - 最終期限と有効期限 タスクがワークフローを使用して作成された場合、タスクのビジネス管理者は、手動で期日を更改または更新できますか?

いいえ。ワークフローによって作成されたタスクは、有効期限ポリシーの設定に基づいた自動更新のみが可能です。ビジネス管理者は手動でタスクの期日を更改または更新できません。期日はワークフロー・タイムアウトによって制御されます。

タスクとワークフロー - エラー発生タスクと取消済タスク タスクがエラーになったり、取り消されたりした場合、ワークフローはどうなりますか?

イニシエータまたはビジネス管理者がタスクを取り消すと、ワークフロー・ランタイム・エンジンはタスク結果を受信せず、ワークフロー内の次のアクティビティの実行を続行します。

ワークフロー内の次のアクティビティがタスクの結果に基づくスイッチの場合、タスクベースのワークフロー・アクティビティには結果がないため、切替えアクティビティは失敗に遷移します。

タスクがエラーに遷移すると、制御はワークフローに戻り、ワークフローは失敗に遷移します。ワークフロー管理者は、エラーの根本的な原因を修正した後で、失敗したワークフローを再試行できます。

タスクとワークフロー - エラー発生タスクと取消済タスク タスクがまだアクティブで完了していない間に、ワークフローが終了した場合はどうなりますか? 現時点で、タスクはアクティブなままであり、自動的には取り消されません。ただし、ユーザーがタスクを完了すると、ワークフローはすでに終了しているために進行しなくなります。これは、現行リリースの既知の問題です。
タスクとワークフロー - ワークフローでのタスクの結果の使用 ワークフロー・アクティビティとして定義された承認タスクの結果は、ワークフロー内のその他のアクティビティでどのように使用できますか?

ワークフロー内の承認アクティビティごとに、関連する2つのワークフロー変数TASK_OUTCOMEAPPROVERが存在します。

アクティビティ設定では、タスクの結果と承認者の属性をこれらの変数に設定できます。実際の所有者がタスクを完了すると、ワークフロー・ランタイム・エンジンはアクティビティを完了し、ワークフロー変数TASK_OUTCOMEを承認済または却下済に設定します。このアクティビティでは、APPROVER変数も実際の所有者に設定されます。

それに続くワークフロー・アクティビティでは、これらのワークフロー変数を使用できます。たとえば、ヒューマン・タスク・アクティビティに続く切替えアクティビティを「Check Workflow Variable」に設定し、= APPROVEDまたは= REJECTEDの条件が付いたTASK_OUTCOMEとして変数を指定し、その変数を使用してワークフローを分岐できます。

ノート:

ワークフロー内に複数の承認タスク・アクティビティがある場合、それに続くアクティビティにワークフロー変数が自動的に作成されることはありません。同じワークフロー変数を再利用してタスクの結果と実際の所有者を格納することも、ヒューマン・タスク・アクティビティごとに別のワークフロー変数に結果を格納する必要がある場合は、手動で新しいワークフロー変数を作成することもできます。
タスクとワークフロー - ワークフローでのタスクの結果の使用 承認タスクを受け入れるかわりに、誤って却下してしまいました。ワークフロー管理者は、関連付けられているワークフローでこれを修正できますか?

はい。ワークフロー管理者は、ヒューマン・タスク・アクティビティの直後にワークフローに待機アクティビティがある場合、これを修正できます。このアクティビティの提示期間は2分から5分です。

承認タスクが却下されると、TASK_OUTCOMEワークフロー変数の値はREJECTEDになります。待機アクティビティ中に、ワークフロー管理者は管理コンソールの「詳細」ページからワークフローを一時停止できます。管理者は、そのページの変数セクションを展開し、TASK_OUTCOME変数の横にある「編集」をクリックして、その値を手動でAPPROVEDに更新できます。これが完了すると、ワークフロー管理者はワークフローを再開できます。

ノート:

ワークフロー変数は、ワークフローが一時停止または失敗しているとき、ワークフロー管理者のみが更新できます。
ワークフロー・サブプロセス ワークフローはアクティビティとして別のワークフローで使用できますか? これは現在サポートされていません。
ワークフロー - 再試行 ワークフローのアクティビティに自動再試行を構成できますか?
いいえ。失敗に遷移するワークフロー・アクティビティは、次のいずれかによって手動で再試行する必要があります:
  • ワークフロー管理者がワークフロー・コンソールの「詳細」ページで「再試行」をクリックします
  • apex_workflow.retry()を呼び出して、ワークフロー・インスタンスIDを渡します

ワークフローを再試行すると、常に、ワークフローが失敗したアクティビティが再実行されてから残りのワークフロー実行チェーンが続行されます。手動でワークフローを再試行できる回数に制限はありません。

ワークフロー - 再試行と再開 ワークフローの「再試行」「再開」の違いは何ですか?

「再試行」は、失敗したワークフローにのみ適用可能で、ワークフロー管理者とワークフロー所有者の両方が実行できます。

「再開」は一時停止されたワークフローにのみ適用可能で、ワークフロー管理者が実行できます。

ワークフローのバージョン そのアプリケーションには2つのバージョンのワークフローがあります。1.0はアクティブなバージョン、1.1は開発中のバージョンです。アプリケーション・ビルダーからアプリケーションを実行するときに、APEXが使用するワークフローのどのバージョンをワークフロー・ページ・プロセスに指定できますか。

ワークフロー・ページ・プロセスは、入力としてワークフロー定義をのみを取得し、バージョンは取得しません。アプリケーション・ビルダーからアプリケーションを実行すると、アプリケーションが開発者セッションで実行され、APEXではワークフローの開発(1.1)バージョンが使用されます。

アクティブな開発者(アプリケーション・ビルダー)セッションなしでアプリケーションを実行する場合、APEXではアクティブな(1.0)バージョンのワークフローが使用されます。

ワークフローのバージョン アプリケーション・ビルダーからアプリケーションを実行中です。対象のアプリケーションには、開発中のバージョン1.0のみのワークフローがあります。アプリケーション・ビルダーからアプリケーションを実行すると、ワークフロー所有者とワークフロー管理者の両方で、ワークフロー変数の「一時停止」および「編集」リンクを使用できます。ただし、このドキュメントでは、ワークフロー管理者のみがこれらの操作にアクセスできる必要があります。なぜ、それらが所有者に表示されるのでしょうか? ワークフローの開発中バージョンの実行時に、APEXは認可チェックを実行しません。APEXは、ワークフローのアクティブ・バージョンの認可チェックのみを実行します。
ワークフローのバージョン アクティブなワークフロー・バージョンが含まれているアプリケーションの実行中に、いくつかのワークフロー・インスタンスを開始しました。その後、ワークフローに2人の新しいワークフロー所有者と1人の新しいワークフロー管理者を追加しました。現在実行中のワークフロー・インスタンスで、どのようにすれば新しい参加者を反映できますか? 有効なAPEXセッションから、apex_workflow.refresh_participantsを呼び出します。このAPIは、ワークフロー定義の参加者を再評価して、現在実行中のワークフロー・インスタンスを更新します。
ワークフローのバージョン 開発中ワークフローのバージョンをアクティブに移行しました。ワークフローが開発中だったときに作成したワークフロー・インスタンスをすべて削除しようと考えています。これは可能ですか。 はい。アプリケーションIDとワークフロー定義の静的IDを渡して、apex_workflow.clear_test_dataを呼び出します。これにより、ワークフローの開発バージョンの実行中に作成されたすべてのワークフロー・インスタンスが削除されます。
ワークフローのバージョン 開発中ワークフローのバージョンをアクティブに移行しました。以前アクティブなバージョンがありましたが、現在は非アクティブになっています。以前にアクティブだったバージョンに基づいて作成したワークフロー・インスタンスはどうなりますか。それらは終了または削除されていますか? いいえ。以前にアクティブだったワークフロー・バージョンから作成したワークフロー・インスタンスは、すべて完了するまで継続して実行されます。ただし、以前にアクティブだったバージョンのワークフローに基づいて新しいインスタンスを開始することはできません。すべての新しいワークフロー・インスタンスは、現在アクティブなワークフロー定義に基づきます。
ワークフローのデバッグ ワークフロー・インスタンスがアクティビティで失敗しました。ワークフロー・バージョンにはデバッグ・レベルを設定していませんでした。その場合でも、デバッグを有効にしてアクティビティを再試行できますか?

はい。ワークフローのインスタンスIDと必要なログ・レベル(apex_debug.c_log_level_app_trace)を渡して、apex_workflow.set_log_level(),を呼び出します。これにより、特定のワークフロー・インスタンスのロギングが有効になります。ログ・エントリを確認するには、次の問合せを実行します:


select message
from apex_debug_messages
where workflow_instance_id =workflow instance ID 
order by message_timestamp asc;