Search Dialogs in Prompt Lists

Modal Dialog Processing

Session Management and Login

 

This adds support for a search dialog in our prompt lists. This is all handled by pbAutoSearch, Search, OnSearch and RequestColumnLookup along with a little help from DDSetChangedValue.

cWebList

 

Procedure OnSearch String sSearchText

This is called by the client's JavaScript engine to perform a search on an automatic data aware list (peDbGridType = gtAutomatic and pbDataAware = true).

It performs a lookup search on the passed value based on the current sort column (piSortColumn). It does this by sending RequestColumnLookup to the appropriate column object, which will find the target record and refresh the list.

 

cWebColumn

 

Procedure RequestColumnLookup String sSearchText

Performs a lookup find and list refresh based on the contents of the DD buffer plus the value of this search  text. This is used by prompt lists to search for a value.

 

cWebBaseDEO

 

Procedure DDSetChangedValue String sValue

Sets the Field_Changed_State of the DDO and field that is associated with this DEO. This is used by cWebColumn's RequestColumnLookup method. Because the DD's value is set, this DEO will also be updated with the value. This is really just a helper function that lets you set a DD field value without having to get the Server, Data_File, Data_Field, etc.

Important:

This is the recommended way of change the value of an data-bound web DEO during a web request. You should not use "WebSet psValue" or "WebSet pbChanged" to do this because those changes are not propagated to the DDO until the next server round trip (and maybe not even then). You should only "WebSet psValue" with non-data aware web DEO controls. If the DEO control has data-binding use DDSetChangedValue.

For example:

    // does a lookup style find for the passed column based on the value of the search text

    // This is used when you are doing lookup/searches

    Procedure RequestColumnLookup String sSearchText

        Send DDSetChangedValue sSearchText

        Send Request_Find GE

        If not Found Begin

            Send Request_Find LT

        End

    End_Procedure

 

In addition, here are the other methods with information about searching a cWebList.

 

cWebList

 

Property Boolean pbAutoSearch True

If true the search dialog will popup automatically when the user starts typing. Upon completion the list will search for that value. If the list is manual and static, the popup and the search occurs on the client. If the list is automatic (peDbGridType = gtAutomatic and pbDataAware = true), the search must take place on the server by searching for the data from your database. The client does this by sending the OnSearch event  to the cWebList object passing the search text. A search dialog can also be invoked by sending the Search message from the server.

Procedure Search

This sends the showSearch client action to the client. This will cause the client to popup the search dialog for the cWebList based around the current sort column (piSortColumn). For example, this button object, added to a prompt list dialog, would invoke a search dialog when clicked.

        Object oSearch_btn is a cWebButton

            Set psCaption to C_$Search

            Set piColumnIndex to 0

            Procedure OnClick

                Send Search of oPromptList

            End_Procedure

        End_Object     

 

Note: In doing this we realized that using WebSet to set a DEO's psValue or pbChanged does not update the DDO object. This is different than Windows where setting Value in a DEO updates the DDO. We expect that people will bump into this. Web Properties don't have getters and setters so it is hard to augment them.  We could add special code for psValue and pbChanged but we kind of hate to add more exceptions. One could create their own custom method that would do this but you are not likely to know about this until you've made the mistake. For now we felt the best thing to do is to tell developers that they should always update their DDO field values directly and never attempt to do this via WebSet psValue. You would only use WebSet psValue with non-data bound controls. To make this a little bit easier, we created the DDSetChangedValue for DEOs that allows you to set a DEO's field value with a single line of code.

 

Previous Topic: Modal Dialog Processing

Next Topic: Session Management and Login

 

See Also

Developing Web Applications