機械翻訳について

カスタムGroovyオブジェクト関数のスケジュール

カスタムGroovyオブジェクト関数のスケジュール・スケジュール済プロセスを使用して、スケジュールされた時間にオブジェクト関数を使用して外部webサービスへの非同期コールを行います。 オプションで、値を返すオブジェクト関数を定義できます。

関数の起動時に呼び出し元が値を指定する必要がある型付きパラメータを指定することもできます。 サポートされている戻り型とオプションのパラメータ型は、グローバル関数と同じです。 ただし、関数が値を返すように定義されている場合、スケジュールされたプロセスでは、パラメータがなく、戻り型としてStringを持つオブジェクト関数のみがサポートされます。 そのため、スケジュール済プロセスで使用するオブジェクト関数を定義する場合は、パラメータが定義されていないことを確認し、値を返す関数を定義する場合は、戻り型がStringであることを確認してください。

ヒント : オブジェクト関数のスケジュールを開始する前に、次のステップを実行することをお薦めします:

  • オブジェクトのAPI名をオブジェクト名として記録します。

  • オブジェクト関数名を記録します。

  • 実行時メッセージのデバッグがサポートされるアプリケーション・コンポーザ内の検証またはトリガー起動メカニズムを使用して、オブジェクト関数が適切にコンパイルおよび実行されていることを確認します。

容量をテストして、大規模なデータ・セットを処理する最適なバッチ・サイズを決定します。 スケジュール済プロセスは複数のシナリオで使用できます。 次に、プロセスのスケジュールが必要な場合の例をいくつか示します:

  • 特定の基準に基づいてレコードの一括更新を実行する場合。

  • 時間ベースのワークフローの回避策として、将来満たされる基準に基づいてワークフローをトリガーします。

非勤務時間中にスケジュールできる大量のアップデートでカスタム・ロジックを実行する場合。

次の点に注意してください。

  • 必要に応じて、関数を複雑に記述できます。
  • 値を.txtファイルに返す関数を記述できます。

    .txtファイルには、Groovyコードが返すすべての値が表示されます。 プロセスの.txtファイルを表示するには、そのプロセスのステータス・リンクをクリックします。

  • 各スケジュール済プロセスの実行時制限は、オブジェクト関数を実行するために30分です。 これは、大量のデータを操作するオブジェクト関数をサポートするために大量のリソースを消費する可能性がある長時間実行ジョブを防止するためです。
    ノート: 30分の制限は、その実行に指定されたオブジェクト関数操作の検証と実行にのみ適用されます。 必要なデータベース・トランザクション処理が、割り当てられた30分以内に開始されているかぎり、スケジュール済プロセスの完了は30分の制限を超えてしまう可能性があります。 これにより、大規模なデータ・セットの操作の完了に時間がかかることが多いデータベース挿入および更新が可能になります。 したがって、エンド・ツー・エンドの処理時間は30分より長くなる可能性があります。

    Groovyスクリプトが、ESS/PLSQLを介して実装された長時間実行プロセスをトリガーした場合、ターゲット・オブジェクトにすでに作成されているGroovyトリガーはコールされません。 これは、ESS/PLSQLがADFおよびモデル・レイヤーをバイパスして、データベース・レベルで直接動作するためです。

  • 各ジョブ実行はトランザクションを構成します。 つまり、オブジェクト関数のGroovyスクリプトで指定されたすべての操作を完了まで実行して、トランザクションを完了する必要があります。 それ以外の場合、トランザクションはロールバックされ、レコードは更新されません。

  • ジョブの実行が開始されると、「取消」ボタンは機能しないため、ジョブを取り消すことはできません。

  • レコードが更新されると、「最終更新者」値がジョブを発行したユーザーに変更され、「最終更新日」値が更新の日時に変更されます。

  • ログ・ファイルには、プロセス中に発生したエラーが表示されます。 プロセスのログ・ファイルを表示するには、そのプロセスのステータス・リンクをクリックします。

必要な権限

次のロールがあることを確認します:

  • 顧客関係管理アプリケーション管理者

  • Application Implementation Consultant.

  • マスター・データ管理アプリケーション管理者

  • ZCX_MANAGE_EXTENSIBLE_OBJECT_PRIV

開始する前に

このスケジュール済プロセスをスケジュールする前に、次の内容を確認してください:

推奨頻度:

  • スケジュール済プロセス・ツールを使用して、スケジュールされた時間にオブジェクト関数を使用してwebサービスをコールします。 ユーザーがユーザー・インタフェースに即時フィードバックを表示する必要がない場合に、レコードのセットを毎日または毎週非同期に処理できます。

  • オブジェクトの名前とその関数を指定するだけで、ビジネス・ロジック・コードをスケジュールし、レコード・セットを毎日、週次または月次の単位で非同期に更新します。

実行時間:

  • 各スケジュール済プロセスの実行時制限は、オブジェクト関数を実行するために30分です。 これは、大量のデータを操作するオブジェクト関数をサポートするために大量のリソースを消費する可能性がある長時間実行ジョブを防止するためです。

    ノート:

    30分の制限は、その実行に指定されたオブジェクト関数操作の検証と実行にのみ適用されます。 必要なデータベース・トランザクション処理が、割り当てられた30分以内に開始されているかぎり、スケジュール済プロセスの完了は30分の制限を超えてしまう可能性があります。 これにより、大規模なデータ・セットの操作の完了に時間がかかることが多いデータベース挿入および更新が可能になります。 したがって、エンド・ツー・エンドの処理時間は30分より長くなる可能性があります。

    スケジュール済ジョブPLSQLを使用して実装された長時間実行プロセスがGroovyスクリプトによってトリガーされた場合、ターゲット・オブジェクトにすでに作成されているGroovyトリガーはコールされません。 これは、スケジュール済ジョブPLSQLがADFおよびモデル・レイヤーをバイパスして、データベース・レベルで直接動作するためです。

  • オブジェクト関数の実行に30分の制限があるため、各オブジェクト関数の実行で実行される作業を分割するのが最善です。 これは、テスト環境で一連の容量実行をテストすることによって最適に行うことができます。 同じオブジェクト関数を使用すると、各ジョブ実行で、処理される合計データのサブセットを処理できます。 同じジョブを定期的に実行するようにスケジュールすることで、複数のジョブ実行にわたってデータの完全なセットを処理できます。

テストは、次の数のステップで実行できます:

  1. 30分間隔で処理できるデータ量を決定します。

    各実行で処理されるデータのサイズは、オブジェクト関数のGroovyスクリプトによって制御されます。 オブジェクト関数でGroovyスクリプトの変更を使用して、次のファクタを制御できます:

    • 条件定義の表示

    • ビュー基準定義から返された結果セットに定義されたデータ・フィルタ

      ノート:

      データベースの拡張機能を使用して、ビュー基準およびデータ・フィルタ結果に対する検索の有効性を改善できます。 たとえば、データベース列の検索で追加の索引を定義すると、全表スキャンよりはるかに速く結果を戻すことができます。

    • setMaxFetchで指定された最大フェッチ・サイズ。定義されていない場合、通常はデフォルトで500行に設定されます

      選択したデータ・サイズが原因でジョブがExprTimeoutExceptionで失敗する場合は、setMaxFetchを使用してデータ・サイズを小さくしてください。

      30分間の制限内で処理できるデータの量は、データの複雑さ、そのデータに対する操作のタイプ、および結果のデータベースの更新操作の複雑さに依存し、これらはすべてトラフィックとリソースの競合の影響を受けます。 データの複雑さは、操作対象のオブジェクトを構成する属性、および操作を完了するためにトラバースまたは更新する必要がある親、子および関連オブジェクト構造を反映したものです。 データが複雑なほど、操作の完了に必要な情報を収集して操作するコストが高くなります。

      たとえば、属性がほとんどなく、関連する親オブジェクト、子オブジェクトおよび関連オブジェクトがない単純なカスタム・オブジェクトの場合、コストは最小になりますが、商談などの即時利用可能な標準オブジェクトでは、属性の数が多く、子関係および関連オブジェクト関係(アカウント、担当者、リードなど)が複数ある場合、検索および更新コストは高くなります。 操作のタイプに関して、挿入操作では最も高いコストが発生し、更新後に読取りが発生し、処理されるデータ量が増加するとコストが増加します。 更新操作の場合、処理できるデータの量は、検索操作のコストと更新のコストによって異なります。前者はビュー基準で指定され、後者は、オブジェクト関数のGroovyスクリプトで指定されているように、検索から取得した結果セットで実行される操作によって決定されます。 データベースの更新操作は、オブジェクト関数で指定された操作のタイプに依存します。 読取りではデータベースの更新コストは発生しませんが、挿入および更新操作ではデータの複雑さが増大します。

  2. 各ジョブの完了にかかる時間を決定します。 データ・サイズ以外に、オブジェクト関数をサポートするために必要なデータベース操作のタイプは、ジョブの完了に大きく影響する可能性があります。 データベース・データの作成、更新および削除(ビジネス・ルールで許可されている場合)は、通常、データの読取りよりも完了に時間がかかります。 データベースの更新を完了してトランザクションを作成するために必要な時間は、オブジェクト関数の実行時間を超える可能性があります。 このコストは、オブジェクト・データの複雑さが高い場合に特に高くなります。 これらのコストは、30分の制限をはるかに超えるジョブ完了時間に見られることがよくあります。 ジョブのスケジュール時間と完了時間の間の時間間隔は、ジョブの完了にかかる時間です。

  3. ジョブの完了時間を少しずつ実行するように各ジョブをスケジュールします。 前のジョブが完了したことを確認するには、各ジョブをスケジュールしながら、ステップ2で取得したジョブ完了時間に数分を追加することをお薦めします。

パラメータ

パラメータ

オプションまたは必須

説明

パラメータ値

特別な組合せが必要

ノート

オブジェクト名

必須

オブジェクトのAPI名を指定します(例: OpportunityVO)。

該当なし

なし

ここで指定するオブジェクト名は、「アプリケーション・コンポーザのオブジェクト概要」ページのオブジェクトのAPI名と同じである必要があります。 また、以前のリリースからスケジュールされたジョブがある場合は、「アプリケーション・コンポーザのオブジェクト概要」ページのオブジェクトのAPI名と一致するようにオブジェクト名を変更する必要があります。

オブジェクト関数

必須

オブジェクトの関数名を指定します。 例: OpptyMsg

該当なし

なし

なし

トラブルシューティング情報

  • 各ジョブ実行はトランザクションを構成します。 つまり、オブジェクト関数のGroovyスクリプトで指定されたすべての操作を完了まで実行して、トランザクションを完了する必要があります。 それ以外の場合、トランザクションはロールバックされ、レコードは更新されません。

  • ジョブの実行が開始されると、取消ボタンは機能しないため、ジョブを取り消すことはできません。

  • レコードが更新されると、最終更新者の値がジョブを送信したユーザーに変更され、最終更新日の値が更新の日時に変更されます。

  • ログ・ファイルには、プロセス中に発生したエラーが表示されます。 プロセスのログ・ファイルを表示するには、ログおよび出力セクションで、添付リンクをクリックしてコンソール・ログ・ファイルをダウンロードします。
    ノート: オブジェクト関数が戻り値を持たないよう定義されている場合、コンソール・ログ・ファイルのみが表示され、リンクをクリックするとダウンロードされます。 それ以外の場合は、Attachmentダイアログが開き、コンソール・ログファイルとコンソール・テキスト・ファイルが表示されます。
  • ログを確認し、失敗したレコードIDをノートします。
  • スケジュールされたGroovyオブジェクト関数のランタイム・メッセージには、printlnメッセージは表示されません。 そのため、回避策として、println関数を使用してオブジェクト関数のカスタム・ボタンを作成し、オブジェクトの詳細ページからそのボタンを起動できます。 ボタンの作成の詳細は、「アクションとリンク」を参照してください。

    オブジェクト関数にprintln関数を追加し、ランタイム・メッセージを有効にすると、失敗の正確な原因を特定するのに役立ちます。 println関数の詳細は、「ランタイム・メッセージ」を参照してください。