Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

[ Image Removed |../../index.htm#lansa/on_error_e.htm]
現在地:

...

7.92.3 ON_ERROR の使用例

以下は、ON_ERRORコマンドの例です。 以下のRDML「入力および妥当性検査」プログラムについて考えます。
REQUEST    FIELDS(#A #B #C #D #E)   BEGINCHECK FILECHECK  FIELD(#A) USING

以下のRDML「入力および妥当性検査」プログラムについて考えます。 

   REQUEST    FIELDS(#A #B #C #D #E)
BEGINCHECK
FILECHECK  FIELD(#A) USING_FILE(ACHECK)

...


FILECHECK  FIELD(#B)

...

 USING_FILE(BCHECK)

...


FILECHECK  FIELD(#C)

...

 USING_FILE(CCHECK)

...


FILECHECK  FIELD(#D)

...

 USING_FILE(DCHECK)

...


FILECHECK  FIELD(#E)

...

 USING_FILE(ECHECK)
ENDCHECK

...

この妥当性検査ブロックは、前の検査に失敗した場合でも以降の検査がすべて実行されるため、あまり効率的とは言えません。例えば、#Aがエラーになった場合、#B、#C、#D、および#Eの検査は無駄になります。これは、ユーザーがフィールド#Aを修正したときに、これらのフィールドの検査を再度実行する必要があるからです。 この妥当性検査ブロックは、前の検査に失敗した場合でも以降の検査がすべて実行されるため、あまり効率的とは言えません。例えば、#Aがエラーになった場合、#B、#C、#D、および#Eの検査は無駄になります。これは、ユーザーがフィールド#Aを修正したときに、これらのフィールドの検査を再度実行する必要があるからです。 

ON_ERRORコマンドを使用すると、以下のように一連の「早期終了」を指定することで、上記の例ような妥当性検査ブロックの効率を高めることができます。 ERRORコマンドを使用すると、以下のように一連の「早期終了」を指定することで、上記の例ような妥当性検査ブロックの効率を高めることができます。 

   L10:

...

 REQUEST    FIELDS(#A #B #C #D #E)
    BEGINCHECK
    FILECHECK  FIELD(#A) USING_FILE(ACHECK)

...


    ON_ERROR   GOTO(L10)

...


    FILECHECK  FIELD(#B)

...

 USING_FILE(BCHECK)

...


    ON_ERROR   GOTO(L10)

...


    FILECHECK  FIELD(#C)

...

 USING_FILE(CCHECK)

...


    ON_ERROR   GOTO(L10)

...


     FILECHECK  FIELD(#D)

...

 USING_FILE(DCHECK)

...


     ON_ERROR   GOTO(L10)

...


    FILECHECK  FIELD(#E)

...

 USING_FILE(ECHECK)
    ENDCHECK

すなわち、検査に失敗すると、制御がREQUESTコマンドに戻され、修正を促すためにエラーの詳細が表示されます。当然ながら、この手法には、特定のフィールドがエラーになった場合に、その最初のエラーが修正されない限り、以降のすべてのフィールドが検査されないという欠点もあります。       ENDCHECK  
すなわち、検査に失敗すると、制御がREQUESTコマンドに戻され、修正を促すためにエラーの詳細が表示されます。当然ながら、この手法には、特定のフィールドがエラーになった場合に、その最初のエラーが修正されない限り、以降のすべてのフィールドが検査されないという欠点もあります。
[ Image Removed |../../index.htm#lansa/on_error_e.htm]