Skip Headers
Oracle® Application Development Framework Developer's Guide For Forms/4GL Developers
10g (10.1.3.1.0)

Part Number B25947-01
Go to Documentation Home
Home
Go to Book List
Book List
Go to Table of Contents
Contents
Go to Index
Index
Go to Master Index
Master Index
Go to Feedback page
Contact Us

Go to previous page
Previous
Go to next page
Next
View PDF

18.2 Creating a EnterQuery/ExecuteQuery Search Form

You can create a form that allows users to enter search criteria, execute the search, and then review the results of the search in the same form. However, if the search form includes data types that are other than strings, you will need to create two forms that will act as one: one for the search form, and one for the results.

To do this, you set the form used to enter the search criteria to display only when the iterator is in Find mode. You set the second form, which displays the results, to display only when the iterator is not in Find mode. You control the display of each using an EL expression for the Rendered attribute of the forms. This allows the user to enter in a criteria like > 1500 into a number field when the form is in Find mode, but the same entry will raise an error when the user is editing data.

18.2.1 How to Create an EnterQuery/ExecuteQuery Search Page

As stated above, you actually create two forms, one for the query and one for the results. EL expressions are used to determine when to display the correct form.

  1. From the Data Control Palette, drag a collection and from the context menu, select Forms > ADF Search Form.

    For example, if you want the query to execute over all service requests, you would drag the ServiceRequests collection.

  2. Drag the same collection, but this time, drop it as an ADF Form. Select Include Navigation Controls in the Edit Form Fields dialog. This will be the form that displays the results. The navigation controls will allow the user to navigate through the objects returned from the query.

  3. In the Structure window, select the panelForm component for the first form.

  4. In the Property Inspector, in the Rendered field, enter the following expression, replacing <iterator> with the name of the iterator:

    #{bindings.<iterator>.findMode == true}
    
    

    This will cause the form to be rendered whenever the iterator is in Find mode.

    If you are unsure of the name, you can use the Bind to Data tool to open the Expression Builder, as shown in Figure 18-2.

    Figure 18-2 Clicking to Open the Bind to Data Tool

    Bind To Data tool is in the Property Inspector toolbar

    In the Variables tree of the Expression Builder, select the findMode property under the correct iterator, and click the right arrow to add it to the Expression pane. You then add the logical operator and set the expression to check for true. Figure 18-3 shows the expression that would be built for the ServiceRequestsIterator iterator.

    Figure 18-3 Expression Builder Used to Set the Rendered Attribute

    The Expression Builder has the Rendered attribute selected
  5. In the Structure window, select the panel form for the second form. Set the Rendered property to:

    #{bindings.<iterator_name>.findMode == false}
    
    

    This expression will cause this form to be displayed whenever the iterator is not in Find mode.

  6. From the Data Control Palette, drag the Find operation associated with the collection and drop it as an ADF Command Button next to the navigation buttons in the second form. This button allows the user to toggle back into Find mode. Doing so will display the first form, so that the user can execute another query.

  7. Rename the Find and Execute buttons to something more meaningful for the user. For example, you might rename the Find button in the top form to Cancel Query, since clicking this button will cause the iterator to toggle out of Find mode. You might rename the Execute button in the top form to Execute Query. Lastly, you might rename the bottom Find button to Enter Query, as that button will be used to place the iterator into Find mode, thereby causing the top form to display.

18.2.2 What Happens When You Create a Search Form

When you drop a search form onto a page, JDeveloper includes a command button bound to the Find operation and a command button bound to the Execute operation, as shown in Example 18-1. The Find operation places the associated iterator into Find mode. The Execute operation executes the query and places the iterator out of Find mode.

Example 18-1 Page Definition Code for Find and Execute Operations

<action id="Find" RequiresUpdateModel="true" Action="3"
            IterBinding="ServiceRequestsIterator"/>
<action id="Execute" RequiresUpdateModel="true" Action="2"
            IterBinding="ServiceRequestsIterator"/>

The following table shows the built-in search operations, along with the result of invoking the operation.

Table 18-1 Search Built-in Operations

Operation Action Attribute Value When invoked, the associated iterator binding will...

Find

3

Places the associated iterator into Find mode, allowing it to iterate over criteria instead of data.

Execute

2

Applies the criteria and executes the query using the criteria from the iterator when in Find mode. Toggles the associated iterator out of Find mode, so that the iterator can work with the results.


Additionally when you drop an ADF Search Form, JDeveloper adds an outputText component inside the panelGroup component that holds the Find and Execute buttons. This outputText component displays the words Find Mode whenever the iterator is in Find mode. This is used mostly for development purposes, allowing you to be able to easily determine when the iterator is in Find mode. You can safely delete this component.