Page History
...
You could define a method to fetch details for an employee on the form. The method accepts the employee number (#curemp) as input and returns a transaction number (#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
An owner form of this form can now ask it to execute this method. It passes the current value of the #empno field and receives the transaction number. The value of the transaction number is assigned to a field #TRANSA on the owner form.
...
EVTROUTINE HANDLING(#MOVETO.Click)
...
invoke #frmdetail.GetInfo curemp(#empno) trnno(#transa)
...
ENDROUTINE
Example 2
In this example form the Click event of the push button invokes the method LoadForm, passing the name of a form to be displayed and returning a reference to the created form instance.
Try copying and pasting this source code to a form component and compile it. Execute the form and use it to create and display instances of other forms by specifying the name of the form to be displayed and clicking the Load button. The form name entered must be the name of a previously created form.
...
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