You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Next »

[ |../../index.htm#lansa/message_e.htm]
現在地:

7.90.3 MESSAGE の使用例

プレーン・テキスト・メッセージを発行する
異常終了中に複数のメッセージを発行する
動的に構築されるテキストを含むメッセージを発行する
*MTXT変数のテキストを含むメッセージを発行する
代替変数を含むメッセージを発行する
メッセージを使用してユーザーに指示と通知を行う
メッセージを使用してテキストの形式設定を行う
プレーン・テキスト・メッセージを発行する
以下の例は、ユーザーの画面に表示されるテキスト・メッセージを発行する方法を示しています。
 MESSAGE MSGTXT('Welcome to the LANSA system')  
異常終了中に複数のメッセージを発行する
以下の例は、異常終了シーケンス中に複数のメッセージを発行する方法を示しています。
MESSAGE    MSGTXT('=============================================') MESSAGE    MSGTXT('==  EMPLOYEE DETAILS NOT FOUND IN PSLMST   ==') MESSAGE    MSGTXT('=============================================') MESSAGE    MSGTXT('== FATAL ERROR - CONTACT YOUR SUPERVISOR ==') ABORT      MSGTXT('=============================================')  
動的に構築されるテキストを含むメッセージを発行する
以下のサブルーチンは、関連する詳細がすべて含まれるメッセージを、メッセージの発行が必要になった時点で動的に構築する方法を示しています。
SUBROUTINE NAME(MESSAGE) 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(MESSAGE) WITH_PARMS('Details for employee' #EMPNO 'saved to file')  
または、以下のようにメッセージを発行することもできます。
 EXECUTE SUBROUTINE(MESSAGE) WITH_PARMS(#DEPTMENT ' department has been created' *BLANKS)  
*MTXT変数のテキストを含むメッセージを発行する
多言語アプリケーションでは、*MTXT変数をメッセージ・テキストとして含むエラー・メッセージを発行することが必要になる場合があります。以下のサブルーチンは、これを行う1つの方法です。
SUBROUTINE NAME(MTXTMESSGE) PARMS((#MSGDTA *RECEIVED)) DEFINE     FIELD(#MSGDTA) TYPE(*CHAR) LENGTH(132) DECIMALS(0) MESSAGE    MSGID(DCM9899) MSGF(DC@M01) MSGDTA(#MSGDTA) ENDROUTINE   
その後、以下のようにサブルーチンを使用してメッセージを送信できます。
 EXECUTE SUBROUTINE(MTXTMESSGE) WITH_PARMS(*MTXTDEMEMPLO05501)  
代替変数を含むメッセージを発行する
以下の例は、メッセージの文言をメッセージ・ファイルで定義し、必要な詳細をメッセージの発行時に変数として置換する方法を示しています。メッセージが以下のように定義されているとします。

メッセージ・ファイル:

 

 

MYMSGF

 

 

 

 

メッセージID:

 

 

MSG0002

 

 

 

 

メッセージ・テキスト:

 

 

'The salary for &1 &2 &3 is &4.'

 

 

 

 

変数

 

 

 

 

 

 

 

 

ラベル

タイプ

長さ

小数点以下桁数

想定される内容

 

&1

*CHAR

5

 

#EMPNO (従業員番号)

 

&2

*CHAR

20

 

#GIVENAME

 

&3

*CHAR

20

 

#SURNAME

 

&4

*DEC

11

2

#SALARY

 

この場合、メッセージを以下のように発行します。
GROUP_BY   NAME(#XG_EMPLOY) FIELDS(#EMPNO #GIVENAME #SURNAME #SALARY)             REQUEST    FIELDS(#EMPNO) FETCH      FIELDS(#XG_EMPLOY) FROM_FILE(PSLMST) WITH_KEY(#EMPNO) IF_STATUS  IS(*OKAY) MESSAGE    MSGID(MSG0002) MSGF(MYMSGF) MSGDTA(#XG_EMPLOY) ELSE        MESSAGE    MSGTXT('Details for employee can not be found') ENDIF   
メッセージを使用してユーザーに指示と通知を行う
以下の例は、メッセージを使用して、ユーザーに対して次に行うべき操作を指示し、プログラムが実行中の処理をユーザーに通知する方法を示しています。この例では、いくつかの入力指示を行ってから入力要求サイクルを開始し、さまざまな処理ステップを実行しながらそれをユーザーに通知して、最後に次の入力を要求する前に処理が完了したことをユーザーに通知します。
MESSAGE    MSGTXT('Input instructions appear here. Press Enter')             BEGIN_LOOP  REQUEST    FIELDS(#STD_TEXT) MESSAGE    MSGTXT('Processing Step 1. Please wait.') TYPE(*STATUS) EXECUTE    SUBROUTINE(WAIT) MESSAGE    MSGTXT('Processing Step 2. Please wait.') TYPE(*STATUS) EXECUTE    SUBROUTINE(WAIT) MESSAGE    MSGTXT('Processing Step 3. Please wait.') TYPE(*STATUS) EXECUTE    SUBROUTINE(WAIT) MESSAGE    MSGTXT('Processing has completed. Please input next') END_LOOP                SUBROUTINE NAME(WAIT) BEGIN_LOOP TO(20000000) END_LOOP    ENDROUTINE   
*STATUSメッセージのTYPEパラメータを*INFOに変更した場合、処理が完了し、次のREQUESTコマンドが実行されるまでメッセージは表示されません。その後、メッセージは、次のREQUESTコマンドが実行されるまで表示されたままになります。
メッセージを使用してテキストの形式設定を行う
以下の例は、メッセージを使用して、変数とテキストを連結テキストに形式設定する方法を示しています。データ・タイプを変換したり、文字列を連結する必要はありません。以下のようにメッセージ定義が作成されています。

メッセージ・ファイル:

 

 

MYMSGF

 

 

 

 

 

 

 

メッセージID:

 

 

MSG0004

 

 

 

 

 

 

 

メッセージ・テキスト:

 

 

'The name of employee &1 is &2 &3.'

 

 

 

 

 

 

 

変数

 

 

 

 

 

 

 

 

 

 

 

ラベル

タイプ

 

長さ

小数点以下桁数

想定される内容

 

&1

*CHAR

 

5

 

#EMPNO (従業員番号)

 

&2

*CHAR

 

20

 

#GIVENAME

 

&3

*CHAR

 

20

 

#SURNAME

 

 

メッセージ・ファイル:

 

 

MYMSGF

 

 

 

 

 

 

メッセージID:

 

 

MSG0005

 

 

 

 

 

 

メッセージ・テキスト:

 

 

'The department and section of employee &1 is &2 &3.'

 

 

 

 

 

 

変数

 

 

 

 

 

 

 

 

 

 

ラベル

タイプ

長さ

小数点以下桁数

想定される内容

 

&1

*CHAR

5

 

#EMPNO (従業員番号)

 

&2

*CHAR

20

 

#DEPTMENT

 

&3

*CHAR

20

 

#SECTION

 

 

メッセージ・ファイル:

 

 

MYMSGF

 

 

 

 

 

 

メッセージID:

 

 

MSG0006

 

 

 

 

 

 

メッセージ・テキスト:

 

 

'The salary of employee &1 is &2.'

 

 

 

 

 

 

変数

 

 

 

 

 

 

 

 

 

 

ラベル

タイプ

長さ

小数点以下桁数

想定される内容

 

 

&1

*CHAR

5

 

#EMPNO (従業員番号)

 

 

&2

*DEC

11

2

#SALARY

 

 

この場合、これらのメッセージは適切な変数を使用して発行されます。サブルーチン内では、画面に表示されるブラウズ・リストにメッセージをコピーするため、またユーザーが希望した場合には印刷用のレポート行にコピーするために、GET_MESSAGES BIFが使用されています。
DEFINE     FIELD(#PRINT) TYPE(*CHAR) LENGTH(1) LABEL('PRINT?') DEFAULT(N) DEFINE     FIELD(#EMPTXT) TYPE(*CHAR) LENGTH(78) DEFINE     FIELD(#RETCODE) TYPE(*CHAR) LENGTH(2) DEF_LIST   NAME(#EMPBROWSE) FIELDS(#EMPTXT) DEF_LINE   NAME(#EMPLOYEE) FIELDS(#EMPTXT)             REQUEST    FIELDS(#PRINT) CLR_LIST   NAMED(#EMPBROWSE)             SELECT     FIELDS(*ALL) FROM_FILE(PSLMST1) MESSAGE    MSGID(MSG0004) MSGF(MYMSGF) MSGDTA(#EMPNO #GIVENAME #SURNAME) MESSAGE    MSGID(MSG0005) MSGF(MYMSGF) MSGDTA(#EMPNO #DEPTMENT #SECTION) MESSAGE    MSGID(MSG0006) MSGF(MYMSGF) MSGDTA(#EMPNO #SALARY) IF         COND('#TERMDATE *NE 0') MESSAGE    MSGID(MSG0003) MSGF(MYMSGF) MSGDTA(#EMPNO #GIVENAME #SURNAME) ENDIF       ENDSELECT               EXECUTE    SUBROUTINE(SHOWMSGS) DISPLAY    BROWSELIST(#EMPBROWSE)             SUBROUTINE NAME(SHOWMSGS) USE        BUILTIN(GET_MESSAGE) TO_GET(#RETCODE #EMPTXT) DOWHILE    COND('#RETCODE = OK') ADD_ENTRY  TO_LIST(#EMPBROWSE) IF         COND('#PRINT *NE N') PRINT      LINE(#EMPLOYEE) ENDIF       USE        BUILTIN(GET_MESSAGE) TO_GET(#RETCODE #EMPTXT) ENDWHILE    ENDROUTINE   
メッセージ・ファイル内のメッセージの文言は、変更したり別の言語に翻訳したりすることが可能です。このとき、プログラムの変更や再コンパイルは必要ありません。
[ |../../index.htm#lansa/message_e.htm]

  • No labels