In this step, you will create method routines which search by invoking the xEmployeeDataServer's srvroutine SQLName and SQLDate , depending on the SearchType selected.
1. Copy the list definition xEmployeeList, and the Group_By xEmployee from the Server Module iiixEmployeeDataServer and paste into the web page.
2. Create a Method routine, named NameSearch with two inputs:
An input of class STD_OBJ, named NameType
An input of class iiiSearchName, named Name.
Your code should look like the following:
Mthroutine Name(NameSearch)
Define_Map For(*INPUT) Class(#std_obj) Name(#NameType)
Define_Map For(*INPUT) Class(#iiiSearchName) Name(#Name)
Endroutine
3. Complete the NameSearch logic based on the following:
Define a component for xEmployeeDataServer's SQLName srvroutine, named SQLName.
Execute SQLName asynchronously, exchanging iiiSearchName, NameType, list xEmployeeList and field IO$STS.
Within an event routine SQLName.Completed
Clear the list EmployeeList
Select all entries in list xEmployeeList
Assign STD_CODEL the value xEmployeeIdentification
Assign iiiFullName the value xEmployeeSurname plus ', ' plus xEmployeeGiveNames
Add each entry to the list EmployeeList
End Selectlist
Get the first entry from list EmployeeList
If EmployeeList.currentItem is_not null
Set focus to EmployeeList, current item.
Assign the group_by xEmployee to null.
Your srvroutine should look like the following:
Mthroutine Name(NameSearch)
Define_Map For(*INPUT) Class(#std_obj) Name(#NameType)
Define_Map For(*INPUT) Class(#iiiSearchName) Name(#Name)
Define_Com Class(#iiixEmployeeDataServer.SQLName) Name(#SQLName)
#SQLName.ExecuteAsync( #Name #NameType #xEmployeeList #IO$STS )
Evtroutine Handling(#SQLName.Completed)
Clr_List Named(#EmployeeList)
Selectlist Named(#xEmployeeList)
#std_codel := #xEmployeeIdentification
#iiiFullName := #xEmployeeSurname.trim + ', ' + #xEmployeeGivenNames.trim
Add_Entry To_List(#EmployeeList)
Endselect
Get_Entry Number(1) From_List(#EmployeeList)
If (#EmployeeList.CurrentItem *IsNot *null)
#EmployeeList.CurrentItem.Focus := true
Endif
#xEmployee := *null
Endroutine
Endroutine
Note: EmployeeList.CurrentItem is a reference to the current list item object. The *ISNOT *NULL operator tests for a null reference.
4. Create a Method routine, named MonthSearch based on the following:
Map for input of class iiiSearchMonth, name SearchMonth
Define a component for xEmployeeDataServer's SQLDate srvroutine, name MonthSearch.
Clear the list EmployeeList
Execute MonthSearch asynchronously exchanging SearchMonth, list xEmployeeList and IO$STS.
Within an event routine for MonthSearch.Completed
Select all records in list xEmployeeList
Assign STD_CODEL the value xEmployeeIdentification
Assign iiiFullname the value xEmployeeSurname plus ', ' plus xEmployeeGiveNames.
Add each entry to list EmployeeList
End of selectlist
Get first entry in list EmployeeList
If EmployeeList.currentItem is not null
Set focus to EmployeeList, current item.
Assign Group_By xEmployee value null.
Your code should look like the following:
Mthroutine Name(MonthSearch)
Define_Map For(*INPUT) Class(#iiiSearchMonth) Name(#Month)
Define_Com Class(#iiixEmployeeDataServer.SQLdate) Name(#MonthSearch)
Clr_List Named(#EmployeeList)
#MonthSearch.ExecuteAsync( #Month #xEmployeeList #IO$STS )
Evtroutine Handling(#MonthSearch.Completed)
Selectlist Named(#xEmployeeList)
#std_codel := #xEmployeeIdentification
#iiiFullName := #xEmployeeSurname.trim + ', ' + #xEmployeeGivenNames.trim
Add_Entry To_List(#EmployeeList)
Endselect
Get_Entry Number(1) From_List(#EmployeeList)
If (#EmployeeList.CurrentItem *IsNot *null)
#EmployeeList.CurrentItem.Focus := true
Endif
#xEmployee := *null
Endroutine
Endroutine
5. The SearchType dropdown was loaded with three entries which define the type of search, as shown in this table:
|
6. Complete the event handling routine for Search.Click, based on the following:
Variable TypeSearch is set by the SearchType.ItemGotFocus event routine.
Using a CASE loop for TypeSearch, invoke routine MonthSearch or NameSearch as required, passing iiiSearchMonth or iiiSearchName:
Your code should look like the following:
Evtroutine Handling(#Search.Click)
Case Of_Field(#TypeSearch)
When (= MONTH)
#COM_SELF.MonthSearch( #SearchMonth )
When (= BEGIN)
#com_self.NameSearch( #TypeSearch #SearchName )
When (= CONTAINS)
#com_self.NameSearch( #TypeSearch #SearchName )
Endcase
Endroutine
7. Compile and test your web page.
A Name Beginning search, with the value of S should return a number of employees with surname beginning S. Remember the surname and given name fields contain proper case text. The Name beginning search value should be proper case. You could improve your logic by converting the first letter in this search value to uppercase.
#iiiSearchName := #iiiSearchName.leftmost.uppercase
A Name Contains search with the value of rl should return employee Charles, Harris.
A Month search for employees with a date of birth in February should return a number of employees.