Versions Compared

Key

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

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

...

7.90.3 MESSAGE の使用例

プレーン・テキスト・メッセージを発行する

異常終了中に複数のメッセージを発行する

動的に構築されるテキストを含むメッセージを発行する

*MTXT変数のテキストを含むメッセージを発行する

代替変数を含むメッセージを発行する

メッセージを使用してユーザーに指示と通知を行う

メッセージを使用してテキストの形式設定を行う

Anchor
MESSAGE_EX1
MESSAGE_EX1
プレーン・テキスト・メッセージを発行する

...

以下の例は、ユーザーの画面に表示されるテキスト・メッセージを発行する方法を示しています。 

   MESSAGE MSGTXT('Welcome to the LANSA system')

Anchor
MESSAGE_EX2
MESSAGE_EX2
異常終了中に複数のメッセージを発行する

...

以下の例は、異常終了シーケンス中に複数のメッセージを発行する方法を示しています。 

   MESSAGE    MSGTXT('=============================================')

...


MESSAGE    MSGTXT('==

...

  EMPLOYEE DETAILS NOT FOUND IN PSLMST   ==')

...


MESSAGE    MSGTXT('=============================================')

...


MESSAGE    MSGTXT('==

...

 FATAL ERROR - CONTACT YOUR SUPERVISOR ==')

...


ABORT      MSGTXT('=============================================')

...

Anchor
MESSAGE_EX3
MESSAGE_EX3
動的に構築されるテキストを含むメッセージを発行する

...

以下のサブルーチンは、関連する詳細がすべて含まれるメッセージを、メッセージの発行が必要になった時点で動的に構築する方法を示しています。 

   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)

Anchor
MESSAGE_EX4
MESSAGE_EX4
*MTXT変数のテキストを含むメッセージを発行する

多言語アプリケーションでは、*MTXT変数をメッセージ・テキストとして含むエラー・メッセージを発行することが必要になる場合があります。以下のサブルーチンは、これを行う1つの方法です。
SUBROUTINE NAMEMTXT変数をメッセージ・テキストとして含むエラー・メッセージを発行することが必要になる場合があります。以下のサブルーチンは、これを行う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)

...

Anchor
MESSAGE_EX5
MESSAGE_EX5
代替変数を含むメッセージを発行する

以下の例は、メッセージの文言をメッセージ・ファイルで定義し、必要な詳細をメッセージの発行時に変数として置換する方法を示しています。メッセージが以下のように定義されているとします。

メッセージ・ファイル:MYMSGF

メッセージID:MSG0002

メッセージ・テキスト:

メッセージ・ファイル:

 

 

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

Anchor
MESSAGE_EX6
MESSAGE_EX6
メッセージを使用してユーザーに指示と通知を行う

...

以下の例は、メッセージを使用して、ユーザーに対して次に行うべき操作を指示し、プログラムが実行中の処理をユーザーに通知する方法を示しています。この例では、いくつかの入力指示を行ってから入力要求サイクルを開始し、さまざまな処理ステップを実行しながらそれをユーザーに通知して、最後に次の入力を要求する前に処理が完了したことをユーザーに通知します。 

   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コマンドが実行されるまで表示されたままになります。 Processing has completed. Please input next') END_LOOP                SUBROUTINE NAME(WAIT) BEGIN_LOOP TO(20000000) END_LOOP    ENDROUTINE   
*STATUSメッセージのTYPEパラメータを*INFOに変更した場合、処理が完了し、次のREQUESTコマンドが実行されるまでメッセージは表示されません。その後、メッセージは、次のREQUESTコマンドが実行されるまで表示されたままになります。

Anchor
MESSAGE_EX7
MESSAGE_EX7
メッセージを使用してテキストの形式設定を行う

以下の例は、メッセージを使用して、変数とテキストを連結テキストに形式設定する方法を示しています。データ・タイプを変換したり、文字列を連結する必要はありません。以下のようにメッセージ定義が作成されています。

メッセージ・ファイル:MYMSGF

メッセージID:MSG0004

メッセージ・テキスト:

メッセージ・ファイル:

 

 

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

メッセージ・テキスト:

メッセージ・ファイル:

 

 

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

メッセージ・テキスト:

メッセージ・ファイル:

 

 

MYMSGF

 

 

 

 

 

 

メッセージID:

 

 

MSG0006

 

 

 

 

 

 

メッセージ・テキスト:

 

 

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

 

 

 

 

 

 

変数

 

 

 

 

 

 

 

 

 

 

ラベル

タイプ

長さ

小数点以下桁数

想定される内容

 

 

&1

*CHAR

5

 


#EMPNO (従業員番号)

 

 

&2

*DEC

11

2

#SALARY

 

 

この場合、これらのメッセージは適切な変数を使用して発行されます。サブルーチン内では、画面に表示されるブラウズ・リストにメッセージをコピーするため、またユーザーが希望した場合には印刷用のレポート行にコピーするために、GET_MESSAGES BIFが使用されています。 DEFINE     FIELD

   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

メッセージ・ファイル内のメッセージの文言は、変更したり別の言語に翻訳したりすることが可能です。このとき、プログラムの変更や再コンパイルは必要ありません。 #RETCODE #EMPTXT) ENDWHILE    ENDROUTINE   
メッセージ・ファイル内のメッセージの文言は、変更したり別の言語に翻訳したりすることが可能です。このとき、プログラムの変更や再コンパイルは必要ありません。
[ Image Removed |../../index.htm#lansa/message_e.htm]