Versions Compared

Key

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

7.1.2 ABORT の使用例

ファンクションを打ち切って単純なテキストを表示する

ファンクションを打ち切って動的に構築されるテキストを表示する

ファンクションを打ち切って変数を置換したメッセージを表示する

ファンクションを打ち切って多言語テキストを表示する

打ち切りをトラップする

...

Anchor

...

ABORT_EX1
ABORT_EX1
ファンクションを打ち切って単純なテキストを表示する

以下のコマンドは、ファンクションを打ち切ってエラー・メッセージを表示します。ABORT      MSGTXT('Unable to locate system definition record')   

   ABORT      MSGTXT('Unable to locate system definition record')

Anchor
ABORT_EX2
ABORT_EX2
ファンクションを打ち切って動的に構築されるテキストを表示する

以下のサブルーチンは、ABORT コマンドによって表示されるエラー・メッセージを動的に構築します。SUBROUTINE NAME

   SUBROUTINE NAME(ABORT)

...

 PARMS((

...

#MSGTXT1 *RECEIVED)

...

 (

...

#MSGTXT2 *RECEIVED)

...

 (

...

#MSGTXT3 *RECEIVED))

...

 
DEFINE     FIELD(#MSGTXT1)

...

 TYPE(*CHAR)

...

 LENGTH(40)

...

 DECIMALS(0)

...

 
DEFINE     FIELD(#MSGTXT2)

...

 REFFLD(#MSGTXT1)

...

 
DEFINE     FIELD(#MSGTXT3)

...

 REFFLD(#MSGTXT1)

...

 
DEFINE     FIELD(#MSGDTA)

...

 TYPE(*CHAR)

...

 LENGTH(132)

...

 DECIMALS(0)

...

 
USE        BUILTIN(BCONCAT)

...

 WITH_ARGS(

...

#MSGTXT1 #MSGTXT2 #MSGTXT3) TO_GET(#MSGDTA)

...

 
ABORT      MSGID(DCM9899)

...

 MSGF(DC@M01)

...

 MSGDTA(#MSGDTA)

...

 
ENDROUTINE

これは、以下のような致命的エラー状況で使用できます。EXECUTE    SUBROUTINE

   EXECUTE    SUBROUTINE(ABORT)

...

 WITH_PARMS('Employee'

...

 #EMPNO 'not found')

...

または、以下のような状況でも使用できます。EXECUTE    SUBROUTINE

   EXECUTE    SUBROUTINE(ABORT)

...

 WITH_PARMS(

...

#DEPTMENT 'is invalid' *BLANKS)

...

Anchor
ABORT_EX3
ABORT_EX3
ファンクションを打ち切って変数を置換したメッセージを表示する

打ち切りメッセージの文言をメッセージ・ファイルで定義し、詳細を致命的エラーの発生時に変数として置換することもできます。例えば、MYMSGF というメッセージ・ファイルが作成され、ID が MSG0001 のメッセージ定義がこのファイルに追加されているとします。一次レベルのメッセージ・テキストは、'社員 &1 &2 &3 の給与額 &4 が高すぎるため、この税額計算操作に該当しません。'です。また、メッセージ・データ・フィールド形式は以下のように定義されています。

  • *CHAR 長さ 5
  • *CHAR 長さ 20
  • *CHAR 長さ 20
  • *DEC 長さ 11 小数点以下桁数 2

この場合、abort は以下のようになります。DEFINE     FIELD

   DEFINE     FIELD(#SALRY_CAP)

...

 REFFLD(#SALARY)

...

 EDIT_CODE(3)

...

 DEFAULT(0)

...


REQUEST    FIELDS(#SALRY_CAP)

...


SELECT     FIELDS(#EMPNO #GIVENAME #SURNAME #SALARY) FROM_FILE(PSLMST)

...


IF         COND('

...

#SALARY  > #SALRY_CAP')

...


ABORT      MSGID(MSG0001)

...

 MSGF(MYMSGF)

...

 MSGDTA(#EMPNO #GIVENAME #SURNAME #SALARY)
ENDIF    
ENDSELECT
MESSAGE    MSGTXT('All Employees are OK') TYPE(*WINDOW)

...

 LOCATE(*MIDDLE)

...

Anchor
ABORT_EX4
ABORT_EX4
ファンクションを打ち切って多言語テキストを表示する

多言語アプリケーションでは、メッセージ・テキストに *MTXT 変数を含む致命的エラー・メッセージを発行することが必要になる場合があります。以下のサブルーチンは、その方法を示しています。SUBROUTINE NAME

   SUBROUTINE NAME(ABORT)

...

 PARMS((

...

#MSGDTA *RECEIVED))

...


DEFINE     FIELD(#MSGDTA)

...

 TYPE(*CHAR)

...

 LENGTH(132)

...

 DECIMALS(0)

...


ABORT      MSGID(DCM9899)

...

 MSGF(DC@M01)

...

 MSGDTA(#MSGDTA)
ENDROUTINE

...

これは、以下のような致命的エラー状況で使用できます。 EXECUTE SUBROUTINE

   EXECUTE SUBROUTINE(ABORT)

...

 WITH_PARMS(*MTXTABORT_MESSAGE_1)

...

または、以下のようになります。EXECUTE    SUBROUTINE

   EXECUTE    SUBROUTINE(ABORT)

...

 WITH_PARMS(*MTXTABORT_EMPTY_FILE)

...

Anchor
ABORT_EX5
ABORT_EX5
打ち切りをトラップする

呼び出されたファンクションでの ABORT コマンドの実行は、以下のように呼び出しファンクションで検出してトラップできます。CALL       PROCESS

   CALL       PROCESS(*DIRECT)

...

 FUNCTION(MYFUNC)

...

 IF_ERROR(ERR)

...


RETURN   
ERR:

...

 MESSAGE    MSGTXT('

...

MYFUNC has ended with in error')

...

 TYPE(*WINDOW)
RETURN

...

ファンクションMYFUNCが失敗した場合、制御は ERR ラベルに渡されます (ABORT コマンド以外にも、IF_ERROR パラメータ・ロジックをトリガーする理由は多数あります)。
[ Image Removed |../../index.htm#lansa/abort_e.htm]