特定の処理でエラーが発生した場合はリトライしたい

Avatar
dstn

特定の処理でエラーが発生した場合はリトライしたい

キーワード:エラー,例外,リトライ,リラン,再実行,例外監視,continue

概要

スクリプト内で処理のリトライを行いたい場合、例外監視処理・繰り返し処理を使用します。

サンプルプロジェクトの説明

データベースのテーブルに格納されているデータを読み取り、テーブルに出力する処理を監視します。
エラーが発生した場合、エラー内容によって処理をリトライします。
また、一定回数処理をリトライしてもエラーが発生する場合、処理を異常終了させます。

処理の流れ

サンプルプロジェクトの処理の流れは以下の通りです。
  1. 繰り返し処理」で以下の処理を5回繰り返します。
    1. 例外監視処理」対象となる処理の例外を監視します。
      対象となる処理は「テーブル読み取り処理」および「テーブル書き込み処理」です。
    2. テーブル読み取り処理」または「テーブル書き込み処理」でエラーが発生した場合、「待機処理」で一定時間待機後、処理をリトライします。
      マッピング処理」でエラーが発生した場合、リトライは行わず、異常終了します。
    3. エラーが発生せずに処理が終了した場合、スクリプト変数「正常終了」に「true」を設定し、「繰り返し処理」から抜け出します。
  2. 繰り返し処理」が終了し、スクリプト変数「正常終了」の値が「true」でない場合、「例外通知処理」で処理を異常終了させます。
実行結果のイメージについて
  • 一定回数処理をリトライしてもエラーが発生する場合、以下のダイアログが表示されて異常終了します。

ポイントとなる機能

名前 説明 ツールパレット上の場所
例外監視処理 対象となる処理の例外を監視し、例外処理を行います。 「基本」-「フロー」-「例外監視」
繰り返し処理 指定した回数分、処理を繰り返します。 「基本」-「フロー」-「繰り返し」
break処理 繰り返し処理から抜け出します。 「基本」-「フロー」-「break」
continue処理 繰り返し処理中の後続の処理をスキップし、ループ継続条件の判定処理に処理を移します。 「基本」-「フロー」-「continue」

処理のポイント

例外監視処理で、 [チェック対象]にリトライしたい処理のみを設定することで、特定の処理を対象としたリトライを行います。
[チェック対象]に設定していない処理でエラーが発生した場合、リトライは行わず、異常終了します。

サンプルプロジェクトの使用方法

上記処理を実装したサンプルプロジェクトを用意しています。サンプルプロジェクトを使用する場合の手順は、以下の通りです。

サンプルプロジェクトのダウンロード 逆引きリファレンス シナリオ091のサンプルプロジェクト
  1. サンプルプロジェクトの展開
    サンプルプロジェクトファイル「rl_reference_091.zip」を展開します。

  2. プロジェクトのアップロード
    「rl_reference_091.zip」を展開後に作成される「rl_reference_091プロジェクト」ディレクトリがプロジェクトファイルとなります。
    DataSpider Studioを起動し、マイプロジェクトの画面から[ファイル]-[ローカルからアップロード]で展開したディレクトリ「rl_reference_091プロジェクト」をアップロードしてください。

  3. グローバルリソースの設定
    コントロールパネルの[グローバルリソースの設定]から、[新しいグローバルリソースの追加]を選択し、SQL Server接続設定のグローバルリソースを追加します。
    グローバルリソースの設定方法については、DataSpider Servistaヘルプの「グローバルリソースのプロパティ」を参照してください。

スクリプトの作成手順

プロセスフローおよびデータフローは、「 サンプルプロジェクトの説明」のスクリプト画像を参照して適宜設定してください。
  1. リトライ対象の処理の終了状態として使用するスクリプト変数を作成します。
    • スクリプト変数のプロパティは、以下のように設定します。

      スクリプト変数のプロパティ

      変数名 変数型 初期値
      正常終了 真偽値 false

  2. リトライ対象の処理を作成します。
    サンプルプロジェクトでは、テーブル読み取り処理からテーブル書き込み処理までが該当します。

  3. デザイナのツールパレット「基本」-「フロー」-「例外監視」から、例外監視処理をスクリプトキャンバスに配置します。
    • 例外処理の設定は、以下のように行います。

      [必須設定]タブ



      処理のポイント
      • [チェック対象]にはリトライ対象としたい処理のみチェックを入れます。
      • チェックを入れない処理は監視されず、例外処理に遷移せず異常終了します。

  4. デザイナのツールパレット「基本」-「フロー」-「繰り返し」から、繰り返し処理をスクリプトキャンバスに配置します。
    • 繰り返し処理の設定は、以下のように行います。

      [必須設定]タブ



      処理のポイント
      • [繰り返し回数]には最大リトライ回数を設定します。
      • [繰り返し回数]にはスクリプト変数および環境変数を設定可能です。
        • 最大リトライ回数の値を複数のスクリプトで共通化したい、回数の変更によってスクリプトを変更したくない場合は、環境変数を使用するなどの方法があります。

  5. デザイナのツールパレット「基本」-「フロー」-「continue」から、continue処理をスクリプトキャンバスに配置します。
    • continue処理にプロパティはありません。

      処理のポイント
      • continue処理は、繰り返し開始アイコンに処理を遷移させます。
      • 例外監視処理の例外処理とcontinue処理の間に待機処理を入れることで、リトライまでに一定間隔の待機時間を設けることができます。

  6. デザイナのツールパレット「基本」-「処理」-「変数代入」から、変数代入処理をスクリプトキャンバスに配置します。

  7. 変数代入処理のMapperエディタを開き、スクリプト変数に「true」を代入します。
    • マッピングキャンバスは、以下のように設定します。

      マッピングキャンバス



      番号 ロジック名 説明 ツールパレット上の場所
      (1) 真偽値定数 真偽定数を出力します。
      [必須設定]タブの[定数]には「true」を選択します。
      「条件」-「真偽」-「真偽値定数」

  8. デザイナのツールパレット「基本」-「フロー」-「break」から、break処理をスクリプトキャンバスに配置します。
    • break処理にプロパティはありません。

      処理のポイント
      • リトライ対象の処理が正常終了した場合は繰り返し処理を抜けたいため、break処理を使用します。

  9. デザイナのツールパレット「基本」-「フロー」-「条件分岐」から、条件分岐処理をスクリプトキャンバスに配置します。
    • 条件の設定は、以下のように行います。

      [必須設定]タブ


  10. デザイナのツールパレット「基本」-「処理」-「例外通知」から、例外通知処理をスクリプトキャンバスに配置します。
    • 例外通知処理の設定は、以下のように行います。

      [必須設定]タブ


  11. スクリプトを実行し、正常終了すれば成功です。

コメント

ログインしてコメントを残してください。

Powered by Zendesk