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

Compare with Current View Page History

« Previous Version 2 Current »

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

7.33.3 MTHROUTINEで使用するDEFINE_MAP

MTHROUTINEコマンドを使用してユーザー定義メソッドを作成する場合、オプションにDEFINE_MAPステートメントを指定すると、このメソッドが受け取ることのできる入力値と戻す出力値を指定することができます。
例 1
フォーム上の社員に関する詳細情報を取り出すメソッドを定義できます。このメソッドは、以下のように、社員番号(#curemp)を入力値として受け取り、トランザクション番号(#trnno)を返します。
mthroutine name(GetInfo)    define_map for(*input) class(#empno) name(#curemp)    define_map for(*output) class(#STD_NUM) name(#trnno)    change #empno #curemp.value    fetch fields(#detflds) from_file(pslmst) with_key(#empno)    change #STD_NUM '#STD_NUM + 1'    set com(#trnno) value(#STD_NUM) endroutine    
次に、このフォームのオーナー・フォームから、このメソッドを実行するように指示を出すことができます。#empnoフィールドの現在値を渡し、トランザクション番号を受け取ります。トランザクション番号の値がオーナー・フォームのフィールド#TRANSAに割り当てられます。
EVTROUTINE HANDLING(#MOVETO.Click)    invoke #frmdetail.GetInfo curemp(#empno) trnno(#transa) ENDROUTINE  
例 2
この例のフォームでは、プッシュ・ボタンのClickイベントからLoadFormメソッドを呼び出し、表示されるフォームの名前を渡して、作成されたフォーム・インスタンスへの参照を返します。
このソース・コードをフォーム・コンポーネントにコピー・アンド・ペーストして、コンパイルしてください。フォームを実行します。さらに、このフォームを使用して他のフォームのインスタンスの作成および表示を行うには、表示する名前を指定してロードボタンをクリックします。入力するフォーム名は、直前に作成したフォームの名前である必要があります。
BEGIN_COM HEIGHT(123) LEFT(296) TOP(120) WIDTH(209) DEFINE_COM CLASS(#STD_OBJ.Visual) NAME(#STD_OBJ) CAPTION('Form to Load:') DISPLAYPOSITION(1) HEIGHT(19) LABELTYPE(Caption) LEFT(8) MARGINLEFT(80) PARENT(#COM_OWNER) TABPOSITION(1) TOP(8) WIDTH(161) DEFINE_COM CLASS(#PRIM_PHBN) NAME(#PHBN_1) CAPTION('Load') DISPLAYPOSITION(2) LEFT(16) PARENT(#COM_OWNER) TABPOSITION(2) TOP(45)   * form collection counter and form collection define #FormTot Reffld(#STD_NUM) default(0) DEFINE_COM CLASS(#PRIM_KCOL) NAME(#FORMS) COLLECTS(#PRIM_FORM) KEYEDBY(#STD_NUM) STYLE(Collection)   define #Position Reffld(#STD_NUM) default(1)   EVTROUTINE HANDLING(#PHBN_1.Click) Change #FormTot '#FormTot  1' * call the LoadForm method, pass it the name of the form to be instantiated and return a reference to it. Invoke #COM_OWNER.LoadForm FormName(#Std_Obj) FormReference(#Forms<#FormTot>) ENDROUTINE   Mthroutine LoadForm * receive the name of the form and return a reference of the form instance which has been created Define_map *input  #Std_Obj    #FormName Define_map *output #prim_form  #FormReference pass(*by_Reference)   *Create an instance of the named form and set reference to it Set_Ref #FormReference (*Create_from #FormName.Value)   Set #FormReference Left(#Position) Top(#Position) Change #Position '#Position  10'   Invoke #FormReference.ShowForm Endroutine END_COM  
[ |../../index.htm#lansa/define_mapinmthroutine.htm]

  • No labels