Developer'sWorks
Tips

構造化ビジネスルールについて

実行リストの行数が長くなってしまう場合、以下の構造化ルールを使用することにより 処理をブロック化し 呼び出す事が可能になります。

仕様書とその実装 サンプル

  1. ItemのAfterEventを実行 ( ExecuteAfterEvent )
    存在場所:クライアント(イベント・プロセス制御)
    jp.ne.mki.wedge.rule.client.event.ExecuteAfterEvent
    outに指定されたアイテムのAfterイベントを実行する。in=0、out=複数
  2. TryCatch構造化 ( StructureTryCatch )
    存在場所:クライアント(制御)
    jp.ne.mki.wedge.rule.client.control.StructureTryCatch
    in=複数、out=複数
  3. IfElse構造化 ( StructureIfElse )
    存在場所:クライアント(制御)
    jp.ne.mki.wedge.rule.client.control.StructureIfElse
    in=複数、out=複数

StructureTryCatch と StructureIfElse は、Ver1.1.1のパッチ提供 もしくは Ver1.1.2 にて 提供しています。
構造化対応 DynamicDocument は 2004/09/07現在未だ提供しておりません。
随時提供予定です。

戻り値の判断

このドキュメントでは、これらのビジネスルールにて、実行元の実行リストにどのような 戻り値を返すかどうかを詳しく説明します。

ルール内次アイテム処理続行有無元実行リストへの戻り値
ExecuteAfterEventOKが返って来たとき続行常にOKを返す
StructureTryCatchエラーフラグに値が入っていない かつ OK,SKIP,SKIP_ALL の時続行SKIP,SKIP_ALLの場合OKを返す。
FrameClose(Quit),SystemExit(Quit)の場合はSKIP_ALLを返す。
それ以外はその戻り値
StructureIfElse-----SKIP,SKIP_ALLの場合OKを返す。
FrameClose(Quit),SystemExit(Quit)の場合はSKIP_ALLを返す。
それ以外はその戻り値
  1. ItemのAfterEventを実行 ( ExecuteAfterEvent )


    設定方法:
    入力引数出力引数
    Afterに処理が入ったアイテム
    Afterに処理が入ったアイテム
    ・・・・

    このルールでは、出力引数にて指定されているアイテムのAfter実行リストを順次実行していきます。
    例えば、出力引数に以下の設定がある場合

    1. OutItem1 (Afterに処理を含む)
    2. OutItem2 (Afterに処理を含む)

    OutItem1のAfter実行リストを実行し、戻り値が OK だった場合のみ、OutItem2のAfter実行リストを実行します。
    After実行リストの戻り値が OK 以外だった場合・・・例えば CANCEL や SKIP_ALL など・・・ 次に指定されているアイテムの Afterは実行されません。
    ロジック的に処理を表すと以下のようなイメージになります。
    
    int ret = 出力引数1 のAfter実行
    if(ret == OK){
      ret = 出力引数2 のAfter実行
      if(ret == OK){
         ret = 出力引数3 のAfter実行
         ・・・(省略)・・・
      }
    }
    
    return OK
    

    また、このルールの戻り値は 常にOKを返す を返す為、呼び出し元実行リストに対して SKIP_ALL などの戻り値を 返す事はできません。
    単純に処理のブロックを呼び出すだけの目的にて使用して下さい。
  2. TryCatch構造化 ( StructureTryCatch )


    設定方法:
    入力引数出力引数
    Afterに処理が入ったアイテムエラーフラグアイテム
    Afterに処理が入ったアイテムエラー処理がAfterに入ったアイテム
    ・・・・・・・

    このルールでは、入力引数にて指定されているアイテムのAfter実行リストを順次実行していきます。
    但し、指定されたエラーフラグアイテムに値が入った場合に エラー処理用アイテムに制御をうつします

    ロジック的に処理を表すと以下のようなイメージになります。
    try{
      int ret = 入力引数1 のAfter実行
      if(エラーフラグの値に何か入っていた場合){
        throw エラー処理+(エラーフラグの値)
      }
      if(ret != OK(※1)){
        return ret (※1)
      }
     
      ret = 入力引数2 のAfter実行
      if(エラーフラグの値に何か入っていた場合){
        throw エラー処理+(エラーフラグの値)
      }
      if(ret != OK(※1)){
        return ret (※1)
      }
      
      ・・・(省略)・・・
      
      return ret (※1)
      
    }
    catch (エラーフラグ=1){
      return 出力引数2 のAfter処理 (※1)
    }
    catch (エラーフラグ=2){
      return 出力引数3 のAfter処理 (※1)
    }
    
    (※1) 元実行リストへの戻り値 は、以下の仕様で変換されて返ります。
    SKIP,SKIP_ALL の場合 ・・・ OK を返す
    FrameClose(Quit),SystemExit(Quit)の場合 ・・・ SKIP_ALLを返す
    上記以外は 処理の戻り値をそのまま返す

    つまり、処理ブロックにて CANCEL などを返された場合には 元実行リストへもCANCELが 返され処理が中断されます。

  3. IfElse構造化 ( StructureIfElse )


    設定方法:
    入力引数出力引数
    Afterに条件判断処理が入ったアイテムAfterに処理が入ったアイテム
    Afterに条件判断処理が入ったアイテムAfterに処理が入ったアイテム
    ・・・・・・・
    Afterに処理が入ったアイテム
    このルールでは、入力引数にて指定されているアイテムのAfter実行リストの結果により、出力引数にて指定されている アイテムのAfter実行リストを実行します。

    ロジック的に処理を表すと以下のようなイメージになります。
    if(入力引数1 のAfter実行 (※1) == OK){
      return 出力引数1 のAfter実行 (※2)
    }
    else if(入力引数2 のAfter実行 (※1) == OK){
      return 出力引数2 のAfter実行 (※2)
    }
    
    ・・・(省略)・・・
    
    else{
      return 出力引数最後 のAfter実行 (※2)
    }
    
    
    (※1) 条件句にて true or false の判断は以下として行います。
    OK,SKIP,SKIP_ALL の場合 ・・・ 条件マッチ=true とみなす
    上記以外の場合 ・・・ 条件アンマッチ=false とみなす
    条件アンマッチ=false の場合は、次の条件句(else if) に処理が移ります。

    (※2) 元実行リストへの戻り値 は、以下の仕様で変換されて返ります。
    SKIP,SKIP_ALL の場合 ・・・ OK を返す
    FrameClose(Quit),SystemExit(Quit)の場合 ・・・ SKIP_ALLを返す
    上記以外は 処理の戻り値をそのまま返す

    つまり、処理ブロックにて CANCEL などを返された場合には 元実行リストへもCANCELが 返され処理が中断されます。

まとめ

  1. ItemのAfterEventを実行 ( ExecuteAfterEvent )
    呼び出し元実行リストには 必ず OK が返る。
    そのため、指定アイテムAfterの実行リストの 最終戻り値 について意識せずに 使用可能。
  2. TryCatch構造化 ( StructureTryCatch )
    戻り値が OK,SKIP,SKIP_ALL は 呼び出し元実行リストも続けて実行。
    上記以外の 戻り値の場合には、呼び出し元実行リストが中断されるなど 制御が入る。
  3. IfElse構造化 ( StructureIfElse )
    条件句(入力引数)戻り値が OK,SKIP,SKIP_ALL は 対象の処理が実行される。
    上記以外の戻り値の場合には、次の条件に進む。
    条件句にて STOPなどを返されても STOPの動作は行われず "条件アンマッチ" とだけ みなされる。
    そのため、条件句では、OK,SKIP,SKIP_ALL,CANCEL のみを返すように指定するのが 望ましい。

    対象処理の戻り値が OK,SKIP,SKIP_ALL は 呼び出し元実行リストも続けて実行。
    上記以外の 戻り値の場合には、呼び出し元実行リストが中断されるなど 制御が入る。