フィールド名
SECTION(Alpha 2)
説明
フィールドをグリッド内に再利用可能パーツとして表示します。
リスト内のフィールドを、再利用可能パーツとして編集できます。まず、再利用可能パーツを作成します。動作させるためには、省略値プロパティを設定しておく必要があります。
サンプルの作成方法
1. SECTIONという名前で再利用可能パーツを作成します。下記のコードを貼り付けてください。
2. フォームを作成し、下記に示す、フォームのコードをコピーしてください。これをコンパイル、実行します。
動作
作成した再利用パーツはガイドラインに従っていなければなりません。以下のようにプロパティを設定し、これを再利用可能パーツの省略時プロパティとしてください(例:Defaultpty(Section))。
Define_Pty Name(Section) Get(Get_Section) Set(Set_Section)
このプロパティには、グリッド内のセルを選択した時点で、フィールド値が設定されます。これを利用すると、実際にフォームを表示する前に、正しいセクションが選択されているかどうか確認することができます。
正しければ画面に表示が現れ、ユーザーが新しいセクションを追加できるようになります。セルに与える新しい値が必要な場合は、プロパティ値を取得するためにあらかじめ組み込まれている、Getルーチンを使って取得します。
グリッドをコミットする際は、同じGetルーチンを呼び出して再利用可能パーツの値を取得し、内容を更新します。
再利用可能パーツのソース(SECTIONR)
Function Options(*DIRECT)
Begin_Com Role(*EXTENDS #PRIM_PANL) Defaultpty(Section) Displayposition(1) Height(68) Layoutmanager(#ATLM_1) Left(0) Tabposition(1) Top(0) Width(224)
* Reusable consists of a combo box with a client layout item attachment
Define_Com Class(#PRIM_CMBX) Name(#SECT_CBX) Displayposition(1) Fixedheight(False) Height(68) Left(0) Parent(#COM_OWNER) Tabposition(1) Top(0) Width(224)
Define_Com Class(#PRIM_CBCL) Name(#CBCL_1) Displayposition(1) Parent(#SECT_CBX) Source(#SECTION) Width(20)
Define_Com Class(#PRIM_ATLM) Name(#ATLM_1)
Define_Com Class(#PRIM_ATLI) Name(#ATLI_1) Attachment(Center) Manage(#SECT_CBX) Parent(#ATLM_1)
Define_Pty Name(Section) Get(Get_Section) Set(Set_Section)
Evtroutine Handling(#COM_OWNER.Initialize) Options(*NOCLEARMESSAGES *NOCLEARERRORS)
* Select all entries from PSLMST and add to our combo box
Select Fields(#SECTION) From_File(PSLMST)
Add_Entry To_List(#SECT_CBX)
Endselect
Endroutine
Ptyroutine Name(Get_Section)
Define_Map For(*output) Class(#SECTION) Name(#o_section)
* Default property Get.
*
* Get_Entry on the combo box focus item and set the return value
If_Ref Com(#SECT_CBX.focusitem) Is_Not(*NULL)
Change Field(#STD_NUM) To('#SECT_CBX.FOCUSITEM.ENTRY')
Get_Entry Number(#STD_NUM)
Endif
Set Com(#o_section) Value(#SECTION)
Endroutine
Ptyroutine Name(Set_Section)
Define_Map For(*input) Class(#SECTION) Name(#i_section)
* Default property Set.
*
* Select_List on Combo and set focus to mathing item from input
Selectlist Named(#SECT_CBX)
If Cond('#SECTION *ne #I_SECTION')
Continue
Endif
Set Com(#SECT_CBX.currentitem) Focus(true) Selected(true)
Endselect
Endroutine
End_Com
フォームのソース
Function Options(*DIRECT)
Begin_Com Role(*EXTENDS #PRIM_FORM) Clientheight(147) Clientwidth(492) Height(174) Left(369) Top(152)
Define_Com Class(#PRIM_GRID) Name(#GRID) Captionnoblanklines(True) Columnbuttonheight(17) Componentversion(1) Displayposition(2) Height(128) Left(40) Parent(#COM_OWNER) Showbuttonselection(True) Showselection(True) Showselectionhilight(False) Showsortarrow(True) Tabposition(2) Top(8) Width(344)
Define_Com Class(#PRIM_GDCL) Name(#GDCL) Displayappearance(Edit) Displayposition(1) Editappearance(ReusablePart) Editorpart(#SECTIONR) Parent(#GRID) Readonly(False) Source(#SECTION) Width(30)
Define_Com Class(#SECTIONR) Name(#SECTIONR) Height(17) Left(8) Parent(#COM_OWNER) Tabstop(False) Top(8) Width(25)
Evtroutine Handling(#COM_OWNER.CreateInstance) Options(*NOCLEARMESSAGES *NOCLEARERRORS)
Select Fields(#SECTION) From_File(PSLMST)
Add_Entry To_List(#GRID)
Endselect
Endroutine
End_Com
外観
再利用可能パーツの内容を、例えば特定の部門に関するものだけに絞り込みたい場合は、Grid.Changedイベントが発生したときに呼び出される、イベント・ハンドラーを追加してください。ハンドラーは、再利用可能パーツの他のプロパティも使って、この部門に関するものだけを選択し、表示を更新します。