Step 4 Add More Functionality to the Reusable Part

Visual LANSA

Step 4. Add More Functionality to the Reusable Part

At this stage, the departments reusable part is not that useful. It can display a list of departments and lets the user choose one, but nothing is done with the result. You actually need the reusable part to be able to:

  • Change the department that is currently selected.
  • Tell what department is currently selected.
  • Tell when the selected department is changed.

Since all LANSA components have a standard property, event and method interface you will have to make your reusable part perform these required state changes and activities via these interfaces.

A single property named uCurrDepartment and a single event named uDepartmentChanged will do the job.

Implement the uDepartmentChanged Event

1.  Edit the reusable part so that whenever focus changes in the combo box it signals the uDepartmentChanged event. Define the event like this:

define_evt uDepartmentChanged help('This event is signaled when the  department selection is changed')

 

2.  Signal the event like this: 

EVTROUTINE HANDLING(#COMBOBOX.ItemGotFocus) 

Signal uDepartmentChanged 

ENDROUTINE

 

Implement the uCurrDepartment Property

Edit the reusable part to define property named uCurrDepartment which:

  • Supports get operations by returning the value of field #DEPTMENT
  • Supports set operations by setting the value of field #DEPTMENT and moving the focus in the combo box to the selected department.

1.  To do this you need to define the property like this:

define_pty name(uCurrDepartment) get(*auto #deptment) set(SetDepartment) 

 

2.  And then add the property SetDepartment property routine like this:

PTYROUTINE SetDepartment
define_map for(*input) class(#deptment) name(#sdeptment)
selectlist #combobox
   continue if('#deptment *ne #sdeptment.Value') 
   set #ComboBox.CurrentItem Focus(True) 
   return
endselect
ENDROUTINE

 

3.  Compile the new version of your reusable part.

Use the New Properties and Events in your Form

1.  Edit the test form so that when details of employee are fetched you need to tell the reusable part to show the details of the new department by adding a single line like this:

Set #II_RVP29A uCurrDepartment(#deptment)

 

     You also need to monitor for changes in the visual component. Whenever it signals uDepartmentSelected event you need to change the value of field #DEPTMENT using a routine like this: 

EVTROUTINE HANDLING(#II_RVP29A.uDepartmentChanged)
Change #deptment #II_RVP29A.uCurrDepartment
ENDROUTINE

 

2.  Finally, you should make field #DEPTMENT on your form ReadOnly(True) so that it cannot be changed via the user interface. In reality you would not normally even put field #DEPTMENT onto the form, but for purposes of this exercise it is useful because it allows you to see what is going on.

3.  Recompile the test form.

4.  Test your new version of the form. You should find that the reusable part switches to the correct department whenever you fetch details of an employee, and then whenever you select a department in the combo box that the value is instantly reflected in your form. 

Ý 6.20 Reusable Parts