7.1.2 ABORT の使用例

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

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

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

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

打ち切りをトラップする

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

以下のコマンドは、ファンクションを打ち切ってエラー・メッセージを表示します。

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

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

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

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(ABORT) WITH_PARMS('Employee' #EMPNO 'not found') 
 

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

EXECUTE    SUBROUTINE(ABORT) WITH_PARMS(#DEPTMENT 'is invalid' *BLANKS) 
 

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

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

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

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) 
 

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

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

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(ABORT) WITH_PARMS(*MTXTABORT_MESSAGE_1)
 

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

EXECUTE    SUBROUTINE(ABORT) WITH_PARMS(*MTXTABORT_EMPTY_FILE) 
 

打ち切りをトラップする

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

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 パラメータ・ロジックをトリガーする理由は多数あります)。