Versions Compared

Key

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

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

...

7.33.4 PTYROUTINEで使用するDEFINE_MAP

コンポーネントのプロパティを定義する場合は、オプションとしてPTYROUTINコマンドを使用すると、プロパティ値を設定するルーチンを指定したりプロパティの値を返すことができます。プロパティのルーチンは、値を派生させたりフォーマットするなど、何らかの方法で値を操作する場合にのみ使用できます。

値を設定するプロパティ・ルーチンには、DEFINE_MAPステートメントが含まれていて、これによってルーチンに入力する値のタイプ(*INPUT)を指定します。プロパティの値を返すプロパティ・ルーチンには、ルーチンが返す値の種類(*OUTPUT)を定義するDEFINE_MAPステートメントが含まれています。

例として、Form Bを使用してみましょう。このフォームには、ユーザー定義のプロパティである、EMP_NAMEが含まれています。このプロパティは、Form Bに記載されている社員名の値を設定するために、Form Bのオーナー・フォームで使用することができます。プロパティは、Form Bに記載されている社員名の現在値を取得する目的でも、Form Bのオーナー・フォームで使用することができます。Form Bの社員名は、#GIVENAMEと#SURNAMEという2種類の個別のフィールドとして処理されます。

以下のコードでは、Form Bでプロパティを定義し、その値をSET_EMP_NAMEという名前のプロパティ値を使用して設定し、GET_EMP_NAMEというプロパティ・ルーチンによって値を返します。

   define_

...

pty name(EMP_NAME)

...

 set(SET_EMP_NAME)

...

 get(GET_EMP_NAME)

...




入力パラメータの定義

Form Bには、以下のように、このSET_EMP_NAMEルーチンが含まれています。 ptyroutine name

   ptyroutine name(SET_EMP_NAME)

...


define_map *input class(#fullname)

...

 name(#this_emp)

...


*  <<logic to split #this_emp to #GIVENAME and #SURNAME>>
endroutine

このルーチンのDEFINE_MAPステートメントでは、EMP_NAMEプロパティによって、#FULLNAMEフィールドに対して有効な値を取り出すことができ、その値は、このルーチン内の#this_empという名前を使用して識別されることが指定されます。

これで、オーナー・フォームはForm BのEMP_NAMEプロパティの値を設定することができます。以下にその例を示します。 set #FORMB EMP

   set #FORMB EMP_NAME(#fullname) 

または set #FORMB EMP

   set #FORMB EMP_NAME('

...

John Smith')

...



出力パラメータの定義

Form Bには、以下のように、EMP_NAMEプロパティの値を返すGET_EMP_NAMEルーチンも含まれています。 ptyroutine name

   ptyroutine name(GET_EMP_NAME)

...


  define_map *output class(#fullname)

...

 name(#this_emp)

...


*  <<logic to concatenate #GIVENAME and #SURNAME to form #this_emp>>
endroutine

このルーチン内のDEFINE_MAPステートメントでは、#FULLNAMEに対して有効な値をEMP_NAMEプロパティが返すように指定されています。出力値は、名前を表す#this_empを参照した値です。その後、このルーチンは#GIVENAMEと#SURNAMEの値を連結して、値#this_empを作成し、これがEMP_NAMEプロパティの値として返されます。

これで、オーナー・フォームは以下のように、EMP_NAMEの値に対するクエリーを実行することができます。 IF COND

   IF COND(#FormB.Emp_

...

Name *

...

eq 'John Smith')