[ |../../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]