オーケストレーション・プロセスを一時停止するためのガイドライン
これらのガイドラインを使用して、一時停止タスクが正しく動作することを確認します。
一時停止タスクのあるステップの追加
一時停止タスクを参照するステップを追加します。
ノート
-
「設定および保守」作業領域の「オーケストレーション・プロセス定義の編集」ページを使用します。
-
一時停止ステップを追加します。 次の値を設定します。
属性
値
ステップ・タイプ
サービス
タスク・タイプ
一時停止
タスク
一時停止
サービス
一時停止プロセス
-
一時停止ルール列の「リンク」をクリックして、リリース・ルールを設定します。
通常、明細選択基準を使用して、オーケストレーション・プロセス・ステップで処理する履行明細をフィルタします。 ただし、一時停止タスクでは、デフォルトで販売オーダーのすべての履行明細がすでに調査されているため、一時停止タスクに対して明細選択基準は使用できません。
短すぎる評価間隔を指定しない
評価間隔が短すぎるために一時停止タスクを設定すると、オーケストレーション・プロセスによって一時停止条件が過剰な回数評価され、パフォーマンスが低下する可能性があります。 次のことを想定します:
-
予定出荷日が発生するまでオーケストレーション・プロセスを一時停止する一時停止ステップを作成します。
-
reevaluateFlagをYに設定します。
-
条件を5分ごとに1回評価します。
通常、一時停止ステップの実行からスケジュール出荷日の発生まで5日経過するとします。 平均すると、オーケストレーション・プロセスで条件が1,440回評価されます。
-
1時間ごとに12回、24時間x 5日、1,440と等しくなります
この処理では多くのリソースを消費し、パフォーマンスに影響を与える可能性があり、実行時環境が失敗する可能性があるメモリーの問題が発生する可能性があります。 したがって、一時停止ステップを設定して、条件を評価する頻度を減らします。 この例では、否定的な方法でオーケストレーション・プロセスに影響を与えずに、評価が2時間ごとに1回行われる可能性があります。
一時停止を再試行する回数パラメータを使用して、一時停止タスクを一時的に一時停止する前にオーケストレーション・プロセスが条件を評価する最大回数を制御し、リカバリをクリックして一時停止を手動でリカバリすることをユーザーに知らせるエラー・メッセージを表示します。 詳細は、オーダー管理パラメータの管理を参照してください。
条件の再評価
「エラーのリカバリ」スケジュール済プロセスを使用して、条件を再評価します。 たとえば:
-
一時停止タスクで実行されるようにリカバリ・エラーを設定します。
-
一時停止を再試行する回数を10に設定します。
-
実行時に、オーダー管理は10回再試行します。
-
すべての10回の再試行が失敗すると、オーダー管理によって一時停止タスクがエラーに配置され、最大再試行回数を超えたというメッセージが表示されます。
-
オーダー入力スペシャリストは、オーダーのリカバリ処理を使用して販売オーダーをリカバリします。
-
エラーの各オーダー明細は、10回一時停止を再試行します。
-
条件の場合:
-
再試行中に満足します。 オーダー管理によって一時停止が解除されます。
-
Doesn't satisfy. オーダー管理は、一時停止タスクをエラー状態に戻します。
-
販売オーダーの改訂時に一時停止
オーダー入力スペシャリストが販売オーダーを改訂すると一時停止します。 この動作を制御する属性を設定できます。
ノート
-
一時停止タスクが拡張可能フレックスフィールドを参照していない場合は、「フレックスフィールド属性の使用」オプションを無効にして、拡張可能フレックスフィールドの値が変更されたときに一時停止ステップをスキップするようにオーケストレーション・プロセスに指示します。
-
販売オーダーの改訂時に一時停止タスクを実行する必要がない場合は、報酬パターンを記述します。
支払を待機する一時停止ステップを作成するとします。 オーダー入力スペシャリストは、顧客が支払を送信し、一時停止が終了したことを手動で示します。 その後、オーダー入力スペシャリストは、出荷先住所の変更など、支払金額に影響しない方法で販売オーダーを改訂します。
改訂後に支払を待機するために一時停止する必要がないため、支払ステップの一時停止をスキップする報酬パターンを作成できます。
-
オーケストレーション・プロセスでは、「変更を識別するオーダー属性」ページで指定した属性を使用して、販売オーダーの改訂中に補償するタイミングを決定します。 これを使用して、一時停止タスクが実行されるのは、オーダー入力スペシャリストが行った改訂が、一時停止タスクが参照する属性に影響する場合のみです。
詳細は、変更を識別するオーダー属性の管理を参照してください。
一時停止のリリース
フローが一時停止ルールの条件を満たさない場合、リリース・ルールによって一時停止が解除されます。 たとえば、一時停止ルールのactualShipDate属性に各履行明細の値が含まれている場合、次のようになります:
-
すべての履行ラインはすでに出荷されています。
-
フローは、タスクを一時停止する一時停止ルール条件を満たしていません。
-
フローは次のオーケストレーション・プロセス・ステップに進む準備ができました。
-
フローはリリース・ルールに戻ります。
-
リリース・ルールは、SacResultをSAC_TYPE_IMMEDIATEに設定します。
-
リリース・ルールによって一時停止が解除されます。
-
フローは次のオーケストレーション・プロセス・ステップに進みます。
同じ開始後条件のルール・セットとして実行される複数のルールを設定する場合は、リリース・ルールをセット内のすべてのルールの最も高い優先度に設定する必要があります。
リリース・ルールと一時停止ルールの例を次に示します。
ノート
-
オーダー管理では、優先度が最も高いルールが最初に実行されます。
-
新規割当を使用するルールで優先度属性を最高に設定します。 これにより、最初にルールが実行されます。 また、このルールによって、start-after条件(SAC)の結果を格納するオブジェクトが作成されます。 その他のルールでは、start-after条件の値を設定できます。
-
ルール・セットに1つのルールのみがある場合は、優先度の設定を気にする必要はありません。
-
優先度を正しく設定しないと、オーダー管理でルールの実行時にNULLポインタ・エラーが発生する可能性があります。
-
リリース・ルールでIf文を使用して、ビジネス・ロジックに必要な条件を定義しないでください。 かわりに、一時停止ルールに条件ロジックを設定します。
-
ルール・エディタでは、検証に合格するようにリリース・ルールに条件を設定する必要があるため、常にtrueの条件を設定します。
-
新規割当を使用します。 新規割当によってSacResultの新しいインスタンスが作成され、ルール・セット内のルールの実行中に値を割り当てることができます。
リリース・ルールの別の例
ノート
-
詳細モードを使用します。
-
sacResultを指定します。
属性
説明
sacType
必須
sacEventName
ReevaluateFlag
waitDateTime
オプション。一時停止のタイプによって異なります。 たとえば、解決する依存関係に従ってルールが一時停止する場合は、sacEventNameを含める必要があります。
詳細は、「オーケストレーション・プロセスの一時停止の概要」を参照してください。
-
他の属性のデフォルト値は設定しないでください。
他のテクノロジを使用した一時停止のリリース
通常、一時停止をリリースするにはリリース・ルールを使用します。 ただし、webサービスやスケジュール済プロセス、オーダー管理作業領域を使用して一時停止をリリースすることもできます。
ノート
-
ルール・セットには1つのルールのみを使用してください。
-
条件を指定しないでください。
-
他のテクノロジを使用して一時停止タスクを解放します。
これがコードです。
コード |
説明 |
---|---|
|
ヘッダー変数を宣言し、オーケストレーション・プロセスが現在処理しているオーダー・ヘッダーの属性をこの変数に格納します。 |
|
SACという名前の新しい変数を作成し、DooSeededOrchestrationRulesメソッドでSacResultタイプに設定します。 |
|
オーダー・ヘッダーのsacResultオブジェクトの値を、SACに含まれる値に設定します。 |
|
イベントが発生するまでオーケストレーション・プロセスを一時停止します。 |
|
一時停止をトラッキングするイベントの識別に使用するイベントを指定します。 この例では、Waiting for Manual Releaseという名前を付けたとします。 |
条件を含めない
一時停止または解除をwebサービスまたはスケジュール済プロセスを介して手動で解除する場合は、条件またはデフォルトのリリース・ルールを含めないでください。 次に、出荷可能明細と出荷不可明細を請求にまとめて送信する例を示します。これらの明細をいつ送信するかを管理します。
Waiting for manual release
など、独自のeventNameを指定できます。 オーダー管理作業領域にこの名前が表示されます。 一時停止のリリースに使用するスケジュール済プロセスでも指定できます。
結果の割当
次の割当てをThen文の最初の2つのアクションとして含める必要があります:
コード | 説明 |
---|---|
|
SACという名前の新しい変数を作成し、DooSeededOrchestrationRulesメソッドでSacResultタイプに設定します。 |
|
オーダー・ヘッダーのsacResultの値を、SACに含まれる値に設定します。 |
このコードは、start-after条件(SAC)の結果を格納するオブジェクトを作成します。
これらの割当を含めず、リリース・ルールを作成しない場合は、ルール・セット内の少なくとも1つのルールで新規割当処理を使用してSACオブジェクトを作成する必要があります。
設定のテスト
開発環境で設定をテストします。 これらの条件を使用します。
-
履行明細が1つ含まれる販売オーダーです。
-
履行明細が複数含まれる販売オーダーです。 このテストは、現在のオーケストレーション・プロセス・インスタンスが調査していないが、これらの履行明細とインスタンスが調査している履行明細との間に依存関係が存在する履行明細を調べるために、ルールを設定するのに役立ちます。
-
データに出荷セットが含まれている場合は、テストに出荷セットを含めます。
-
データに構成品目が含まれている場合は、構成品目をテストに含めます。
-
値が含まれない属性。
-
条件がfalseと評価される値を含む属性。
-
条件がtrueと評価される値を含む属性。
-
オーダー改訂。
-
変更オーダー
-
ルールでそれらを参照する場合は、拡張可能フレックスフィールドをテストします。
トラブルシューティング
equalsIgnoreCaseを使用するときにNULLポインタを修正
次のようなエラーが発生したとします:
Order management can't pause the sales order. oracle.apps.scm.doo.common.DooJboException: oracle.rules.rl.exceptions.RLNullPointerException: Attempted to invoke method "equalsIgnoreCase" in class "java.lang.String" on a null object reference. at line 6 in /Ruleset(StartAfterCond_RuleSet_18)/Rule(Rule1)/Pattern(v0_DOOHeader)/Test[1]. For details, see the Guidelines for Pausing Orchestration Processes topic on Oracle Help Center
これは、一時停止ルールで、オーケストレーション・プロセスを一時停止するかどうかを決定するために使用しているオーダー・ヘッダー属性に値が含まれているかどうかを確認しないために発生する可能性があります。 customerPoNumber属性を使用してプロセスを一時停止し、ルールにこの文があるとします。
If Header is a DooSeededOrchestrationRules.DOOHeader and Header.customerPoNumber equals ignore case "MyValue"
この問題を解決する方法を次に示します:
If Header is a DooSeededOrchestrationRules.DOOHeader and Header.customerPoNumber equals ignore case "MyValue" and Header.customerPoNumber isn't null
longValueを使用するときにNULLポインタを修正
次のようなエラーが発生したとします:
Order management can't pause the sales order. oracle.apps.scm.doo.common.DooJboException: oracle.rules.rl.exceptions.RLNullPointerException: Attempted to invoke method "longValue" in class "java.lang.Long" on a null object reference. at line 6 in /Ruleset(StartAfterCond_RuleSet_18)/Rule(Rule1)/Pattern(v0_DOOFLine)/Test[1]. For details, see the Guidelines for Pausing Orchestration Processes topic on Oracle Help Center.
これは、一時停止ルールで、オーケストレーション・プロセスを一時停止するかどうかを決定するために使用している履行明細属性に値が含まれているかどうかを確認しないために発生する可能性があります。 paymentTermId属性を使用してプロセスを一時停止し、ルールにこの文があるとします。
If Fline is a DooSeededOrchestrationRules.DOOFLine and Fline.paymentTermId is 100
この問題を解決する方法を次に示します:
If Fline is a DooSeededOrchestrationRules.DOOFLine and Fline.paymentTermId is 100 and Fline.paymentTermId isn't null
Start After条件の修正
次のようなエラーが発生したとします:
Order management can't pause the sales order. oracle.apps.scm.doo.common.DooJboException: oracle.rules.rl.exceptions.RLNullPointerException: Attempted to access property "sacType" in class "oracle.apps.scm.doo.common.businessRules.model.obr.facts.SacResult" with a null object reference. at line 7 in /Ruleset(StartAfterCond_RuleSet_18)/Rule(Rule1)/Action[1]. For details, see the Guidelines for Pausing Orchestration Processes topic on Oracle Help Center.
これは、start after条件のインスタンスを正しく作成していないために発生する可能性があります。 修正するには、最初に開始条件のインスタンスを作成する新規割当アクションを追加してから、そのインスタンスをsacResultに割り当てます。 たとえば:
assign new DooSeededOrchestrationRules.SacResult SAC = new DooSeededOrchestrationRules.SacResult()
assign Header.SacResult = SAC
次に、この新規割当処理があるルールで優先度を最高に設定します。 この優先度により、オーダー管理では、他のルールを実行する前に新規割当ルールが実行されるようになります。 新規割当処理では、後続のルールが実行時に使用する開始後条件のインスタンスが作成されます。 たとえば、後続のルールでは、そのインスタンスの値を設定します。 インスタンスが存在しない場合は、エラーが発生します。
詳細は、「ビジネス・ルールへのロジックの適用」の優先順位の設定サブ・トピックを参照してください。
一般的に使用される式
ExpressionCode |
使用可能な値 |
---|---|
DooSeededOrchestrationRules.SacResult |
SAC新規DooSeededOrchestrationRules.SacResult() |
Header.sacResult |
SAC |
Header.sacResult.sacType |
DooSeededOrchestrationRules.SacResult.SAC_TYPE_IMMEDIATE DooSeededOrchestrationRules.SacResult.SAC_TYPE_EVENT DooSeededOrchestrationRules.SacResult.SAC_TYPE_TIMER |
Header.sacResult.eventName |
DooSeededOrchestrationRules.SacResult.SAC_SYSTEM_EVENT_IPC_PAUSE 設定したイベントの名前を参照できます。 |
Header.sacResult.WaitDateTime |
header.getAdjustedDate(null,number of days) |
一般的に使用される日付関数
機能 |
パラメータ |
説明 |
---|---|---|
|
|
二重形式で指定された日数を、最初のパラメータで指定する日付に追加します。 戻り値は日時書式です。 |
|
|
最初のパラメータから2番目のパラメータを減算します。 戻り値は日数です。 |
|
オブジェクト |
様々なタイプの日付オブジェクトを日時形式で変換します。 |
|
該当なし |
システム日付を日時形式で返します。 |