7.1.2 ABORTの使用例

LANSA

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が高すぎるため、この税額計算操作に該当しません。'です。また、メッセージ・データ・フィールド形式は以下のように定義されています。

·         *CHAR 長さ5

·         *CHAR 長さ20

·         *CHAR 長さ20

·         *DEC 長さ11 小数点以下桁数2

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