PK 6(Aoa,mimetypeapplication/epub+zipPK6(AiTunesMetadata.plistW artistName Oracle Corporation book-info cover-image-hash 26429597 cover-image-path OEBPS/dcommon/oracle-logo.jpg package-file-hash 169572621 publisher-unique-id E11947-02 unique-id 667169299 genre Oracle Documentation itemName Oracle® Application Express Application Builder User's Guide, Release 3.2 releaseDate 2012-04-27T05:39:44Z year 2012 PKW|\WPK6(AMETA-INF/container.xml PKYuPK6(AOEBPS/cover.htmO Cover

Oracle Corporation

PK[pTOPK6(AOEBPS/bldr_pgs.htm Working with Application Pages

5 Working with Application Pages

This section provides important background information about creating and managing pages within and application.

This section contains the following topics:

About the Page Definition

A Page Definition is the basic building block of a page. Each page can have buttons and fields (called items), which are grouped into containers called regions. Pages can also have application logic (or processes). You can branch from one page to the next using conditional navigation; perform calculations (called computations); perform validations (such as edit checks); and display reports, calendars, and charts. You view, create, and edit the controls that define a page by accessing the Page Definition.

Topics in this section include:

Accessing a Page Definition

You can view, create, and edit the controls that define a page through the Page Definition.

To access the Page Definition for an existing page:

  1. On the Workspace home page, click the Application Builder icon.

    The Application Builder home page appears.

  2. Select an application.

    The Application home page appears.

  3. Select a page.

    The Page Definition appears.

Understanding the Page Definition

A Page Definition is the basic building block of a page. You use the Page Definition to view, create, and edit the controls and application logic that define a page. The sections that follow describe the different parts of the Page Definition.

Topics in this section include:

Available Navigation Bar Controls and Buttons

A navigation bar appears directly beneath the breadcrumb trail.

Description of pg_def_top.gif follows
Description of the illustration pg_def_top.gif

Available controls on the page navigation bar include:

  • Page. Displays the current page number. To view another page, enter the page number in the Page field and click Go.

  • Previous and Next. These buttons resemble less than (<) and greater than (>) signs. Click these buttons to move to the previous or next page.

  • View. Controls the current page view. To view alternative reports, make a selection from the list and click Go. See "Using the View List on the Page Definition".

The following buttons appear to the right of the navigation bar:

About the Action Bar

The Run Page, Shared Components, Comment, Lock, Export Page, and Find icons display on the Action bar.

Description of pg_def_icons.gif follows
Description of the illustration pg_def_icons.gif

Run Page Icon

The Run Page icon resembles a small, light green traffic light. Click this icon to render the current page into viewable HTML. When you run a page, the Application Express engine dynamically renders the page based on data stored in the database. See "Running a Page or Application".

Shared Components Icon

The Shared Components icon resembles a small mechanical gear. Click this icon to view a list of shared components and user interface controls that can display or be applied on every page within an application. See "Working with Shared Components".

Developer Comment Icon

The Developer Comment icon resembles a green balloon. Use this icon to add comments to an application, a page, or a group of pages. See "Adding Developer Comments".

Lock Icon

The Lock icon indicates whether a page is available for editing. If a page is unlocked, the icon appears as an open padlock. If the page is locked, the icon appears as a locked padlock. Click this icon to change the lock status. See "Locking and Unlocking a Page".

Export Page Icon

The Export Page icon resembles a downward arrow. Click this icon to export the current page. See "Exporting a Page in an Application".

Find Icon

The Find icon resembles a flashlight. Click this icon to search for items, pages, queries, tables, PL/SQL, images, and cascading style sheets (CSS) within the current application or the schemas associated with the workspace. See "Using the Find Icon".

About Page Rendering, Page Processing, and Shared Components

Every Page Definition is divided into three sections:

  • Page Rendering. Page rendering is the process of generating a page from the database. The Page Rendering section lists user interface controls and logic that execute when a page is rendered. See "About Page Rendering".

  • Page Processing. Page processing occurs once a page is submitted. Typically a page is submitted when a user clicks a button. The Page Processing section lists logic controls (such as computations and processes) that are evaluated and executed when the page is processed. See "About Page Processing".

  • Shared Components. The Shared Components section lists common components that can be used by one or more pages within an application. See "About Shared Components".

Using the View List on the Page Definition

You can use the View list to quickly switch from a Page Definition to the Page Events, Database Object Dependencies, History, Export, Groups, and Referenced Components pages.

Description of pg_def_view_list.gif follows
Description of the illustration pg_def_view_list.gif

Topics in this section include:

Accessing the View List on the Page Definition

To access other pages using the View list:

  1. Navigate to the Workspace home page.

  2. Click the Application Builder icon.

  3. Select an application.

  4. Select a page.

    The Page Definition appears.

  5. From the View list, select one of the following:

About Page Events

Page Events details all currently defined page controls and processes. This page provides a chronological view of how and in what order the Application Express engine renders the page, invokes logic, and runs processes.

A navigation bar appears directly beneath the breadcrumb trail. Available controls include:

  • Page. Displays the current page number. To view another page, enter the page number in the Page field and click Go.

  • View. Controls the current page view. To view alternative reports, make a selection from the list and click Go. See "Using the View List on the Page Definition".

  • Show All displays all possible page controls and processes, including those not currently defined.

  • Show Used displays currently used page controls and processes (Default).

  • Previous and Next. These buttons resemble less than (<) and greater than (>) signs. Click these buttons to move to the previous or next page.

To view details about a specific page control or process, click the appropriate hypertext link. Alternately, you can create page controls and processes by clicking the small icons to the left of each entry.

About Database Object Dependencies

The Database Object Dependencies page displays a list of database objects referenced by the current page.

A navigation bar appears directly beneath the breadcrumb trail. Available controls include:

  • Page. Displays the current page number. To view another page, enter the page number in the Page field and click Go.

  • View. Controls the current page view. To view alternative reports, make a selection from the list and click Go. See "Using the View List on the Page Definition".

  • Previous and Next. These buttons resemble less than (<) and greater than (>) signs. Click these buttons to move to the previous or next page.

About History

The History page displays a history of recent changes to the currently selected page by developer (or user), application, page number, modification date, component, and action.

A navigation bar appears directly beneath the breadcrumb trail. Available controls include:

  • Page. Displays the current page number. To view another page, enter the page number in the Page field and click Go.

  • View. Controls the current page view. To view alternative reports, make a selection from the list and click Go. See "Using the View List on the Page Definition".

  • Display. Determines how many pages display. To change the number of pages that appear, make a selection from the Display list and click Go.

  • Previous and Next. These buttons resemble less than (<) and greater than (>) signs. Click these buttons to move to the previous or next page.

About Export

Use the Export page to export the current page and its referenced components. A navigation bar appears directly beneath the breadcrumb trail. Available controls include:

  • Page. Displays the current page number. To view another page, enter the page number in the Page field and click Go.

  • View. Controls the current page view. To view alternative reports, make a selection from the list and click Go. See "Using the View List on the Page Definition".

About Groups

The Groups page displays all pages that are part of the same page group as the current page. Click a page number to edit the page group. Click a page name to view the page definition.

A navigation bar appears directly beneath the breadcrumb trail. Available controls include:

  • Page. Displays the current page number. To view another page, enter the page number in the Page field and click Go.

  • Display. Determines how many pages display. To change the number of pages that appear, make a selection from the Display list and click Go.

  • View. Controls the current page view. To view alternative reports, make a selection from the list and click Go. See "Using the View List on the Page Definition".

About Referenced

The Referenced Components page lists page components and shared components associated with the current page.

A navigation bar appears directly beneath the breadcrumb trail. Available controls include:

  • Page. Displays the current page number. To view another page, enter the page number in the Page field and click Go.

  • View. Controls the current page view. To view alternative reports, make a selection from the list and click Go. See "Using the View List on the Page Definition".

  • Previous and Next. These buttons resemble less than (<) and greater than (>) signs. Click these buttons to move to the previous or next page.

Editing a Page Definition

A page is the basic building block of an application. Each page has a page number, a name, and typically some text attributes such as a header, title, and footer. You add content to your page by creating page controls (regions, items, and buttons). Page templates and page region templates control the exact look and feel of each page.

Topics in this section include:

About the Edit All Icon

Each Page Definition is divided into three sections: Page Rendering, Page Processing, and Shared Components. Each of these sections is broken into subsections with headings that identify the type of control, component, or application logic.

You can edit all controls, components, or logic within a given subsection by clicking the Edit All icon that displays to the right of the subsection title. The Edit All icon resembles a small grid with a pencil on top of it.

Description of pg_def_editall_ico.gif follows
Description of the illustration pg_def_editall_ico.gif

Clicking the Edit All icon displays pages that enable you to edit or delete multiple controls, components, or application logic simultaneously or view a history of recent changes.

For example, selecting the Edit All icon under Regions displays a summary report of all currently defined regions on the current page. You can use this summary view to:

  • Edit the multiple attributes at once by making selections from the available fields and select lists.

  • Link to a definition page by clicking the Edit icon.

You can access similar summary views on the next or previous page by clicking the Next and Previous buttons at top of each page. To save your edits to any summary view, click Apply Changes.

You can also view the attributes of a specific control or component by selecting its name on the Page Definition. For example, suppose your Page Definition contains a region named Customers. Clicking the region name Customers would display an attributes page for that region.

About the Copy or Create Icons

You can copy or create controls or components by clicking the Copy and Create icons. The Copy icon resembles two small overlapping pages. Click the Copy icon to make a copy of an existing control or component.

Description of pg_def_copy_ico.gif follows
Description of the illustration pg_def_copy_ico.gif

The Create icon resembles a plus (+) sign overlapping a small page. Click the Create icon to create a control or component.

Description of pg_def_create_ico.gif follows
Description of the illustration pg_def_create_ico.gif

Reordering Page Components

You can quickly change the order in which regions, button, and items display using the Reorder icon on the Page Definition. The Reorder icon displays as a light green downward arrow and upward arrow.

Description of reorder_regions.gif follows
Description of the illustration reorder_regions.gif

To reorder page components, click the Reorder icon. When the Reorder page appears click the up and down arrows and then click Apply Changes.

About Page Rendering

Page rendering is the process of generating a page from the database. Use the Page Rendering section to modify controls that impact the rendering of a page, including page attributes, regions, buttons, items, page rendering computations, and page processes.

Description of page_rendering.gif follows
Description of the illustration page_rendering.gif

You can quickly navigate to a specific subsection by clicking the icons beneath the heading. When you select one of these icons, the subsection appears and all other subsections are temporarily hidden. To restore the view, click Show All. The Show All icon resembles an inverted triangle.

Topics in this section include:

Page

Page attributes control specific characteristics of a page such as the page name, display attributes such as the page title and the associated page template, header text, and the selected authorization scheme to name just a few. You access page attributes from the Page Definition.

Regions

A region is a area on a page that serves as a container for content. Each page can have any number of regions. The content of a region is determined by the region source. For example, a region may contain a report based on a SQL query you define, or it may contain static HTML.

You control the appearance of a region through a specific region template. You can use regions to group page controls (such as items or buttons). You can also create simple regions that do not generate additional HTML, or create elaborate regions that frame content within HTML tables or images.


See Also:


Buttons

As you design your application, you can use buttons to direct users to a specific page or URL, or to enable users to submit a page. When you submit a page, the Application Express engine posts or processes information. A button can be implemented as an HTML button, an image, or by using a template. Buttons can be placed in predefined region template positions or among items in a form.


See Also:

"Creating Buttons"

Items

Items are HTML form elements such as text fields, select lists, and check boxes with an associated session state. Item attributes affect the display and behavior of items on a page. For example, these attributes can impact where a label displays, how large an item will be, and whether the item will display next to, or below the previous item.

There are two categories of items: page items and application items. Page-level items are placed on a page and have associated user interface properties, such as Display As, Label, and Label Template. Application-level items are not associated with a page and therefore have no user interface properties. An application item can be used as a global variable.

Computations

Computations are units of logic used to assign session state to items. You can use computations to assign a value to an identified item when a page is submitted or displayed.

Application-level computations assign a value to an item each time a page is rendered. A page-level computation assigns a value to an identified item when a page is displayed or submitted (rendered and processed).

Processes

Processes are logic controls used to execute data manipulation language (DML) or PL/SQL. For example, you can use a process to populate session state at the time a page is rendered, to execute some type of logic (for example, using PL/SQL), or to make a call to the rendering engine. Typically a process performs an action. A process may be hand coded PL/SQL, or the invocation of a predefined process.

About Page Processing

Page processing is the process of submitting a page. A page is typically submitted when a user clicks a button. Use the Page Processing section of the Page Definition to specify application logic such as computations, validations, processes, and branches. In general, the Application Express engine runs this logic in the order it appears on the Page Definition.

Description of page_processing.gif follows
Description of the illustration page_processing.gif

You can quickly navigate to a specific subsection by clicking the icons beneath the heading. When you select one of these icons, the subsection appears and all other subsections are temporarily hidden. To restore the view, click Show All. The Show All icon resembles an inverted triangle.

Topics in this section include:

Computations

Computations are units of logic used to assign session state to items and are executed at the time the page is processed.

Validations

Validations enable you to create logic controls to verify whether user input is valid. For example, a validation can check whether a value has been entered into a mandatory field.

Processes

Processes are logic controls used to execute data manipulation language (DML) or PL/SQL. Processes are executed after the page is submitted.

Branches

Branches enable you to create logic controls that determine how the user navigates through the application.

About Shared Components

The Shared Components section of the Page Definition contains common elements that can display or be applied on any page within an application.

Description of shared_components.gif follows
Description of the illustration shared_components.gif

You can quickly navigate to a specific subsection by clicking the icons beneath the heading. When you select one of these icons, the subsection appears and all other subsections are temporarily hidden. To restore the view, click Show All. The Show All icon resembles an inverted triangle.

Topics in this section include:

Tabs

Tabs are an effective way to navigate between pages of an application. Application Builder includes two types of tabs: standard tabs and parent tabs.

An application having only one level of tabs uses a standard tab set. A standard tab set is associated with a specific page. You can use standard tabs to link users to other pages within your application. A parent tab set functions as a container to hold a group of standard tabs. Parent tabs give users another level of navigation and context (or sense of place) within the application.


See Also:

"Creating Tabs"

Lists of Values

A list of values (LOV) is a static or dynamic definition used to display a specific type of page item, such as a radio group, check box, or select list. LOVs can be static (that is, based on a set of predefined display and return values) or dynamic (based on SQL queries that select values from tables). Once created, an LOV can then be referenced by one or more page items.

You define LOVs at the application level by running the LOV Wizard and adding them to the List of Values repository.

Breadcrumbs

A breadcrumb is a hierarchical list of links that is rendered using a template. For example, you can display breadcrumbs as a list of links or as a breadcrumb path.

Lists

A list is a collection of links that is rendered using a template. For each list entry, you specify display text, a target URL, and other attributes that control when and how the list entry displays. You control the display of the list and the appearance of all list entries by linking the list to a template.


See Also:

"Creating Lists"

Theme

A theme is a named collection of templates that defines the application user interface. Each theme contains templates for every type of application component and page control, including individual pages, regions, reports, lists, labels, menus, buttons, and list of values.


See Also:

"Managing Themes"

Templates

Templates control the look and feel of the pages in your application. As you create your application, you specify templates for pages, regions, reports, lists, labels, menus, buttons, and popup lists of values. Groups of templates are organized into named collections called themes.

Security

You can provide security for your application by specifying an authorization scheme. Authorization is a broad term for controlling access to resources based on user privileges.

Navigation Bar

Use a navigation bar to link users to various pages within an application. Typically a navigation bar is used to enable users to log in, log out, or link to Help text. The location of a navigation bar depends upon the associated page template. A navigation bar icon enables you to display a link from an image or text. When you create a navigation bar icon you can specify an image name, text, display sequence, and target location (a URL or page).

Understanding Page Computations

Use page computations to assign a value to an identified item when a page is submitted or displayed. You can also use application-level computations to assign values to items. Most application-level computations are performed for every page in an application. In contrast, computations created at the page-level only execute when that page is rendered or processed.

Topics in this section include:

Creating a Page Computation

A page computation assigns a value to an identified item when a page is displayed or submitted (rendered and processed).You create a page computation by running the Create Page Computation Wizard. For each computation, specify the item for which you are creating the computation and a computation type.


See Also:

"Computations"

To create a page computation:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Under Computations, click the Create icon.

  3. For Item Location, select where the computation will execute and click Next. Location options include:

    • Item on this Page

    • Item on Another Page

    • Application Level Item

  4. For Item, select the item and computation point at which you would like to perform the computation:

    1. Compute Item - Select the item the computation will update.

    2. Sequence - Select the order of evaluation.

    3. Computation Point - Select the point at which the computation executes. The computation point On New Instance executes the computation when a new session (or instance) is generated.

    4. Computation Type - Select the method of computation you want to create.

    5. Click Next.

  5. In Computation, enter a computation that corresponds to the selected computation type and click Next.

  6. On Condition, you can choose to make the computation conditional. To make a computation conditional, make a selection from the Condition Type list and enter text in the expression fields.

  7. Click Create.

Understanding Computation Points and Computation Syntax

A good example of using computations can be illustrated by a page containing form fields for entering phone numbers. In this example, the phone number is stored in one database column; however, the data entry form breaks the phone number into three components: area code, prefix, and line number. In this example, the page items are called P10_AREA_CODE, P10_PREFIX, and P10_LINE_NUMBER.

Next, suppose you need to combine the values stored in these items into a single string. You could accomplish this by using an After Submit computation and store the combined values in an item called P10_PHONE_NUMBER.

To create a computation to store the combined values of P10_AREA_CODE, P10_PREFIX, and P10_LINE_NUMBER in new items:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Create a item named P10_PHONE_NUMBER to store the combined values of P10_AREA_CODE, P10_PREFIX, and P10_LINE_NUMBER. See "Differences Between Page Items and Application Items".

  3. Under Computations, click the Create icon.

  4. For Item Location, select Item on this Page and click Next.

  5. For Computation, select P10_PHONE_NUMBER.

  6. For Sequence, select the order of evaluation.

  7. For Computation, you have the option of creating one of the following computation types:

    1. Static Assignment:

      • For Computation Type, select Static Assignment and click Next.

      • Enter the following computation:

        (&P10_AREA_CODE.) &P10_PREFIX.-&P10_LINE_NUMBER.
        
      • Click Next.

    2. PL/SQL Function Body:

      • For Computation Type, select PL/SQL Function Body and click Next.

      • Enter the following computation:

        DECLARE
        l_return_value  VARCHAR2(300) DEFAULT NULL;
        BEGIN
            l_return_value :=
        '('||:P10_AREA_CODE||')'||:P10_PREFIX||'-'||:P10_LINE_NUMBER;
        RETURN l_return_value;
        END;
        
      • Click Next.

    3. SQL Query:

      • For Computation Type, select SQL Query and click Next.

      • Enter the following computation:

        SELECT '('||:P10_AREA_CODE||')'||:P10_PREFIX||'-'||:P10_LINE_NUMBER FROM DUAL
        
      • Click Next.

    4. PLSQL Expression:

      • For Computation Type, select PLSQL Expression and click Next.

      • Enter the following computation:

        '('||:P10_AREA_CODE||')'||:P10_PREFIX||'-'||:P10_LINE_NUMBER
        
      • Click Next.

  8. Click Create.

Editing Page Computation Attributes

Once you create a computation, you can edit it on the Edit Page Computation page.

To edit a page computation:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Under Computations, select the computation name.

    The Edit Page Computation page appears.

  3. Edit the appropriate attributes.

  4. Click Apply Changes.

Editing the Computation Point and Source

You control when a computation executes under the Computation Point attributes by specifying a sequence and a computation point. The computation point On New Instance executes the computation when a new session (or instance) is generated.

Under Source, enter an expression or query to compute an item's value. In the event a computation fails, you can optionally define an error message in the Computation Error Message field.

Creating Conditional Computations

You can make a computation conditional by making a selection from the Condition Type list and entering text in the expression fields.

Understanding Validations

You can define a validation declaratively by selecting a validation method. You enter the actual validation edit check in the Validation Messages field. Be aware that if a validation fails, subsequent page processes or computations will not occur. Also remember that the validation you enter must be consistent with the validation type you selected. For more information about validation types, see online Help.

Topics in this section include:

Creating a Validation

To create a validation:


Note:

Text entered for validations may not exceed 3,950 characters.

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Under Validations in Page Processing, click the Create icon.

    The Create Validation Wizard appears.

  3. Select a validation level:

    • Item level validations are specific to a single item.

    • Page level validations do not apply to any single item, but apply to an entire page.

  4. If you selected Item level validation, select the item to be validated and click Next.

  5. Select a validation method as described in Table 5-1.

    Table 5-1 Validation Methods

    Validation MethodDescriptions

    SQL

    Compares item values to data in the database.

    For example, you can use a SQL validation to verify whether a last name typed into a field exists in the database. In the following Exists SQL validation, the field is named P1_LAST_NAME and the table is named customers.

    SELECT 1 FROM customers 
    WHERE last_name = :P1_LAST_NAME
    

    PL/SQL

    Useful if you need complex logic to validate entered data.

    For example, suppose you need to create a validation for an address form that requires the user to enter a province if the address is not in the United States. You could create the validation as a Function Returning Boolean, using the following PL/SQL:

    BEGIN
      IF :P1_COUNTRY = 'US' AND :P1_PROVINCE IS NULL THEN
         RETURN FALSE;
      ELSE
        RETURN TRUE;
      END IF;
    END;
    

    You could also create the same validation implemented as a PL/SQL Expression as follows:

    NOT (:P1_COUNTRY='US' AND  :P1_PROVINCE IS NULL);
    

    Item Level Null

    Checks if an item's value in session state is null.

    For example, you could validate that the user enters a value in a field by creating an item validation and then selecting the validation method Item Not Null.

    Item String Comparison

    Compares the value of an item to a specific string.

    There are several string comparison validations that compare the value of an item to a literal string. For example, you select the validation type Item in Expression 1 is contained in Expression 2 to validate a user entry in a field against a list of values you provide.

    In Expression 1, enter the name of the item you want to validate without a colon. For example:

    P1_VALUE
    

    In Expression 2, enter a string of values you want to validate against. For example:

    ABC/DEF/GHI
    

    Regular Expression

    Regular expressions provide a method to describe text patterns. Use a Regular Expression validation to perform data validation.

    For example, you could use the following regular expression validation to verify that a string of entered data always consists of groups of six numbers separated by commas and followed by a comma:

    ^([[:digit:]]{6},)+$
    

    This regular expression would find the following entries valid:

    123456,654321,

    123456,

    123456,123456,654321,

    However, the following would not be valid:

    123456,12345

    12345


  6. For SQL, PL/SQL, and Item String Comparison validations, select the type of validation you want to create and click Next.

  7. Specify the sequence and validation name and click Next.

  8. Depending upon the validation method, enter the validation or message text that displays if the validation fails. Click Next.

  9. Define conditions that apply to this validation and click Create.

Defining How Validation Error Messages Display

You can choose to have validation error messages display inline (that is, on the page where the validation is performed) or on a separate error page.

To define how a validation error message displays:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Under Validations, select the appropriate validation.

    The attributes page for the validation appears.

  3. Scroll down to Error Message.

  4. In Error Message, enter your error message text.

  5. From Error message display location, select a display location.

    This attribute identifies where a validation error message displays. Validation error messages can display on an error page or inline within the existing page. Inline error messages can display in a notification area (defined as part of the page template) or within the field label.

    To create a hard error that stops all processing (including validations), you must display the error on an error page.

  6. If you select Inline with Field or Inline with Field and in Notification, you must associate an item with the error message. To associate an item with the error message, select the item from the Associated Item list.

  7. Click Apply Changes.


Tip:

If you select Inline with Field or Inline with Field and in Notification, be aware that the Application Express engine does not execute computations or processes during the re-rendering of the page when the validation error messages appear.

Processing Validations Conditionally

You can control when and if a validation is performed under Conditions.

To create a condition for an existing validation:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Under Validations, select the appropriate validation.

    The attributes page for the validation appears.

  3. Scroll down to Conditions.

  4. To have a validation performed when a user clicks a particular button, make a selection from the When Button Pressed list.

  5. Make a selection from the Condition Type list.

  6. Depending upon the selected Condition Type, enter values in the Expression attributes. The validation will be rendered or processed if the specified condition is met.

  7. Click Apply Changes.

Understanding Page Processes

A page process performs an action at a specified point during the rendering or submission of the page. For example, you can create a page process to execute logic or to make a call to the Application Express engine. A page process is a unit of logic that runs when a specific event occurs, such as loading or submitting a page.

From a functional perspective, there is no difference between page-level and application-level processes. The difference between these two process types is where the process is defined, that is at the page-level or at the application level.

Topics in this section include:

Creating a Page Process

You create a process by running the Create Process Wizard. During the wizard, you define a process name, specify a sequence and the point at which the process will execute, and select a process category. You can change nearly all of these attributes on the Edit Page Process page.

To create a process:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Under Processes, click the Create icon.

  3. Select a category. Table 5-2 describes available page process categories.

    Table 5-2 Process Categories

    Process CategoryDescription

    Data Manipulation

    Data Manipulation process types are frequently used by wizards to support data manipulation language (DML) actions. Application Builder supports the following declarative data manipulation processes:

    • Select Automatic Row Fetch and Automatic Row Processing (DML) to create an automatic data manipulation language (DML) process.

    • Use Multi Row Update and Multi Row Delete with tabular forms.

    • Use Add Rows to Tabular Form with a tabular form.

    Close Popup Window

    Applies to processes running within a popup window. Upon execution, this process type closes the current popup window.

    Form Pagination

    Implements pagination through the detail records associated with a master detail form. Most often used in master detail forms (such as in the Master Detail Wizard), this process checks the master table to determine which set of detail records you are in and determines what the next detail record should be.

    See Also: "Creating a Master Detail Form"

    On Demand

    Creates an application-level process that can only be executed when called from a specific page. When you create this process type at the page-level, you are creating reference to an existing application-level process.

    See Also: "About On Demand Application Processes"

    PL/SQL

    Runs the PL/SQL you provide. Use this process type to execute a block of PL/SQL entered directly into the process or to simply call an existing API.

    Reset Pagination

    In Report regions, resets pagination back to the first result set. The Application Express engine keeps track of where the user is within a given result set. This process category returns the user to the beginning result set. In other words, this category resets the counters associated with the report region to return the first part of the result set the next time the result set displays.

    Session State

    Sets the values of existing session state items to null. Select this process type to clear the cache for applications, sessions, or items and to clear existing user preferences.

    See Also: "Managing Session State Values" and "Managing User Preferences" in Oracle Application Express Administration Guide

    Web Services

    Implements a Web Service as a process on a page. Running the process submits a request to the service provider.

    See Also: "Invoking a Web Service as a Process"


  4. Follow the on-screen instructions.

Editing Process Attributes

Once you create a process, you can control when the process executes and what the process does by editing attributes on the Edit Page Process page.

To edit an existing page process:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Select the process name.

    The Edit Page Process page appears.

Changing Processing Points and Source

You control when a process executes by specifying a sequence number and a process point under Process Point. You can prevent a process from running during subsequent visits to a page by selecting one of the following options under Run Process:

  • Once for each page visit

  • Once for each session or when reset

Enter the appropriate code for PL/SQL process types. For PL/SQL anonymous block processes, enter the appropriate code under Process. For Clear Cache processes, enter the appropriate code under Source. In the event a process fails, you can optionally define an error message in the Process Error Message field.

Creating Conditional Processes

You can make a process conditional by selecting a condition type and entering an expression under Conditional Processing.

Additionally, you can also make a selection from the When Button Pressed attribute. When you select a button from this list, the process only executes if a user clicks the selected button.

Understanding Branches

A branch is an instruction to go to a specific page, procedure, or URL. For example, you can branch from page 1 to page 2 after page 1 is submitted.

You create a branch by running the Create Page Branch Wizard and specifying Branch Point and Branch Type. The Branch Type defines the type of branch you are creating. For more information about Branch Types, see online Help.

Topics in this section include:

Defining a Branch Point and Action

When you click a standard tab in an application, the Application Express engine sets session state, executes computations, and then links you to the target page. It does not run any processes or explicitly defined branches. In cases where the page is submitted without clicking a tab, the Application Express engine explicitly defines branches to direct users to a subsequent page.

You can control when a branch executes by making a selection from the Branch Point list. Available options include:

  • On Submit: Before Computation - Branching occurs before computations, validations, or processing. Use this option for buttons that do not need to invoke any processing (for example, a Cancel button).

  • On Submit: Before Validation - Branching occurs after computations, but before validations or processing. If a validation fails, page processing stops, a rollback is issued, and the page displays the error. Because of this default behavior, you do not need to create branches to accommodate validations. However, you may want to branch based on the result of a computation (for example, to a previous branch point).

  • On Submit: Before Processing - Branching occurs after computations and validations, but before processing. Use this option to branch based on a validated session state, but before performing any page processing.

  • On Submit: After Processing - Branching occurs after computations, validations, and processing. This option branches to a URL or page after performing computations, validations, and processing. When using this option, remember to sequence your branches if you have multiple branches for a given branch point.

  • On Load: Before Header - Branching occurs before a page is rendered. This option displays another page instead of the current page or redirects the user to another URL or procedure.

Depending upon the Branch Type you select, you can specify the following additional information in the Action attributes:

  • The page number of the page to which you want to branch

  • PL/SQL procedure which ultimately renders a branch target page

  • A URL address

Branching Conditionally

Like other controls, branches can be made conditional. To create a conditional branch, make a selection from the Condition Type list, and enter text in the expression fields to implement the condition type you choose.

Editing Page Attributes

Page attributes control specific characteristics of a page such as the page name, display attributes such as the page title and the associated page template, header text, and the selected authorization scheme. You access page attributes from the Page Definition.

Topics in this section include:

Accessing Page Attributes

To edit page attributes:

  1. Navigate to the Page Definition. See "Accessing a Page Definition".

  2. Under Page Rendering, locate the Page section.

    Description of pg_def_edit_pg_att.gif follows
    Description of the illustration pg_def_edit_pg_att.gif

    The Page Attributes page is divided into categories that control specific page attributes such as the Page Name, Title, HTML Header, HTML Body, Help Text, Templates, and so on.

  3. To edit page attributes you can either:

    • Click the Edit page attributes icon to access the entire Page Attributes page. This icon resembles a small page with a pencil on top of it.

    • Click a specific link. The specific information appears.


    Tip:

    Clicking the Edit page attributes icon is the only way to view all page attributes at once.

    The Page Attributes page appears. Required values are marked with a red asterisk (*).

About the Page Attributes Page

The Page Attribute page is divided into the following sections: Name, Display Attributes, Header and Footer, HTML Header, HTML Body Attributes, Security, Duplicate, Cache, Configuration, Error, Help, and Comments.

Description of pg_att_nav.gif follows
Description of the illustration pg_att_nav.gif

You can access these sections by scrolling down the page, or by clicking a navigation button at the top of the page. When you select a button at the top of the page, the selected section appears and all other sections are temporarily hidden. To view all sections of the page, click Show All.

The topics that follow describe the specific sections of the Page Attributes page.

Name

Use these attributes to define general attributes for the current page such as a page name, an optional alphanumeric alias, and associated page groups. Table 5-3 describes these attributes.

Table 5-3 Page Attributes: Name

AttributesDescriptions

Name

Identifies the name of the current page for application developers. This name is used in numerous pages and reports, along with the page number and page title.

Page Alias

Enter an alphanumeric alias for this page. This alias must be unique within the current application.

For example, if you were working on page 1 of application 100, you could create an alias called home. You could then access this page from other pages using the following f?p syntax:

f?p=100:home

Group

Identify the page group you would like to associate with this page. Page groups do not affect functionality, but help developers manage the pages within an application.

To remove a page from a group, select No Group Assigned and click Apply Changes.

See Also: "Grouping Pages"


Display Attributes

Use these attributes to define general display attributes for the current page such as the selected page template, standard tab set, title, and cursor focus. Table 5-4 describes these attributes.

Table 5-4 Page Attributes: Display Attributes

AttributesDescriptions

Page Template

Select a page template to control the appearance of this page. Making a selection here overrides the default page template defined within the current theme.

See Also: "Changing the Default Templates in a Theme"

Standard Tab Set

Select a standard tab set to be used for this page. A standard tab set is associated with a specific page and page number. You can use standard tabs to link users to a specific page.

See Also: "Creating Tabs"

Title

Enter a title to display in the title bar of the browser window. The Application Express engine uses the title you specify here in place of the #TITLE# substitution string used in the page template. This title is inserted between the HTML tag <TITLE></TITLE>.

Cursor Focus

Specify the cursor focus. Available options include:

  • Select First item on page to have the cursor focus placed in the first field on the page.

  • Select Do not focus cursor if you do not want to include JavaScript. Select this option to prevent conflicts between generated JavaScript and custom JavaScript.

Media Type

Enter the Internet Media Type. An Internet Media Type is two-part identifier for file formats on the Internet. A Media Type is composed of at least two parts: a type, a subtype, and one or more optional parameters. This Media Type is used in the Content-Type HTTP header when rendering the page. The page-level Media type overrides the application-level media type. The default value for this attribute is NULL If both the page-level and application-level values for Media Type are NULL, the Media Type text/html is used.


Header and Footer

Use these attributes to define page header, body header, body footer, and page footer text. Table 5-5 describes these attributes.

Table 5-5 Page Header, Footer and Text Attributes

AttributeDescription

Header Text

Enter text or HTML you want to appear immediately following the page header.

Footer Text

Enter text or HTML you want to appear before page template footer.


HTML Header

Use HTML Header to replace the #HEAD# substitution string in the page template header. The values entered here are inserted after the HTML <HEAD> tag. Common uses of these attributes:

  • Code page-specific inline cascading style classes

  • Add additional style sheets for a specific page

  • Code page-specific JavaScript

  • Code page-specific meta tag page refresh

For Include Standard CSS and JavaScript, select Yes to suppress the inclusion of cascading style sheet (CSS) and JavaScript files in the HTML Header. Because suppressing the display of these files breaks typical applications, enabling this attribute is only recommended for advanced developers.

HTML Body Attributes

Use this attribute to add events when the page is being loaded, such as calls to JavaScript. In the Page HTML Body attribute, enter JavaScript or text to be substituted for your page template's #ONLOAD# substitution string. To use this feature, your page template must include the #ONLOAD# substitution string.

You can use the Page HTML Body attribute to write into the contents of the opening <body> tag. A typical page template might use #ONLOAD# within the opening <body> tag as shown in the following example:

<html>
<head>
...
</head>
<body #ONLOAD# >

Security

Use these attributes to specify an authorization scheme and authentication requirements for the current page. Table 5-6 describes these attributes.

Table 5-6 Page Attributes: Security

AttributeDescription

Authorization Scheme

Select an authorization scheme to be applied to the page. Authorization schemes are defined at the application level and can be applied to many elements within the application.

An authorization scheme is evaluated either once for each application session (at session creation), or once for each page view. If the selected authorization scheme evaluates to true, then the page displays and is subject to other defined conditions. If it evaluates to false, then the page will not display and an error message displays.

See Also: "Providing Security Through Authorization"

Authentication

Specifies whether this page has been defined as public or requires authentication. If a page is identified as public, the page can be viewed before authentication. This attribute only applies to applications requiring authentication. The application's page sentry function can access this page attribute to identify pages that do not require prior authentication to view. The implementation of the authentication scheme's page sentry function determines if this attribute has any effect.

See Also: "Establishing User Identity Through Authentication"

Form Auto Complete

Setting this attribute to On has no effect on the page. Setting this value to Off generates the following HTML in the FORM tag:

autocomplete="off"

Duplicate Submission

Use the Allow duplicate page submissions list to specify whether users may process a page multiple times in a row. Set this attribute to No to prevent duplicate page submissions from being processed multiple times.

Examples of duplicate page submissions include:

  • A user clicks the Submit button multiple times.

  • You create a branch of type Branch to Page, and the user clicks the browser reload button.

In On duplicate page submissions go to this URL, enter a URL. Use this field if you set Allow duplicate page submissions to No. If you select No and a user attempts to submit the same page twice, Oracle Application Express displays an error message and a link to the URL you specify.]

Cache

Use these attributes to enable caching for the current page. Enabling page caching can improve application's performance and works well for static pages. Table 5-7 describes these attributes.

Table 5-7 Cache Attributes

AttributeDescription

Cache Page

Specify whether to enable page caching by selecting Yes or No. Page caching can improve performance because the page displays from cache instead of displaying dynamically.

Cache Timeout

Specify the amount of time for which a cached page remains valid.

Cache by User

Specify if the page should be cached by user. If Yes, the page is cached specifically for each user. If No, the same cached page is used for all users.

Cache Page Condition

Specify a condition. If the condition returns false, the page is rendered dynamically and is not be cached. If the condition returns true, the page is displayed from cache.

Expression 1

Enter values in this attribute based on the specific condition type selected.

Expression 2

Enter values in this attribute based on the specific condition type selected.



See Also:

"Managing Cached Regions and Pages" in Oracle Application Express Administration Guide and "Utilizing Region Caching"

Configuration

Select a build option for this page. You can use build options to enable or disable functionality. Most application attributes have a build option attribute. Do not specify a build option for the current page unless you plan to exclude the page in certain configurations.

Build options have two possible values: INCLUDE and EXCLUDE. If you specify an attribute as being included, then the Application Express engine considers it part of the application definition at run time. Conversely, if you specify an attribute as being excluded, then the Application Express engine treats it as if it did not exist.

On Error Text

Use this attribute to specify the error text that displays in the #NOTIFICATION_MESSAGE# template substitution string in the event an error occurs on the page.


See Also:

"Page Templates"

Help

Use this attribute to enter Help text for the current page.

Help text is displayed using a help system that you must develop. To show the Help for a specific page, call the APEX_APPLICATION.HELP procedure from a page that you create for displaying Help text. For example, you could use a navigation bar icon similar to:

f?p=4000:4600:&APP_SESSION.::&DEBUG::LAST_STEP:&APP_PAGE_ID.

Page-level help supports shortcuts using the following syntax:

"SHORTCUT_NAME"

Comments

Use this attribute to record comments about the current page. These comments never display when the application is running.

About the Developer Toolbar

The Application Express engine dynamically renders and processes pages based on data stored in database tables. To view a rendered version of your application, you run or submit it to the Application Express engine by clicking the Run icon.

When you run an application from within the development environment, the Developer toolbar appears at the bottom of the page. The Developer toolbar offers a quick way to edit the current page, create a page, region, or page control, view session state, or toggle in and out of Debug mode. You can control whether the Developer toolbar displays by changing the Status attribute on the Edit Definition page.

Description of d_toolbar.gif follows
Description of the illustration d_toolbar.gif

The Developer toolbar consists of the following links:

  • Home links you to the Workspace home page. See "About the Workspace Home Page".

  • Application links you to the Application home page. See "Application Builder Concepts".

  • Edit Page accesses the Page Definition for the current running page. See "About the Page Definition".

  • Create links to a wizard for creating a page, region, page control (item, button, branch, computation, process, or validation), or a shared control (navigation bar icon, tab, list of values, list, or breadcrumb). See "Building an Application".

  • Session links you to session state information for the current page. See "Viewing Session State".

  • Activity links you to the Activity reports page. See "Activity Reports".

  • Debug toggles the page between Debug and No Debug mode. See "Accessing Debug Mode".

  • Show Edit Links toggles between Show Edit Links and Hide Edit Links. Clicking Show Edit Links displays a small orange icon next to each editable object on the page. Each icon is orange and contains a triangle with two rules beneath it. Clicking the link displays another window in which to edit the object.

Working with Shared Components

Shared components are common elements that can display or be applied on any page within an application. You can use the tools and wizards on the Shared Components page either at the application-level or on specific pages.

Topics in this section include:

Accessing the Shared Components Page

To access the Shared Components page:

  1. Navigate to the Workspace home page.

  2. Click the Application Builder icon.

  3. Select an application.

  4. On the Application home page, click Shared Components.

    The Shared Components page appears.

  5. To create a shared component, select the appropriate link.

Using the Shared Components Icon

You can also access the Shared Components page by clicking the Shared Components icon on the Action bar. The Action bar resembles a small mechanical gear and displays beneath the Utilities tab in the upper right corner of most pages in Application Builder.

Description of shared_comp_icon.gif follows
Description of the illustration shared_comp_icon.gif

About the Shared Components Page

The following sections describe each link on the Shared Components page.

Application

The following section describes the links under Application.

Definition

Links to the Edit Application Definition page. Use this page to edit attributes that determine the application name, application availability, and static substitution strings. You can also use this page to define other attributes such as build options or an application logo and view associated templates and component defaults. See "Configuring the Application Definition".

Comments

Use Application Comments to enter comments specific to the currently selected application. See "Adding Application Comments"

Logic

The following section describes the links under Logic.

Application Items

Application-level items do not display, but are used as global variables to the application. Commonly, you set the value of a page-level item using an application or page computations. See "Understanding Application-Level Items".

Application Processes

Use application processes to run PL/SQL logic:

  • At specific points for each page in an application

  • As defined by the conditions under which the process is set to execute

  • Upon the creation of a new session

Note that On Demand processes execute only when called from a page-level On Demand process. See "Understanding Application Processes".

Application Computations

Use application-level computations to assign values to application and page-level items for each page displayed or upon the creation of a new application session. You can also create an application-level computation and execute it conditionally on multiple pages. See "Understanding Application Computations".

Web Service References

Web service references in Application Builder are based on the Simple Object Access Protocol (SOAP). You can create a reference to a Web service and then incorporate it into an application to process data submitted by a form, or to render output in the form or report. See "Implementing Web Services".

Build Options

Use build options to conditionally display or process specific functionality within an application. You can use build options to control which features of an application are turned on for each application deployment. See "Using Build Options to Control Configuration".

Security

The following section describes the links under Security.

Authentication Schemes

Authentication is the process of establishing each user's identity before they can access your application. Authentication may require a user to enter a user name and password or may involve verification of a user's identity or use of a secure key. See "Establishing User Identity Through Authentication".

Authorization Schemes

Authorization restricts user access to specific controls or components based on predefined user privileges. See "Providing Security Through Authorization".

Session State Protection

Session State Protection is a built-in functionality that prevents hackers from tampering with the URLs within your application. URL tampering can adversely affect program logic, session state contents, and information privacy. See "Understanding Session State Protection".

Edit Security Attributes

Use the Edit Security Attributes page to configure general security attributes for all pages within an application. See "Configuring Security Attributes".

Globalization

The following section describes the links under Globalization.

Translate Application

You can develop applications in Oracle Application Express that can run concurrently in different languages. A single Oracle database and Oracle Application Express instance can support an application in multiple languages. Translating an application involves multiple steps. See "About Translating an Application and Globalization Support" and "Understanding the Translation Process".

Text Messages

Text messages are named text strings that can be called from the PL/SQL code you write. This PL/SQL can be anonymous blocks within page processes and page regions, or in packages and procedures. See "Translating Messages".

Edit Attributes

You can develop applications that can run concurrently in different languages. Click this link to specify globalization options such as the Application Primary Language and Application Language Derived From attributes. See "Configuring Globalization Attributes" and "About Translatingqd an Application and Globalization Support".

Navigation

The following section describes the links under Navigation.

Tabs

Tabs are an effective way to navigate users between pages in an application. You can create two types of tabs: standard tabs or parent tabs. A standard tab set is associated with a specific page and page number. A parent tab set functions as a container to hold a group of standard tabs. See "Creating Tabs".

Lists

A list is a shared collection of links. You control the appearance of a list through list templates. Each list element has a display condition that enables you to control when it displays. See "Creating Lists".

Breadcrumbs

Breadcrumbs provide users with hierarchical navigation. A breadcrumb is a hierarchical list of links that display using templates. You can display a breadcrumb as a list of links or as a breadcrumb path. See "Creating Breadcrumbs".

Trees

A tree is an effective way to communicate hierarchical or multiple level data. See "Creating Trees".

Navigation Bar Entries

Navigation bar entries offer users a simple navigation path for moving between pages in an application. The location of a navigation bar depends upon the associated page template. Navigation bar entries can display as a link from an image or text. A navigation bar entry can be an image, an image with text beneath it, or text. See "Creating a Navigation Bar Entry".

User Interface

The following section describes the links under User Interface.

Themes

A theme is a named collection of templates that defines the application user interface. See "Managing Themes".

Templates

Templates control the look and feel of specific constructs within your application, such as pages, regions, items, and menus. See "Customizing Templates".

User Interface Defaults

User interface defaults enable you to assign default user interface properties to a table, column, or view within a specified schema. When you create a form or report using a wizard, the wizard uses this information to create default values for region and item properties.

Because user interface defaults are associated with a table, you can use them with applications created using the form and report wizards. See "Managing User Interface Defaults".

Lists of Values

A list of values (LOV) is a static or dynamic set of values used to display a popup list of values, select list, check box, or radio group. See "Creating Lists of Values".

Shortcuts

Use shortcuts to avoid repetitive coding of HTML or PL/SQL functions. You can create a shortcut to define a page control such as a button, HTML text, a PL/SQL procedure, or HTML. Once you define a shortcut, it is stored in a central repository so you can reference it from various locations within your application. See "Using Shortcuts".

Reports

The following section describes the links under Reports.

Report Queries

Use the Report Queries link to view a report of stored queries within the current application. See "About Report Queries".

Report Layouts

Use Report Layouts with a report or shared query to render data in a printer-friendly format, such as Adobe Portable Document Format (PDF), Microsoft Word Rich Text Format (RTF), or Microsoft Excel (XLS) format. See "About Report Layouts".

Files

The following section describes the links under Files.

Cascading Style Sheets

Application Builder includes themes that contain templates that reference their own cascading style sheets (CSS). Use the Cascading Style Sheets link to upload cascading style sheets to your workspace. See "Using Custom Cascading Style Sheets".

Images

Use the Images link to upload images to your workspace. See "Managing Images".

Static Files

Use the Static Files link to upload static files to your workspace. See "Managing Static Files".

About Exporting Shared Components

You can export shared components and page components on the Component Export page. You can also use this wizard to back up a component before editing it or to create an export that functions as a patch to another Oracle Application Express instance.

Topics in this section include:

Exporting Shared Components from the Export Page

To export shared components from the Shared Components page:

  1. Navigate to the Export page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. On the Application home page, click Export/Import.

    4. On the Export/Import page, click Export and click Next.

  2. On the Tasks list, click Component Export.

    The Component Export page appears. See "Exporting Application Components".

Exporting Shared Components from the Shared Components Page

To export shared components from the Shared Components page:

  1. Navigate to the Workspace home page.

  2. Click the Application Builder icon.

  3. Select an application.

  4. On the Application home page, click Shared Components.

    The Shared Components page appears.

  5. On the Tasks list, click Export Application Components.

    The Component Export page appears. See "Exporting Application Components".

Accessing Reports on Shared Components

To access the Shared Components reports:

  1. Navigate to the Workspace home page.

  2. Click the Application Builder icon.

  3. Select an application.

  4. On the Tasks list, click Application Reports.

    The Application Reports page appears.

  5. Click Shared Components.

    A variety of application reports appear and are divided into the same categories that appear on the Shared Components page, including:

    • Application

    • Logic

    • Security

    • Globalization

    • Navigation

    • User Interface

    • Reports

    • Files

    Note that you can also navigate to these reports by clicking View Application Reports on the Tasks list on the Application home page.

Understanding Application Processes

Application processes are blocks of PL/SQL logic that are set to run at specific points using processes from multiple pages of an application. By default, application processes execute at the same point for every page in the application. However, you can apply conditions for specific pages to control when the process executes.

Topics in this section include:

About On Demand Application Processes

A special type of application process is the On Demand process. An On Demand application process has a Process Point of On Demand and executes when called from a page-level On Demand process. On Demand processes are useful when you have PL/SQL logic that you would like to run from different execution points across multiple pages.

Running an On Demand Process from a Page Request

You can have a page request run an On Demand process by using the following syntax:

f?p=application_id:page_id:session:APPLICATION_PROCESS=process_id

Where:

  • application_id is the application ID or alphanumeric alias

  • page_id is the page number or alphanumeric alias

  • session is the session ID

  • APPLICATION_PROCESS=process_id is the keyword APPLICATION_PROCESS= followed by either the process ID or an alphanumeric name of an application-level process having a Process Point of On Demand

When you use this syntax, the Application Express engine recognizes the request and processes it using the following rules:

  • The page number in the URL can be any page number or alias. A page number or alias is required in the request only as a syntactic placeholder because no specific page is accessed for this type of request.

  • The process authorization scheme, the application's authorization scheme, and the process conditions are supported.

  • Session state (that is, item names and values) may be set in the URL, but clear cache options are ignored.

  • Any failures of authentication, authorization, or process conditions do not result in visible error messages or other indicators of such failures and most often result in a blank page being displayed.

  • Specifying the process by name locates the first process with the specified (case-preserved) name.

Application Process Example

A shopping cart application is a good example of when you might use an application process. For example, suppose you need to display the contents of a user's shopping cart with each page view. To accomplish this, you create a region on page zero of your application that displays the values of the application-level items TOTAL_CART_ITEMS and TOTAL_PURCHASE_PRICE.

Instead of writing a process for each page to set the values of TOTAL_CART_ITEMS and TOTAL_PURCHASE_PRICE, you could write an application process of type On Load: Before Header to compute these values. Then, the Application Express engine would execute the process on each page as it renders the application. As a result, each page, would display the most current values for TOTAL_CART_ITEMS and TOTAL_PURCHASE_PRICE.

Creating an Application Process

To create an application process:

  1. Navigate to the Shared Components page:

    1. On the Workspace home page, click Application Builder.

    2. Select an application.

    3. On the Application home page, click Shared Components.

      The Shared Components page appears.

  2. Under Logic, select Application Processes.

  3. Click Create.

  4. For Identification:

    1. Name - Enter a name for the application process.

    2. Sequence - Specify the sequence number for this process. The sequence number determines the order in which the process will be evaluated relative to other processes.

    3. Point - Identify the point at which this process executes.

    4. Click Next.

  5. For Source:

    1. Process Text - Enter the text that is to be the source of your process.

    2. Error Message - Enter the error message that displays if the process raises an error.

    3. Click Next.

  6. For Conditionality:

    1. Condition Type - Select a condition type that must be met in order for this process to execute.

    2. Expression 1 and Expression 2 - Use these attributes to conditionally control whether the process executes. Enter values in this attribute based on the specific condition type you select. The process will execute if the specified condition is met.

    3. Click Create Process.

About the Application Process Page

Once you create an application process, it appears on the Application Processes page. You control how the page displays by making a selection from the View list. Available options include:

  • Icons (the default) displays each process as a large icon. To edit a process, click the appropriate icon.

  • Details displays each application process as a line in a report. To edit a process, click the name.

Accessing Application Processes Reports

After you create an application process, you can access the Utilization and History reports.

To access application processes reports:

  1. Navigate to the Workspace home page.

  2. Click Application Builder.

  3. Select an application.

  4. On the Application home page, click Shared Components.

  5. Under Logic, select Application Processes.

  6. Select one of the following tabs at the top of the page:

    • Utilization

    • History

  7. Follow the on-screen instructions.

Utilization

Click Utilization to display the Application Process Utilization page. This page displays application processes used in the current application.

History

Click History to display the Application Process History page. This page displays a history of recently changed application processes by date.

Understanding Application Computations

Application Computations are units of logic that set the value of a single page or application-level item and are run at the same point across multiple pages in an application. Like page-level computation, application computations can be based on static values, item values, PL/SQL, or SQL.

Topics in this section include:

About Application Computations

A common use of an application item is to store the value of the last page viewed in the application. By storing the value in an item, you can add a back button and then redirect the user to the page number captured by the computation. This type of computation works well, for example, when you need to enable users to back out of an error page.

The following is an example of a computation that stores the last page visited. In this example, the computation:

  • Stores the last application page visited to an item named LAST_PAGE

  • Checks that the value of a CURRENT_PAGE_ITEM is of type PL/SQL Function Body with a Computation body of:

    BEGIN
       :LAST_PAGE := nvl(:CURRENT_PAGE,:APP_PAGE_ID);
       :CURRENT_PAGE := :APP_PAGE_ID;
       RETURN :LAST_PAGE;
    END;
    

About Application Computations that Execute On New Instance

Typically an application computation runs at the same point across multiple pages in an application. The exception is computations having a Computation Point of On New Instance. This type of computation only runs when a user first accesses your application. This type of computation is useful when you need to only retrieve information once within a user's session (for example, to retrieve a user's job title).

Creating an Application Computation

To create an application computation:

  1. Navigate to the Shared Components page:

    1. On the Workspace home page, click Application Builder.

    2. Select an application.

    3. On the Application home page, click Shared Components.

      The Shared Components page appears.

  2. Under Logic, select Application Computations.

  3. Click Create.

  4. Under Item:

    1. Sequence - Specify the sequence for this component. The sequence determines the order of evaluation.

    2. Computation Item - Select the item this computation affects.

  5. For Computation Point, select a process point at which this computation should be performed. Selecting After Submit causes the computation to be performed only after the page is displayed and then submitted.

  6. Under Computation:

    1. Computation Type - Select the manner in which this computation will be performed.

    2. Computation - Enter the computation logic that corresponds to the computation type.

    3. Computation Error Message - Enter the error message that displays if the computation fails.

  7. For Authorization Scheme (optional), select an authorization scheme which must evaluate to True in order for this computation to execute.

  8. Under Conditions:

    1. Condition Type - Select a condition type that must be met in order for this computation to execute.

    2. Expression 1 and Expression 2 - Use these attributes to conditionally control whether the computation executes. Enter values in this attribute based on the specific condition type you select. The computation will execute if the specified condition is met.

  9. For Build Option (optional), select a build option for this component. See "Using Build Options to Control Configuration".

  10. Click Create.

About the Application Computations Page

Once you create an application computation, it appears on the Application Computations page. You control how the page displays by making a selection from the View list. Available options include:

  • Icons (the default) displays each computation as a large icon. To edit an computation, click the appropriate icon.

  • Details displays each application process as a line in a report. To edit a computation process, click the name.

Accessing the Application Computation History Report

Once you create an application computation, you can view the Application Computation History report.

To access the Application Computation History report:

  1. Navigate to the Workspace home page.

  2. Click the Application Builder icon.

  3. Select an application.

  4. When Application Builder appears, click Shared Components.

  5. Under Logic, select Application Computations.

  6. Select the History tab at the top of the page.

    This Application Computation History report displays a history of recently changed application computations by date.

PKNqqPK6(AOEBPS/title.htm^ Oracle Application Express Application Builder User's Guide, Release 3.2

Oracle® Application Express

Application Builder User's Guide

Release 3.2

E11947-02

April 2012


Oracle Application Express Application Builder User's Guide, Release 3.2

E11947-02

Copyright © 2003, 2012, Oracle and/or its affiliates. All rights reserved.

Primary Author: Terri Jennings

Contributors: Marco Adelfio, Carl Backstrom, Christina Cho, Michael Hichwa, Christopher Jones, Joel Kallman, Sharon Kennedy, Syme Kutz, Sergio Leunissen, Anne Romano, Kris Rice, Marc Sewtz, Scott Spadafore, Scott Spendolini, Jason Straub, Simon Watt, and Steve Fogel

This software and related documentation are provided under a license agreement containing restrictions on use and disclosure and are protected by intellectual property laws. Except as expressly permitted in your license agreement or allowed by law, you may not use, copy, reproduce, translate, broadcast, modify, license, transmit, distribute, exhibit, perform, publish, or display any part, in any form, or by any means. Reverse engineering, disassembly, or decompilation of this software, unless required by law for interoperability, is prohibited.

The information contained herein is subject to change without notice and is not warranted to be error-free. If you find any errors, please report them to us in writing.

If this is software or related documentation that is delivered to the U.S. Government or anyone licensing it on behalf of the U.S. Government, the following notice is applicable:

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs. No other rights are granted to the U.S. Government.

This software or hardware is developed for general use in a variety of information management applications. It is not developed or intended for use in any inherently dangerous applications, including applications that may create a risk of personal injury. If you use this software or hardware in dangerous applications, then you shall be responsible to take all appropriate fail-safe, backup, redundancy, and other measures to ensure its safe use. Oracle Corporation and its affiliates disclaim any liability for any damages caused by use of this software or hardware in dangerous applications.

Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.

Intel and Intel Xeon are trademarks or registered trademarks of Intel Corporation. All SPARC trademarks are used under license and are trademarks or registered trademarks of SPARC International, Inc. AMD, Opteron, the AMD logo, and the AMD Opteron logo are trademarks or registered trademarks of Advanced Micro Devices. UNIX is a registered trademark of The Open Group.

This software or hardware and documentation may provide access to or information on content, products, and services from third parties. Oracle Corporation and its affiliates are not responsible for and expressly disclaim all warranties of any kind with respect to third-party content, products, and services. Oracle Corporation and its affiliates will not be responsible for any loss, costs, or damages incurred due to your access to or use of third-party content, products, or services.

PK[Vc^PK6(AOEBPS/start.htm Quick Start

1 Quick Start

This section offers a quick introduction to using Oracle Application Express. It is assumed you have completed the installation process.

This section contains the following topics:

What is Oracle Application Express?

Oracle Application Express is a hosted declarative development environment for developing and deploying database-centric Web applications. Thanks to built-in features such as user interface themes, navigational controls, form handlers, and flexible reports, Oracle Application Express accelerates the application development process.

The Application Express engine renders applications in real time from data stored in database tables. When you create or extend an application, Oracle Application Express creates or modifies metadata stored in database tables. When the application is run, the Application Express engine then reads the metadata and displays the application.

To provide stateful behavior within an application, Oracle Application Express transparently manages session state in the database. Application developers can get and set session state using simple substitutions and standard SQL bind variable syntax.

The sections that follow describe key features of Oracle Application Express.

Reporting

With Oracle Application Express, you can quickly generate HTML reports that display the results of SQL queries. You can also download and print reports in HTML, an Adobe Portable Document Format (PDF), Microsoft Word Rich Text Format (RTF), or Microsoft Excel format (XLS), or XML.

You can declaratively link reports together to provide drill-down reporting and use bind variables to pass information from session state to a report. Reports support declarative column heading sorting, control breaks, sums, and pagination. Report sorting and pagination can use Partial Page Refresh (PPR) technology to avoid refreshing the entire page. You can also add declarative links to a report to download the report data to CSV or XML formats. Plus, you can customize the report appearance using templates. See "About Bind Variable Syntax" and "Creating Reports".

Interactive Reporting Regions enable end users to customize reports. Users can alter the layout of report data by choosing the columns they are interested in, applying filters, highlighting, and sorting. They can also define breaks, aggregations, different charts, and their own computations. Users can create multiple variations of the report and save them as named reports, output to comma-delimited files, and print them to PDF documents. See "Editing Interactive Reports".

Forms

Using wizards, you can easily create forms on tables or on a stored procedure. For example, when creating a form on a table, these wizards provide automatic management of insert, update, and delete as well as lost update detection. Once you create a form, you can rearrange form fields (called form items) using a visual representation, enabling you to quickly achieve the layout you want. Form items offer a variety of display options including text fields, text areas, radio groups, select lists, check boxes, date pickers, and popup list of values. See "Creating Forms".

Charting

You can also use wizards to create HTML, SVG, or Flash charts. You can create charts that enable users to drill down from one chart to another chart or report. Charts can also be refreshed using Partial Page Refresh (PPR) technology, avoiding the need to refresh an entire page. You can also configure a chart to refresh at defined intervals. Additionally, you can take advantage of report column templates to add simple HTML bar charts to any report. See "Creating Charts".

Spreadsheet Upload

Use the Create Application from Spreadsheet Wizard to quickly upload spreadsheet data directly into the database. You can choose to store the data in a new database table or add it to an existing database table. Once the data is uploaded, you can quickly create an application. This handy wizard enables you to go from spreadsheet to a shared application in just a few clicks. See "About the Create Application from Spreadsheet Wizard".

Session State Management

Oracle Application Express transparently manages session state (or application context) in the database. Forms automatically save session state, remembering your application context over your session. Referencing session state within SQL and PL/SQL is as simple as using bind variables. For example, consider the following SELECT statement:

SELECT * FROM EMP WHERE EMPNO = :P1_ID

In this example, the value in the item P1_ID is automatically bound when the query is run. You can also reference session state within a static context by prefixing the item name with an ampersand (&) and suffixing it with a period(.), for example:

&P1_NAME.

For management of two dimensional data sets, Oracle Application Express provides a robust collections infrastructure. Best of all, session management is stateless and does not consume any memory. See "Managing Session State Values" and "About Bind Variable Syntax".

User Interface Themes

Oracle Application Express separates presentation (or user interface themes) from the application logic. You can design your application in one theme, change to another supplied theme, or create and use your own custom theme. By separating the application logic (such as queries, processes, and branches) from the HTML rendering, your application can take advantage of new designs and other technological advances without an application rewrite. See "Managing Themes".

Flow Control and Navigation

Every Web application needs navigation and dynamic applications need flow control. Oracle Application Express provides built-in components to simplify the development and maintenance of navigational controls. Navigation is controlled using declarative tabs (one or two levels), breadcrumbs, tree controls, and lists of links. Flow control is performed using declarative branches which can take effect at specific events and under certain conditions. The appearance of navigation controls are managed through templates, making it easy to change from one look to another. See "Adding Navigation" and "Controlling Navigation Using Branches".

Conditionality on All Components

When creating dynamic Web applications, many application components and processing are conditional. In other words, you only show or process certain pieces of information based on the application context, the data, an event, or a privilege. Oracle Application Express enables you to declaratively specify conditionality of all components. This gives you exact control over what users see or do not see on a tab, button, item, list entry, and so. See "Understanding Conditional Rendering and Processing".

External Interfaces and Extensibility

Even though Oracle Application Express provides a robust declarative environment for building applications, you also have the option of developing custom interfaces or controls. For example, if a component does not meet the needs of your environment, you can generate your own custom HTML using PL/SQL. See "Rendering HTML Using Custom PL/SQL". You can also call external services using Web services. See "Implementing Web Services". Oracle Application Express also includes APIs to easily integrate email alerts into an application. See "Sending Email from an Application". Plus, because Oracle Application Express resides in the Oracle database, you can take advantage of inherent database capabilities, including external tables, PL/SQL, database links, gateways, and database Java to extend the functionality of your application.

Security

With Oracle Application Express, you can create public applications that do not require a user log in, or you can create secure applications that require authentication. Oracle Application Express provides a number of built-in authentication schemes including Single Sign On, Database Account Credentials, and an easy-to-use user management system. You can also use custom schemes that interface with just about any authentication service including Microsoft Active Directory and Oracle Applications.

Additionally, you can customize authorization to meet the needs of your environment and apply authorization selectively to an entire application, a page, or a page component. Finally, you can also take advantage of an innovative session state protection feature to prevent URL tampering and built-in features to protect an application form SQL Injection and cross-site scripting (XSS) attacks. See "Managing Application Security".

SQL Workshop Tools

SQL Workshop provides tools to enable you to view and manage database objects from a Web browser. Use SQL Commands to run SQL and PL/SQL statements. See "Using SQL Commands" in Oracle Application Express SQL Workshop and Utilities Guide.

Query Builder enables you to define queries by dragging and dropping tables and easily create relationships between objects. See "Building Queries with Query Builder" in Oracle Application Express SQL Workshop and Utilities Guide.

Object Browser provides an easy-to-use graphical user interface for viewing, creating, modifying, browsing, and dropping database objects. See "Managing Database Objects with Object Browser" in Oracle Application Express SQL Workshop and Utilities Guide.

Finally, you can use SQL Scripts to create, edit, view, run, and delete script files. See "Using SQL Scripts" in Oracle Application Express SQL Workshop and Utilities Guide.

Supporting Objects Utility

You can simplify the steps needed to export, install, upgrade, and deinstall an application in another Oracle Application Express instance by creating a packaged application. Using the Supporting Objects utility, you can bundle the application definition with scripts for creating the database objects, seed data, images, cascading style sheets, and JavaScript.

Creating a packaged application provides application users with an installer-like experience and automates the process of importing and installing an application in another development, test, or even production instance. See "How to Create a Packaged Application".

Performance

Oracle Application Express provides application developers and application users with an extremely high level of performance. Because Oracle Application Express resides in the Oracle database, it has minimal impact on network traffic. Plus, Application Builder includes a large number of monitoring reports to enable you to identify and tune application performance. See "Debugging an Application".

Hosted Development

Oracle Application Express enables a single database to host large numbers of users. Users work in a dedicated work area called a workspace. A workspace is a virtual private database that enables multiple users to work within the same Oracle Application Express installation while keeping their objects, data and applications private. This flexible architecture enables a single database instance to manage thousands of applications.

You determine how the process of provisioning (or creating) a workspace works. For example, in email verification provision mode, users request a workspace using a link on the login page. After the workspace request has been granted, users receive an email containing a link that they must click to verify the validity of their email address. Then they receive an email with their login credentials. To see an example of email verification provision mode, go to:

http://apex.oracle.com

See "Configuring Your Oracle Application Express Environment" and "Oracle Application Express Hosted Instance Administration" in Oracle Application Express Administration Guide.

About Oracle Application Express Architecture

Oracle Application Express installs with your Oracle database and is comprised of data in tables and PL/SQL code.

Whether you are running the Oracle Application Express development environment or an application you built using Oracle Application Express, the process is the same. Your browser sends a URL request that is translated into the appropriate Oracle Application Express PL/SQL call. After the database processes the PL/SQL, the results are relayed back to your browser as HTML. This cycle happens each time you either request or submit a page.

The application session state is managed in the database tables within Application Express. It does not use a dedicated database connection. Instead, each request is made through a new database session, consuming minimal CPU resources.

About Oracle HTTP Server (Apache) and the Embedded PL/SQL Gateway

The version of Oracle Database you use determines how the URL is translated:

  • With Oracle Database 11.1 or later or Oracle Database 10g Express Edition, you can remove Oracle HTTP Server and mod_plsql from the architecture and replace it with the embedded PL/SQL gateway. The following graphic illustrates the two-tier architecture using the embedded PL/SQL gateway.

    Description of arch_epg.gif follows
    Description of the illustration arch_epg.gif

The embedded PL/SQL gateway provides the Oracle database with a Web server and also the necessary infrastructure to create dynamic applications. The embedded PL/SQL gateway runs in the XML DB HTTP server in the Oracle database and includes the core features of mod_plsql, but does not require the Oracle HTTP Server powered by Apache. Inclusion of the embedded PL/SQL gateway simplifies the architecture and eliminates the middle tier entirely.

About the Application Express Engine

The Application Express engine renders and processes pages. It also performs these tasks:

  • session state management

  • authentication services

  • authorization services

  • page flow control

  • validations processing

Different Oracle Application Express Environments

When you install Oracle Application Express, you can install two different environments:

  • A runtime environment is the appropriate choice for production implementations in which users can run applications that cannot be modified.

  • A full development environment provides complete access to the Application Builder environment to develop applications as described in this document.

Understanding Application Express User Roles

To access the Oracle Application Express development environment, users log in to a shared work area called a workspace. Users are divided into four primary roles:

  • Developers are users who create and edit applications

  • Workspace administrators are users who perform administrator tasks specific to a workspace such as managing user accounts, monitoring workspace activity, and viewing log files

  • End users have no development privileges and are defined to provide access to applications that do not use an external authentication scheme.

  • Oracle Application Express administrators are superusers that manage an entire hosted instance using the Application Express Administration Services application

Logging In to Oracle Application Express

When you log in to Oracle Application Express you log in to a workspace. A workspace is an area within the Oracle Application Express development environment where developers can create applications.

How you log in to Oracle Application Express depends upon whether you have configured your development environment:

  • If you have recently installed Oracle Application Express, you must configure your development environment

  • If you are a developer logging into a previously configured development environment, an administrator must grant you access to a workspace

Topics in this section include:

About Browser Requirements

You open the Oracle Application Express home page in a Web browser. To view or develop Oracle Application Express applications, the Web browser must support Java Script and the HTML 4.0 and CSS 1.0 standards. Ensure also that cookies are enabled. The following browsers meet this requirement:

  • Microsoft Internet Explorer 6.0 or later

  • Mozilla Firefox 1.0 or later

Configuring Your Oracle Application Express Environment

How you set up Oracle Application Express depends upon your user role. If you are a developer accessing a hosted development environment, an administrator must grant you access to a workspace. If you are an Oracle Application Express administrator, you must perform the following steps:

  1. Log in to Oracle Application Express Administration Services. Oracle Application Express Administration Services is a separate application for managing an entire Oracle Application Express instance. You log in using the ADMIN account and password created or reset during the installation process.

    1. In a Web browser, navigate to the Oracle Application Express Administration Services application. By default, Oracle Application Express Administration Services installs to the following location:

      • If your setup uses the embedded PL/SQL gateway, go to:

        http://hostname:port/apex/apex_admin
        

        Where:

        hostname is the name of the system where Oracle XML DB HTTP Server is installed.

        port is the port number assigned to Oracle XML DB HTTP Server. In a default installation, this number is 8080. See "Verifying the Oracle XML DB HTTP Server Port" in Oracle Application Express Application Builder User's Guide.

        apex is the database access descriptor (DAD) defined in the configuration file.

      • If your setup uses Apache and mod_plsql, go to:

        http://hostname:port/pls/apex/apex_admin
        

        Where:

        hostname is the name of the system where Oracle HTTP Server is installed.

        port is the port number assigned to Oracle HTTP Server. In a default installation, this number is 7777.

        pls is the indicator to use the mod_plsql cartridge.

        apex is the database access descriptor (DAD) defined in the mod_plsql configuration file.

    2. On the Login page:

      • In Username, enter admin.

      • In Password, enter the Oracle Application Express administrator account password you specified when you installed Oracle Application Express.

      • Click Login.


    See Also:

    See "Logging in to Oracle Application Express Administration Services" in Oracle Application Express Administration Guide.

  2. Specify a provisioning mode. In Oracle Application Express Administration Services you must determine how the process of creating (or provisioning) a workspace will work. See "About Workspace Provisioning" in Oracle Application Express Administration Guide.

  3. Create a Workspace. A workspace is a virtual private database allowing multiple users to work within the same Oracle Application Express installation while keeping their objects, data and applications private. Each workspace has a unique ID and name. An Oracle Application Express administrator can create a workspace manually or have users submit requests. See "Creating Workspaces" and "Managing Workspace Requests" in Oracle Application Express Administration Guide.

  4. Log in to a Workspace. Once you create a workspace in Oracle Application Express Administration Services, return to the Oracle Application Express Login page and log in to that workspace. See "Logging In to Oracle Application Express as a Developer".

Logging In to Oracle Application Express as a Developer

When you log in to Oracle Application Express, you log in to a workspace. If you are a developer, an administrator must grant you access to a workspace.


Note:

Before users can request a workspace or change their passwords, an Oracle Application Express administrator must configure Oracle Application Express environment preferences.


See Also:

"Managing Environment Settings"in Oracle Application Express Administration Guide

Topics in this section include:

Requesting a Workspace


Note:

This section applies only if your Oracle Application Express administrator has configured Oracle Application Express to support workspace requests.

Before you can log in to Oracle Application Express, an administrator must grant you access to a workspace. Each workspace has a unique ID and name.

To request a workspace:

  1. In a Web browser, navigate to the Oracle Application Express Login page.

    If you do not know the URL for logging in to Application Express, see "Logging in to a Workspace".

    The Login page appears.

  2. Under Tasks, click Request a Workspace.

    The Request Service Wizard appears.

  3. Click Next and follow the on-screen instructions.

Logging in to a Workspace

After an Oracle Application Express administrator approves a workspace request, an e-mail arrives with your login credentials (the workspace name, user name, and password).

Note that if your administrator selected Email Verification as the automated method for handling new workspace requests, you might first receive an email containing a verification link. This step ensures that your email is a valid one before the workspace request is approved.

To log in to Oracle Application Express:

  1. In a Web browser, navigate to the Oracle Application Express Login page. By default, Oracle Application Express installs to the following location:

    • If your setup uses the embedded PL/SQL gateway, go to:

      http://hostname:port/apex
      

      Where:

      • hostname is the name of the system where Oracle XML DB HTTP Server is installed.

      • port is the port number assigned to Oracle XML DB HTTP Server. In a default installation, this number is 8080. See "Verifying the Oracle XML DB HTTP Server Port".

      • apex is the database access descriptor (DAD) defined in the configuration file.

        For users who have upgraded from earlier releases, or who have a custom configuration, this value may be htmldb or something else. Verify your DAD with your Oracle Application Express administrator.

    • If your setup uses Oracle HTTP Server (Apache) and mod_plsql, go to:

      http://hostname:port/pls/apex
      

      Where:

      • hostname is the name of the system where Oracle HTTP Server is installed.

      • port is the port number assigned to Oracle HTTP Server. In a default installation, this number is 7777. You can find information about your Oracle HTTP Server installation's port number from either of the following files:

        ORACLE_BASE\ORACLE_HOME\install\portlist.ini
        ORACLE_BASE\ORACLE_HTTPSERVER_HOME\Apache\Apache\conf\httpd.conf
        

        Be aware that if you change a port number, it is not updated in the portlist.ini file. You can only rely on this file immediately after installation.

      • pls is the indicator to use the mod_plsql cartridge.

      • apex is the database access descriptor (DAD) defined in the mod_plsql configuration file.

        For users who have upgraded from earlier releases, or who have a custom configuration, this value may be htmldb or something else. Verify your DAD with your Oracle Application Express administrator.


        See Also:

        "Managing Oracle Database Port Numbers" in Oracle Database Installation Guide and ORACLE_BASE\ORACLE_HTTPSERVER_HOME\Apache\modplsql\conf\dads.readme for more information on database access descriptors

    The Login page appears.

  2. Under Login, enter the following:

    • In the Workspace field, enter the name of your workspace.

    • In the Username field, enter your user name.

    • In the Password field, enter your case-sensitive password.

  3. Click Login.

    Note that, depending on your setup, you might be required to change your password when you log in for the first time.

Verifying the Oracle XML DB HTTP Server Port

To verify the port number where the Oracle XML DB HTTP Server is running:

  1. Start SQL*Plus and connect the database where Oracle Application Express is installed as SYS:

    • On Windows:

      SYSTEM_DRIVE:\ sqlplus /nolog
      connect sys as sysdba
      
    • On UNIX and Linux:

      $ sqlplus /nolog
      connect sys as sysdba
      

    When prompted, enter the appropriate username and password.

  2. Enter the following statement to verify the port number:

    SELECT DBMS_XDB.GETHTTPPORT FROM DUAL;
    

    If the port number returns 0, the Oracle XML DB HTTP Server is disabled.


See Also:

Oracle Database Installation Guide to learn how to enable the Oracle XML DB HTTP Server

Finding Your Workspace Name

If you cannot remember your workspace name, you can request a list of all workspace names associated with your email address.

To find your workspace name:

  1. On the Login page, click Find My Workspace on the Tasks list.

  2. Enter your email address and click Find Workspace.

    An email with the list workspace names is sent to you.

Resetting Your Password

You can reset your password by clicking the Change Password link on the Workspace home page.

To reset your password from the Workspace home page:

  1. Log in to Oracle Application Express. See "Logging In to Oracle Application Express".

  2. From the Administration list, click Change Password.

    The Change Password page appears.

  3. In Change Password, enter the following:

    • Enter Current Password - Enter your current password.

    • Enter New Password - Enter your new password.

    • Confirm New Password - Enter your new password again.

  4. Click Apply Changes.


Tip:

You can also reset your password on the Login page by clicking the Reset Password link.


See Also:

"Changing an End User Password" in Oracle Application Express Administration Guide

Logging Out of a Workspace

To log out of Oracle Application Express, click the Logout icon in the upper right corner of the window.

About the Workspace Home Page

When you log in to Oracle Application Express, the Workspace home page appears. A workspace is a virtual private database allowing multiple users to work within the same Oracle Application Express installation while keeping their objects, data and applications private.

Your user name and workspace name display in the lower left corner of the page. The following three large icons display in the center of the page:

About Administration

An Administration list appears on the right side of the Workspace home page. Use the following links to administer your application development environment:

About Migrations

Use the Application Migrations link to migrate a Microsoft Access application and generate an Oracle Application Express application. See Oracle Application Express Migration Guide.

About Workspace Schemas

The Workspace Schemas list displays beneath the Administration list. It displays the database schemas that are associated with, and therefore accessible to, this workspace.

About Links

The Links list displays on the lower side of the Workspace home page. Use this list to access the following Application Express resources:

  • Oracle Technology Network links to the Oracle Application Express section of Oracle Technology Network. Use this page to access additional information and resources about using Oracle Application Express.

  • Discussion Forum links to Oracle Application Express Discussion Forum. Use this page as a resource for research and for posting your own questions or answering those of other users.

  • User's Guide links to an HTML-based online Help system. You can also access online Help by clicking the Help link in the upper right corner of any page in Oracle Application Express. See "About Procedural Online Help".

Navigation Alternatives

This section describes alternative methods for navigating between pages in the Application Express user interface.

Navigating Using Icons or Drop Down Menus

You can move between pages in Oracle Application Express by clicking large graphical icons. When using these icons, you have two navigation options:

  • Primary Navigation (drill-down). Click a large icon to drill-down to the appropriate page.

  • Secondary Navigation (drop down menus). Click the down arrow on the right side of the icon to view a drop down menu. Select an option from the menu.


Note:

For the purposes of consistency, this document uses the primary navigation path (or drill-down approach) when explaining navigation.

Description of new_menu.gif follows
Description of the illustration new_menu.gif

Navigating Using Breadcrumbs

Breadcrumbs (also called locator links) appear at the top of every page within the Oracle Application Express user interface. Each breadcrumb entry indicates where the current page is relative to other pages within the user interface. You can use breadcrumbs to instantly link to a previous page. For example, clicking on Home takes you to the Workspace home page.

Description of breadcrum.gif follows
Description of the illustration breadcrum.gif

Using Online Help

The Application Express user interface features three types of online help: Procedural Online Help, Page-level Help, and Field-Level Help.

About Procedural Online Help

You can access an HTML-based online Help system by clicking the Help link in the upper right corner of the window.

Description of hlp_ico.gif follows
Description of the illustration hlp_ico.gif

When you click the Help link, a help topic appears that describes the current page. To view the table of contents of another help set, select it from the list in the upper left side of the window.

Description of help_window.gif follows
Description of the illustration help_window.gif

You can browse through help topics by:

  • Expanding and collapsing the table of contents. To view a topic, simply select it.

  • Clicking the breadcrumb links at the top of each help topic.

  • Clicking the Previous and Next buttons within a topic. Click these buttons to access the previous and next help topic within the structure of the help set.

The top of the window features a gray bar. Click Back and Forward to return to a previously viewed page. These controls work similarly to the Back and Forward controls in a Web browser.

Click Find to perform a keyword search of the entire help system. When the search field appears, enter a case insensitive query in the field provided and click Find. To search for an exact phrase, enclose the phrase in double quotation marks.


Tip:

With Oracle Database 11g, you must enable network services in order use the Find link. See "Enabling Network Services in Oracle Database 11g"

About Page-level Help

Many pages with in the Application Express user interface include Page-level Help. Page-level Help displays in a text box on the right side of the page and offers a brief description of the page functionality.

About Field-Level Help

Most select lists, check boxes, items, and fields within the Application Express user interface include Field-level Help. Items within the user interface that have Field-level Help have a light gray underline. When Field-level Help is available, the item label changes to red when you pass your cursor over it and the cursor changes to an arrow and question mark.

Description of hlp_item.gif follows
Description of the illustration hlp_item.gif

Click the item label to display a description in a separate window.

PK)PK6(AOEBPS/demo.htm Running a Demonstration Application

2 Running a Demonstration Application

This section describes how to run the two demonstration applications provided with Oracle Application Express. It also explains how to modify the demonstration application called Sample Application that installs with Application Builder. Running and analyzing how an application works is an effective way to better understand how you can use Application Builder to build your own applications.

This section contains the following topics:


See Also:

"Next Steps" in Oracle Database 2 Day + Oracle Application Express Developer's Guide to learn more about other resources to expand your knowledge of Oracle Application Express

Installing a Demonstration Application

Application Builder includes two demonstration applications you can install. Use these applications to learn more about the different types of functionality you can include in your applications.

To install the demonstration applications:

  1. From the Workspace home page, click the down arrow on the right side of the Application Builder icon.

  2. From the menu, select Demonstrations.

    Description of new_menu.gif follows
    Description of the illustration new_menu.gif

    The Demonstration Applications page appears, displaying the following applications:

    • Sample Application offers a working demonstration that highlights basic design concepts.

    • Collection Showcase demonstrates shopping cart concepts.

  3. To install a demonstration application, locate the application you want to install, and click Install.

  4. Follow the on-screen instructions.

    The Application home page appears.

  5. To run an installed demonstration application, click the Run Application icon.

  6. Enter the appropriate login credentials and click Login.

    • For Sample Application:

      • For User Name, enter either demo or admin.

      • For Password, enter the current workspace name in lowercase letters.

    • For other demonstration applications, enter your workspace user name and password.


Note:

You can also access the Demonstration Applications page by clicking Create on the Application home page and then selecting Demonstration Application.

Running an Installed Demonstration Application

Once you have installed a demonstration application, you can run it from the Demonstration Applications page or from the Application Builder home page.

Topics in this section include:

Running an Application from Demonstration Applications

To run a demonstration application from the Demonstration Applications page:

  1. From the Workspace home page, click the down arrow on the right side of the Application Builder icon.

  2. From the menu, select Demonstrations.

    The Demonstration Applications page appears.

  3. On the Demonstration Applications page, locate the application you want to run.

  4. In the Action column, click Run.

  5. Enter the appropriate login credentials and click Login.

    • For Sample Application:

      • For User Name, enter either demo or admin.

      • For Password, enter the current workspace name in lowercase letters.

    • For other demonstration applications, enter your workspace user name and password.

Running an Application from the Application Home Page

Once you have installed a demonstration application, you can run it from the Application Builder home page.

To run a demonstration application from the Application Builder home page:

  1. Log in to the Workspace home page.

  2. Click the Application Builder icon.

  3. Click the application to be run.

    The Application home page appears.

  4. Click the Run Application icon.

  5. Enter the appropriate login credentials and click Login.

    • For Sample Application:

      • For User Name, enter either demo or admin.

      • For Password, enter the current workspace name in lowercase letters.

    • For other demonstration applications, enter your workspace user name and password.

Understanding Sample Application

This section describes the demonstration application called Sample Application.

Sample Application shows an easy-to-use interface for viewing, updating, and searching order and customer information for electronic and computer products. Users can navigate among the pages using the Home, Customers, Products, Orders, and Charts tabs.

Description of sampl_app_plain.gif follows
Description of the illustration sampl_app_plain.gif

Sample Application demonstrates the following functionality:

  • Examples of ways to display summary information, including a dial chart and summary reports

  • Reports for viewing, updating, and adding customers, products, and orders

  • A Calendar report

  • Flash charts available in Oracle Application Express including cluster bar, pie chart, and stacked bar

  • Printer friendly mode

The following sections describe specific functionality available on each page.


See Also:

"What Is a Page?"

About the Home Page

The Home page contains four regions:

  • My Quota

  • My Orders

  • Sample Application

  • Tasks

My Quota demonstrates the use of a Flash Dial Chart. This chart displays a value based on an underlying SQL statement.

Although not demonstrated in this example, you can enable an asynchronous refresh by editing the attributes of any SVG or Flash chart.


Tip:

The Flash Dial Chart only displays if you log in using the user name demo.

My Orders is a interactive report based on a SQL query. This report displays a subset of the information that appears on the Orders page. Users can link to order details by selecting the Edit icon. Users can also change the appearance of the report using the Actions menu.

Description of sampl_app_myorder.gif follows
Description of the illustration sampl_app_myorder.gif

Sample Application is a simple HTML region that displays static text. You can create this type of region to display explanatory information to users.

Tasks contains a list with links to other pages within the application. Links available on the Home page Tasks list include:

  • About this Application links to an informational page that describes this application.

  • Enter a New Order links to a wizard for creating a new order.

  • Add a New Customer links to a form for entering new customer information.

  • Add a New Product links to a form for adding new products.

About the Customers Page

The Customers page enables users to view and edit customer information. The Customers page consists of two main regions:

  • Customers

  • Top Customers

Description of customer.gif follows
Description of the illustration customer.gif

Customers is an interactive report for tracking customer information. This region is also based on a SQL query. To search for a customer, enter a customer name in the Search field and click Go. To sort by customer name, click the column heading. A Sort icon then appears to the right of the heading Customer Name. Users can change the appearance of the report using the Actions menu. To update existing customer information, click the Edit icon. 'To add a new customer, click the New Customer button.

Top Customers ranks customers by order amount. This report is based on a SQL query that returns top customers based on their orders.


See Also:

"Creating Reports"

About the Products Page

The Products page enables users to view and edit product information. The Products page consists of two main regions:

  • Products

  • Top 10 Products

Description of products.gif follows
Description of the illustration products.gif

Products displays an interactive report for tracking product information. This region is based on a SQL query that uses a custom function for displaying images stored in the database. To sort by product category, click the column heading. To edit a product description, click the Edit icon. To add a new product, click the Create Product button at the top of the page. Users can change the appearance of the report using the Actions menu.

Top 10 Products is also a SQL report. This report outlines the top ten products based on quantities sold.

Description of products_top.gif follows
Description of the illustration products_top.gif


See Also:

"Creating Reports"

About the Orders Page

The Orders page enables users to view and edit customer orders. The Orders page contains two regions:

  • My Orders

  • Orders by Day

Description of orders.gif follows
Description of the illustration orders.gif

My Orders is a wizard report that summarizes the current orders in the system. To sort a column, click the column heading. A Sort icon then appears to the right of the column heading. To edit an existing order, click the Edit icon. To add a new order, click the Enter New Order button.

Orders by Day is a Calendar report. This report displays each order on the appropriate date in a calendar. Users can select a calendar entry to view order details. Click the Previous and Next buttons to previous and future entries.

About the Charts Page

The Charts page illustrates three types of Flash charts available in Application Builder: cluster bar, pie chart, and stacked bar. To view a chart, select it from the list on the left.


See Also:

"Creating Charts"

About the Admin Page

The Admin page displays only if you log in to Sample Application using the user name admin. Sample Application makes use of a custom authentication scheme that stores user names and obfuscated passwords in a table. The Manage Users page enables you to manage additional users. To add a new user, click Add User at the bottom of the page. To delete a user, select the user and click Remove Selected Users.

Note that this custom authentication scheme does not use any user names or passwords associated with Oracle Application Express application developers.

Viewing Pages in Printer Friendly Mode

Clicking Print in the upper left corner of the page displays the current page in Printer Friendly mode. When in Printer Friendly mode, the Application Express engine displays all text within the HTML form fields as text.

To enable your application to display in Printer Friendly mode, you must create and then specify a Print Mode Page Template on the Edit Definition page.

Modifying a Demonstration Application

Once you understand the type of functionality available in a demonstration application, the next step is to learn more about the construction of each page. An efficient way to speed up the learning process is to analyze and deconstruct the pages in the demonstration applications. If you happen to break something, you can quickly delete the demonstration application and install it again. See "Deleting an Application" and "Installing a Demonstration Application".

You edit existing pages in an application, add pages to an application, or create entirely new applications using Application Builder.

Topics in this section include:

About the Developer Toolbar

The Developer toolbar is a quick way to edit the current application, the current running page, create a new page, control, or component, view session state, or turn edit links on or off.

Description of d_toolbar_149.gif follows
Description of the illustration d_toolbar_149.gif

The Developer toolbar consists of the following links:

  • Home links you to the Workspace home page. See "About the Workspace Home Page".

  • Application links you to the Application home page. See "Application Builder Concepts".

  • Edit Page accesses the Page Definition for the current running page. See "About the Page Definition".

  • Create links to a wizard for creating a new page, region, page control (item, button, branch, computation, process, or validation), or a shared control (navigation bar icon, tab, list of values, list, or breadcrumb). See "Building an Application".

  • Session links you to session state information for the current page. See "Viewing Session State".

  • Activity links you to the Activity reports page. See "Activity Reports".

  • Debug toggles the page between Debug and No Debug mode. See "Accessing Debug Mode".

  • Show Edit Links toggles between Show Edit Links and Hide Edit Links. Clicking Show Edit Links displays a small orange icon next to each editable object on the page. Each icon is orange and contains a triangle with two rules beneath it. Clicking the link displays another window in which to edit the object.

Editing a Demonstration Application

There are two ways to edit a demonstration application:

  • From the Demonstration Applications page, click Edit next to the desired application.

  • If you are running an application, click Application on the Developer toolbar.

The Application home page appears. The application ID and application name display at the top of the page.

Description of bldr_hm_top.gif follows
Description of the illustration bldr_hm_top.gif

You can run the current application, edit supporting objects, create shared components, or export and import information by clicking one of the following:

The pages that make up the application appear on the Application home page. To access a specific page, simply click it. To search for a specific page, enter a case insensitive query for the page title or page number in the Page field and click Go.

Viewing Underlying Database Objects

The Application Express engine renders applications in real time based on data stored in database tables. You can view the database objects for any demonstration application in Object Browser, or by viewing the Application Database Object Dependencies report.

Topics in this section include:

Viewing the Database Object Dependencies Report

The Database Object Dependencies report identifies database objects referenced by the current application. Review this report to determine what objects to move when deploying an application.

To view the Database Object Dependencies report:

  1. Navigate to the Workspace home page.

  2. Click the Application Builder icon.

  3. Select an application.

    The Application home page appears.

  4. On the Tasks list, click Application Reports.

  5. Click Shared Components.

  6. Under Application, click Database Object Dependencies.

  7. Click Compute Dependencies.

  8. To view the components that reference a specific database object, select the Reference Count number.

Viewing Database Objects in Object Browser

To view the database objects in Object Browser:

  1. On the Workspace home page, click SQL Workshop and then Object Browser.

    Object Browser appears.

  2. Select an object type from the Object list in the upper left corner of the page. For example, to view tables, select Tables.

  3. To search for an object name, enter keywords in the search field beneath the Object list.

    A list of matching objects appears.

    Description of demo_obrws_srch.gif follows
    Description of the illustration demo_obrws_srch.gif

  4. To perform a specific task related to the selected object, select the appropriate task button.

    For example, to modify a column in the DEMO_CUSTOMERS table:

    1. From the Objects list, select Tables.

    2. From the Tables list, select DEMO_CUSTOMERS.

    3. Click Modify Column.

  5. To view additional object details, select a tab beneath the object name. For example, to view the data in the DEMO_CUSTOMERS table:

    1. From the Tables list, select DEMO_CUSTOMERS.

    2. Select the Data tab.

      A report appears that displays the data in the DEMO_CUSTOMERS table appears.

    Description of demo_data.gif follows
    Description of the illustration demo_data.gif


See Also:

"Man^aging Database Objects with Object Browser" in Oracle Application Express SQL Workshop and Utilities Guide

PKs«PK6(AOEBPS/deploy.htm Deploying an Application

14 Deploying an Application

This section describes how to package an application built within Application Builder.

This section contains the following topics:


See Also:

"Advanced Programming Techniques" and "Managing Application Express Users" in Oracle Application Express Administration Guide

About the Oracle Application Express Application Development Life Cycle

When developing applications using Application Builder, you need to find a balance between two dramatically different development methodologies:

  • Iterative, rapid application development

  • Planned, linear style development

The first approach offers so much flexibility that you run the risk of never completing your project. In contrast, the second approach can yield applications that do not meet the needs of end users even if they meet the stated requirements on paper.

System Development Life Cycle Methodologies to Consider

The system development life cycle (SDLC) is the overall process of developing software using a series of defined steps. There are a number of SDLC models that work well for developing applications in Oracle Application Express.

The SDLC waterfall is probably the best known model. In this methodology, the development process is broken down into the following stages:

  1. Project Planning

  2. Requirements Definition

  3. Design

  4. Development

  5. Integration and Testing

  6. Installation and Acceptance

  7. Maintenance

This methodology is referred to as a waterfall because the output from one stage is the input for the next stage. One of the primary problems with this approach is that it is assumed that all requirements can be established in advance. Unfortunately, requirements often change and evolve during the development process.

The Oracle Application Express development environment enables developers to take a more iterative approach to development. Unlike many other development environments, creating prototypes is easy. With Oracle Application Express, developers can:

  • Use built-in wizards to quickly design an application user interface

  • Make protoypes available to users and gather feedback

  • Implement changes in real time, creating new prototypes instantly

Other methodologies that work well with Oracle Application Express include:

  • Spiral - This approach is actually a series of short waterfall cycles. Each waterfall cycle yields new requirements and enables the development team to create a robust series of prototypes.

  • Rapid application development (RAD) life cycle - This approach has a heavy emphasis on creating a prototype that closely resembles the final product. The prototype is an essential part of the requirements phase. One disadvantage of this model is that the emphasis on creating the prototype can cause scope creep; developers can lose sight of their initial goals in the attempt to create the perfect application.

Understanding the Packaging Process

To move an application from one Oracle Application Express instance to another, you must move both the metadata and supporting objects used by the application as follows:

  1. Move the application definition and all associated files. See "How to Move an Application to Another Development Instance".

  2. Move the supporting objects. Review the Database Dependencies report to determine what objects to move. See "About the Database Object Dependencies Report" and "How to Create a Packaged Application".

This section contains the following topics:

Deployment Options to Consider

When you develop an application in Application Builder, you create the application within a specific workspace. Each workspace has a unique ID and name. A common scenario is to create the application in a development instance and then deploy it to a production instance.

During the deployment process, you must decide whether you want to use the existing application ID, the existing workspace, the existing database, the existing Oracle HTTP Server, or create new ones. Deployment options to consider include:

  1. Create Application Express End Users. The simplest way to deploy an application is to create Application Express end users and then send the URL and login information to users. This approach works well for applications with a small and tolerant user population. See "About Publishing the Application URL" and "Managing Application Express Users" in Oracle Application Express Administration Guide.

  2. Use the same workspace and same schema. Export and then import the application and install it using a different application ID. This approach works well when there are few changes to the underlying objects, but frequent changes to the application functionality.

  3. Use a different workspace and same schema. Export and then import the application into a different workspace. This is an effective way to prevent a production application from being modified by developers.

  4. Use a different workspace and different schema. Export and then import the application into a different workspace and install it so that it uses a different schema. This new schema will need to have the database objects required by your application. See "About the Database Object Dependencies Report".

  5. Use a different database with all its variations. Export and then import the application into a different Oracle Application Express instance and install it using a different schema and database.

Deciding Whether to Copy a Workspace

Deciding whether to copy an existing workspace is a matter of preference. Keep in mind that the production version must have access to all the appropriate objects. For example, you might want to copy a workspace in the following situations:

  • When the application subscribes to other Oracle Application Express objects within the workspace.

  • When the application relies on Oracle Application Express authentication. Copying the workspace automatically migrates all the required user data.

Deciding Whether to Copy a Database

When deciding whether to copy the database, remember that the schema against which the application runs must have access to the same objects as the development instance. The actual name of the schema is unimportant. You can change it during the import process.

About the Application ID

It is not necessary to have matching application IDs for a development version and production version of an application. In fact, as a best practice never hard code the application ID into your application. Instead, use the application alias (defined on the Edit Definition page), or use a built-in substitution string (such as APP_ID and APP_ALIAS). Using a substitution string is the better approach because it enables you to change the application ID without affecting any application functionality.


See Also:

"Name" for information about defining an application alias and "About Built-in Substitution Strings" for information about using APP_ID and APP_ALIAS

Deciding to Install a New HTTP Server

In order to run, Oracle Application Express must have access to either the embedded PL/SQL gateway or Oracle HTTP Server and mod_plsql. Installing a new HTTP server is another way to separate a development version and production version of an application. To learn more about HTTP server configuration options, see "Choosing a HTTP Server" in the appropriate installation guide for your operating environment. See "Related Documents".

How to Move an Application to Another Development Instance

Whether you want to move an application to another workspace or just make a copy of it, deploying involves the following steps:

  1. Move the supporting database objects (if appropriate). Review the Database Dependencies report to determine what objects to move. See "About the Database Object Dependencies Report".

  2. Package an application definition with its supporting objects to create a packaged application. See "How to Create a Packaged Application".

  3. Import the exported files into the target Oracle Application Express instance. See "Importing Export Files".

    Note that if the target instance is a different schema, you also need to export and import any required database objects.

  4. Install the exported files from Export Repository. See "Installing Export Files".

You can import an application into your workspace regardless of the workspace in which it was developed. See "Deployment Options to Consider".


Tip:

You can also move the application definition and all supporting objects manually. See "Exporting an Application and Related Files".

About Managing Database Objects

Before you export an application and the appropriate related files, you must determine if you also need to migrate the database objects referenced by the application. If you are unsure of which database objects to move, review the Database Object Dependencies report.

If the target schema is different from the schema used in the development environment, you need to migrate the database objects referenced by the application. In many cases, this process can be as simple as using Oracle database export and import utilities to copy the application schema from the development environment to target instance. The following are two common scenarios where this approach does not work:

  • When the object development schema refers to tablespaces to which the target instance schema does not have access

  • When the development instance schema has sample data that you do not want to migrate to the target instance schema

If a database administrator or an Oracle Application Express administrator is the person responsible for exporting Oracle Application Express applications, be sure to clearly communicate if he or she:

  • Should include all data when exporting your application

  • Should not include data from specific tables you identify


Tip:

"Loading and Unloading Data from the Database" in Oracle Application Express SQL Workshop and Utilities Guide

How to Create a Packaged Application

You can greatly simplify the steps needed to deploy an application by creating a packaged application on the Supporting Objects page.

This section contains the following topics:

How a Packaged Application Simplifies Deployment

From a user's perspective, importing and installing an application is a complicated process. First, you create the target database objects and seed data. Second, you import and install the application definition and all related files, including images, themes, and any other required static files.

Creating a packaged application using the Supporting Objects utility greatly simplifies this process. Instead of performing numerous steps to create the database objects and then import and install the application and all supporting files, you can define the supporting objects so that the application and supporting files can be migrated in a few easy steps.

After users import and install the application definition, a wizard guides them through a few simple configuration steps. Then, the wizard asks whether to install the supporting application objects. Users have the option of installing the supporting application objects then or doing it later.

From a developer's perspective, this feature has a number of advantages:

  • Ensures that the supporting objects are created in the correct order.

  • Provides users with an automated process for deploying an application quickly using very few steps.

  • Gives users the option to install supporting application objects when they import and install the application definition or at a later time. See "Installing Supporting Objects".

  • Enables users and developers with a convenient method for removing the application definition, supporting files, and all database objects. See "Deinstalling Supporting Objects".

  • Enables users and developers with an easy way to upgrade a previously released packaged application. See "Upgrading a Packaged Application".

Plus, you can also take advantage of the Deinstall and Install features to quickly edit the underlying database objects that support an application. For example, you can deinstall and remove all database objects, edit the underlying database object creation scripts, and reinstall to create the redefined application objects.

Creating a Packaged Application

To create a packaged application, you must create installation scripts that define your application's supporting objects (including database objects, images, and seed data) and any preinstallation validations. You define these objects and the installation and deinstallation scripts and the messages that display when the user installs or deinstalls on the Supporting Objects page.

This section contains the following topics:

Accessing the Supporting Objects Page

You create a packaged application on the Supporting Objects page.

To access the Supporting Objects Page application:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select the application.

    The Application home page appears.

  3. Click the Supporting Objects icon.

    The Supporting Objects page appears.

About the Supporting Objects Page

The top of the Supporting Objects page displays the application name and indicates current selections for the following: Check for Objects, Verify System Privileges, Required Free KB, Prompt for License, Substitutions, Build Options, Validations, Installation Scripts, Upgrade Scripts, Deinstallation Script, and Include in Export.

Description of sup_object_sum.gif follows
Description of the illustration sup_object_sum.gif

The rest of the page is divided into four categories.

Installation

Use the links under Installation to define the following types of information:

  • Prerequisites. Defines built-in checks required before installing the application, including required free disk space, required system privileges, and schema object restrictions.

  • Application substitution strings. Lists static substitution strings defined for the application. You can define static substitution strings for phrases or labels that occur in many places within an application. See "Substitutions".

    When packaging an application, you can include prompts for substitution strings which users can specify when they install the packaged application.

  • Build Options. Lists build options defined for this application. You can use build options to conditionally display specific functionality within an application. See "Using Build Options to Control Configuration" and "Exporting Build Options or Build Option Status".

    When packaging an application, you can include prompts for specific build options which display when the application is installed.

  • Pre-installation Validations. Lists validations defined for the packaged application. Similar to normal page validations, these validations prevent a user from installing database objects if the user-defined conditions are not satisfied. To create a new validation, click Create and follow the on-screen instructions.

  • Installation Scripts. Enables a you to define multiple installation scripts that install supporting objects for the application. To create a new script, click Create and follow the on-screen instructions. To edit an existing script, click the Edit icon.

Message

Use the links under Message to define message to display when the user installs or deinstalls the application. Supported HTML tags include <b>, <i>, <u>, <p>, <br>, <hr>, <ul>, <ol>, <li>, and <pre>. Available message types include:

  • Welcome

  • License

  • Application Substitutions

  • Build Options

  • Validations

  • Confirmation

  • Post Installation

  • Upgrade

  • Deinstallation

Note that when these messages display, only a limited set of HTML tags are recognized in order to prevent a cross site-scripting (XSS) attack. See "Understanding Cross-Site Scripting Protection".

Upgrade

Click Upgrade scripts to define scripts to upgrade database objects, images, and seed data when upgrading an existing application. See "Upgrading a Packaged Application".

Deinstallation

Click Deinstallation script to define a script to drop database objects and static files created by the installation scripts. To edit an existing script, click the Edit icon.

Adding Installation Scripts for an Image, Cascading Style Sheet, or Static File

You can create installation scripts for images, cascading style sheets, and static files you have previously uploaded for your application or workspace on the Installation Scripts page. Oracle Application Express uses the name of the file you select as the name for each new script. It also adds corresponding API calls to the end of the deinstallation script (or creates one if one does not already exist), which removes the selected files when the application's supporting objects are deinstalled.

To create installation scripts for an image, cascading style sheet, or static file:

  1. Navigate to the Supporting Objects page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select the application.

      The Application home page appears.

    3. Click Supporting Objects.

      The Supporting Objects page appears.

  2. Under Installation, click Installation scripts.

    The Installation Scripts page appears.

  3. Click Create.

  4. At the bottom of the page, click Create Script to Install Files.

    A list of available cascading style sheets, images, and static files appears.

  5. Select the files to include with your packaged application and click Create Script.

Adding an Access Control List to a Packaged Application

You can control access to an application, individual pages, or page components by creating an access control list.

To add an access control list of a packaged application:

  1. Create an access control list. See "Controlling Access to Applications, Pages, and Page Components".

  2. Navigate to the Supporting Objects page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select the application.

      The Application home page appears.

    3. Click Supporting Objects.

      The Supporting Objects page appears.

  3. Under Installation, click Installation scripts.

    The Installation Scripts page appears.

  4. Click Create.

  5. At the bottom of the page, click Create Scripts for Access Control Tables.

    If Access Control tables are defined, the Create Script page displays the tables to be included.

  6. Click Create Script.

Installing Supporting Objects

After you edit your supporting objects and create the appropriate scripts, you can run your installation scripts by clicking Install Supporting Objects on the Tasks list.

End users can also use this feature if they elect to not install the packaged application (or supporting objects) after they import and install the application definition.

To install supporting objects:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select the application.

  3. Click <span class="bold">Supporting Objects.

    The Supporting Objects page appears.

  4. Click the Install Supporting Objects on the Tasks list.

  5. To view details about the installation script before running it, click Preview Installation Script.

    The Preview Scripts page appears listing summary information, prerequisites, and the actual scripts to be run.

  6. To exit the Preview Scripts page and continue, click Close.

  7. From Install Supporting Objects, click Yes and click Next.

  8. Follow the on-screen instructions.

Deleting Supporting Objects Scripts, Messages, and Installation Options

You can delete the metadata that defines supporting object scripts, messages, and installation options associated with a packaged application by clicking Remove Supporting Object Installation on the Tasks list on the Supporting Objects page.

To delete the metadata that defines supporting object scripts, messages, and installation options:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click Supporting Objects.

    The Supporting Objects page appears.

  4. On the Tasks list on the right side of the page, click Remove Supporting Object Installation.

  5. Follow the on-screen instructions.

Upgrading a Packaged Application

You can define scripts to upgrade a previously published application on the Upgrade page.

This section contains the following topics:

Defining an Upgrade Script

You can use the Upgrade page to define scripts to upgrade database objects, images, and seed data when upgrading an existing application.

To create an upgrade script:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click Supporting Objects.

    The Supporting Objects page appears.

  4. Under Upgrade, click Upgrade Scripts.

  5. To create a script, click Create.


    Tip:

    To enable users to upgrade from various earlier versions of this application, you can add conditions to the upgrade scripts by going to the Script Properties page.

    Use the Detect Existing Supporting Objects section to determine if the appropriate objects are installed or need to be upgraded.

  6. In Query to Detect Existing Supporting Objects, enter a query in the field provided that returns at least one row if the supporting objects exist.

    This query determines whether the user who installs the packaged application is prompted to run the installation scripts or the upgrade scripts.

  7. Follow the on-screen instructions.

Upgrading a Packaged Application

After you create your upgrade script, you can test it by clicking Upgrade Supporting Objects on Tasks list on the Supporting Object page.

End users can also use this feature to upgrade an existing packaged application.

To upgrade a packaged application:

  1. Import a new version of application to be upgraded (if applicable). See "Importing an Application or Page".

  2. On the Workspace home page, click the Application Builder icon.

  3. Select the application.

  4. Click Supporting Objects.

    The Supporting Objects page appears.

  5. From the Tasks list, click Upgrade Supporting Objects.

  6. Follow the on-screen instructions.

Deinstalling Supporting Objects

Once you create or install a packaged application, you can deinstall it by either:

  • Clicking the Deinstall Supporting Objects on the Supporting Objects page

  • Clicking Delete this Application on the Application home page

When you deinstall an application, you have the option of removing the current application definition and running the deinstallation script defined in the Supporting Objects.

To deinstall a packaged application:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select the application.

  3. Click Supporting Objects.

    The Supporting Objects page appears.

  4. Click Deinstall Supporting Objects.

  5. Select a deinstallation option:

    • Remove Application Definition removes the current application definition.

    • Deinstall Database Objects runs the deinstallation script defined in the deployment attributes for this application.

  6. Follow the on-screen instructions.

Viewing an Install Summary

You can view a log of recent installation and deinstallation by clicking View Install Summary on the Tasks list on the Supporting Objects page. Note that this log only displays results from the most recent installation or deinstallation that occurred during the current Application Express session.

To view the Install Summary:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select the application.

  3. Click Supporting Objects.

    The Supporting Objects page appears.

  4. On the Tasks list on the right side of the page, click View Install Summary.

    A Summary page appears.

Exporting an Application and Related Files

You export and import application definitions and all associated files using the Workspace Users, Application, CSS, Images, Files, Themes, and User Interface Defaults tabs located at the top of the Export page. Note that it is not necessary to export a workspace unless you want to migrate workspace users or replicate shared component subscriptions in the target instance.

Once you export an application and any related files, you must import them into the target Oracle Application Express instance and then install them. As a general rule, always import the application first and then the related files. See "How to Move an Application to Another Development Instance".


Tip:

You can simplify the steps needed to deploy an application by creating a packaged application. See "How to Create a Packaged Application".

This section contains the following topics:

Exporting an Application

When you export an application, Oracle Application Express generates a text file containing PL/SQL API calls.

To export an application:

  1. Navigate to the Export page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. On the Application home page, click Export/Import.

    4. On the Export/Import page, click Export and then click Next.

  2. From Application, select the application to be exported.

  3. From File Format, select how rows in the export file will be formatted:

    • Choose UNIX to have the resulting file contain rows delimited by line feeds.

    • Choose DOS to have the resulting file contain rows delimited by carriage returns and line feeds.

  4. From Owner Override, optionally select another owner. By default, the application is owned by the owner identified in the application attribute owner.

  5. From Build Status Override, select one of the following:

    • Run Application Only - Developers can only run an application

    • Run and Build Application - Developers can both run and edit an application

    Selecting Run Application Only is an effective way to protect an application from modifications from other developers.


    Tip:

    If you select Run Application Only, you cannot set the argument p_trace to Yes. See "Using Build Options to Control Configuration". Also, the only way to change this setting after you import the application, is to log in to Oracle Application Express Administration Services. See "Changing Application Build Status Set During Deployment" in Oracle Application Express Administration Guide.

  6. From Debugging, select one of the following:

    • Yes exports the application with debugging enabled.

    • No exports the application with debugging disabled.

  7. From Exporting Supporting Object Definitions, specify whether to export supporting object definitions with your application. Available options include: See "How to Create a Packaged Application".

  8. From Export Comments, specify whether to export comments for this application. See "Adding Developer Comments".

  9. Use the As of field to export your application as it was previously defined. Specify the number of minutes in the field provided.

    This utility uses the DBMS_FLASHBACK package. Because the timestamp to System Change Number (SCN) mapping is refreshed approximately every five minutes, you may have to wait that amount of time to locate the version for which you are looking. The time undo information is retained and influenced by the startup parameter UNDO_RETENTION (the default is three hours). However, this only influences the size of the undo tablespace. While two databases can have the same UNDO_RETENTION parameter, you are able to go back further in time on a database with fewer transactions because it is not filling the undo tablespace, forcing older data to be archived.

  10. Click Export Application.

In addition to exporting the actual application file, you may also need to export other related files such as cascading style sheets, images, and script files.

Exporting Workspace Users

You can make an application available to other users by creating workspace users. When you export workspace users, Oracle Application Express creates an ASCII text SQL script of users and any defined user groups.

To export workspace users:

  1. Navigate to the Export page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. On the Application home page, click Export/Import.

    4. On the Export/Import page, click Export and then click Next.

  2. On the Export page, click the Workspace Users tab.

  3. From File Format, select how rows in the export file will be formatted:

    • Choose UNIX to have the resulting file contain rows delimited by line feeds.

    • Choose DOS to have the resulting file contain rows delimited by carriage returns and line feeds.

  4. Click Export Workspace Users.


See Also:

"Managing Application Express Users" in Oracle Application Express Administration Guide

Exporting Application Components

You can export shared components or components of a page on the Component Export page. You can use this wizard to:

  • Export shared components or page components to another application or workspace

  • Back up a component before editing it

  • Create an export to function as a patch to another Oracle Application Express instance

To export shared components or page components:

  1. Navigate to the Component Export page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. Click Shared Components.

    4. From the Tasks list, click Export Application Components.

      The Component Export page appears.

  2. Click the following tabs and select the components to be exported:

  3. Click Add to Export.

  4. Click Next.

  5. On Components to Export:

    1. From File Format, select how rows in the export file will be formatted:

      • Choose UNIX to have the resulting file contain rows delimited by line feeds.

      • Choose DOS to have the resulting file contain rows delimited by carriage returns and line feeds.

    2. Use the As of field to export a page as it was previously defined. Specify the number of minutes in the field provided.

      This utility uses the DBMS_FLASHBACK package. Because the timestamp to System Change Number (SCN) mapping is refreshed approximately every five minutes, you may have to wait that amount of time to locate the version for which you are looking. The time undo information is retained and influenced by the startup parameter UNDO_RETENTION (the default is three hours). However, this only influences the size of the undo tablespace. While two databases may have the same UNDO_RETENTION parameter, you are able to go back further in time on a database with fewer transactions because it is not filling the undo tablespace, forcing older data to be archived.

    3. Click Export Components.

Exporting a Page in an Application

You can also export a specific page within an application by clicking the Export page icon on the Page Definition. When exporting a page, remember that exported pages can only be imported sucessfully if they have the same application ID and workspace ID.

To export a page in an application:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. On the Page Definition, you can export a page in two ways:

    • Click the Export Page icon, the down arrow in the upper right corner.

    • From the View list, select Export and click Go.

    The Export Page Wizard appears.

  3. From Page, select the page to be exported.

  4. From File Format, select how rows in the export file will be formatted:

    • Choose UNIX to have the resulting file contain rows delimited by line feeds.

    • Choose DOS to have the resulting file contain rows delimited by carriage returns and line feeds.

  5. Use the As of field to export a page as it was previously defined. Specify the number of minutes in the field provided.

    This utility uses the DBMS_FLASHBACK package. Because the timestamp to System Change Number (SCN) mapping is refreshed approximately every five minutes, you may have to wait that amount of time to locate the version for which you are looking. The time undo information is retained and influenced by the startup parameter UNDO_RETENTION (the default is three hours). However, this only influences the size of the undo tablespace. While two databases may have the same UNDO_RETENTION parameter, you are able to go back further in time on a database with fewer transactions because it is not filling the undo tablespace, forcing older data to be archived.

  6. Click Export Page.

Exporting Cascading Style Sheets

Use the Export Cascading Style Sheets utility to export uploaded cascading style sheets. Note that you can use this utility to export only uploaded cascading style sheets.

To export related cascading style sheets:

  1. Navigate to the Export page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. On the Application home page, click Export/Import.

    4. On the Export/Import page, click Export and then click Next.

  2. Click the CSS tab at the top of the page.

  3. On the Export Cascading Style Sheets page, select the following:

    1. Stylesheets - Select the cascading style sheets to export.

    2. File Format - Select how rows in the export file will be formatted:

      • Choose UNIX to have the resulting file contain rows delimited by line feeds.

      • Choose DOS to have the resulting file contain rows delimited by carriage returns and line feeds.

    3. Click Export Style Sheets.

Exporting Images

Use the Export Images utility to export uploaded images. When you export images using this utility, the images are converted to a text document. Note that you can use this utility to export only uploaded images.

To export upload images:

  1. Navigate to the Export page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. On the Application home page, click Export/Import.

    4. On the Export/Import page, click Export and then click Next.

  2. Click the Images tab at the top of the page.

  3. On the Export Images page, select the following:

    1. Export Images in Application - Select an application from which to export images.

      Be aware that selecting Workspace Images only exports those images in your repository that are not associated with a specific application. If all of your images are associated with specific applications, then the workspace image export file will be empty.

    2. File Format - Select how rows in the export file will be formatted:

      • Choose UNIX to have the resulting file contain rows delimited by line feeds.

      • Choose DOS to have the resulting file contain rows delimited by carriage returns and line feeds.

  4. Click Export Images.

Exporting Static Files

Use the Export Static Files utility to export static files you have imported. Note that you can use this utility to export only uploaded static files.

To export related static files:

  1. Navigate to the Export page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. On the Application home page, click Export/Import.

    4. On the Export/Import page, click Export and then click Next.

  2. Click the Files tab at the top of the page.

  3. On Export Static Files, select the following:

    1. Static Files - Select the files to be exported.

    2. File Format - Select how rows in the export file will be formatted:

      • Choose UNIX to have the resulting file contain rows delimited by line feeds.

      • Choose DOS to have the resulting file contain rows delimited by carriage returns and line feeds.

    3. Click Export File(s).

About Importing into Another Oracle Application Express Instance

Note that you cannot use the Web interface described in this section to import exported static files into another Oracle Application Express instance. To import exported static files into another Oracle Application Express instance, use SQL*Plus while connected to the database. Note that you must export from and to a workspace having the same name and workspace ID.

Exporting Script Files

You can transfer selected scripts from your current Script Repository to a Script Repository in a different Workspace by using the Export and Import tasks.

To export script files:

  1. On the Workspace home page, click the SQL Workshop icon.

  2. Click SQL Scripts.

  3. On the Tasks list, click Export.

  4. Select the appropriate script files and click Add to Export.

  5. Review the file name and click Export All.

    Select the Remove check box to remove the script.

Exporting Themes

Use the Export Theme utility to export themes from one Oracle Application Express development instance to a file.

Exporting a Theme from the Export Page

To export an application theme from the Export page:

  1. Navigate to the Export page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. On the Application home page, click Export/Import.

    4. On the Export/Import page, click Export and click Next.

  2. Click the Themes tab at the top of the page.

  3. On the Export Application Theme page, select the following:

    1. Export Theme - Select the theme to be exported.

    2. File Format - Select how rows in the export file will be formatted:

      • Choose UNIX to have the resulting file contain rows delimited by line feeds.

      • Choose DOS to have the resulting file contain rows delimited by carriage returns and line feeds.

    3. Click Export Theme.

Exporting a Theme from the Themes Page

To export an application theme from the Themes page:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. On the Application home page, click Shared Components.

  4. Under User Interface, select Themes.

    The Themes page appears.

  5. On the Tasks list, click Export Theme.

    The Export page appears.

  6. On the Export Theme page, select the following:

    1. Export Theme - Select the theme to be exported.

    2. File Format - Select how rows in the export file will be formatted:

      • Choose UNIX to have the resulting file contain rows delimited by line feeds.

      • Choose DOS to have the resulting file contain rows delimited by carriage returns and line feeds.

    3. Click Export Theme.

Exporting User Interface Defaults

Exporting User Interface Defaults is useful when you plan to develop on a target system.

When you export User Interface Defaults, all User Interface Defaults for the selected schema are exported to a single SQL Command script. When prompted, save this file to your hard drive. The file contains an API call to create table hints by making calls to the application PL/SQL API. You can use this file to import User Interface Defaults to another database and Oracle Application Express instance.

Exporting User Interface Defaults from the Export Page

To export User Interface Defaults from the Export page:

  1. Navigate to the Export page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. On the Application home page, click Export/Import.

    4. On the Export/Import page, click Export and click Next.

  2. Click the User Interface Defaults tab at the top of the page.

  3. On the Export User Interface Defaults page, select the following:

    1. Schema - Select the schema that owns the table associated with the User Interface Defaults.

    2. File Format - Select how rows in the export file will be formatted:

      • Choose UNIX to have the resulting file contain rows delimited by line feeds.

      • Choose DOS to have the resulting file contain rows delimited by carriage returns and line feeds.

    3. Click Export User Interface Defaults.

Exporting User Interface Defaults from the User Interface Defaults Page

To export User Interface Defaults from the User Interface Defaults page:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. On the Application Builder home page, click Shared Components.

  4. Under User Interface, select User Interface Defaults.

    The User Interface Defaults page appears.

  5. From the Tasks list, click Export.

  6. On the Export User Interface Defaults page, select the following:

    1. Schema - Select the schema that owns the table associated with the User Interface Defaults.

    2. File Format - Select how rows in the export file will be formatted:

      • Choose UNIX to have the resulting file contain rows delimited by line feeds.

      • Choose DOS to have the resulting file contain rows delimited by carriage returns and line feeds.

    3. Click Export User Interface Defaults.

Where Images, CSS, and Script Files Are Stored

In order to run, Oracle Application Express must have access to either Oracle HTTP Server and mod_plsql or the embedded PL/SQL gateway. Where images, CSS, and script files are stored depends upon the HTTP server you choose.

This section contains the following topics:

Where Images, CSS, and Script Files Are Stored When Using Oracle HTTP Server

In an Oracle HTTP Server or Oracle Application Server configuration, images are stored on the file system in the location referenced by the alias /i/. To locate the images directory on the file system, review the following files and search for the text alias /i/:

  • Oracle9i HTTP Server Release 2—see the httpd.conf file.

  • Oracle HTTP Server distributed with Oracle Database 11g—see the dads.conf file.

  • Oracle Application Server 10g—see the marvel.conf file.

Specific examples for locating the text alias /i/ can be found in Oracle Application Express Installation Guide

Where Images, CSS, and Script Files Are Stored When Using the Embedded PL/SQL Gateway

When running Oracle Application Express with the embedded PL/SQL gateway, images are stored directly in the database within the Oracle XML DB repository. You can access images by using the WebDAV feature of Oracle XML DB or by using FTP. To learn more, see "Using Protocols to Access the Repository" in Oracle XML DB Developer's Guide.

Importing Export Files

Once you export an application and any related files, you need to import them into the target Oracle Application Express instance before you can install them. As a general rule, always import the application first and then the related files. See "How to Move an Application to Another Development Instance".


Tip:

You can simplify the steps needed to deploy an application by creating a packaged application. See "How to Create a Packaged Application".

This section contains the following topics:

Importing an Application or Page

To import an Application or Page Export into a target Oracle Application Express instance:

  1. Navigate to the Import page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. On the Application home page, click Export/Import.

    4. On the Export/Import page, click Import and then click Next.

  2. For Specify File, specify the following:

    1. Import file - Click Browse and navigate to the file.

    2. File Type - Select Application, Page, or Component Export.

    3. Verify that File Character Set is correct.

    4. Click Next.

    Once you import a file, you have the option to install it.

  3. To install an imported file, click Next.

    The Install Application wizard appears.

  4. In the Install Application wizard, specify the following:

    1. Parsing Schema - Select a schema.

      This is the schema against which all of the application's SQL and PL/SQL will be parsed.

    2. Build Status - Select one of the following:

      • Run Application Only - Users can only run an application.

      • Run and Build Application - Users can run an application and developers can both run and edit an application.

      Selecting Run Application Only is an effective way to protect an application from modifications from other developers.


      Tip:

      If you select Run Application Only, the only way to change this setting after you import the application is to log in to Oracle Application Express Administration Services. See "Changing Application Build Status Set During Deployment" in Oracle Application Express Administration Guide.

    3. Install As Application - Select one of the following:

      • Auto Assign New Application ID

      • Reuse Application ID From Export File

      • Change Application ID

      Use these options to avoid application ID conflicts. These options come in handy when you have two versions of the same application in the same instance. For example, you might be migrating an application to a production instance and still need to maintain the development version.

    4. Click Install.

      If you are installing a packaged application (that is, one for which you have defined Supporting Objects), the installer prompts you to install the packaged installation scripts. Follow the on-screen instructions.

About Importing Application Groups

Application groups are exported with an application, application exports include an group ID, name, and comments. When importing an application, the application import follows these rules:

  • On import, an application uses an existing group if the ID matches.

  • If no application group exists with the same ID on the target machine, then application import looks for another group ID with the same name. If a name match is found, the application is imported with the ID corresponding to this application group name.

  • If no ID or name matches existing application groups on the target machine then a new application group is created. The new application group will use the application group ID if that ID is not used in that Oracle Application Express instance. If the group ID is being used, then a new ID will be generated.

Importing Cascading Style Sheets

After you import an application into the target Oracle Application Express instance, you must import all related files.

To import a CSS Export file:

  1. Navigate to the Import page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. On the Application home page, click Export/Import.

    4. On the Export/Import page, click Import and then click Next.

  2. For Specify File, select the following:

    1. Import file - Click Browse and navigate to the file.

    2. File Type - Select CSS Export.

    3. File Character Set - Verify that File Character Set is correct.

    4. Click Next.

    Once you import a file, you have the option to install it.

  3. To install an imported file, click Next.

  4. Click Install CSS.

Importing Static Files

After you import an application into the target Oracle Application Express instance, you must import all related files.

To import a static file:

  1. Navigate to the Import page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. On the Application home page, click Export/Import.

    4. On the Export/Import page, click Import and click Next.

  2. For Specify File, select the following:

    1. Import file - Click Browse and navigate to the file.

    2. File Type - Select File Export.

    3. File Character Set - Verify that File Character Set is correct.

    4. Click Next.

    Once you import a file, you have the option to install it.

  3. To install an imported file, click Next.

  4. Click Install Static Files.

Importing Images

After you import an application into the target Oracle Application Express instance, you must import all related files.

To import an Image Export file:

  1. Navigate to the Import page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. On the Application home page, click Export/Import.

    4. On the Export/Import page, click Import and click Next.

  2. On Import Definition, select the following:

    1. Import file - Click Browse and navigate to the file.

    2. File Type - Select Image Export.

    3. File Character Set - Verify that File Character Set is correct.

    4. Click Next.

    Once you import a file, you have the option to install it.

  3. To install an imported file, click Next.

  4. Click Install Image.

Importing Themes

After you import an application into the target Oracle Application Express instance, you must import all related files.

To import a Theme Export file:

  1. Navigate to the Import page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. On the Application home page, click Export/Import.

    4. On the Export/Import page, click Import and click Next.

  2. On Import Definition, select the following:

    1. Import file - Click Browse and navigate to the file.

    2. File Type - Select Theme Export.

    3. File Character Set - Verify that File Character Set is correct.

    4. Click Next.

    Once you import a file, you have the option to install it.

  3. To install an imported file, click Next.

  4. Click Install Theme.

Importing User Interface Defaults

User Interface Defaults enables you to assign default user interface properties to a table, column, or view within a specified schema.

After you import an application into the target Oracle Application Express instance, you must import all related files.

To import User Interface Defaults:

  1. Navigate to the Import page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. On the Application home page, click Export/Import.

    4. On the Export/Import page, click Import and then click Next.

  2. Select an application.

  3. On Import Definition, select the following:

    1. Import file - Click Browse and navigate to the file.

    2. File Type - Select User Interface Defaults.

    3. File Character Set - Verify that File Character Set is correct.

    4. Click Next.

    Once you import a file, you have the option to install it.

  4. To install an imported file, click Next.

  5. Click Install User Interface Defaults.

Installing Export Files

After you import an application and any related files into the target Oracle Application Express instance, the files are stored in the Export Repository. Next, you must install them.

You can install export files in the following ways:

  • After you import the export file, click the Install button and follow the on-screen instructions.

  • Import the export files into Application Builder and then install the files from the Export Repository.

  • Install the export files from SQL*Plus.


Tip:

You can simplify the steps needed to deploy an application by creating a packaged application. See "How to Create a Packaged Application".

This section contains the following topics:

Accessing the Export Repository

When you import an application and any related files into a target Oracle Application Express instance, the files are stored in the Export Repository.

To access the Export Repository:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. On the Tasks list, click Manage Export Repository.

    The Export Repository appears.


Tip:

You can also access the Export Repository by clicking Export Repository on the Tasks list on either the Application home or Application Builder home pages.

Installing an Application Export from the Export Repository

After you import an application export into an Oracle Application Express instance, you must install it before it can become active or available in Application Builder.

To install an application export from the Export Repository:

  1. Navigate to the Export Repository:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. On the Tasks list, click Manage Export Repository.

      The Export Repository appears.

  2. Select an application export and click Install in the Action column.

  3. Specify the following:

    1. Parsing Schema - Select a schema.

      This is the schema against which all of the application's SQL and PL/SQL will be parsed.

    2. Build Status - Select one of the following:

      • Run Application Only

      • Run and Build Application

      Select Run Application Only to run the application in the target instance and make it inaccessible to developers.


      Tip:

      If you select Run Application Only, the only way to change this setting after you import the application is to log in to Oracle Application Express Administration Services. See "Changing Application Build Status Set During Deployment" Oracle Application Express Administration Guide.

    3. Install As Application - Select one of the following:

      • Reuse Application ID from Export File

      • Auto Assign New Application ID

      • Change Application ID

      Use these options to avoid application ID conflicts. Use these options when you must have two versions of the same application in the same instance. For example, you might be migrating an application to a production instance and still need to maintain the development version.

    4. Click Install.

About Installing a Packaged Application

If you are installing a packaged application, the installer prompts you to install the packaged installation scripts. Follow the on-screen instructions.

Installing Other Files from the Export Repository

After you import files into an Oracle Application Express instance, you must install them before they can become active or available in Application Builder.

To install files stored in the Export Repository:

  1. Navigate to the Export Repository.

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. On the Tasks list, click Manage Export Repository.

      The Export Repository appears.

  2. Select the file to be installed and click Install in the Action column.

  3. Follow the on-screen instructions and click the Install button.

Deleting Files from the Export Repository

You can delete a file from the Export Repository.

To delete a file from the Export Repository:

  1. Navigate to the Export Repository.

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. On the Tasks list, click Manage Export Repository.

      The Export Repository appears.

  2. Select the file to be deleted and click Delete Checked.

Installing Export Files from SQL*Plus

You can also install export files from SQL*Plus. Note there are two restrictions:

  • The export file must originate from the same user database account as the one into which you are installing.

  • If the export file is an application, the application ID will be overwritten. Therefore, the target workspace must own the ID of the application being installed.

  • If the export file contains Supporting Object scripts, the scripts are not run when the application is installed. You can either log in to the Application Builder to install Supporting Objects, or copy the installation scripts to a standalone SQL*Plus script and run them from there.

This section contains the following topics:

Verifying If Source and Target Workspace IDs Are Identical

You can verify that the source and target workspaces are identical by running a query in SQL Command Processor.

To verify that the source and target workspaces are identical:

  1. Log in to the source workspace.

  2. Click the SQL Workshop icon on the Workspace home page.

  3. Click SQL Commands.

  4. Enter the following in the SQL editor pane and click Run:

    SELECT &WORKSPACE_ID. FROM DUAL
    
  5. Note the workspace ID.

  6. Log in to the target workspace.

  7. Repeat steps 2 through 5 to verify the workspace IDs match.

Using SQL*Plus to Install Export Files

To install Oracle Application Express export files from SQL*Plus:

  1. Log in to SQL*Plus.

  2. Run the export file.

    For example, if your export file is names f144.sql by default, you would type @f144 at the command prompt.

About Publishing the Application URL

Once you have deployed your application, loaded data, and created users, you can publish your production URL.

You can determine the URL to your application by positioning the mouse over the Run icon on the Application home page. The URL displays in the status bar at the bottom of the page.

The Run icon gets its value from the Home link attribute on the Edit Security Attributes page. This link is only referenced by this icon and by applications that do not use the Oracle Application Express Login API. Consider the following example:

http://apex.somewhere.com/pls/apex/f?p=11563:1:3397731373043366363

Where:

  • apex.somewhere.com is the URL of the server.

  • pls is the indicator to use the mod_plsql cartridge.

  • apex is the database access descriptor (DAD) name. The DAD describes how Oracle HTTP Server connects to the database server so that it can fulfill an HTTP request. The default value is apex.

  • f?p= is a prefix used by Oracle Application Express.

  • 11563 is the application being called.

  • 1 is the page within the application to be displayed.

  • 3397731373043366363 is the session number.

To run this example application, you would use the URL:

http://apex.somewhere.com/pls/apex/f?p=11563:1

When users log in, they receive unique session numbers.

Using Build Options to Control Configuration

Build options enable you to conditionally display specific functionality within an application.

Build options have two possible values: INCLUDE and EXCLUDE. If you specify an attribute as being included, then the Application Express engine considers it part of the application definition at run time. Conversely, if you specify an attribute as being excluded, then the Application Express engine treats it as if it did not exist.

This section contains the following topics:


See Also:

See "Changing Application Build Status Set During Deployment" in Oracle Application Express Administration Guide.

Creating Build Options

You create a build option for an application on the Build Options page.

To create a build option:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. On the Application Builder home page, click Shared Components.

  4. Under Application, click Build Options.

  5. To create a new build option, click Create.

  6. Follow the on-screen instructions.

About the Build Options Page

Once you create a build option, it appears on the Build Options page. You control how the Build Options page displays by making a selection from the View list. Available options include:

  • Icons (the default) displays each build option as a large icon. To edit a build option, click the appropriate icon.

  • Details displays each build option as a line in a report. Each line includes the application ID, build option name, status, and a link to the Build Option Utilization report. To edit a build option, click the appropriate name.

Managing Build Options

Build options have two possible values: INCLUDE and EXCLUDE. If you specify an attribute as being included, then the Application Express engine considers it part of the application definition at run time. Conversely, if you specify an attribute as being excluded, then the Application Express engine treats it as if it did not exist.

To include or exclude a build option:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. On the Application Builder home page, click Shared Components.

  4. Under Application, click Build Options.

  5. Select the appropriate build option.

    The Create/Edit Build Option page appears.

  6. For Status, select either INCLUDE or EXCLUDE.

Selecting a Build Option

Once you create a build option, you can select it for a page, a component (report, chart, or form), a specific page control (button, item, list of value), and another shared component (breadcrumb, list, or tab). You apply build options to a page, component, page control, or shared component by navigating to the appropriate attributes page. Most attributes pages contain a Configuration section where you can select defined build options.

Exporting Build Options or Build Option Status

You can export build options or build option status on the Component Export page. Exporting build option status is an effective way to toggle build options on or off within another environment. For example, you can use this feature to deploy a production application with a hidden feature.

To accomplish this, you associate the components of the hidden feature with a build option having the status of EXCLUDE. After deployment, you can enable the hidden feature by changing the status of the build option to INCLUDE and then exporting the Build Option Status.

Once you apply the Build Options Status to the production instance, the new feature appears.

To export build options or build option status:

  1. Navigate to the Component Export page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. Click Shared Components.

    4. From the Tasks list, click Component Export.

      The Component Export page appears.

  2. Select the build options to be exported:

    1. Click the Components tab and select the build options to be exported.

    2. Click Add to Export.

  3. Select Build Option Status to be exported:

    1. Click the Build Options Status tab and select the build options to be exported.

    2. Click Add to Export.

  4. Click Next.

  5. On Components to Export:

    1. From File Format, select how rows in the export file will be formatted:

      • Choose UNIX to have the resulting file contain rows delimited by line feeds.

      • Choose DOS to have the resulting file contain rows delimited by carriage returns and line feeds.

    2. Use the As of field to export a page as it was previously defined. Specify the number of minutes in the field provided.

      This utility uses the DBMS_FLASHBACK package. Because the timestamp to System Change Number (SCN) mapping is refreshed approximately every five minutes, you may have to wait that amount of time to locate the version for which you are looking. The time undo information is retained and influenced by the startup parameter UNDO_RETENTION (the default is three hours). However, this only influences the size of the undo tablespace. While two databases may have the same UNDO_RETENTION parameter, you are able to go back further in time on a database with fewer transactions because it is not filling the undo tablespace, forcing older data to be archived.

    3. Click Export Components.

Viewing the Build Option Utilization Report

Once you create a build option, a Utilization tab appears on the Build Options page. This report details build option utilization in the current application.


Note:

The Utilization tab only appears on the Build Options page after you create a build option.

To view the Build Option Utilization report:

  1. Navigate to the Build Options page:

    1. Navigate to the Workspace home page.

    2. Click the Application Builder icon.

    3. Select an application.

    4. On the Application Builder home page, click Shared Components.

    5. Under Application, click Build Options.

      The Build Options page appears.

  2. On the Build Options page, click Utilization.

    The Build Option Utilization report appears.

  3. Select a build option and click Go.

PK_ PK6(AOEBPS/bldr.htm Using Application Builder

4 Using Application Builder

This section provides important background information about using Application Builder to build dynamically rendered applications.

This section contains the following topics:

Accessing Application Builder

An application is a collection of database-driven Web pages linked together using tabs, buttons, or hypertext links. The pages within an application share a common session state definition and authentication method. Application Builder is the tool you use to build the pages that comprise an application.

To access Application Builder:

  1. Log in to Oracle Application Express.

    The Workspace home page appears.

  2. To view the Application Builder home page you can either:

    • Click the Application Builder icon to link to the Application Builder home page.

    • Click the down arrow on the right side of the Application Builder icon to view a drop down menu. Then select the appropriate menu option.

    Description of new_menu.gif follows
    Description of the illustration new_menu.gif


    Note:

    For consistency, this document uses the primary navigation path (or drill-down approach) when explaining navigation.

About the Application Builder Home Page

The Application Builder home page displays all installed applications.

Description of app_bldr_home.gif follows
Description of the illustration app_bldr_home.gif

You can customize the appearance of the Application Builder home page using the navigation bar at the top of the page. Available controls include:

  • Application. Use the Application field to search for an application. Enter a case insensitive query for the application name or application ID and click Go. To view all applications, leave the field blank and click Go.

  • Group. Use the Group field to search for an application group. Select an application group and click Go. See "Creating Applications Groups".

  • View. Use this control to display information about the applications in your workspace. Make a selection from the list and click Go. Available options include:

    • Icons (the default) displays each application as a large icon identified by the application name.

    • Details displays each application as a line in a report. Each line includes the application ID, the application name, when the application was last updated, the page count, and who last updated the application.

    • By Group displays applications by application group.

  • Display. Determines how many applications display on the page. To change the display, make a selection from the list and click Go.

The following buttons appear to the right of the navigation bar:

About the Tasks List

A Tasks list displays on the right side of the Application Builder home page.

Description of appbldr_task_list.gif follows
Description of the illustration appbldr_task_list.gif

The Tasks list contains the following links:

About the Recent List

The Recent list contains links to recently viewed applications.

Configuring Developer Preferences

Many pages in Application Builder include a navigation bar at the top of the page. You can use the controls in the navigation bar to customize the appearance of the page. Most navigation bars include a View and Display list. You can control the default display for both lists on the Developer Preferences page.

To edit developer preferences:

  1. On the Workspace home page, click the Application Builder icon.

  2. From the Tasks list, click Developer Preferences.

  3. From Set View Mode, select one of the following:

    • Icons (the default) displays the items on the page as a large icon.

    • Details displays the items on the page as a line in a report.

  4. From Report Rows, select the number items to display.

  5. Click Apply Changes.

About the Application Home Page

To view a specific application, select the application on the Application Builder home page. The Application home page appears. The application ID and the application name display at the top of the page. To link to the application definition, click application name.

Description of bldr_hm_top.gif follows
Description of the illustration bldr_hm_top.gif

The following large icons appear next:

About the Navigation Bar and Create Page Button

A navigation bar and the Create Page button display in the center of the Application home page. You can use these controls to search for pages, alter the page view, or create a page.

Description of bldr_hm_nav.gif follows
Description of the illustration bldr_hm_nav.gif

The Application home page navigation bar contains the following controls:

  • Page. Search for a page number or name by entering a case insensitive keyword or phrase in the Page field and clicking Go. To view all pages in an application, leave the Page field blank and click Go. You control how many pages display by making a selection from the Display list.

  • View. By default, each page displays as a large icon. You can change the appearance of the page by making a selection from the View list and clicking Go. See "Understanding Page Display Alternatives".

  • Display. Determines how many pages display. To change the number of pages that appear, make a selection from the Display list and click Go.

The Create Page button displays to the right of the navigation bar. Click Create Page to launch a wizard that walks you through creating a page. See "Managing Pages in an Application".

About the Tasks List

A Tasks list displays on the right side of the Application home page.

Description of bldr_task_list.gif follows
Description of the illustration bldr_task_list.gif

The Tasks list contains the following links:

Understanding Page Display Alternatives

You can control how the Application home page appears by making a selection from the View list and clicking Go. Available View modes include:

  • Icons

  • Details

  • by Group

  • by Type

Icons mode (the default) displays each page as a large icon identified by the page name. To view a page, click the icon.

Details mode displays each page as a line in a report. Each line includes the page number, the page name, when the page was last updated, the page type, who updated it, any associated group, and lock status. To view a page, click the page name. Use the Lock icon to prevent conflicts during application development. Click the Run icon to run the associated page and render viewable HTML.

Description of bldr_hm_pglist.gif follows
Description of the illustration bldr_hm_pglist.gif

By Group displays currently defined page groups. You can use page groups to organize and manage the pages within an application. See "Grouping Pages".

By Type separates pages into categories, such as Login, Report, Tabular Form, Dynamic Form, Chart, and so on. The number of pages within each page category displays within a parenthesis to the right of the type name. To view a page, click the page type and then the page.

Description of bldr_hm_type_list.gif follows
Description of the illustration bldr_hm_type_list.gif

About the Recent List

The Recent list contains links to recently viewed pages within the current application. This list only appears when viewing the Application home page in Icon mode.

About the Action Bar

The Action bar displays beneath the Utilities tab in the upper right corner of most pages in Application Builder.

Description of bldr_hm_ico.gif follows
Description of the illustration bldr_hm_ico.gif

This bar contains the icons discussed in the sections that follow. Note that the Run Page icon, Edit Page icon, Developer Comment icon, and Find icon display on numerous pages in Application Builder, including pages for creating and managing shared components. See "Working with Shared Components".

Run Page Icon

Description of run_ico_green.gif follows
Description of the illustration run_ico_green.gif

The Run Page icon resembles a small, light green traffic light. Click this icon to render viewable HTML of the current page. If no page is selected, clicking this icon runs the first page in the application. When you run a page, the Application Express engine dynamically renders the page based on data stored in the database. See "Running a Page or Application".

Edit Icon

Description of edit_icon.gif follows
Description of the illustration edit_icon.gif

The Edit Page icon resembles a small green piece of paper and pencil. Click this icon to access the Page Definition of the current page. If no page is selected, clicking this icon displays the Page Definition of the first page in the application. See "About the Page Definition".

Shared Components Icon

Description of shared_comp_icon_2.gif follows
Description of the illustration shared_comp_icon_2.gif

The Shared Components icon resembles a small mechanical gear. Click this icon to view a list of shared components and user interface controls that can display or be applied on every page within an application. See "Working with Shared Components".

Developer Comment icon

Description of dev_comment_icon.gif follows
Description of the illustration dev_comment_icon.gif

The Developer Comment icon is the shape of a green balloon. Click this icon to record comments about an application, a specific page, or a group of pages. See "Adding Developer Comments".

Find Icon

Description of find_icon_2.gif follows
Description of the illustration find_icon_2.gif

The Find icon resembles a flashlight. Click this icon to search for items, pages, queries, tables, PL/SQL, images, and cascading style sheets (CSS) within the current application or the schemas associated with the workspace. See "Using the Find Icon".

About Application Attributes

Application attributes apply to an entire application. Once you create an application, the next logical step is to review and possibly update application attributes.

Topics in this section include:


See Also:

"How to Create a Packaged Application" for information on using the Supporting Objects utility to create a packaged application

Configuring the Application Definition

You use the attributes on the Edit Definition page to control the application name and availability and to define static substitution strings. Additionally, the Edit Definition page displays defined build options, the associated theme, template defaults, and component defaults. Required values are marked with a red asterisk (*).

Topics in this section include:

Accessing the Edit Definition Page

To edit the application definition:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click Shared Components.

    The Shared Components page appears.

  4. Under Application, click Definition.

    The Edit Definition page appears.


    Tip:

    You can also access the Edit Definition page by clicking the application name at the top of the Application home page.

About Navigation Alternatives

The Edit Definition page is divided into the following sections: Name, Availability, Global Notification, Substitutions, Logo, Build Options, Theme, Template Defaults, and Component Defaults. You can access these sections by scrolling down the page, or by clicking a navigation button at the top of the page.

Description of app_attribute_tabs.gif follows
Description of the illustration app_attribute_tabs.gif

When you select a button at the top of the page, the selected section appears and all other sections are temporarily hidden. To view all sections of the page, click Show All.

About the Edit Definition Page

The following sections describe the attributes available on the Edit Definition page.

Topics in this section include:

Name

Use Name to define basic characteristics of your application, including the application name, an optional alphanumeric alias, and a version number. Table 4-1 describes all Name attributes.

Table 4-1 Application Definition Attributes

Proxy Server

AttributeDescription

Name

Provides a short descriptive name for the application to distinguish it from other applications in your development environment.

Application Alias

Assigns an alternate alphanumeric application identifier. You can use this identifier in place of the application ID.For example, suppose you create an alias of myapp for application 105. Using f?p syntax, you could call application 105 as either:

  • f?p=105:1

  • f?p=myapp:1

See Also: "Using f?p Syntax to Link Pages"

Version

Includes the application's version number on a page. You can also automatically tie the version to the date of last modification using the following format masks:

  • YYYY.MM.DD

  • MM.DD.YYYY

  • DD.MM.YYYY

If your application version uses YYYY.MM.DD, then Application Builder replaces this format mask with the date of last modification of any application attribute.

Media Type

Enter the Internet Media Type. An Internet Media Type is two-part identifier for file formats on the Internet. A Media Type is composed of at least two parts: a type, a subtype, and one or more optional parameters. This Media Type is used in the Content-Type HTTP header when rendering the page.

The page-level Media Type overrides the application-level Media Type. The default value for this attribute is NULL. If both the page-level and application-level values for Media Type are NULL, the Media Type text/html is used.

Image Prefix

Determines the virtual path the Web server uses to point to the images directory distributed with Application Builder. During installation, the virtual path is configured as /i/.

When embedding an image in static text (for example, in page or region headers or footers), you can reference an image using the substitution string #IMAGE_PREFIX#. For example, to reference the image go.gif, you would use the following syntax:

<img src="#IMAGE_PREFIX#go.gif">

See Also: "IMAGE_PREFIX", "Managing Images", and "Referencing Images"

Use this field to specify a proxy server.

For example, you may require a proxy server when using a region source type of URL. The URL region source embeds the results of the URL (that is, the page returned by navigating to the URL) as the region source. If you use a firewall and the target of a URL is outside the firewall relative to Application Builder, you may need to specify a proxy server.

You can reference values entered into this field from PL/SQL using the PL/SQL package variable APEX_APPLICATION.G_PROXY_SERVER.

Logging

Determines whether user activity is recorded in the Oracle Application Express activity log. When set to Yes, every page view is logged, enabling an administrator to monitor user activity for each application.

Disabling logging may be advisable for high volume applications.

Debugging

Controls debug mode for the current application. Available options include:

  • Yes enables the application to run in a debug mode.

  • No disables the application from running in debug mode.

Running an application in debug mode is useful when an application is under development. However, for a production application, it is a good idea to disable debugging and thus prevent users from viewing application logic.

Parsing Schema

Specifies the schema that all SQL and PL/SQL in the application is parsed as. You may use the #OWNER# substitution string to reference this value in SQL queries and PL/SQL (for example, in a region or a process).

Exact Substitutions

Determines if exact substitutions are supported. Use exact substitutions. Non-exact substitutions is a deprecated feature.

Exact substitutions use the following sytnax:

&ITEM.

Non-exact substitutions use the following sytnax:

&ITEM

Application Group

Displays the application group currently associated with this application. To select another application group, make a selection from the list. To remove an application from an existing group, select Unassigned.

See Also: "Creating Applications Groups"


Availability

Use Availability attributes to manage your application by defining an application status and build status. For example, if you select the status Restricted Access, you can specify which users have access and can run the application. Table 4-2 describes these attributes.

Table 4-2 Application Availability Attributes

AttributeDescription

Status

Specifies whether the application is available or unavailable for use. Options include:

  • Available - Application is available with no restrictions.

  • Available with Edit Links - Application is available for use. For developers, the Developer toolbar displays at the bottom of each page. Requires the developer to be logged in to the Application Builder in the same browser session.

  • Available to Developers Only - Application is available to users having developer privileges.

  • Restricted Access - Application is available to developers named in the Restrict to comma separated user list.

  • Unavailable - Application cannot be run or edited. The message in Message for unavailable application displays when users attempt to access the application.

  • Unavailable (Status Shown with PL/SQL) - Application cannot be run or edited.

  • Unavailable (Redirect to URL) - Application cannot be run. The user is linked to the URL entered in Message for unavailable application.

See Also: "Changing Build Status for Multiple Applications" in Oracle Application Express Administration Guide, "Changing Application Build Status Set During Deployment" in Oracle Application Express Administration Guide, and "Controlling Access to Applications, Pages, and Page Components",

Build Status

Identifies the build status of the current application. Options include:

  • Run and Build Application - Developers and users can both run and develop the application.

  • Run Application Only - Users can only run the application. This option is intended for applications in a production instance.

See Also: "Changing Application Build Status Set During Deployment" in Oracle Application Express Administration Guide

Message for unavailable application

Use this attribute in conjunction with Status. If you set Status to Unavailable, Unavailable (Status Shown with PL/SQL), or Unavailable (Redirect to URL), the text you enter in this attribute displays. If you set Status to Available, the text you enter in this attribute does not display.

Restrict to comma separated user list (status must equal Restricted Access)

Use this attribute in conjunction with the Status Restricted Access. If you set Status to Restricted Access, only the users listed in this attribute can run the application. To use this attribute:

  1. From the Status list, select Restricted Access.

  2. Enter a comma-delimited list of users who can run the application in the field provided.


Global Notifications

You can use the Global Notifications attribute to communicate system status to application users. For example, you can use this attribute to notify users of scheduled downtime, or communicate other messages regarding application availability. If the page templates used in your application contain the #GLOBAL_NOTIFICATION# substitution string, the text entered here will display in that string's place.

To create a global notification:

  1. Include the #GLOBAL_NOTIFICATION# substitution string in your page template.

  2. Navigate to the Edit Definition page and enter a message in the Global Notifications attribute.

  3. Click Apply Changes.

Substitutions

Use these fields to define static substitution strings for your application. You can use static substitution string for phrases or labels that occur in many places within an application. To create a substitution string, enter the string name in the Substitution String column and the string value in the Substitution Value column.

Defining static substitution strings centrally enables you to change text strings in multiple places in your application by making a single change to the Substitution Value defined on this page.

Logo

Use Logo attributes to define an application logo. An application logo can be text-based or image-based. To use this feature, your page template must include the #LOGO# substitution string.

To define an application logo:

  1. For Logo Type, select one of the following:

    • Select Image to use an image for the application logo.

    • Select Text to use text for the application logo.

  2. In Logo, enter the following:

    • For an image, enter the complete image name, including the filename extension. For example:

      /i/oracle.gif
      
    • For text, enter the full text string. For example:

      Sample Application
      
  3. In Logo Attributes, enter the appropriate attributes for the logo.

    Image example:

    width="100" height="20" alt="Company Logo"
    

    Text example:

    style="font-family:Arial; color:#000000; font-size:18; white-space:nowrap; font-weight:bold;"
    
Build Options

Displays existing build options. Most applications have a build option attribute. Build Options have two possible values: INCLUDE and EXCLUDE. If you specify an attribute to be included, then the Application Express engine considers it at run time. However, if you specify an attribute to be excluded, then the Application Express engine treats it as if it did not exist.

Do not specify a build option unless you plan to exclude that object from specific installations.

Theme

Displays the current theme applied to the application. Themes are collections of templates that can be used to define the layout and style of an entire application. Each theme provides a complete set of templates that accommodate every user interface pattern that may be needed in an application.


See Also:

"Managing Themes"

Template Defaults

Lists the default templates for this application. To specify a default template at the application level, you can either:

You can also override this default by making a selection from the Page Template list on the Page Attributes page.

Table 4-3 describes template defaults for the current application.

Table 4-3 Application Template Defaults Attributes

AttributeDescription

Default Page Template

Indicates the default page template to display pages. You can override this selection by making a selection from the Page Template list on the Page Attributes page.

See Also: "Editing Page Attributes"

Print Mode Page Template

Identifies the template to be used when the Application Express engine is in printer friendly mode.

When calling the Application Express engine to render a page, you have the option to specify whether the page should be displayed using the Print Mode Page Template specified.

If you specify Yes, then the page displays using a printer friendly template. The Application Express engine displays all text within HTML Form Fields as text. The printer friendly template does not need to have the #FORM_OPEN# or #FORM_CLOSE# substitution string.

See Also: "Optimizing a Page for Printing"

Error Page Template

Optional. Specifies a page template to use for errors that display on a separate page, as opposed to those that display inline.


Component Defaults

Displays the default templates used when running wizards. You can override these settings on the attributes page for each control or component. Table 4-4 describes component defaults for the current application.

Table 4-4 Component Defaults

AttributeDescription

Calendar

Default calendar template used when you create a calendar.

Label

Default label template used when you create page items.

Report

Default report template used when you create report.

List

Default template used when you create a list.

Breadcrumb

Default template used when you create a breadcrumb.

Button

Default template used when you create buttons that are template controlled.

Region

Default template used when you create a region.

Chart Region

Default region template used when you create a chart.

Form Region

Default region template used when you create a form.

Report Region

Default region template used when you create a report.

Tabular Form Region

Default region template used when you create a tabular form.

Wizard Region

Default region template used when you create a wizard component.

Breadcrumb Region

Default region template used when you create a breadcrumb.

List Region

Default region template used when you create a list.


Configuring Security Attributes

You can provide security for your application by configuring attributes on the Edit Security Attributes page. The Security Attributes you choose apply to all pages within an application.

Topics in this section include:

Accessing the Edit Security Attributes Page

To access the Edit Security Attributes page:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click Shared Components.

    The Shared Components page appears.

  4. Under Security, click Edit Security Attributes.

The Edit Security Attributes page appears.

About Navigation Alternatives

The Edit Security Attributes page is divided into the following sections: Authentication, Authorization, Database Schema, Session State Protection, and Virtual Private Database. You can access these sections by scrolling down the page, or by clicking a navigation button at the top of the page.

Description of sec_attribute_tabs.gif follows
Description of the illustration sec_attribute_tabs.gif

When you select a button at the top of the page, the selected section appears and all other sections are temporarily hidden. To view all sections of the page, click Show All.

About the Security Attributes Page

The following sections describe the attributes available on the Edit Security Attributes page.

Topics in this section include:

Authentication

Authentication is the process of establishing users' identities before they can access an application. Although you define multiple authentication schemes for your application, only one scheme can be current at a time. Table 4-5 describes the attributes available under Authentication.

Table 4-5 Authentication Attributes

AttributeDescriptions

Home Link

Specifies a URL or procedure that should be run when you run the application.

For example, Home Link could contain the relative URL used to locate the application home page. For example, f?p=6000:600 would specify application 6000 with a home page number of 600. In this example, the value you enter in Home Link replaces the #HOME_LINK# substitution string in application templates.

You can also use this attribute to name a procedure. For example, you could create a procedure such as personal_calendar which renders an HTML page to serve as the application home.

Note: Do not use the Home Link attribute to determine the page that displays after authentication. The page that displays after authentication is determined by other components within the application's authentication scheme.

See Also: "HOME_LINK"

Login URL

Replaces the substitution strings &LOGIN_URL. in HTML or #LOGIN_URL# in templates.

See Also: "LOGIN_URL" and "Creating an Authentication Scheme"

Public User

Identifies the Oracle schema used to connect to the database through the database access descriptor (DAD). The default value is ANONYMOUS in environments where the database server version is Oracle Database Express Edition and it is APEX_PUBLIC_USER for all other versions of the database server.

Once a user has been identified, the Application Express engine keeps track of each user by setting the value of the built-in substitution string APP_USER.

Note: Previous versions of Oracle Application Express used the built-in substitution string HTMLDB_PUBLIC_USER.

When APP_USER equals this value, the Application Express engine considers the current session to be a public user session. The Application Express engine supports the following built-in display conditions:

  • USER_IS_PUBLIC_USER

  • USER_IS_NOT_PUBLIC_USER

If the current application user (APP_USER) equals the value of this attribute, then the user is logged on as a public user. Some applications have public (not logged in) and a private (logged in) modes. By determining if the user is the public user, you can conditionally display or hide information.

For example, you can show a login button if the user is the public user and a logout link if the user is not a public user. Reference this value using APEX_APPLICATION.G_PUBLIC_USER. The Application Express engine also has built in condition types USER_IS_PUBLIC_USER and USER_IS_NOT_PUBLIC.

See Also: "HOME_LINK" and "Understanding Conditional Rendering and Processing"

Define Authentication Scheme

Click this button to define an authentication scheme.

See Also: "Understanding How Authentication Works" and "Creating an Authentication Scheme"


Authorization

Authorization controls user access to specific controls or components based on user privileges. You can specify an authorization scheme for your application, by making a selection from the Authorization Scheme list. You can assign only one authorization to an entire application. However, you can assign an authorization scheme to individual pages, page controls (such as a region, a button, or an item), or a shared component (such as a menu, a list, or a tab).

To create a authorization scheme, click Define Authorization Schemes.

An authorization scheme is a binary operation that either succeeds (equals true) or fails (equals false). If it succeeds, then the component or control can be viewed. If it fails, then the component or control cannot be viewed or processed. When you attach an authorization scheme to a page and it fails, an error message displays instead of the page. However, when you attach an authorization scheme to a page control (for example, a region, a button, or an item) and it fails, no error page displays. Instead, the control either does not display or is not processed or executed.

Database Schema

Use Parsing Schema to specify the database scheme for the current application. Once defined, all SQL and PL/SQL commands issued by the application will be performed with the rights and privileges of the defined database schema.

Session Timeout

Use the following attributes to reduce exposure to abandoned computers with an open Web browser by application:

  • Maximum Session Length in Seconds - Enter a positive integer representing how many seconds a session used by this application will exist. Leave the value NULL for the session to exist indefinitely. This session duration may be superseded by the operation of the job that runs every eight hours which deletes sessions older than 24 hours.

  • Session Timeout URL - Enter an optional URL to be redirected to when the Maximum Session Length in Seconds has been exceeded. If implemented in Oracle Application Express, the target page in this URL should be a public page. A common use for this page would be to inform the user of the session expiration and to present a login link or other options. If no URL is supplied, the user is redirected to the application home page.

  • Maximum Session Idle Time in Seconds - Enter a positive integer representing how many seconds of inactivity or idle time a session used by this application should permit. The idle time is the time between one page request and the next one. Leave the value NULL to prevent session idle time checks from being performed.

  • Idle Timeout URL - Enter an optional URL to be redirected to when the Maximum Session Idle Time in Seconds has been exceeded. If implemented in Oracle Application Express, the target page in this URL should be a public page. A common use for this page would be to inform the user of the session is redirected to the application home page. If no URL is supplied, the user is redirected to the application home page.

Session State Protection

Enabling Session State Protection can prevent hackers from tampering with URLs within your application. URL tampering can adversely affect program logic, session state contents, and information privacy.

To enable or disable Session State Protection for your application, make a selection from the Session State Protection list. Setting Session State Protection to Enabled turns on session state protection controls defined at the page and item level.

To configure Session State Protection, click Manage Session State Protection.

Virtual Private Database (VPD)

Use this attribute to enter a PL/SQL block that sets a Virtual Private Database (VPD) context for the current database session associated with the current "show page" or "accept page" request. The block you enter here is executed at a very early point during the page request, immediately after the APP_USER value is established. The value of APP_USER (using :APP_USER or v('APP_USER')) may be used within the block. Values of other items in session state may be referenced as well, but any such items must have been established in session state before the initiation of the current page request. Consider the following example:

dbms_session.set_context('CTX_USER_QRY','USERPRIV',my_package.my_function(:APP_USER));

The previous example sets the value of USERPRIV in the context named CTX_USER_QRY to the value returned by the function my_function in package my_package. The function is passed the current value of APP_USER as an input argument. Presumably, the named context would be used in a VPD policy ( created within the application's parsing schema) to effect the generation of predicates appropriate to the authenticated user.

Virtual Private Database, also know as Fine-Grained Access Control or FGAC, is an Oracle database feature that provides an application programming interface (API) that enables developers to assign security policies to database tables and views. Using PL/SQL, developers can create security policies with stored procedures and bind the procedures to a table or view by means of a call to an RDBMS package. Such policies are based on the content of application data stored within the database, or based on context variables provided by Oracle database. In this way, VPD permits access security mechanisms to be removed from applications, and to be situated closer to particular schemas.

The code entered in this section need not pertain to VPD/FGAC; in fact, it may not be related to security at all. Any code that needs to be executed at the earliest point in a page request can be placed here. For example, to set the database session time zone for every page request:

BEGIN
  EXECUTE IMMEDIATE 'alter session set time_zone = ''Australia/Sydney'' ';
END;

Configuring Globalization Attributes

In Application Builder you can develop applications that can run concurrently in different languages. A single application can be translated to support different languages. Use the attributes on the Edit Globalization Attributes page to specify globalization options such as the primary application language.

Topics in this section include:

Accessing the Globalization Attributes Page

To access the Edit Globalization Attributes page:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

    The Application Builder home page appears.

  3. Click Shared Components.

    The Shared Components page appears.

  4. Under Globalization, click Edit Attributes.

    The Edit Globalization Attributes page appears.

About the Edit Globalization Attributes Page

The following sections describe the attributes available on the Edit Globalization Attributes page.

Application Primary Language

Identifies the language in which an application is developed. This language is the base language from which all translations are made. For example, suppose application 100 was authored in English, translated into French, and published as application 101. English would be the Application Primary Language.

All modifications to the application should be made to the primary language specified here.

Application Language Derived From

Determines how Application Builder determines or derives the application language.

The application primary language can be static, derived from the Web browser language, or determined from a user preference or item. The database language setting also determines how the date is displayed and how certain information is sorted.

This option enables you to disable browser derived language support. You also have the option of having the application language derived from an application preference.

Application Date Format

Determines the date format to be used in the application.

This date format is used to alter the NLS_DATE_FORMAT database session setting before showing or submitting any page in the application. This value can be a literal string containing a valid Oracle date format mask or an item reference using substitution syntax. If no value is specified, the default date format is derived from the database session at runtime.

Automatic CSV Encoding

Automatic CSV Encoding controls the encoding of all comma-delimited (CSV) report output in an application. The default value for Automatic CSV Encoding is No. If Automatic CSV Encoding is set to Yes, CSV report output is converted to a character set compatible with localized desktop applications. The character set for the CSV encoding is determined by the Application Language Derived From setting.

The encoding of pages in Application Builder is determined by the character set of the database access descriptor (DAD) used to access Oracle Application Express. For example, if the character set of the database access descriptor is AL32UTF8, all pages in all applications in the Oracle Application Express user interface are encoded in UTF-8.

By default, the CSV output from report regions is encoded in the same character set as the database access descriptor. However, some desktop spreadsheet applications require that the data is encoded in the client desktop operating system character set. In the case of multibyte data, the CSV output from report regions will often appear corrupted when opened by a desktop spreadsheet application. This is because the CSV output is encoded differently than what is required by the desktop application. Enabling Automatic CSV Encoding resolves this issue.

For example, if the user's language preference for an application is de, the CSV data is encoded in Western European Windows 1252, regardless of the Database Access Descriptor character set setting. If the user's language preference is zh-cn, the CSV data will be encoded in Chinese GBK.

PKQuMMPK6(AOEBPS/preface.htmDD Preface

Preface

Oracle Application Express Application Builder User's Guide describes how to use the Oracle Application Express development environment to build and deploy database-centric Web applications. Oracle Application Express turns a single Oracle database into a shared service by enabling multiple workgroups to build and access applications as if they were running in separate databases.

This preface contains these topics:

Topic Overview

This document contains the following chapters:

TitleDescription
What's New in Oracle Application Express
Describes new features available in this release of Oracle Application Express.
Quick Start
Offers a quick introduction to using the Oracle Application Express.
Running a Demonstration Application
Describes how to run and modify the demonstration applications that install with Application Builder.
Application Builder Concepts
Provides basic conceptual information about Application Builder. Use Application Builder to assemble an HTML interface (or application) on top of database objects such as tables and procedures.
Using Application Builder
Provides important background information about using Application Builder to build dynamically rendered applications.
Working with Application Pages
Provides important background information about creating and managing pages within an application.
Building an Application
Describes how to use Application Builder to build an application and application components.
Adding Application Components
Describes how to use Application Builder to add pages to an application and add other components (reports, charts, or forms), page controls (buttons, items, list of values), and shared components (breadcrumbs, lists, or tabs).
Adding Navigation
Describes how to implement navigation in your application using different types of navigation controls, including navigation bar entries, tabs, breadcrumbs, lists, and trees.
Controlling Page Layout
Describes different ways you can customize your application's page layout by customizing regions, editing item attributes, and incorporating images.
Managing Themes and Templates
Describes different ways you can alter your application's user interface and page layout through themes and templates.
Managing User Interface Defaults
Describes how to use user interface defaults to assign default user interface properties to a table, column, or view.
Debugging an Application
Describes approaches to debugging your Application Builder application, including viewing Debug Mode, enabling SQL tracing, viewing page reports, and how to manually remove a control or a component to isolate a problem.
Managing Application Security
Describes how to provide security for an Application Builder application by utilizing cross-site scripting protection, session state protection, authentication, and authorization.
Deploying an Application
Explains how to package an application built within Application Builder.
Advanced Programming Techniques
Provides information about advanced programming techniques including establishing database links, using collections, running background SQL, utilizing Web services, and managing user preferences.
Managing Application Globalization
Explains how to translate an application built-in Application Builder.

Audience

Oracle Application Express Application Builder User's Guide is intended for application developers who are building database-centric Web applications using Oracle Application Express. The guide describes how to use the Oracle Application Express development environment to build, debug, manage, and deploy applications.

To use this guide, you must have a general understanding of relational database concepts and an understanding of the operating system environment under which you are running Oracle Application Express.

Documentation Accessibility

For information about Oracle's commitment to accessibility, visit the Oracle Accessibility Program website at http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc.

Access to Oracle Support

Oracle customers have access to electronic support through My Oracle Support. For information, visit http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info or visit http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs if you are hearing impaired.

Related Documents

For more information, see these Oracle resources:

For information about Oracle error messages, see Oracle Database Error Messages. Oracle error message documentation is available only in HTML. If you have access to the Oracle Database Documentation Library, you can browse the error messages by range. Once you find the specific range, use your browser's "find in page" feature to locate the specific message. When connected to the Internet, you can search for a specific error message using the error message search feature of the Oracle online documentation.

Many books in the documentation set use the sample schemas of the seed database, which is installed by default when you install Oracle. Refer to Oracle Database Sample Schemas for information on how these schemas were created and how you can use them yourself.

For additional application examples, please visit the Oracle by Examples (OBEs) Application Express page, located on Oracle's Technology Network. The OBEs provide step-by-step examples with screenshots on how to perform various tasks within Application Express.

http://www.oracle.com/technetwork/developer-tools/apex/overview/index.html

Printed documentation is available for sale in the Oracle Store at

http://shop.oracle.com/

To download free release notes, installation documentation, white papers, or other collateral, please visit the Oracle Technology Network (OTN). You must register online before using OTN; registration is free and can be done at

http://www.oracle.com/technetwork/index.html

If you already have a user name and password for OTN, then you can go directly to the documentation section of the OTN Web site at

http://www.oracle.com/technetwork/indexes/documentation/index.html

Conventions

The following text conventions are used in this document:

ConventionMeaning
boldfaceBoldface type indicates graphical user interface elements associated with an action, or terms defined in text or the glossary.
italicItalic type indicates book titles, emphasis, or placeholder variables for which you supply particular values.
monospaceMonospace type indicates commands within a paragraph, URLs, code in examples, text that appears on the screen, or text that you enter.

PKžd(IDDDPK6(AOEBPS/bldapp.htm Building an Application

6 Building an Application

This section describes how to use Application Builder to build an application and application components. It includes instructions for creating an application and adding pages as well as adding components (reports, charts, or forms), page controls (buttons, items, list of values), and shared components (breadcrumbs, lists, or tabs).

This section contains the following topics:

Creating an Application

An application is a collection of pages that share a common session state and authentication. You create an application in Application Builder using a wizard. You delete an application from the Application home page.

Topics in this section include:


Tip:

You can reduce the number of steps needed to create an application by configuring Application Builder Defaults. See "Leveraging Application Builder Defaults" in Oracle Application Express Administration Guide.

About Creating an Application Using a Wizard

When you click Create on the Application Builder home page, you must choose one of the following options:

  • Create Application. Creates an application. The application can be based on SQL queries or database tables. You can define blank pages or pages that contain reports, forms, tabular forms, or a report with a linked form. See "About the Create Application Wizard".

  • Create Application from Spreadsheet. Creates an application based on spreadsheet data. You can upload or paste spreadsheet data to create a table and then add a user interface. In the resulting application, users can create queries, add, insert, or update records, or analyze the data. See "About the Create Application from Spreadsheet Wizard".

  • Demonstration Application. Installs or uninstalls demonstration applications. Use demonstration applications to learn how to build applications. See "About Demonstration Applications".

About the Create Application Wizard

The Create Application wizard enables you to create a fully functional application based on any number of tables. You can use the Create Application Wizard to create blank pages, or pages based on SQL queries or database tables. You can create SQL queries by manually typing SQL, or by using the graphical user interface of Query Builder.

Applications based on tables can consist of a simple report, a form and report, or a tabular form. When creating pages on tables, you have the option to generate analysis pages. Analysis pages extend a simple report or a report on a form to include multiple drill-down reports and charts.

At the workspace level, you have the option of setting defaults that are used for applications built in that workspace. Setting these defaults enables you to exit the wizard without paging through each step. When you exit the wizard, the application you create uses the values you specified as defaults.


See Also:

"Building Queries with Query Builder"in Oracle Application Express SQL Workshop and Utilities Guide and "Leveraging Application Builder Defaults" in Oracle Application Express Administration Guide

Topics in this section include:

Creating an Application Based on Tables or Queries

You can create an application based on a table, query, or drill-down query by selecting Create Application in the Create Application Wizard.

To create an application based on a table, query, or drill-down query:

  1. On the Workspace home page, click the Application Builder icon.

  2. Click the Create button.

  3. For Method, select Create Application and click Next.

  4. For Name, enter the following and click Next:

    1. Name - Enter a name to identify the application.

    2. Application - Enter a unique integer value to identify the application.

    3. Create Application - Select a creation method:

      • Select From scratch to manually add all pages

      • Select Based on existing application design model to copy page definitions from a previous application model.

        Note that you will still have to define all other application attributes, or you can choose to copy some attributes by choosing to copy shared components from another application (See step 7 and "About Application Models and User Interface Defaults").

    4. Schema - Your application will obtain its privileges by parsing all SQL as a specific database schema. Identify the database schema owner.

    Next, add pages to your application.

  5. For Pages:

    1. Select the type of page you want to add. Options include:

      • Blank creates a page with no built-in functionality.

      • Report creates a page that contains the formatted result of a SQL query. You can choose to build a report based on a table you select, or based on a custom SQL SELECT statement or a PL/SQL function returning a SQL SELECT statement that you provide.

      • Form creates a form to update a single row in a database table.

      • Tabular Form creates a form to perform update, insert, and delete operations on multiple rows in a database table.

      • Master Detail creates a form that displays a master row and multiple detail rows within a single HTML form. With this form, users can query, insert, update, and delete values from two tables or views.

      • Report and Form builds a two page report and form combination. On the first page, users select a row to update. On the second page, users can add a record or update or delete an existing record.

      Action displays the currently selected page type. For each selection, the wizard prompts you for a different types of information, such as selecting a table name or report implementation.

      Report pages include the Include Analysis Pages check box. Select this option and follow the wizard prompts to extend a simple report or a report on a form to include multiple drill-down reports and charts.

    2. Click Add Page.

      The page (or pages) appear at the top of the page. To delete a page, click Delete icon.

    3. Repeat the previous steps until all pages have been added.

    4. Click Next.


      Tip:

      To exit this wizard early and utilize Application Builder Defaults, click the Create button. To configure Application Builder Defaults, see "Leveraging Application Builder Defaults" in Oracle Application Express Administration Guide.

  6. For Tabs, determine whether to include tabs in your application and click Next.

  7. For Shared Components, determine whether to import shared components from another application. Shared components are common elements that can display or be applied on any page within an application.

    To include shared components, select the following:

    1. Copy Shared Components from Another Application - Select Yes.

    2. Copy from Application - Select the application from which you want to import shared components.

    3. Select Components to Import - Select the components to import.

    4. Click Next.

    Next, select a default authentication scheme. Authentication is the process of establishing users' identities before they can access an application. See "Establishing User Identity Through Authentication".

  8. For Authentication Scheme, select one of the following:

    • Application Express - Uses the user account credentials created and maintained with the Application Express Service Administration application. These are the accounts you use to log in to the Application Express development environment. You can also create accounts in this user account repository for end users of your applications.

    • No Authentication - Also known as database authentication, this option enables users to access your application using the account credentials stored in the modplsql DAD definition. In most cases this results in users not having to login when accessing your application. This is the quickest way to create a "public" application.

    • Database Account - Requires users logging into your application to enter a database schema name (or user name) and a password in order to authenticate. This account information is managed entirely within the Oracle database.

  9. Next, select the following globalization preferences:

    1. Language - Select the primary language for this application.

      This attribute identifies the language in which an application is developed. This language is the base language from which all translations are made.

    2. User Language Preference Derived From - Specifies how the engine determines the application language. The application primary language can be static (that is, derived from the Web browser language) or determined from a user preference or item. The database language setting determines date display and sorting characteristics.

      You can alter the Language and User Language Preference Derived From attributes later on the Edit Globalization attributes page. See "Configuring Globalization Attributes".

    3. Date Format - Specifies the date format to be used in the application.

      This date format is used to alter the NLS_DATE_FORMAT database session setting before showing or submitting any page within the application. This value can be a literal string containing a valid Oracle date format mask or an item reference via substitution syntax. If no value is specified, the default date format is derived from the database session at runtime. If supplied, this is also used as the date format for any items resulting from columns of type DATE.

    4. Click Next.

  10. For User Interface, select a theme and click Next.

    Themes are collections of templates that can be used to define the layout and style of an entire application. See "Managing Themes".

  11. Confirm your selections and click Create.

About Application Models and User Interface Defaults

The Create Application Wizard is designed with the assumption that the developer may run it multiple times. To facilitate this iterative approach to application development, every time you run the wizard it saves the page definitions to an application model.

Consider the following example. You create an application by running the Create Application Wizard. After viewing the application, you realize it is not quite what you wanted. Instead of altering it, you can run the wizard again and select an application model. By selecting an existing application model when you rerun the wizard, you can quickly improve your application with minimal time and effort.


See Also:

"Managing Application Models" in Oracle Application Express Administration Guide

Another way to increase your productivity when creating an application is to specify user interface defaults. User interface defaults are metadata that enable you to assign default user interface properties to a table, column, or view within a specified schema.

Leveraging Application Models and User Interface Defaults

You can increase your productivity when creating applications by leveraging application models and user interface defaults. Consider the following scenario:

  1. Create an application based on tables or views by running the Create Application Wizard.

  2. Run the generated application. Note any functional deficiencies.

  3. Evaluate whether to create or edit user interface defaults.

    For example, you can use user interface defaults to control how form field or report labels display. You can also utilize user interface defaults to display specific columns or have columns display in an alternate order.

  4. Navigate to the Application home page and create an application by clicking Create.

  5. Select Create Application.

  6. When prompted to enter application details, specify the following:

    1. Name - Enter a name to identify the application.

    2. Application - Enter a unique integer value to identify the application, or accept the default.

    3. Create Application - Select Based on existing application design model.

  7. Select an application model.

    Note the pages you previously created already appear.

  8. Add pages, edit pages, or remove pages.

  9. Complete the wizard.

  10. Repeat steps 2 through 9 until the application meets your functional requirements.

About the Create Application from Spreadsheet Wizard

You can create an application based on spreadsheet data by selecting Create from Spreadsheet in the Create Application Wizard.

To create an application from spreadsheet data:

  1. On the Workspace home page, click the Application Builder icon.

  2. Click the Create button.

  3. Select Create from Spreadsheet.

  4. For Load Method, specify how spreadsheet data will be uploaded. Select one of the following and click Next:

    1. Upload file, comma separated (*.csv) or tab delimited. Specify the following and click Next:

      • Text File - Click Browse to locate the file to be uploaded.

      • Separator - Specify the column separator character. Use \t for tab separators.

      • Optionally Enclosed By - Enter a delimiter character. You can use this character to deliminate the starting and ending boundary of a data value. If you specify a delimiter character, the wizard ignores white space occurring before the starting and ending boundary of a data value. You can also use this option to enclose a data value with the specified delimiter character.

      • File Character Set - Choose the character set in which the text file is encoded.

    2. Copy and paste. Copy and paste the tab delimited data you want to import.

  5. For Table Properties, review how your table will display and click Next. Specify the table name and column names, or modify the data types. To specify whether to include a column, make a selection from the Upload list.

  6. For User Interface Defaults:

    1. Review the displayed Singular Name and enter a Plural Name.

    2. (Optional) Under Column User Interface Defaults, review the displayed column labels.

    3. Click Next.

  7. For Summary Page:

    1. Summary By Column - Select the columns for which data will be summarized in reports and charts and click Next.

    2. Aggregate By Column - Select columns for which values will be aggregated in summary report and click Next.

  8. For Application Options, specify the following:

    1. Application Name - Enter an alphanumeric name for this application.

    2. Create Mode:

      • Read and Write includes insert and update pages.

      • Read Only does not include insert and update pages.

    3. Report Implementation - Choose Classic to create a SQL report or Interactive to create an interactive report.

    4. Select a chart type.

    5. Click Next.

  9. For User Interface Theme, select a theme and click Next.

    Themes are collections of templates that can be used to define the layout and style of an entire application. See "Managing Themes".

  10. Confirm your selections and click Create.


See Also:

"Building Queries with Query Builder" in Oracle Application Express SQL Workshop and Utilities Guide


See Tutorial:

"How to Build an Access Control Page" in Oracle Application Express Advanced Tutorials

About Demonstration Applications

Oracle Application Express installs with a number of demonstration applications. Use these applications to learn more about the different types of functionality you can include in your applications.


See Also:

"Running a Demonstration Application", "Disabling the Creation of Demonstration Applications in a New Workspace" in Oracle Application Express Administration Guide, and "Downloading Public Packaged Applications and Sample Code in Oracle Database 2 Day + Oracle Application Express Developer's Guide

Accessing Demonstration Applications

To access demonstration applications:

  1. On the Workspace home page, click the Application Builder icon.

  2. Click the Create button.

  3. Select Demonstration Application.

    The Demonstration Applications page appears, displaying links to the following applications:

    • Sample Application offers a working demonstration that highlights basic design concepts

    • Collection Showcase demonstrates shopping cart concepts

  4. To install a demonstration application, locate the application you want to install and click Install.

  5. Follow the on-screen instructions.

    The Application home page appears.

  6. To run an installed demonstration application, click the Run link.

  7. Enter the appropriate login credentials and click Login.

    • For Sample Application:

      • For User Name, enter either demo or admin

      • For Password, enter current workspace name in lowercase letters

    • For other demonstration applications, enter your workspace user name and password.

Copying an Application

To copy an application:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

    The Application home page appears.

  3. Click Copy this Application on the Tasks list. See "About the Tasks List".

  4. On Copy Application:

    1. Enter a new application ID.

    2. Enter a new application name.

    3. Specify whether to copy deployment attributes.

    4. Click Next.

  5. Click Copy Application.

Deleting an Application

You can delete an application from within Application Builder, or while editing application attributes. If you delete an application you also delete all defined components (reports, charts, or forms), page controls (buttons, items, list of values), and shared components (breadcrumbs, lists, and tabs, but not user interface defaults).

Topics in this section include:

Deleting an Application from Application Builder

To delete an application from Application Builder:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. When Application Builder appears, verify the application ID and name at the top of the page.

  4. On the Tasks list, click Delete this Application.

  5. When prompted, click Permanently Delete Now.

Deleting an Application from the Edit Definition Page

To delete an application from the Edit Definition page:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click Shared Components.

    The Shared Components page appears.

  4. Under Application, click Definition.

    The Edit Definition page appears.

  5. Verify the application ID and name.

  6. Click Delete at the top of the page.

  7. When prompted, click Permanently Delete Now.

Managing Pages in an Application

A page is the basic building block of an application. When you build an application in Application Builder, you create pages that contain user interface elements, such as tabs, lists, buttons, items, and regions.

Topics in this section include:

About Creating Pages

You add a page or add a component to an existing page by running the Create Page Wizard. You can access this wizard by:


Note:

You can also use the Create Page Wizard to add a component (that is, a report, chart, form, wizard, a calendar, or tree) to an existing page. When prompted, specify an existing page number.

Creating a Page from the Application Home Page

To create a page from the Application home page:

  1. On the Workspace home page, click Application Builder.

  2. Select an application.

    The Application home page appears.

  3. Click the Create Page button.

  4. Select the type of page you want to create as described in the following table.

    Page TypeDescription
    Blank PageCreates a blank page.
    Multiple Blank PagesCreates multiple blank pages.
    ReportFormatted result of a SQL query. Available options:
    • SQL Report - Creates a report based on a custom SQL SELECT statement or a PL/SQL function returning a SQL SELECT statement that you provide.

    • Interactive Report - Creates an interactive report based on a custom SQL SELECT statement you provide. Users can alter the layout of report data by selecting specific columns, applying filters, highlighting, and sorting. They can also define breaks, aggregations, different charts, and their own computations.

    • Report on Web Service Result - Creates a report on a Web Service result.

    • Wizard Report - Creates a report without requiring any SQL knowledge. Select the appropriate schema, table, columns, and result set display.

    See Also: "Creating Reports" and "Implementing Web Services"

    ChartEnables you to create three types of graphical charts: HTML, Scalable Vector Graphics (SVG), and Flash.

    See Also: "Creating Charts"

    FormCreates a form interface with which users can update a single row or multiple rows within a table.

    See Also: "Creating Forms"

    WizardCreate a wizard.
    CalendarGenerates a calendar with monthly, weekly, and daily views.

    See Also: "Creating Calendars"

    TreeCreates a a tree to graphically communicate hierarchical or multiple level data.

    See Also: "Creating Trees"

    Login PageCreates a login page.

    See Also: "Building a Login Page"

    Access ControlCreates a page containing a access control list, enabling developers to control access to an application, individual pages, or page components.

    See Also: "Controlling Access to Applications, Pages, and Page Components"

    Page ZeroA page zero that functions as a master page. The Application Express engine renders all components you add to page zero on every page within your application. You can further control whether the Application Express engine renders a component or runs a computation, validation, or process by defining conditions.

    See Also: "Displaying Components on Every Page of an Application"


  5. Follow the on-screen instructions.

Creating a Page from the Page Definition

To create a page while viewing a Page Definition:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Click the Create button at the top of the page.

  3. Select the type of page you want to create:

    • New Page

    • Region on this page

    • Page control on this page

    • Shared Control

    See "About Create Page Types".

  4. Follow the on-screen instructions.

About Create Page Types

When you run the Create Page Wizard, you select a page type. Table 6-1 describes available create page options based on the type of page you select.

Table 6-1 Create Page Options

Create Page OptionsAvailable Selections

New Page

Available page types:

Region on this page

Regions function as containers for content. Available region types:

  • HTML

  • Multiple HTML

  • Report

  • Form

  • Chart

  • List

  • Breadcrumb

  • PL/SQL Dynamic Content

  • Tree

  • URL

  • Calendar

  • Help Text

See Also: "Understanding Regions" and "About Region Types"

Page control on this page

Page controls:

Shared control

Shared component options:


Creating a Page from the Developer Toolbar

To view a rendered version of your application, you run or submit it to the Application Express engine by clicking the Run or Run Application icon.

When you run an application, the Developer toolbar appears at the bottom of the page. The Developer toolbar offers a quick way to edit the current page, create a page, region, or page control, view session state, or turn edit links on and off. You can control whether the Developer toolbar displays by changing the Status attribute on the Edit Definition page.


See Also:

"Configuring the Application Definition" for information on the Status list

To create a page from the Developer toolbar:

  1. Run the application. See "Running a Page or Application".

  2. On the Developer toolbar, click Create.

    The New Component Wizard appears.

  3. Select the type of component you want to create and click Next. Available options include:

  4. Follow the on-screen instructions.

Copying a Page

You can copy a page from the current application or from another application. During the copy process, you can also copy shared components or change mappings to shared components in the target application.

To copy a page:

  1. Navigate to the application you want to copy to:

    1. Navigate to the Workspace home page.

    2. Click the Application Builder icon.

    3. Select an application.

    4. Select a page.

      The Page Definition appears.

  2. Click the Copy button.

  3. For Copy Page Option, select one of the following:

    • Page in this application

    • Page in another application

  4. Follow the on-screen instructions.

Running a Page or Application

The Application Express engine dynamically renders and processes pages based on data stored in database tables. To view a rendered version of your application, you run or submit it to the Application Express engine. As you create new pages, you can run them individually, or run an entire application. You can run an application by clicking the Run Application icon.

Topics in this section include:

About the Run Application and Run Page Icons

The Run Application icon resembles a large traffic light and displays on the Application home page. Clicking the Run Application icon runs an entire application.

Description of run_ico_sm.gif follows
Description of the illustration run_ico_sm.gif

The Run Page icon resembles a small, light green traffic light and displays in the upper right corner of many pages within Application Builder. Clicking the Run Page icon runs the current page.

Description of run_ico_green.gif follows
Description of the illustration run_ico_green.gif

Running an Application from the Application Builder Home Page

To run an entire application from the Application Builder home page:

  1. On the Workspace home page, click the Application Builder icon.

  2. From the View list, select Details and click Go.

  3. Locate the application in the Applications list.

  4. Click the Run icon in the far right column.

Running an Application from the Application Home Page

To run an entire application from the Application home page:

  1. On the Workspace home page, click the Application Builder icon.

    The Application Builder home page appears.

  2. Select on application.

  3. Click the Run Application icon at the top of the page.

Running a Page on the Application Home Page

You can control how the Application home page displays by making a selection from the View list on the navigation bar at the top of the page. Selecting Details displays each page as a line in a report. Each line includes the page number, the page name, when the page was last updated, who last updated the page, a lock icon, and a Run icon.

To run a page from the Pages list:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. From the View list, select Details and click Go.

  4. From the Pages list, locate the page you want to run and click the Run icon in the far right column.

Running a Page from the Page Definition

To run a specific page from the Page Definition:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Select a page.

    The Page Definition appears.

  4. Click the Run Page icon in the upper right corner of the page.

Grouping Pages

You can make the pages within your application easier to access by organizing them into page groups. To use page groups, you create a group and then assign pages to the group.

Page groups do not have any function other than to help developers organize their application pages.

Topics in this section include:

Viewing Page Groups

The section describes different ways to view page groups.

Accessing the Page Groups Page

To access the Page Groups page:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select the application.

  3. On the Tasks List on the right side of the page, click Page Groups.

    The Page Groups page appears.

    Use the Navigation bar at the top of the page to search for a page group by name or change the page display. You can change the default display by making a selection from View list. Available options include:

    • Icons (the default) displays each group as a large icon. To edit a group, click the appropriate icon.

    • Details displays each group as a line in a report. To edit a group, click the name.

  4. To view the pages associated with a group, click Report Page Groups on the Tasks list.


    Note:

    The Tasks list only appears if groups currently exist.

  5. To edit the group name and description, click the group name.

Viewing Page Groups from the Application Home Page

To view page groups from the Application home page:

  1. On the Workspace home page, click the Application Builder icon.

  2. On the Application Builder home page, select an application.

  3. From the View list, select by Group and click Go.

    Any defined groups appear. Pages not associated with a group are filed in the Unassigned folder.

    Description of groups.gif follows
    Description of the illustration groups.gif

  4. To view the pages within a group, click the group name.

Viewing Page Groups from the Page Definition

To view page groups from the Page Definition:

  1. Navigate to the Page Definition. See "Accessing a Page Definition".

  2. From the View list, select Groups and click Go.

  3. Make a selection from the Tasks list on the right side of the page.

Creating a Page Group

To create a page group:

  1. On the Workspace home page, click the Application Builder icon

  2. Select an application.

  3. On the Tasks List on the right side of the page, click Page Groups.

  4. On the Page Groups page, click Create.

  5. Enter a name, a description (optional), and click Create.

Accessing a Page Group Definition

When you create page group you specify a name and description.

To edit the Page Group definition:

  1. On the Workspace home page, click the Application Builder icon

  2. Select an application.

  3. On the Tasks List on the right side of the page, click Page Groups.

    Page Groups page appears.

  4. Select a page group.

  5. On the Page Group page, edit the name or description and click Apply Changes.

  6. To move to the next Page Group definition, click the Previous (<) and Next (>) buttons and repeat the previous step.

Assigning a Page to a Page Group

To assign pages to a group:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. On the Tasks List on the right side of the page, click Page Groups.

  4. On the Tasks list, click Manage Unassigned.

    The Manage Page Group Assignments page appears. Clicking a page number takes you to the Page Attributes page. Clicking the page Name links to the Page Definition.

  5. From the New Group list, select a group to which you want to assign pages and click Go.

  6. Select the pages to be assigned and click Assigned Checked.

Reassigning a Page to a Another Page Group

To reassign a page to a page group:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. On the Tasks List on the right side of the page, click Page Groups.

  4. On the Tasks list, click Manage Assignments.

    The Manage Page Group Assignments page appears. Clicking the page number takes you to the Page Attributes page. Clicking the page Name links to the Page Definition.

  5. From the Group list, select a group and click Go.

  6. From New Group, select a group to which you want to assign pages.

  7. Select the pages to be reassigned and click Assigned Checked.

Removing a Page from a Page Group

To remove a page to a page group:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. On the Tasks List on the right side of the page, click Page Groups.

  4. On the Tasks list, click Manage Assignments.

    The Manage Page Group Assignments page appears. Clicking the page number takes you to the Page Attributes page. Clicking the page Name links to the Page Definition.

  5. From the Group list, select a group and click Go.

  6. Under Name, locate the Group list and select - Unassign -.

  7. Select the page to be removed.

  8. Click Apply Changes.

Deleting a Page Group

To remove a page group:

  1. Remove all pages from the group to be deleted. See "Removing a Page from a Page Group".

  2. Access the Page Group page. See "Accessing a Page Group Definition".

  3. Click Delete.

    A confirmation page appears.

  4. Confirm your request.

Viewing the Pages by Page Group Report

To view pages by page group:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. On the Tasks List on the right side of the page, click Page Groups.

  4. On the Tasks list, click Report Page Groups.

    The Pages by Page Group report appears. Clicking the page number takes you to the Page Attributes page. Clicking the Page Name links to the Page Definition.

  5. To view a page group, make a selection from the Group list and click Go.

Locking and Unlocking a Page

You can prevent conflicts during application development by locking pages in your application. By locking a page, you prevent other developers from editing it.

Topics in this section include:

Determining If a Page Is Locked

A lock icon indicates whether a page is currently locked. If a page is unlocked, the icon appears as an open padlock. If the page is locked, the icon appears as a locked padlock. A lock icon appears on the Application home page and on the Page Definition.

To view the lock icon on the Application home page, select Details from the View list. A list of pages appears. The lock icon appears under the Lock column.

Description of lock_ico.gif follows
Description of the illustration lock_ico.gif

The lock icon also appears on the Action Bar on the Page Definition. See "About the Action Bar".

Locking a Page

You can lock pages from the Page Locks page, the Pages list, and from a Page Definition.

Locking a Page from the Page Locks Page

To lock a page from the Page Locks Page:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. On the Tasks List on the right side of the page, click Page Locks.

    The Page Locks page appears.

  4. Select the appropriate pages and click Lock Checked.

  5. Enter a comment in the Comment field.

  6. Click Lock Page(s).

Locking a Page from the Details View

To lock a page from the Details view:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. From the View list, select Details and click Go.

  4. In the Pages list, locate the page you want to lock and click the Lock icon.

  5. Enter a comment in the Comment field.

  6. Click Lock Page(s).

Locking a Page from the Page Definition

To lock a page from the Page Definition:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Click the Lock icon in the Action bar. See "About the Action Bar".

  3. Select the selected page and click Lock Checked.

  4. Enter a comment in the Comment field.

  5. Click Lock Page(s).

Unlocking Pages

Only the developer who locked a page can unlock it. However, a developer with administrative privileges can unlock pages locked by other developers.

Unlocking Pages from the Page Locks Page

To unlock a page from the Page Locks page:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select the application.

  3. On the Tasks List on the right side of the page, click Page Locks.

    The Page Locks page appears.

  4. Select the appropriate pages.

  5. Click UnLock Checked.

Unlocking Pages from the from the Details View

To unlock a page from the Details view:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. From the View list, select Details and click Go.

  4. In the Pages list, locate the page you want to unlock and click the Lock icon.

    The Edit Lock Comment page appears.

  5. Click UnLock.

Unlocking Pages from the Page Definition

To unlock pages from the Page Definition:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Click the Lock icon in the upper right corner above Shared Components.

    The Page Locks page appears.

  3. Select the page you want to unlock and click Unlock Checked.

Accessing Alternative Locked Pages Views

You can access a number of different views of Locked Pages on the Locked Pages page.

To access different views of locked pages:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select the application.

  3. On the Tasks List on the right side of the page, click Page Locks.

  4. On the Tasks list, click one of the following:

    • Show Locked Pages displays only locked pages within the current application.

    • Show All Pages displays all pages within the current application.

    • Show Unlocked Pages displays only unlocked pages within the current application.

    • Administer Locks enables an administrator to unlock any pages locked by a developer.

Deleting a Page

You can delete a page from the Page Definition or while editing page attributes.

Topics in this section include:

Deleting a Page from the Page Definition

To delete a page from the Page Definition:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Verify the page name.

  3. Click the Delete button at the top of the page.

  4. Follow the on-screen instructions.


See Also:

"Editing a Page Definition" for information about editing page attributes

Deleting a Page While Editing Page Attributes

To delete a page while editing page attributes:

  1. Navigate to the Page Definition. See "Accessing a Page Definition".

  2. Under Page Rendering, locate the Page section.

  3. Click the Edit page attributes icon to link to Page Attributes page. This icon resembles a small page with a pencil on top of it.

    Description of pg_def_edit_pg_att.gif follows
    Description of the illustration pg_def_edit_pg_att.gif

    The Edit Page appears.

  4. Verify the page number and page name.

  5. Click Delete.

  6. Follow the on-screen instructions.

Adding Application Comments

You can add comments concerning an entire application on the Application Comments page. You could add a description of the application or track the developers involved in working on the application.

Topics in this section include:

Creating an Application Comment

To create an application comment:

  1. Navigate to the Workspace home page.

  2. Click the Application Builder icon.

  3. Select an application.

  4. On the Application home page, click Shared Components.

    The Shared Components page appears.

  5. Under Application, click Comments.

    The Application Comments page appears.

  6. Enter comments in the Comments field and click Apply Changes.

Viewing the Application Comments Report

To view reports specific to an application:

  1. Navigate to the Workspace home page.

  2. Click the Application Builder icon.

  3. Select an application.

    The Application home page appears.

  4. On the Tasks list, click Application Reports.

  5. Click Shared Components and then Application Comments.

Adding Developer Comments

You can add developer comments to an application, a page, or a group of pages using the Developer Comment icon. The Developer Comment icon resembles a green balloon. This icon displays on the Action bar.

Description of comment_ico.gif follows
Description of the illustration comment_ico.gif

You can use developer comments to communicate application changes, report issues, or record developer suggestions.

This section contains the following topics:

Adding Developer Comments to an Application or Page

The Developer Comment icon displays on any page in Application Builder that is related to a specific application or application page. You can add developer comments to an application, a page, or a group of pages.

To add a developer comment:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click the Developer Comment icon.

    The Create Comment page displays in a separate window.

  4. In Relevant Page(s), specify the pages to which the comment applies. To enter a comment that:

    • Applies to a specific page, enter the page number.

    • Applies to multiple pages, enter a comma-delimited list of pages. For example:

      1, 2, 3 
      
    • Does not apply to a page or group of pages, leave this field blank.

  5. In Comment, enter up to 4000 characters of text.

  6. Click Create or Create Another.

Viewing and Editing Developer Comments

To edit a developer comment:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click the Developer Comment icon.

    The Create Comment page displays in a separate window.

  4. Click View Comments.

    The View Comments page appears. See "About the Navigation Bar on the View Comments Page".

  5. To edit a comment, click the Edit icon.

    The Edit Comment page appears.

    1. In Relevant Page(s), specify the pages to which the comment applies. To enter a comment that:

      • Applies to a specific page, enter the page number.

      • Applies to multiple pages, enter a comma-delimited list of pages. For example:

        1, 2, 3 
        
      • Does not apply to a page or group of pages, leave this field blank.

    2. In Comment, enter up to 4000 characters of text.

  6. Click Apply Changes.

About the Navigation Bar on the View Comments Page

A navigation bar appears at the top of the View Comments page and contains the following controls:

  • Page. Search for a page number. Enter a page number and click Go. To view all pages, leave the field blank and click Go.

  • Comment. Search for comments. Enter a case insensitive query for comment text and click Go. To view all comments, leave the field blank and click Go.

  • Developer. Limit the display to a specific developer. Select a developer to display and click Go.

  • Display. Determines how comments display. To increase or decrease the number of comments that appear, make a selection from the Display list and click Go.

Deleting Developer Comments

You can delete developer comments on the Edit Comment page or on the Manage Comments page.

Topics in this section include:

Deleting a Specific Developer Comment

To delete a developer comment:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click the Developer Comment icon.

    The Create Comment page displays in a separate window.

  4. Click View Comments.

  5. Locate the comment to be deleted. See "About the Navigation Bar on the View Comments Page".

  6. Click the Edit icon.

    The Edit Comment page appears.

  7. Click Delete.

Deleting Multiple Developer Comments

To delete multiple developer comments:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click the Developer Comment icon.

    The Create Comment page displays in a separate window.

  4. Click Manage Comments.

  5. Select one of the following actions:

    • Delete all comments

    • Delete comments created by a developer

    • Delete comments by date

  6. Follow the on-screen instructions.

About the Developer Comments Report

You can also view, edit, and manage developer comments from the Developer Comments report.

Topics in this section include:

Accessing the Developer Comments Report

To access the Developer Comments report:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. On the Application home page, click Application Reports on the Tasks list.

  4. Click Shared Components

  5. Under Application Reports, click Developer Comments.

    The Developer Comments report appears.

A navigation bar appears at the top of the page and contains the following controls:

  • Page. Search for a page number. Enter a page number and click Go. To view all pages, leave the field blank and click Go.

  • Comment. Search for comments. Enter a case insensitive query of comment text and click Go. To view all, leave the field blank and click Go.

  • Developer. Limit the display to a specific developer. Select a developer to display and click Go.

  • Date. Limit the display to a specific date. Select a date and click Go.

  • Display. Determine how comments display. To increase or decrease the number of comments that appear, make a selection from the Display list and click Go.

Editing Comments from the Developer Comments Report

To edit a comment from the Developer Comments report:

  1. Navigate to the Developer Comments report. See "Accessing the Developer Comments Report".

    The Developer Comments report appears.

  2. Locate the comment to be edited.

  3. Click the Edit icon.

    The Edit Comment page displays in a separate window.

    1. In Relevant Page(s), specify the pages to which the comment applies. To enter a comment that:

      • Applies to a specific page, enter the page number.

      • Applies to multiple pages, enter a comma-delimited list of pages, for example:

        1, 2, 3 
        
      • Does not apply to a page or group of pages, leave this field blank.

    2. In Comment, enter up to 4000 characters of text.

  4. Click Apply Changes.

Deleting a Comment from the Developer Comments Report

To delete a comment from the Developer Comments report:

  1. Navigate to the Developer Comments report. See "Accessing the Developer Comments Report".

    The Developer Comments report appears.

  2. Locate the comment to be deleted.

  3. Click the Edit icon.

    The Edit Comment page displays in a separate window.

  4. Click Delete.

Deleting Multiple Comments from the Developer Comments Report

To delete multiple comments from the Developer Comments report:

  1. Navigate to the Developer Comments report. See "Accessing the Developer Comments Report".

    The Developer Comments report appears.

  2. Locate the comment to be deleted.

  3. Click the Edit icon.

    The Edit Comment page displays in a separate window.

  4. Click Manage Comments.

  5. Select one of the following actions:

    • Delete all comments

    • Delete comments created by a developer

    • Delete comments by date

  6. Follow the on-screen instructions.

  7. Click Apply Changes.

Downloading the Developer Comments Report

You can download the Developer Comments report as a comma-delimited file (.csv) file by clicking the Export link.

To download the Developer Comments report:

  1. Navigate to the Developer Comments report. See "Accessing the Developer Comments Report".

    The Developer Comments report appears.

  2. Click the Export link at the bottom of the page.

  3. Follow the on-screen instructions.

Creating Applications Groups

You can organize your applications by assigning them to application groups. To use application groups, create a group by clicking the Create button and then assign applications to it.

Topics in this section include:

Viewing Application Groups

The section describes different ways to view application groups.

Accessing the Application Group Page

To access the Application Group page:

  1. On the Workspace home page, click the Application Builder icon.

  2. On the Tasks List on the right side of the page, click Application Groups.

    The Application Group page appears.

    Use the Navigation bar at the top of the page to search for a page group by name or change the page display. You can change the default display by making a selection from View list. Available options include:

    • Icons (the default) displays each group as a large icon. To edit a group, click the appropriate icon.

    • Details displays each group as a line in a report. To edit a group, click the name.

  3. To view the applications associated with a group, you click the group name.


    Note:

    The Tasks list only appears if groups currently exist.

Viewing Page Groups from the Application Builder Home Page

To view page groups from the Application Builder home page:

  1. On the Workspace home page, click the Application Builder icon.

  2. From the View list, select By Group and click Go.

    Any defined groups appear.

    Description of app_group.gif follows
    Description of the illustration app_group.gif

  3. To view or edit a page group, click the group name.

Creating an Application Group

To create an application group:

  1. On the Workspace home page, click the Application Builder icon

  2. On the Tasks List on the right side of the page, click Application Groups.

  3. On the Application Group page, click Create.

  4. Enter a name, a description (optional), and click Create.

Editing an Application Group Definition

When you create page group you specify a name and description.

To edit an application group definition:

  1. On the Workspace home page, click the Application Builder icon

  2. On the Tasks List on the right side of the page, click Application Groups.

    Application Group page appears.

  3. Select an application group.

  4. On the Application Group page, edit the name or description and click Apply Changes.

Assigning an Application to an Application Group

To assign applications to a group:

  1. On the Workspace home page, click the Application Builder icon.

  2. On the Tasks List on the right side of the page, click Application Groups.

  3. On the Tasks list, click Manage Unassigned.

    The Manage Application Group Assignments page appears.

  4. From the New Group list, select a group.

  5. Select the applications to be assigned and click Assigned Checked.


Tip:

You can also assign an application to an application group by editing the application definition. Select the group from the Application Group list. See "Configuring the Application Definition".

Removing an Application from an Application Group

To remove an application from an application group:

  1. On the Workspace home page, click the Application Builder icon.

  2. On the Tasks List on the right side of the page, click Application Groups.

  3. On the Tasks list, click Manage Unassigned.

    The Manage Application Group Assignments page appears.

  4. From the New Group list, select Unassign.

  5. Select the pages to be unassigned and click Assigned Checked.


Tip:

You can also remove an application from an application group by editing the application definition. Select Unassigned from the Application Group list. See "Configuring the Application Definition".

Deleting an Application Group

To remove an application group:

  1. On the Workspace home page, click the Application Builder icon.

  2. On the Tasks List on the right side of the page, click Application Groups.

  3. Assign all applications in the group to Unassign. See "Removing an Application from an Application Group".

  4. Return to the Application Groups page.

  5. Select the application group to be deleted.

  6. On the Application Group page, click Delete.

    A confirmation page appears.

  7. Confirm your request.

Viewing Application Reports

Application Builder includes over 100 reports that provide a comprehensive view of your application from various perspectives. You can use application reports to achieve consistency among shared components and page components within your application. For example, you can view details about buttons used on all pages within your application. Additionally, many reports are updatable so you can standardize components, such as item and region labels, without navigating to a specific page.

Topics in this section include:

Accessing Application Reports

To view reports specific to an application:

  1. Navigate to the Workspace home page.

  2. Click the Application Builder icon.

  3. Select an application.

    The Application home page appears.

  4. On the Tasks list, click Application Reports.

  5. Select a type of report to view:

Shared Components Reports

Shared Components reports offer information on common elements that can display on every page within an application. Reports are grouped by the following categories: including Application, Logic, Security, Globalization, Conditional Components, Navigation, User Interface, and Files. Report examples include Developer Comments, Database Object Dependencies, Application Items, Application Computations, Authentication Schemes, Breadcrumb Entries, and Shortcuts.

About the Database Object Dependencies Report

The Database Object Dependencies report identifies database objects referenced by the current application. Review this report to determine what objects to move when deploying an application.

To view the Database Object Dependencies report:

  1. Navigate to the appropriate application.

    1. From the Workspace home page, click the Application Builder icon.

    2. Select an application.

  2. On the Tasks list, click Application Reports.

  3. Click Shared Components.

  4. Under Application, click Database Object Dependencies.

  5. Click Compute Dependencies.

  6. To view the components that reference a specific database object, select the Reference Count number.

Page Components Reports

Page Components reports offer detailed information on controls and logic that execute when a page is rendered (for example, branches, buttons, computations, items, and regions).

About the Search Region Source Report

Use the Search Region Source report to search through all region source in your application.

To view the Search Region Source report:

  1. Navigate to the Workspace home page.

  2. Click the Application Builder icon.

  3. Select an application.

  4. On the Tasks list, click Application Reports.

  5. Click Page Components.

  6. Under Regions, click Search Source.

  7. To view the Page Definition for a region, select the page number.

  8. To view region attributes for a region, select the region name.

Activity Reports

Activity reports offer details about developer activity within the current application. Available reports are grouped into the following categories: Page Views, Caching, Developer Activity, and Sessions.


Tip:

You can also access the Activity page by clicking the Activity link on the Developer toolbar. See "About the Developer Toolbar".

About the Page Views by Hour Report

To view the Page Views by Hour report:

  1. Navigate to the Workspace home page.

  2. Click the Application Builder icon.

  3. Select an application.

  4. On the Tasks list, click Application Reports.

  5. Click Activity.

  6. Under Page Views, click By Hour.

Cross Application Reports

Cross Application reports offer information that apply to multiple applications. Available reports include Application Attributes, Application Comments, Build Options, Build Status and Application Status, Page Component Counts, Security Profiles, Authentication Schemes, and Template Defaults by Application.

About the Application Comparison Report

Use the Application Comparison report to compare two applications.

To view the Application Comparison report:

  1. Navigate to the Workspace home page.

  2. Click the Application Builder icon.

  3. Select an application.

  4. On the Tasks list, click Application Reports.

  5. Click Cross Application.

    The Application Comparison page appears.

  6. In the navigation bar, specify the following:

    1. Application 1 - Select the first application to compare.

    2. Application 2 - Select the second application to compare.

    3. Component - Select the components to include in the report.

    4. Page - Identify a specific page number to compare.

    5. Show - Select the number of differences to display on each page.

    6. Click Go.

  7. To view only differences, select Show Differences Only and click Go.

  8. To view details, select Show Details and click Go.

Understanding Page-Level Items

An item is part of an HTML form. An item can be a text field, text area, password, select list, check box, and so on. Item attributes affect the display of items on a page. For example, these attributes can impact where a label displays, how large an item is, and if the item will display next to or below the previous item.

Topics in this section include:

Differences Between Page Items and Application Items

There are two types of items: page items and application items. Page items are placed on a page and have associated user interface properties, such as Display As, Label and Label Template. Examples of page-level items include a check box, date picker, display as text, file browse field, popup list of values, select list, or a text area. Application items are not associated with a page and therefore have no user interface properties. You can use an application item as a global variable.

About the Items Section of the Page Definition

You create and edit page-level items on the Page Definition. The Items section appears in the Page Rendering area.

Description of pg_def_items.gif follows
Description of the illustration pg_def_items.gif

You can temporarily hide all other subsections by clicking the Items icon. To restore the view, click Show All. The Show All icon resembles an inverted triangle.

The following icons display next to the section title:

  • Edit All. The Edit All icon resembles a small grid with a pencil on top of it. Use this icon to edit all items at once. See "Using the Edit All Icon to Edit Multiple Items".

  • Copy. The Copy icon resembles two small overlapping pages. Use this icon to make a copy of an existing item.

  • Create. The Create icon resembles a plus (+) sign overlapping a small page. Click this icon to create an item.

Items are organized by region. To edit an item, click the item name.

About the Drag and Drop Icon

You can quickly change the appearance of a page by clicking the Drag and drop icon to access the Drag and Drop Layout page. The Drag and drop icon resembles a green rectangle and displays to the right of the Reorder Region Items icon.

Description of drag_drap_ico.gif follows
Description of the illustration drag_drap_ico.gif

You can use the Drag and Drop Layout page to interactively reorder items within a given region, change select item attributes, create items, or delete existing items. See "Using the Drag and Drop Layout Page".

About the Reorder Items Icon

You can quickly edit the label and position of items in a region by clicking the Reorder Region Items icon on the Page Definition. This icon resembles a light green down or up arrow.

Description of reorder_items.gif follows
Description of the illustration reorder_items.gif

Creating Page-Level Items

You can create page-level items by running the Create Item Wizard.

Topics in this section include:

Creating a Page-Level Item on the Page Definition

You create a page-level item by running the Create Item Wizard from the Page Definition.

To create a page-level item:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. If necessary, create an HTML region. See "Understanding Regions".

  3. Under Items, click the Create icon.

  4. Select an item type. See "About Item Types".

  5. Follow the on-screen instructions.

  6. To learn more about a specific field, click the field label.

    When help is available, the item label changes to red when you pass your cursor over it, and the cursor changes to an arrow and question mark. See "About Field-Level Help".

About Item Naming Conventions

When specifying an item name, remember the following rules. Item names must:

  • Be unique within an application

  • Not have quotation marks

  • Begin with a letter or a number, and subsequent characters can be letters, numbers, or underscore characters

  • Be case-insensitive

  • Should not exceed 30 characters

  • Cannot contain letters outside the base ASCII character set

About Item Types

When you create an item, you specify an item type. Once you create an item, these types appear on the Display As list on the Edit Page Item page. Table 6-2 describes available item types.

Table 6-2 Available Item Types

Item TypeDescription

Check Box

Displayed using a list of values. A list of values is required for items displayed as check boxes. The value corresponding to a checked box is returned in a single colon-delimited string.

The following example demonstrates how to create a single check box that returns YES. This example would display both a check box and a field label.

SELECT NULL display_text, 'YES' return_value FROM DUAL;

This example includes the additional text Click to select.

SELECT 'Click to select' display_text, 'YES' return_value FROM DUAL;

See Also: "APEX_UTIL" in Oracle Application Express API Reference for information about breaking up returned values

Date Picker

Displays a text field with a Calendar icon next to it. When clicked, this icon displays a small calendar where the user can select a date and a time (optional).

If the format you need is not included in the Display As list, select Date Picker (use application format mask) or Date Picker (use item format mask). The latter uses the value from the Format Mask field in the Source section of the Edit Page Item page.

Display Only

Available Display As Text subtypes include:

  • Display as Text (does not save state) - Displays the item's source value on the page without creating a form item.

  • Display as Text (escape special characters, does not save state) - Displays the item's source value with special characters ('<','>','&') escaped.

  • Display as Text (saves state) - Displays the item's source value and creates a form item that gets submitted with the page to pass the value into session state.

  • Display as Text (based on LOV, does not save state) - Displays the display value from an LOV by matching the item's source value with the LOV's return value.

  • Display as Text (based on LOV, saves state) - Same as the previous option, but also generates a form item that gets submitted with the page to pass the return value into session state.

File Browse

Displays a text field with a Browse... button. The Browse button enables the user to locate a file on a local file system and upload it. Oracle Application Express provides a table for these files to be uploaded to and an API to retrieve the files.

See Also: "Securing File Uploads"

Hidden

Renders an HTML hidden form element. Session state can be assigned and referenced just like a text field.

Hidden and Protected

Renders an HTML hidden form element. Session state can be assigned and referenced just like a text field. For maximum security use Hidden and Protected instead of Hidden unless your page has client-side behavior, for example, JavaScript that alters the item value after the page is rendered by Oracle Application Express.

List Manager

Based on a list of values. This item enables you to manage a list of items by selecting and adding to a list. The list of values display as a popup.

Multiple Select

Renders as a multiselect HTML form element. When submitted, selected values are returned in a single colon-delimited string. You can break up the values using the APEX_UTIL API.

See Also: "Working with a Multiple Select List Item" and "APEX_UTIL" in Oracle Application Express API Reference

Password

Renders as an HTML password form element. Available password types include:

  • Password - Suppresses text entered into the field. Saves the value in session state when the page is submitted.

  • Password (submits when Enter pressed) - Suppresses text entered into the field and submits the page when ENTER is pressed.

  • Password (does not save state) - Suppresses text entered into the field. Does not save the value in session state.

  • Password (submits when Enter pressed, does not save state) - Suppresses text entered into the filed and submits the page when Enter is pressed. Does not save the value in session state.

The Password and Password (submits when Enter pressed) save the password in a database table when the page is submitted. Use these password item types only when the password is needed in session state for use by other pages during the session.

Password (does not save state) and Password (submits when Enter pressed, does not save state) do not save the password in a database table. Use these password item types when the submitted password value is used only by after-submit page processing on the same page and is never needed again during the session.

If you must reference and retrieve the value of a password in your application then you set the Store value encrypted in session state attribute to Yes. To learn more, see "About Session State and Security".

Popup List of Values

Renders as a text field with an icon. When the user clicks the icon, a popup window appears with one of these, depending on the popup selection you make:

  • List of values represented as a series of links - When the user makes a selection from the list, the selected value is placed in the text field.

  • Color picker - When the user makes a selection from the palette, the HTML value for the color selected (for example, #000000 for black) is returned.

With the exception of the color picker, you control popup lists of values through templates. You can only specify one popup list of values (LOV) template for each application. A popup LOV is a good choice for lists of values that are too large to return on a single page.

There are two types of Popup LOVs: one that fetches a set of rows when the window pops up and one that does not. Available popup LOVs include:

  • Popup Key LOV (Displays description, returns key value)

  • Popup Key LOV No Fetch (Displays description, returns key value without pre-fetch)

  • Popup LOV (fetches first rowset and filters)

  • Popup LOV (fetches first rowset)

  • Popup LOV (no fetch)

  • Popup Color Picker

Popup LOVs must be based on a query that selects two columns with different column aliases. For example:

SELECT ename name, empno id 
   FROM emp

If one of the columns is an expression, remember to use an alias. For example:

SELECT ename||' '||job display_value, empno FROM emp

Radio

Renders as an HTML radio group form element, based on a list of values. Choose Radiogroup with Submit to have the page submitted when the radio button is selected.

The following example displays employee names (ename), but returns employee numbers (empno):

SELECT ename, empno FROM emp

Select List

Displays using a list of values. A list of values is required for items displayed as a select list. Select lists are rendered using the HTML form element <select>. The values in a select list are determined using a named list of values or a list of values defined at the item level. You can specify the NULL display value and NULL return value.

The following example would return employee names (ename) and employee numbers (empno) from the emp table. Note that column aliases are not required and are included in this example for clarity.

SELECT ename display_text, empno return_value FROM emp

Oracle Application Express provides additional enhancements to a standard HTML select list:

  • Select List with Submit - Submits the page when the user changes its selected value. Upon submit, the REQUEST is set to the name of the item that represents the select list, allowing you to execute conditional computations, validations, processes, and branches.

  • Select List with Redirect - Redirects the user back to the same page, setting ONLY the newly selected value of the select list in session state.

  • Select List Returning URL Redirect - Based on a list of values with URLs as the return values. Changing the value of the select list causes the browser to redirect to the corresponding URL.

  • Select List with Branch to Page - Based on a list of values with page numbers as return values. Changing the selected value in the select list causes the Application Express engine to branch to the corresponding page.

Note: Long select lists can cause errors. If you have a long select list that generates an error, try using a Popup List of Values instead.

Shuttle

Renders as a multiple select list that includes two boxes containing lists. The left list displays a source list of values. Users use the shuttle control icons and buttons to select list items and move them from the left (source) list to the right (destination) list. Each shuttle has five controls:

  • Move all - Moves all items in the source list to the destination list.

  • Move selected - Moves only selected items (Ctrl + Shift items) to destination list.

  • Remove selected - Moves only selected items (Ctrl + Shift items) to the source list.

  • Remove all - Moves all items on destination list back to the source list.

  • Refresh - Resets the source and destination lists.

The right destination list includes the sort controls Move to top, Move up, Move down, and Move to bottom.

Note: In order to create this item type, you must define a list of values. See "Creating a Static List of Values", "Creating Lists of Values", and "Working with a Multiple Select List Item".

Text

Displays as an HTML text field containing a maximum of 30,000 bytes of text. You control the maximum length and display width by editing the Height and Width item attribute.

Available Text display options include:

  • Text Field - Renders as a text field.

  • Text Field (Disabled, does not save state) - Displays a read-only version of a display value from a list of values by using the item's value in session state to look up the corresponding display value in the associated list of values. The value displayed on the screen is not saved in session state upon submit.

  • Text Field (Disabled, saves state) - Displays a read-only version of a display value from a list of values by using the item's value in session state to look up the corresponding display value in the associated list of values.

  • Text Field (always submits page when Enter pressed) - Displays a read-only version of the value in session state. Upon submit, the value displayed is saved in session state.

  • Text Field with Calculator Popup - Renders as a text field with an icon next to it. When clicked, the icon displays a small window containing a calculator. Calculations are placed back in the text field.

Text Area

Renders as an HTML text area. There is no maximum length for an item displayed as a text area. You control the height and width by editing the Height and Width item attribute. Additional available Text Area Display As options include:

  • Text Area

  • Text Area (auto height) - Varies the height based on the amount of text. Use this option to scale the text area to the amount of data.

  • Text Area with Counter - Includes a counter that displays the number of bytes entered in the field.

  • Text Area with Spell Checker - Provides a popup English language spell checker.

  • HTML Editor Minimal - Provides basic text editing features, including the application of bold, italics, and underline styles, the ability to create numbered and bulleted lists, and indentation.

  • HTML Editor Standard - Provides more editing functionality, such as font, format and color, than HTML Editor Minimal.

  • Text Area with HTML Editor - Provides basic text formatting controls. Note that these controls may not work in all Web browsers.

Stop and Start Table

Forces the close of an HTML table using the </table> tag and starts a HTML table. You can use this item type to reset the column width in the middle of the region.

Note that a Stop and Start Table item only displays its label. You can prevent the label from displaying at all by setting it to null. To do this, you simply remove the default label.


Creating Multiple Items Using Tabular Form

To create multiple items simultaneously:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. If necessary, create an HTML region. See "Understanding Regions".

  3. Under Items, click the Create icon.

    The Create Item wizard appears.

  4. At the bottom of the page, click the Create multiple Items Using Tabular Form link.

  5. On the Create Multiple Items page, specify the following:

    1. Create Item(s) in Region - Select the region to contain the items.

    2. Item Template - Select an item template.

    3. For each item, enter the Sequence, Name, Label, Type and specify whether the item should be cached.

  6. Click Create Multiple Items.

Creating Multiple Items Using Drag and Drop

To create multiple items using the Drag and Drop Layout page:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. If necessary, create an HTML region. See "Understanding Regions".

  3. Under Items, click the Create icon.

    The Create Item wizard appears.

  4. At the bottom of the page, click the Create multiple Items Using Drag and Drop Layout link.

    The Drag and Drop Layout page appears.

  5. Select an item from the palette on the left side of the page and drag it to the appropriate position on the page.

  6. Edit the item attributes at the of the page.

    1. Display Name - Enter an item name. Use this name retrieve the value of the item. Item names longer than 30 characters cannot be referenced using bind variable syntax.

    2. Label - Enter the label for this item. You may include HTML, JavaScript, and shortcuts. You can also use the substitution string #CURRENT_ITEM_NAME# to obtain the name of the item associated with this label.

    3. Display Type - Select a display type (if applicable). See "About Item Types".

  7. To edit an existing item, edit the Item Name and Label fields, or select a new Display Type at the top of the page.

  8. Click Next.

  9. Optionally, edit the each item's Name and Label.

  10. Click Apply Changes.

Creating a Static List of Values

One way to create a static list of values is to edit an item's List of Values definition. Note that this type of list of values is not reusable. As a best practice, create a list of values as a shared component whenever possible.

To create a static list of values:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Under Items, select the item name.

    The Edit Page Item page appears.

  3. Under Name, specify how the item will be rendered. Make a selection from the Display As list.

  4. Under List of Values, create a static list of values:

    1. From Named LOV, select Select Named LOV.

    2. In List of values definition, enter a definition using the following syntax:

      STATIC[2]:Display Value[;Return Value],Display Value[;Return Value]
      

      Where:

      • The first keyword may be STATIC or STATIC2.

        STATIC results in the values being sorted alphabetically by display value. STATIC2 results in the values being displayed in the order they are entered in the list.

      • A semicolon separates the display value from the return value in each entry.

      • Return Value is optional. If a Return Value is not included, the return value is the same as the display value.

  5. To learn more, see item Help. To view help for a specific item on a page, click the item label.

    When help is available, the item label changes to red when you pass your cursor over it and the cursor changes to an arrow and question mark. See "About Field-Level Help".

  6. Click Apply Changes.

    The examples that follow demonstrate syntax for three different static LOVs.

Example 1: Four Values Displayed in Alphabetical Order

In this example, the list of values has four values (Cow, Dog, Cat, and Lion) that display in alphabetical order. The return value of each entry equals the display value.

STATIC:Cow,Dog,Cat,Lion
Example 2: Ten Values Displayed in the Order Listed

In this example, the list of values has ten values that display in the order listed in the definition. The return value of each entry equals the display value.

STATIC2:10,15,20,25,50,100,200,500,1000,10000
Example 3: A List of Values with Having Both a Return and Display Value

In this example, the list of values has two values: Yes and No (the display value Yes and its return value Y, and the display value No and its return value N).

STATIC:Yes;Y,No;N

See Tutorial:

"How to Control Form Layout" in Oracle Application Express Advanced Tutorials

Editing Page-Level Items

You can edit page-level items by editing page item attributes or using the Edit All or Reorder Items icons.

Topics in this section include:

Editing Page Item Attributes

Once you create a page item, you can edit it on the Edit Page Item page.

To edit page item attributes:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Under Items, select the item name.

    The Edit Page Item page appears.

  3. To learn more about a specific attribute on a page, click the attribute label.

    When help is available, the item label changes to red when you pass your cursor over it, and the cursor changes to an arrow and question mark. See "About Field-Level Help".

  4. Click Apply Changes.

About Navigation Alternatives

The Edit Page Item page is divided into the following sections: Name, Displayed, Label, Element, Source, Default, List of Values, Security, Conditions, Read Only, Help Text, Configuration, and Comments.

You can access these sections by scrolling down the page, or by clicking a navigation button at the top of the page. When you select a button at the top of the page, the selected section appears and all other sections are temporarily hidden. To view all sections of the page, click Show All.

Using the Edit All Icon to Edit Multiple Items

You can edit multiple items at once by clicking the Edit All icon on the Page Definition. The Edit All icon resembles a small grid with a pencil on top of it.

Description of edit_all_item.gif follows
Description of the illustration edit_all_item.gif

Clicking the Edit All icon displays a series of pages that enable you to edit multiple items simultaneously or view a history of recent changes.

Topics in this section include:

Page Items

Item attributes control how items display on a page. You can use the Page Items page to edit the sequence, field label, template, region, and overall position for all items on a page.

A Navigation bar displays at the top of the page. Use the Page field to navigate to another page. To limit the display to just items in a specific region, make a selection from Show Regions list.

The Page Items page displays items in an editable report. Table 6-3 describes each editable attribute.

Table 6-3 Editable Attributes on Page Items

AttributeDescription

Sequence

Specify the display sequence for this component. The sequence determines the order of evaluation.

Prompt

Enter the label for this HTML form element. You may include HTML, JavaScript, and shortcuts. You can also use the substitution string #CURRENT_ITEM_NAME# to obtain the name of the item associated with this label.

Field Template

Determines the label template. Label templates enable you to define the user interface attributes in a central place and share that definition among many labels.

Region

Defines the region in which the item displays. All items must be in a region.

New Line

Determines whether this item displays on the same line as the previous item or whether it displays on the next line. Items are laid out in an HTML table. Select Yes to have an item display as the first field in a new row in the table.

Width

Specifies the length (in characters) of the form element that displays for this item.

Height

Specifies the height (in lines) for text areas and multi select lists.

Column Span

Items are laid out in HTML tables. This property defines the value to be used for the COLSPAN attribute in the table cell.

Row Span

Items are laid out in HTML tables. The attribute determines the value to be used for the ROWSPAN attribute in the table cell that the item displays in.


Edit the appropriate attributes and click Apply Changes.

Item Help

Use the Item Help page to edit item help for all items on a page. You can avoid repeating the same Help text in multiple locations by subscribing to another item.

To edit item Help:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Under Items, click the Edit All icon.

  3. Click Item Help.

    The Item Help page appears.

    Use the Navigation bar at the top of the page to narrow or broaden the display. Available options include:

    • Page - Select or enter a new number and click Go.

    • Search - Enter a case insensitive query and click Go.

    • Show - Select whether to display All, Subscribed, or Unsubscribed Help text.

    • All Pages - Select to run the search query on all pages in the application.

    • Current Page - Select to restrict the search query to the current page.

      You can also use the arrows in the Navigation bar to scroll through the application pages.

  4. To subscribe to an existing Help item, make a selection from Subscribed To.

  5. To edit help for a specific item, click the item name.

    On the Edit Help page:

    1. Reference Master Item Help From - (Optional) Select a existing item Help topic to subscribe to.

    2. Help Text - Enter or edit the Help text for this item.

    3. Click Apply Changes.

  6. Click Apply Changes.

Reassign Region Items

Use the Reassign Region Items page to assign items to a new region.

To Reassign Region Items page:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Under Items, click the Edit All icon.

  3. Click Reassign Region Items.

    The Reassign Region Items page appears.

    Use the Navigation bar at the top of the page to narrow or broaden the display. Available options include:

    • Page - Select or enter a new number and click Go.

    • Show Regions - Select a region to display and click Go.

  4. To reassign an item to another region:

    1. Select the items to reassign.

    2. From Assign to Region, select a new region.

    3. Click Reassign Region Items.

Delete Multiple Items

Use the Delete Multiple Items page to delete multiple items at once.

To delete multiple items:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Under Items, click the Edit All icon.

  3. Click Delete Multiple Items.

    The Delete Multiple Items page appears.

    Use the Navigation bar at the top of the page to narrow or broaden the display. Available options include:

    • Page - Select or enter a new number and click Go.

    • Show Regions - Select a region to display and click Go.

    • Forward (>) and Next (<) buttons - Display the previous and next page.

  4. To reassign an item to another region:

    1. Select the items to reassign.

    2. From Assign to Region, select a new region.

    3. Click Reassign Region Items.

History

Use the History page to view a summary of recent edits to page-level items.

Using the Reorder Region Items Icon

You can quickly edit the label and position of items in a region by clicking the Reorder Region Items icon on the Page Definition. This icon resembles a light green down or up arrow.

To use the Reorder Region Items icon:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Under Items, click the Reorder Region Items icon.

    The Reorder Region Items page appears with items laid out in tables. You can edit the position of an item by selecting values for New Line, New Field, Column Span, and Label Alignment attributes. Note that a graphical representation of how the items display appears at the bottom of the page.

  3. To edit an item label, enter a new title in the Label field.

  4. To change the position of an item, edit the following attributes:

    • New Line. Determines if the item displays on the same line as the previous item, or displays on the next line. Select Yes to have an item display as the first field in a new row in the table.

    • New Field. Determines if the item displays in the next column or in the same column as the previous item. Select Yes to have the label and value for the item display in a new HTML table cell. Use this attribute in combination with the New Line and Span attributes to control layout.

    • Column Span. Defines the value to be used for the COLSPAN attribute in the table cell. The COLSPAN attribute defines the number of columns that it spans across the table.

  5. To change label alignment, make a selection from the Label Alignment list.

  6. To change the order in which items display, click the up and down arrows in the far right column. Clicking the arrow moves the item one row up or down.

    Note that the order you specify here translates to sequence number in the Sequence attribute on the Edit Page Item page. See "Editing Page Item Attributes".

  7. Click Apply Changes.


Tip:

You can also use the Drag and Drop Layout feature to reorder items. See "Using the Drag and Drop Layout Page".


Note:

To change the region in which an item resides, you must edit the item attributes. See "Editing Page Item Attributes".

Using the Drag and Drop Layout Page

You can use the Drag and Drop Layout page to interactively reorder items within a given region, change select item attributes, create items, or delete existing items.

Topics in this section include:

Accessing the Drag and Drop Layout Page

You access the Drag and Drop Layout page by either:

About the Drag and Drop Layout Page

The Drag and Drop Layout page is divided into two sections: Item palette and Layout region.

Description of drag_drap_pg.gif follows
Description of the illustration drag_drap_pg.gif

The Item palette displays on the left side of the page. You add items by clicking an item type on the palette and dragging it to the correct position in the Layout region. Note that when you position the cursor over an item type, a tooltip appears.

Use the right side of the page (or Layout region) to position items. To move an item vertically, click the Add Row button to insert an empty row. Then drag and drop the item into the empty row.


See Also:

"Deleting Items"

Creating a New Item

To create a new item on the Drag and Drop Layout page:

  1. Navigate to the Drag and Drop Layout page. See "Accessing the Drag and Drop Layout Page".

  2. Click an item type in the Item palette on the left side of the page and drag it to the appropriate location in the Layout region.

    Note that when you position the cursor over an item type, a tooltip appears.

  3. You can reposition the item:

    • To move an item horizontally, select the item and drag it to the appropriate position on the page.

    • To insert an existing or new item between two existing rows, click the Add Row button and drag it between the existing rows. This creates an empty row where you can then move the item.

  4. Edit the item attributes at the of the page.

    1. Display Name - Enter an item name. Use this name to retrieve the value of the item. Item names longer than 30 characters cannot be referenced using bind variable syntax.

    2. Label - Enter the label for this item. You may include HTML, JavaScript, and shortcuts. You can also use the substitution string #CURRENT_ITEM_NAME# to obtain the name of the item associated with this label.

    3. Display Type - Select a display type (if applicable). Note that the select list is restricted to options corresponding to the type of item you are creating. See "About Item Types".

  5. Click Next.

  6. Optionally, edit the each item's Name and Label.

  7. Click Apply Changes.

About List of Values

If you create an item that requires a list of values (LOV), the Drag and Drop Layout Wizard creates a static inline LOV for you. Note you must edit and fix this LOV once you complete the layout process.

Editing Existing Items

To edit an existing item on the Drag and Drop Layout page:

  1. Navigate to the Drag and Drop Layout page. See "Accessing the Drag and Drop Layout Page".

  2. To reposition the item:

    • To move an item horizontally, select the item and drag it to the appropriate position on the page.

    • To insert an existing or new item between two existing rows, click the Add Row button and drag it between the existing rows. This creates an empty row where you can then move the item.

  3. If required, select an item and edit its attributes at the of the page.

    1. Display Name - Enter an item name. Use this name retrieve the value of the item. Item names longer than 30 characters cannot be referenced using bind variable syntax.

    2. Label - Enter the label for this item. You may include HTML, JavaScript, and shortcuts. You can also use the substitution string #CURRENT_ITEM_NAME# to obtain the name of the item associated with this label.

    3. Display Type - Select a display type (if applicable). Note that the select list is restricted to options corresponding to the type of item you are creating. See "About Item Types". See "About Item Types".

  4. Click Next.

  5. Optionally, edit the each item's Name and Label.

  6. Click Apply Changes.


Note:

To change the region in which an item resides, you must edit the item attributes. See "Editing Page Item Attributes".

Deleting Items

To delete an item, click it and drag it to the Recycle box at the bottom of the page. If you delete an existing item, it appears in the Recycle box and can be retrieved until you click Apply Changes on the next page. Note that if you drop a new item you have just created in the Recycle box, it instantly disappears and cannot be retrieved.

Referencing Item Values

You can reference item values stored in session state in regions, computations, processes, validation, and branches. Table 6-4 describes the supported syntax for referencing item values.

Table 6-4 Syntax for Referencing Item Values

TypeSyntaxDescription

SQL

:MY_ITEM

Standard bind variable syntax for items whose names are no longer than 30 bytes. Use this syntax for references within a SQL query and within PL/SQL.

PL/SQL

V('MY_ITEM')

PL/SQL syntax referencing the item value using the V function.

See Also: Oracle Application Express API Reference

PL/SQL

NV('MY_NUMERIC_ITEM')

Standard PL/SQL syntax referencing the numeric item value using the NV function.

See Also: Oracle Application Express API Reference

Static Text

&MY_ITEM

Static text.

Static Text (exact)

&MY_ITEM.

Static text. Exact Substitution.


You can set the value of an item in your application using any of the following methods:

  • For page-level items, use the Source Attribute to set the item value.

    From the Page Definition, select the item name to view the Edit Page Item page. Scroll down to Source and edit the appropriate fields.

    You can also set the value of an item in any region based on PL/SQL or a process using the following syntax:

    BEGIN
     :MY_ITEM :=  'new value';
    END;
    
  • Pass the value on a URL reference using f?p syntax. For example:

    f?p=100:101:10636547268728380919::NO::MY_ITEM:ABC
    
  • Set the value using a computation. Computations are designed to set item values. For example:

    TO_CHAR(SYSDATE,'Day DD Month, YYYY');
    
  • Use the PL/SQL API to set an item value within a PL/SQL context. For example:

    APEX_UTIL.SET_SESSION_STATE('MY_ITEM',SYSDATE);
    

Displaying Conditional or Read-Only Page Items

You can choose to have an item display conditionally or as read-only by editing attributes on the Edit Pages Item page.

To display a conditional or read-only item:

  1. Create the item. See "Creating Page-Level Items".

  2. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  3. Under Items, select the item name.

    The Edit Page Item page appears.

  4. To display an item conditionally:

    1. Scroll down to Conditions.

    2. Make a selection from the Condition Type list.

    3. Enter an expression in the fields provided.

  5. To make an item read-only:

    1. Scroll down to Read Only Display Settings.

    2. Make a selection from the Read Only Condition Type list.

    3. Enter an expression in the fields provided.

  6. Click Apply Changes.

Working with a Multiple Select List Item

A multiple select item renders as a multiple select list form element which can be either a Multiselect List or Shuttle item type. When submitted, selected values are returned in a single colon-delimited string. You can handle values in this format in two ways:

  • Using the INSTR function

  • Using the APEX_UTIL.STRING_TO_TABLE function

Using APEX_UTIL.STRING_TO_TABLE to Convert Selected Values

Suppose you had a report on the EMP and DEPT tables that is limited by the departments selected from a Department multiple select list. First, you create the multiple select item, P1_DEPTNO, using the following query:

SELECT dname, deptno
FROM dept

Second, you return only those employees within the selected departments as follows:

SELECT ename, job, sal, comm, dname
FROM emp e, dept d
WHERE d.deptno = e.deptno
AND instr(':'||:P1_DEPTNO||':',':'||e.deptno||':') > 0

Next, assume you want to programmatically step through the values selected in the multiple select item, P1_DEPTNO. To accomplish this, you would convert the colon-delimited string into a PL/SQL array using the APEX_UTIL.STRING_TO_TABLE function. The following example demonstrates how to insert the selected departments into an audit table containing the date of the query.

DECLARE
    l_selected APEX_APPLICATION_GLOBAL.VC_ARR2;
BEGIN
  --
  -- Convert the colon separated string of values into
  -- a PL/SQL array 

  l_selected := APEX_UTIL.STRING_TO_TABLE(:P1_DEPTNO);

  --
  -- Loop over array to insert department numbers and sysdate
  --

  FOR i IN 1..l_selected.count 
  LOOP
    INSERT INTO report_audit_table (report_date, selected_department)
        VALUES (sysdate, l_selected(i));
  END LOOP;
END;

See Also:

"STRING_TO_TABLE Function" in Oracle Application Express API Reference

Understanding Application-Level Items

Application-level items do not display, but are used as global variables to the application. You can use an application item as a global variable.

Topics in this section include:

Creating an Application-level Item

To create an application-level item:

  1. Navigate to the Workspace home page.

  2. Click the Application Builder icon.

  3. Select an application.

  4. When Application Builder appears, click Shared Components.

  5. Under Logic, select Application Items.

    The Application Items page appears.

  6. To create an application item, click Create.

  7. Follow the on-screen instructions.

About the Application Items Page

Once you create a application item, it appears on the Application Items page. You control how the Application Items page displays by making a selection from the View list. Available options include:

  • Icons (the default) displays each application item as a large icon. To edit an application item, click the appropriate icon.

  • Details displays each application item as a line in a report. To edit an application item, click the name.

Accessing Application Item History

You can view a history of changes to application items by clicking History at the top of the Application Items page.

Editing Application-level Item Attributes

Once you create an application-level item, you can edit it on the Create/Edit Application Item page.

To edit application-level item attributes:

  1. Navigate to the Workspace home page.

  2. Click the Application Builder icon.

  3. Select an application.

  4. When Application Builder appears, click Shared Components.

  5. Under Logic, select Application Items.

    The Application Items page appears.

  6. Select an application item.

    The Create/Edit Application Item page appears.

  7. To learn more about a specific item on a page, click the item label.

    When Help is available, the item label changes to red when you pass your cursor over it and the cursor changes to an arrow and question mark. See "About Field-Level Help".

  8. Click Apply Changes.

About Navigation Alternatives

The Create/Edit Application Item page is divided into the following sections: Name, Security, Configuration, and Comments.

You can access these sections by scrolling down the page, or by clicking a navigation button at the top of the page. When you select a button at the top of the page, the selected section appears and all other sections are temporarily hidden. To view all sections of the page, click Show All.

PKYPK6(A OEBPS/sec.htm Managing Application Security

13 Managing Application Security

This section describes how to implement security best practices for Oracle Application Express. Administrators are primarily responsible for ensuring the security of the Oracle Application Express installation, while developers are responsible for building secure applications.

This section contains the following topics:

Understanding Administrator Security Best Practices

This section describes security best practices for Oracle Application Express administrators.

Topics in this section include:

Security Considerations When Using the Embedded PL/SQL Gateway

The embedded PL/SQL gateway runs in the database as part of the XML DB HTTP Protocol Listener. The XML DB HTTP Protocol Listener and embedded PL/SQL gateway provides the equivalent core features of Oracle HTTP Server and mod_plsql. Because the HTTP Listener runs in the same database where Oracle Application Express is installed, it is not possible to separate the HTTP listener from the database. For this reason, it is not recommended to use the embedded PL/SQL gateway for applications that run on the Internet. Additionally, the embedded PL/SQL gateway does not provide the same flexibility of configuration and detailed logging as Oracle HTTP Server with mod_plsql.

About Configuring Oracle HTTP Server with mod_plsql for Oracle Application Express

Oracle HTTP Server uses the mod_plsql plug-in to communicate with the Oracle Application Express engine within the Oracle database. mod_plsql functions act as a communication broker between the Web server and the Oracle Application Express engine in the Oracle database.

Each mod_plsql request is associated with a set of configuration values used to access the database called a Database Access Descriptor (DAD). mod_plsql provides a DAD parameter called PlsqlRequestValidationFunction which enables you to allow or disallow further processing of a requested procedure. You can utilize this parameter to implement tighter security for your PL/SQL application by blocking package and procedure calls which should not be allowed to run from the DAD. Oracle recommends a DAD configuration for Oracle Application Express which utilizes the PlsqlRequestValidationFunction directive with a value of wwv_flow_epg_include_modules.authorize.

The purpose of the PlsqlRequestValidationFunction parameter is to control which procedures can be invoked through mod_plsql. By default, the only procedures permitted are the public entry points of Oracle Application Express. This can be extended using the validation functions shipped with Oracle Application Express. To learn more, see "Restricting Access to Oracle Application Express" in Oracle Application Express Administration Guide.

Utilizing Secure Sockets Layer (SSL)

Secure Sockets Layer (SSL) is a protocol for managing the security of data transmitted on the Internet. For Web applications, SSL is implemented by using the HTTPS protocol. Oracle recommends that you run Oracle Application Express applications using SSL (HTTPS protocol) to prevent any sensitive data from being sent over an unencrypted (cleartext) communication channel.

You can configure both your Oracle Application Express instance and all related applications to require HTTPS by setting the Require HTTPS attribute to Yes on the on the Manage Service page in Oracle Application Express Administration Services.

Setting the Require HTTPS attribute to Yes and logging out prevents anyone from logging in to Oracle Application Express Administration Services and from logging into an Oracle Application Express workspace as a developer or administrator unless the protocol in use is HTTPS.


See Also:

"Requiring HTTPS" in Oracle Application Express Administration Guide

Integrating with Oracle BI Publisher

Oracle recommends that you employ Secure Sockets Layer (SSL) when integrating Oracle Application Express with Oracle BI Publisher. Once SSL (HTTPS protocol) is configured for your Oracle BI Publisher server, you must create a wallet and specify the HTTPS protocol for the Report Server in the internal administration Environment Settings.


See Also:

"Configuring Wallet Information" and "Configuring Report Printing" in Oracle Application Express Administration Guide

About Setting Password Complexity Rules

Workspace administrators and developers can create user accounts for the purpose of logging in to the Oracle Application Express development environment and for end-user authentication to applications developed within their workspaces. The Oracle Application Express administrator can create password complexity rules, or a policy, for the passwords of these accounts. These rules apply to all accounts in the installation, across all workspaces.

The following are example password complexity policies:

All passwords must:

  • Contain at least one upper-case character

  • Contain at least one numeric digit

  • Must be at least six characters long

Note that many other variations are possible. Oracle recommends administrators establish a password complexity policy for each Oracle Application Express instance. To learn more, see "Enabling Login Controls for All Workspaces," "About Password Policies," and "Enabling Login Controls for a Workspace" in Oracle Application Express Administration Guide.

Restricting Password Reuse

Site administrators can restrict password reuse for all administrator, developer, and end-user accounts based on a history of passwords previously used for the accounts.

To restrict password reuse:

  1. Start SQL*Plus and connect to the database where Oracle Application Express is installed having the apex_administrator_role role or as SYS specifying the SYSDBA role. For example:

    • On Windows:

      SYSTEM_DRIVE:\ sqlplus /nolog
      SQL> CONNECT SYS as SYSDBA
      Enter password: SYS_password
      
    • On UNIX and Linux:

      $ sqlplus /nolog
      SQL> CONNECT SYS as SYSDBA
      Enter password: SYS_password
      
  2. Execute the following statement:

    ALTER SESSION SET CURRENT_SCHEMA = APEX_030200;
    
    
  3. Execute the following statement:

    BEGIN
    APEX_INSTANCE_ADMIN.SET_PARAMETER('PASSWORD_HISTORY_DAYS',365);
    COMMIT;
    END;
    /
    

    This will restrict new or updated passwords to those that have not been used for the account for the previous 365 days. Recording of previously used passwords (actually, hashed representations of passwords) begins upon installation of Oracle Application Express 3.2.

  4. To disable this feature, run the block above, providing 0 for the parameter value. For example:

    BEGIN
    APEX_INSTANCE_ADMIN.SET_PARAMETER('PASSWORD_HISTORY_DAYS',0);
    COMMIT;
    END;
    /
    

Tip:

Developers can also use the APEX_UTIL.STRONG_PASSWORD_CHECK procedure and the APEX_UTIL.STRONG_PASSWORD_VALIDATION function described in Oracle Application Express API Reference.

Advantages of the Oracle Application Express Runtime Environment

An Oracle Application Express runtime environment enables you to run production applications, but it does not provide a Web interface for administration or direct development of these applications

Oracle recommends that you run any sensitive production Oracle Application Express applications with a runtime installation of Oracle Application Express. A runtime installation does not expose the Web-based application development environment, thus preventing the use of Application Builder, SQL Workshop, and related utilities on a production installation. Additionally, a runtime environment only includes the Oracle Application Express database objects and privileges necessary to run applications, making it a more hardened environment.


See Also:

"Managing a Runtime Environment" in Oracle Application Express Administration Guide

Understanding Session Timeout

By configuring Session Timeout attributes, you can reduce your application's exposure. Users often leave their computers unattended for extended periods and do not close applications before departing. Therefore, an unauthorized person can easily assume the user's identity within the application. By setting the session and idle timeout, users are automatically logged out of their application after the specified timeout.

Session Timeout attributes include:

  • Maximum Session Length in Seconds

  • Session Timeout URL

  • Maximum Session Idle Time in Seconds

  • Idle Timeout URL

To learn more about configuring these attributes at an application-level, see "Session Timeout". To learn more about configuring these attributes for an entire Oracle Application Express instance, see "Configuring Session Timeout" in Oracle Application Express Administration Guide.

Enabling Network Services in Oracle Database 11g

By default, the ability to interact with network services is disabled in Oracle Database 11g release 1 (11.1). Therefore, if you are running Oracle Application Express with Oracle Database 11g release 1 (11.1), you must use the new DBMS_NETWORK_ACL_ADMIN package to grant connect privileges to any host for the APEX_030200 database user. Failing to grant these privileges results in issues with:

  • Sending outbound mail in Oracle Application Express.

    Users can call methods from the APEX_MAIL package, but issues arise when sending outbound email.

  • Using Web services in Oracle Application Express.

  • PDF/report printing.

  • Searching for content in online Help (that is, using the Find link).

Topics in this section include:


Tip:

To run the examples described in this section, the compatible initialization parameter of the database must be set to at least 11.1.0.0.0. By default an 11g database will have the parameter set properly, but a database upgraded to 11g from a prior version may not. See "Creating and Configuring an Oracle Database" in Oracle Database Administrator's Guide for information about changing database initialization parameters.

Granting Connect Privileges to a Host

The following example demonstrates how to grant connect privileges to a host for the APEX_030200 database user.

DECLARE
  ACL_PATH  VARCHAR2(4000);
  ACL_ID    RAW(16);
BEGIN
  -- Look for the ACL currently assigned to '*' and give APEX_030200
  -- the "connect" privilege if APEX_030200 does not have the privilege yet.

  SELECT ACL INTO ACL_PATH FROM DBA_NETWORK_ACLS
   WHERE HOST = '*' AND LOWER_PORT IS NULL AND UPPER_PORT IS NULL;

  -- Before checking the privilege, make sure that the ACL is valid
  -- (for example, does not contain stale references to dropped users).
  -- If it does, the following exception will be raised:
  --
  -- ORA-44416: Invalid ACL: Unresolved principal 'APEX_030200'
  -- ORA-06512: at "XDB.DBMS_XDBZ", line ...
  --
  SELECT SYS_OP_R2O(extractValue(P.RES, '/Resource/XMLRef')) INTO ACL_ID
    FROM XDB.XDB$ACL A, PATH_VIEW P
   WHERE extractValue(P.RES, '/Resource/XMLRef') = REF(A) AND
         EQUALS_PATH(P.RES, ACL_PATH) = 1;

  DBMS_XDBZ.ValidateACL(ACL_ID);
   IF DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE(ACL_PATH, 'APEX_030200', 
     'connect') IS NULL THEN 
      DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(ACL_PATH, 
     'APEX_030200', TRUE, 'connect'); 
  END IF;

EXCEPTION
  -- When no ACL has been assigned to '*'.
  WHEN NO_DATA_FOUND THEN
  DBMS_NETWORK_ACL_ADMIN.CREATE_ACL('power_users.xml',
    'ACL that lets power users to connect to everywhere',
    'APEX_030200', TRUE, 'connect');
  DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL('power_users.xml','*');
END;
/
COMMIT;

Granting Connect Privileges to a Local Host

The following example is a less privileged demonstration of how to access resources on a local host. This example would enable indexing of Oracle Application Express Online Help and could possibly enable email and PDF printing if those servers were also on the local host.

DECLARE
  ACL_PATH  VARCHAR2(4000);
  ACL_ID    RAW(16);
BEGIN
  -- Look for the ACL currently assigned to 'localhost' and give APEX_030200
  -- the "connect" privilege if APEX_030200 does not have the privilege yet.
  SELECT ACL INTO ACL_PATH FROM DBA_NETWORK_ACLS
   WHERE HOST = 'localhost' AND LOWER_PORT IS NULL AND UPPER_PORT IS NULL;

  -- Before checking the privilege, make sure that the ACL is valid
  -- (for example, does not contain stale references to dropped users).
  -- If it does, the following exception will be raised:
  --
  -- ORA-44416: Invalid ACL: Unresolved principal 'APEX_030200'
  -- ORA-06512: at "XDB.DBMS_XDBZ", line ...
  --

  SELECT SYS_OP_R2O(extractValue(P.RES, '/Resource/XMLRef')) INTO ACL_ID
    FROM XDB.XDB$ACL A, PATH_VIEW P
   WHERE extractValue(P.RES, '/Resource/XMLRef') = REF(A) AND
         EQUALS_PATH(P.RES, ACL_PATH) = 1;

  DBMS_XDBZ.ValidateACL(ACL_ID);
   IF DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE(ACL_PATH, 'APEX_030200', 
     'connect') IS NULL THEN 
      DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(ACL_PATH, 
     'APEX_030200', TRUE, 'connect'); 
  END IF;

EXCEPTION
  -- When no ACL has been assigned to 'localhost'.
  WHEN NO_DATA_FOUND THEN
  DBMS_NETWORK_ACL_ADMIN.CREATE_ACL('local-access-users.xml',
    'ACL that lets power users to connect to everywhere',
    'APEX_030200', TRUE, 'connect');
  DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL('local-access-users.xml','localhost');
END;
/
COMMIT;

Troubleshooting an Invalid ACL Error

If you receive an ORA-44416: Invalid ACL error after running the previous script, use the following query to identify the invalid ACL:

REM Show the dangling references to dropped users in the ACL that is assigned
REM to '*'.

SELECT ACL, PRINCIPAL
  FROM DBA_NETWORK_ACLS NACL, XDS_ACE ACE
 WHERE HOST = '*' AND LOWER_PORT IS NULL AND UPPER_PORT IS NULL AND
       NACL.ACLID = ACE.ACLID AND
       NOT EXISTS (SELECT NULL FROM ALL_USERS WHERE USERNAME = PRINCIPAL);

Next, run the following code to fix the ACL:

DECLARE
  ACL_ID   RAW(16);
  CNT      NUMBER;
BEGIN
  -- Look for the object ID of the ACL currently assigned to '*'
  SELECT ACLID INTO ACL_ID FROM DBA_NETWORK_ACLS
   WHERE HOST = '*' AND LOWER_PORT IS NULL AND UPPER_PORT IS NULL;

  -- If just some users referenced in the ACL are invalid, remove just those
  -- users in the ACL. Otherwise, drop the ACL completely.
  SELECT COUNT(PRINCIPAL) INTO CNT FROM XDS_ACE
   WHERE ACLID = ACL_ID AND
         EXISTS (SELECT NULL FROM ALL_USERS WHERE USERNAME = PRINCIPAL);

  IF (CNT > 0) THEN

    FOR R IN (SELECT PRINCIPAL FROM XDS_ACE
               WHERE ACLID = ACL_ID AND
                     NOT EXISTS (SELECT NULL FROM ALL_USERS
                                  WHERE USERNAME = PRINCIPAL)) LOOP
      UPDATE XDB.XDB$ACL
         SET OBJECT_VALUE =
               DELETEXML(OBJECT_VALUE,
                         '/ACL/ACE[PRINCIPAL="'||R.PRINCIPAL||'"]')
       WHERE OBJECT_ID = ACL_ID;
    END LOOP;

  ELSE
    DELETE FROM XDB.XDB$ACL WHERE OBJECT_ID = ACL_ID;
  END IF;

END;
/

REM commit the changes.

COMMIT;

Once the ACL has been fixed, you must run the first script in this section to apply the ACL to the APEX_030200 user. See "Granting Connect Privileges to a Host".

Enabling Indexing of Online Help in Oracle Database 11g Release 2 and Higher

The ability to search Oracle Application Express online Help is accomplished through Oracle Text and a URL data store. There is a change in the default behavior and permissions to use an Oracle Text URL data store in Oracle Database 11g Release 2 and later releases.

If users attempt to search Oracle Application Express online Help in Oracle database 11g Release 2 and encounter the following error, then the permission to use an Oracle Text URL data store has not been granted to database user APEX_030200.

ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine 
ORA-20000: Oracle Text error: 
DRG-10758: index owner does not have the privilege to use file or URL data store

To enable the indexing of online Help in Oracle Application Express, the permission to use an Oracle Text URL data store must be granted to the APEX_030200 database user. This is accomplished by assigning this specific privilege to a datbase role and then granting this role to the APEX_030200 database user.

To determine if the ability to use an Oracle Text URL data store is already granted to a database role:

  1. Start SQL*Plus and connect to the database where Oracle Application Express is installed as SYS specifying the SYSDBA role. For example:

    • On Windows:

      SYSTEM_DRIVE:\ sqlplus /nolog
      SQL> CONNECT SYS as SYSDBA
      Enter password: SYS_password
      
    • On UNIX and Linux:

      $ sqlplus /nolog
      SQL> CONNECT SYS as SYSDBA
      Enter password: SYS_password
      
  2. Run the following command:

    SELECT par_value FROM ctxsys.ctx_parameters WHERE par_name = 'FILE_ACCESS_ROLE';
    

    This returns either NULL or the database role which is granted the ability to use an Oracle Text URL data store.

  3. If no value is returned by step 2, then create a new database role as shown in the following example:

    CREATE ROLE APEX_URL_DATASTORE_ROLE;
    
  4. Grant this role to the database user APEX_030200 with the following statement:

    GRANT APEX_URL_DATASTORE_ROLE to APEX_030200;
    

    If step 2 returned a value, use this database role name instead of the example APEX_URL_DATASTORE_ROLE.

  5. Lastly, if step 2 did not return a value, then use the Oracle Text API to grant permission to the newly created database role with the following statement:

    EXEC ctxsys.ctx_adm.set_parameter('file_access_role', 'APEX_URL_DATASTORE_ROLE');
    

Understanding Developer Security Best Practices

This section describes security best practices for Oracle Application Express developers.

Topics in this section include:

Understanding Items of Type Password

Password items do not emit the text entered to the Web browser screen. When creating items of type password, Oracle recommends using password item types that do not save session state. This prevents the password from being saved in the database in the session state tables.

Available password item types include:

  • Password - Suppresses text entered into the field. Saves the value in session state when the page is submitted.

  • Password (submits when Enter pressed) - Suppresses text entered into the field and submits the page when ENTER is pressed.

  • Password (does not save state) - Suppresses text entered into the field. Does not save the value in session state.

  • Password (submits when Enter pressed, does not save state) - Suppresses text entered into the filed and submits the page when Enter is pressed. Does not save the value in session state.

The Password and Password (submits when Enter pressed) save the password in a database table when the page is submitted. Use these password item types only when the password is needed in session state for use by other pages during the session.

Password (does not save state) and Password (submits when Enter pressed, does not save state) do not save the password in a database table. Use these password item types when the submitted password value is used only by after-submit page processing on the same page and is never needed again during the session.

If you must reference and retrieve the value of a password in your application then you should set the Store value encrypted in session state attribute to Yes. To learn more, see "About Session State and Security".


See Also:

"About Item Types"

Identifying At Risk Password Items

At risk password items are those that either:

  • Do not use one of the password item types that does not save session state

  • Store the value in session state un-encrypted

Use the Password Items, Security Profiles, and Password Items report to help identify at risk password item:

To view reports that identify at risk password item types:

  1. Navigate to the Workspace home page.

  2. Click the Application Builder icon.

  3. Select an application.

    The Application home page appears.

  4. On the Tasks list, click Application Reports.

  5. To view the Password Items report:

    1. Select Page Components.

    2. Under Items, click Password Items.

      This report shows all of the password items within the application and indicates if they use encryption and whethere they save state. Password items that do neither are highlighted as At Risk.

  6. To view the Security Profiles report:

    1. Select Cross Application.

    2. Under Items, click Password Items.

  7. To view the Password Items report:

    1. Select Cross Application.

    2. Under Items, click Security Profiles.

      Notice the At Risk Password Items column.

For pages that contain password items, set page attribute Form Auto Complete to Off. Setting that attribute to Off prevents the Web browser from attempting to auto complete items on the page. To learn more about this attribute, see Table 5-6.

About Using Zero as a Session ID

When users access Oracle Application Express application pages, numerous links containing session IDs become visible in the Web browser's location window. If the application is publicly accessible and the user communicates one of these links to another application user, for example by using email or a messaging service, the recipient can use the link and immediately begin sharing the original user's session. This can have a negative effect on both users as they use the application and lead to unpredictable, hard to reproduce screen behavior. To prevent this, Oracle recommends the use of the Zero Session ID feature for all applications where users are not required to provide login authentication. To learn more, see "Facilitating Bookmarks by Using Zero as the Session ID".

Understanding Cross-Site Scripting Protection

Cross site-scripting (also referred to as XSS) is a security breach that takes advantage of dynamically generated Web pages. In a XSS attack, a Web application is sent a script that activates when it is read by a user's browser. Once activated, these scripts can steal data, even session credentials, and return the information to the attacker.

If malicious code were introduced into an Oracle Application Express application, it could be rendered into HTML regions and other places within the application during normal page rendering. To prevent the introduction of malicious code into session state, the Application Express engine escapes characters in certain cases.

Topics in this section include:

Protecting HTML Regions and Other Static Areas

In HTML regions and other static display areas, you can reference session state using the &ITEM. notation. Examples of static display areas include HTML regions, page headers and footers, region headers and footers, region titles, button labels, help text, form item labels and post-element text, templates, radiogroup (before and after field text), event success messages, event error messages, navigation bar attributes, application static substitution string values, chart labels and legends, breadcrumbs and list framing text, and calendar text, labels, or legends.

About Safe Item Display Types

When session state is referenced in this way, the value emitted to the page will not have special characters (<, >, &, ") escaped if the referenced item is one of the following safe item display types:

  • Display as Text (does not save state)

  • Display as Text (escape special characters, does not save state)

  • Display as Text (based on LOV, does not save state)

  • Display as Text (based on PL/SQL, does not save state)

  • Text Field (Disabled, does not save state)

  • Stop and Start HTML Table (Displays label only)

If the referenced item has a display type other than one of the above types, the value emitted to the page will have special characters escaped. Although application-level items are also considered to have a safe display type, they do not actually have display properties like form items do.

About the Rules Used to Determine Whether to Escape Values

The Application Express engine uses predefined smart escaping rules to determine if and when to escape values fetched from session state.

The reason for these rules is that items that use the display types listed previously are often for text containing HTML that is intended to be emitted to the browser without being filtered (that is, escaped). The only way this can be made safe is by the enforcement of the rule that these types of items are always escaped on input to the application. For example, if a user passes some text into a safe item using an Oracle Application Express f?p URL syntax, the Application Express engine escapes special characters when saving the value into session state. This has two intended results:

  1. If the value contained no special characters, the value passed in is saved into session state exactly as it was provided.

  2. If the value contained special characters, those characters are escaped when the value is saved into session state.

In either situation, the item can now safely be referenced using an &ITEM. notation in any HTML region or other static area mentioned previously.

Using Safe Item Types to Hold and Emit HTML Markup

You can use the safe item types listed previously to hold and emit HTML markup to the browser. For example, suppose you have a requirement to render some text in bold face by referencing a safe page item named P1_XXX (using &P1_XXX.) The item P1_XXX is presumed to contain the following HTML:

<b>ABABABAB</b>

You can achieve this by using application controls (computations, processes, item source expressions, item default values, and so on) to store values into these safe items. When values are introduced in this way, you ensure the safety of the content. When you use these methods, the Application Express engine does not escape any special characters when saving the values into session state.

Finally, the safety of safe items is ensured by a rule that prevents those items from being posted on a page and submitted to the Application Express engine as part of a page submission.

Protecting Dynamic Output

Items fetched from session state and rendered using htp.p or other methods should be explicitly escaped by the code where it is appropriate to do so. For example, suppose a PL/SQL dynamic content region on a page uses the following:

 htp.p(v('SOME_ITEM'));

If the value of the item fetched from session state could contain unintended tags or scripts, you might want to use the following in the region:

htp.p(htf.escape_sc(v('SOME_ITEM'))); 

However, if you are confident that the fetched value is safe for rendering, you do not need to escape the value. As a developer, you need to determine when it is appropriate to not escape output.

As a best practice, follow this rule:

The reason for this is that as a developer, there is no way you can prevent a hacker from posting a malicious value into a non-safe item. Even if your application does not present these items visibly to ordinary users, be aware that a hacker can mount a XSS attack using your application if you do not follow this rule.

Protecting Report Regions

The Application Express engine escapes data rendered in the body of a report. References to session state in report headings and messages are fetched from session state using the smart escaping rules so that the values of safe item types are not escaped and the values of other item types are escaped.

Protecting Form Items

When form items, including hidden items, obtain their values during the generation of the form page to be sent to the browser, the resulting text is escaped before rendering. Some of the safe item types are exceptions to this rule in order to support the intended behavior of each display type.

About Session State and Security

Oracle Application Express persists session state in database tables. Session state is preserved in database tables because it is more secure to store the session state on the server side than on the client. Because Oracle Application Express applications use the stateless HTTP protocol, an application's session state across multiple page views is preserved in database tables. Not maintaining a synchronous database connection for each Oracle Application Express application user significantly lessens memory and database resource requirements.

Developers can query the session state stored by Oracle Application Express applications using the Application Builder and built-in monitoring pages. Developers and administrators can access session state for any application in the workspace to which they are authenticated.

A few best practices for developers include:

  • As a standard part of implementing program control flow, clear the session state of unneeded values using clear-cache page processes or clear-cache directives in URLs used to navigate to pages.

  • Use password page item types that do not save state. This prevents the entered passwords from being saved in session state tables in the database.

  • When sensitive data must persist in a session, it should be saved in Oracle Application Express session state tables in encrypted form. To use this feature, set the page item's Store value encrypted in session state attribute to Yes. Encrypted stored values are automatically decrypted when read.


Note:

The objective of encrypted session state is to persist session state such that the unencrypted values cannot be read by other Oracle Application Express developers or database administrators who might have access to the Oracle Application Express session state tables, debug output, or database data files. Oracle recommends that database backups be performed using facilities that encrypt data in the backup files.


Tip:

You can encrypt item values up to 4000 bytes in length. Attempts to encrypt values longer than 4000 bytes produces an error message.

Understanding Session State Protection

Session State Protection is a built-in functionality that prevents hackers from tampering with the URLs within your application. URL tampering can adversely affect program logic, session state contents, and information privacy.

Enabling Session State Protection is a two-step process. First, you enable the feature. Second, you set page and item security attributes.

Topics in this section include:

How Session State Protection Works

When enabled, Session State Protection uses the Page Access Protection attributes and the Session State Protection item attributes with checksums positioned in f?p= URLs to prevent URL tampering and unauthorized access to and alteration of session state. When Session State Protection is disabled, the page and item attributes related to session state protection are ignored and checksums are not included checksums in generated f?p= URLs.

Enabling Session State Protection

You can enable session state protection from either the Edit Security Attributes page or the Session State Protection page.

Enabling Session State Protection is a two-step process. First, you enable the feature. Second, you set page and item security attributes. You can perform these steps using a wizard, or you can set security attributes for pages and items manually on the Session State Protection page.

Topics in this section include:

Enabling Session State Protection from Edit Security Attributes

To enable Session State Protection from the Edit Security Attributes page:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click the Shared Components icon.

  4. Under Security, click Edit Security Attributes.

  5. Scroll down to Session State Protection and select Enabled from the Session State Protection list.

  6. To configure session Session State Protection, click Manage Session State Protection.

    The Session State Projection page appears.

  7. Navigate to the Edit Security Attributes page to set page and item security attributes.


Tip:

To disable Session State Protection, perform the same steps again, but select Disabled instead of Enabled. Disabling Session State Protection will not change existing security attribute settings, but those attributes will be ignored at run time.

About the Expire Bookmarks Button

Enabling Session State Protection affects whether bookmarked links to the current application will work. Consider the following rules:

  1. Bookmarked links created after Session State Protection is enabled will work if the bookmarked link contains a checksum.

  2. Bookmarked links created before Session State Protection is enabled will not work if the bookmarked link contains a checksum.

  3. Bookmarks that do not contain checksums or contain unnecessary checksums will not be affected by Session State Protection.

During page rendering, the Application Express engine uses a hidden application attribute (a checksum salt) during computation and to verify checksums included in f?p URLs. When you enable Session State Protection, the Application Express engine includes checksums. You can reset the checksum salt attribute by clicking Expire Bookmarks on the Edit Security Attributes page. Note that if you click Expire Bookmarks, bookmarked URLs used to access your application that contain previously generated checksums will fail.

Enabling Session State Protection from Session State Protection

To enable Session State Protection:

  1. Navigate to the Shared Components page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. Click Shared Components.

    4. Under Security, select Session State Protection.

    The Session State Protection page appears. Note the current Session State Protection status (Enabled or Disabled) displays at the top of the page.

  2. Click the Set Protection button.

    The Session State Protection wizard appears.

  3. Under Select Action, select Enable and click Next.

    Next, determine whether to set security attributes for pages and items.

  4. Select Enable and click Next.

  5. Click Enable Session State Protection.


Tip:

To disable Session State Protection, perform the same steps, but select Disable instead of Enable. Disabling Session State Protection will not change existing security attribute settings, but those attributes will be ignored at run time.

Configuring Session State Protection

Once you have enabled Session State Protection, the next step is to configure security attributes. You can configure security attributes in two ways:

  • Use a wizard and select a value for specific attribute categories. Those selections will then be applied to all pages and items within the application.

  • Configure values for individual pages, items, or application items.

Topics in this section include:


Tip:

Before you can configure security attributes, you must first enable Session State Protection. See "Enabling Session State Protection".

Reviewing Existing Session State Protection Settings

You can review a summary of Session State Protection settings for pages, items, and application items on the first page of the Session State Protection wizard.

To view summaries of existing Session State Protection settings:

  1. Navigate to the Session State Protection page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. Click Shared Components.

    4. Under Security, select Session State Protection.

      The Session State Protection page appears.

  2. Click Set Protection.

  3. Expand the following reports at the bottom of the page:

    • Page Level Session State Protection Summary

    • Page Item Session State Protection Summary

    • Application Item Session State Protection

Configuring Session State Protection Using a Wizard

When you configure Session State Protection using a wizard, you set a value for specific attribute categories. Those selections are then applied to all pages and items within the application.

To configure Session State Protection using a wizard:

  1. Navigate to the Session State Protection page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. Click Shared Components.

    4. Under Security, select Session State Protection.

      The Session State Protection page appears.

  2. Click Set Protection.

    The Session State Protection wizard appears.

  3. Under Select Action, select Configure and click Next.

  4. For Page Access Protection, select one of the following:

    • Unrestricted - The page may be requested using a URL with or without session state arguments (Request, Clear Cache, Name/Values).

    • Arguments Must Have Checksum - If Request, Clear Cache, or Name/Value arguments appear in the URL, a checksum must also be provided. The checksum type must be compatible with the most stringent Session State Protection attribute of all the items passed as arguments.

    • No Arguments Allowed - A URL may be used to request the page but no Request, Clear Cache, or Name/Value arguments are allowed.

    • No URL Access - The page may not be accessed using a URL; however, the page may be the target of a Branch to Page branch type, which does not do a URL redirect.

  5. For Application Item Protection, select one of the following:

    • Unrestricted - The item's session state may be set by passing the item name/value in a URL or in a form. No checksum is required in the URL.

    • Checksum Required: Application Level - The item's session state may be set by passing the item name/value in a URL if a checksum specific to the schema is provided. A user-level checksum or a session-level checksum will also suffice (see next bullets). Use this option when you want to allow the item to be set only by URLs having checksums that were generated by any user running the same application in the current workspace but in a different session.

    • Checksum Required: User Level - The item's session state may be set by passing the item name/value in a URL if a checksum specific to the workspace, application, and user is provided. A session-level checksum will also suffice (see next bullet). Use this option when you want to allow the item to be set only by URLs having checksums that were generated by the same named user, running the same application in the current workspace but in a different session.

    • Checksum Required: Session Level - The item's session state may be set by passing the item name/value in a URL if a checksum specific to the current session is also provided. Use this option when you want to allow this item to be set only by URLs having checksums that were generated in the current session.

    • Restricted - May not be set from browser - The item may not be altered using the URL or POSTDATA. Use this option when you want to restrict the way that the item value can be set to internal processes, computations, and so on. This attribute is applicable only to items that cannot be used as data entry items and is always observed even if Session State Protection is disabled.

      Use this attribute for application items or for page items with any of these Display As types:

      • Display as Text (escape special characters, does not save state)

      • Display as Text (does not save state)

      • Display as Text (based on LOV, does not save state)

      • Display as Text (based on PLSQL, does not save state)

      • Text Field (Disabled, does not save state)

      • Stop and Start HTML Table (Displays label only)

  6. For Page Data Entry Item Protection, select one of the following:

    • Unrestricted - The item's session state may be set by passing the item name/value in a URL or in a form. No checksum is required in the URL.

    • Checksum Required: Application Level - The item's session state may be set by passing the item name/value in a URL if a checksum specific to the schema is provided. A user-level checksum or a session-level checksum will also suffice (see next bullets). Use this option when you want to allow the item to be set only by URLs having checksums that were generated by any user running the same application in the current workspace but in a different session.

    • Checksum Required: User Level - The item's session state may be set by passing the item name/value in a URL if a checksum specific to the workspace, application, and user is provided. A session-level checksum will also suffice (see next bullet). Use this option when you want to allow the item to be set only by URLs having checksums that were generated by the same named user, running the same application in the current workspace but in a different session.

    • Checksum Required: Session Level - The item's session state may be set by passing the item name/value in a URL if a checksum specific to the current session is provided. Use this option when you want to allow this item to be set only by URLs having checksums that were generated in the current session.

  7. For Page Display-Only Item Protection, select one of the following:

    • Unrestricted - The item may be set by passing the item name/value in a URL or in a form. No checksum is required in the URL.

    • Checksum Required: Application Level - The item's session state may be set by passing the item name/value in a URL if a checksum specific to the schema is provided. A user-level checksum or a session-level checksum will also suffice (see next bullets). Use this option when you want to allow the item to be set only by URLs having checksums that were generated by any user running the same application in the current workspace but in a different session.

    • Checksum Required: Session Level - The item's session state may be set by passing the item name/value in a URL if a checksum specific to the current session is provided. Use this option when you want to allow this item to be set only by URLs having checksums that were generated in the current session.

    • Checksum Required: User Level - The item's session state may be set by passing the item name/value in a URL if a checksum specific to the workspace, application, and user is provided. A session-level checksum will also suffice (see next bullet). Use this option when you want to allow the item to be set only by URLs having checksums that were generated by the same named user, running the same application in the current workspace but in a different session.

    • Restricted: May not be set from browser - The item may not be altered using the URL or POSTDATA. Use this when you want to restrict the way that the item value can be set to internal processes, computations, and so on. This attribute is always observed, even if Session State Protection is disabled.

      This attribute may be used with any of these Display As types:

      • Display as Text (escape special characters, does not save state)

      • Display as Text (does not save state)

      • Display as Text (based on LOV, does not save state)

      • Display as Text (based on PLSQL, does not save state)

      • Text Field (Disabled, does not save state)

      • Stop and Start HTML Table (Displays label only)

  8. Click Next.

  9. Click Finish.

Configuring Session State Protection for Pages

To configure Session State Protection for Pages:

  1. Navigate to the Session State Protection page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. Click Shared Components.

    4. Under Security, select Session State Protection.

      The Session State Protection page appears.

  2. Click the Page icon.

  3. To filter the view, use the Page, Display, and Page Access Protection lists at the top of the page.

  4. Select a page number.

    The Set Page and Item Protection page appears. The following information displays at the top of the page:

    • Application ID and name

    • Session State Protection status (Enabled or Disabled)

    • Page Number

    • Page name

  5. For Page Access Protection, select one of the following:

    • Unrestricted - The page may be requested using a URL with or without session state arguments (Request, Clear Cache, Name/Values).

    • Arguments Must Have Checksum - If Request, Clear Cache, or Name/Value arguments appear in the URL, a checksum must also be provided. The checksum type must be compatible with the most stringent Session State Protection attribute of all the items passed as arguments.

    • No Arguments Allowed - A URL may be used to request the page but no Request, Clear Cache, or Name/Value arguments are allowed.

    • No URL Access - The page may not be accessed using a URL; however, the page may be the target of a Branch to Page branch type, which does not do a URL redirect.

  6. For Item Types, select Data Entry Items or Display-only Items.

    Data Entry items are items that can be altered using forms and include hidden items. Display-Only items are rendered only and are not submitted with the form.

  7. If you select Data Entry Items, select a session state protection level for each item:

    • Unrestricted - The item's session state may be set by passing the item name/value in a URL or in a form. No checksum is required in the URL.

    • Checksum Required: Application Level - The item's session state may be set by passing the item name/value in a URL if a checksum specific to the schema is provided. A user-level checksum or a session-level checksum will also suffice (see next bullets). Use this option when you want to allow the item to be set only by URLs having checksums that were generated by any user running the same application in the current workspace but in a different session.

    • Checksum Required: User Level - The item's session state may be set by passing the item name/value in a URL if a checksum specific to the workspace, application, and user is provided. A session-level checksum will also suffice (see next bullet). Use this option when you want to allow the item to be set only by URLs having checksums that were generated by the same named user, running the same application in the current workspace but in a different session.

    • Checksum Required: Session Level - The item's session state may be set by passing the item name/value in a URL if a checksum specific to the current session is provided. Use this option when you want to allow this item to be set only by URLs having checksums that were generated in the current session.

  8. If you select Display-only Item, select a session state protection level for each item:

    • Unrestricted - The item may be set by passing the item name/value in a URL or in a form. No checksum is required in the URL.

    • Restricted: May not be set from browser - The item may not be altered using the URL or POSTDATA. Use this when you want to restrict the way that the item value can be set to internal processes, computations, and so on. This attribute is always observed, even if Session State Protection is disabled. This attribute may be used with any of these Display As types:

      • Display as Text (escape special characters, does not save state)

      • Display as Text (does not save state)

      • Display as Text (based on LOV, does not save state)

      • Display as Text (based on PLSQL, does not save state)

      • Text Field (Disabled, does not save state)

      • Stop and Start HTML Table (Displays label only)

    • Checksum Required: Application Level - The item's session state may be set by passing the item name/value in a URL if a checksum specific to the schema is provided. A user-level checksum or a session-level checksum will also suffice (see next bullets). Use this option when you want to allow the item to be set only by URLs having checksums that were generated by any user running the same application in the current workspace but in a different session.

    • Checksum Required: User Level - The item's session state may be set by passing the item name/value in a URL if a checksum specific to the workspace, application, and user is provided. A session-level checksum will also suffice (see next bullet). Use this option when you want to allow the item to be set only by URLs having checksums that were generated by the same named user, running the same application in the current workspace but in a different session.

    • Checksum Required: Session Level - The item's session state may be set by passing the item name/value in a URL if a checksum specific to the current session is provided. Use this option when you want to allow this item to be set only by URLs having checksums that were generated in the current session.

  9. Click Apply Changes.

Configuring Session State Protection for Items

To configure Session State Protection for items:

  1. Navigate to the Session State Protection page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. Click Shared Components.

    4. Under Security, select Session State Protection.

      The Session State Protection page appears.

  2. Click the Item icon.

  3. To filter the view, select from the Page, Display, and Item Session State Protection lists at the top of the page and click Go.

  4. Select a page number.

    The Edit Session State Protection for Page and Items page appears. The following information displays at the top of the page:

    • Application ID and name

    • Session State Protection status (Enabled or Disabled)

    • page Number

    • Page name

  5. For Page Access Protection, select a session state protection level for each item:

    • Unrestricted - The page may be requested using a URL with or without session state arguments (Request, Clear Cache, Name/Values).

    • Arguments Must Have Checksum - If Request, Clear Cache, or Name/Value arguments appear in the URL, a checksum must also be provided. The checksum type must be compatible with the most stringent Session State Protection attribute of all the items passed as arguments.

    • No Arguments Allowed - A URL may be used to request the page but no Request, Clear Cache, or Name/Value arguments are allowed.

    • No URL Access - The page may not be accessed using a URL, however the page may be the target of a Branch to Page branch type, which does not do a URL redirect.

  6. For Item Types, select Data Entry Items or Display-only Items.

    Data Entry items are items that can be altered using forms and include hidden items. Display-Only items are rendered only and are not submitted with the form.

  7. If you select Data Entry Items, select a session state protection level for each item:

    • Unrestricted - The item's session state may be set by passing the item name/value in a URL or in a form. No checksum is required in the URL.

    • Checksum Required: Application Level - The item's session state may be set by passing the item name/value in a URL if a checksum specific to the schema is provided. A user-level checksum or a session-level checksum will also suffice (see next bullets). Use this option when you want to allow the item to be set only by URLs having checksums that were generated by any user running the same application in the current workspace but in a different session.

    • Checksum Required: User Level - The item's session state may be set by passing the item name/value in a URL if a checksum specific to the workspace, application, and user is provided. A session-level checksum will also suffice (see next bullet). Use this option when you want to allow the item to be set only by URLs having checksums that were generated by the same named user, running the same application in the current workspace but in a different session.

    • Checksum Required: Session Level - The item's session state may be set by passing the item name/value in a URL if a checksum specific to the current session is provided. Use this option when you want to allow this item to be set only by URLs having checksums that were generated in the current session.

  8. If you select Display-only Item, select a session state protection level for each item:

    • Unrestricted - The item may be set by passing the item name/value in a URL or in a form. No checksum is required in the URL.

    • Restricted: May not be set from browser - The item may not be altered using the URL or POSTDATA. Use this when you want to restrict the way that the item value can be set to internal processes, computations, and so on. This attribute is always observed, even if Session State Protection is disabled. This attribute may be used with any of these Display As types:

      • Display as Text (escape special characters, does not save state)

      • Display as Text (does not save state)

      • Display as Text (based on LOV, does not save state)

      • Display as Text (based on PLSQL, does not save state)

      • Text Field (Disabled, does not save state)

      • Stop and Start HTML Table (Displays label only)

    • Checksum Required: Application Level - The item's session state may be set by passing the item name/value in a URL if a checksum specific to the schema is provided. A user-level checksum or a session-level checksum will also suffice (see next bullets). Use this option when you want to allow the item to be set only by URLs having checksums that were generated by any user running the same application in the current workspace but in a different session.

    • Checksum Required: User Level - The item's session state may be set by passing the item name/value in a URL if a checksum specific to the workspace, application, and user is provided. A session-level checksum will also suffice (see next bullet). Use this option when you want to allow the item to be set only by URLs having checksums that were generated by the same named user, running the same application in the current workspace but in a different session.

    • Checksum Required: Session Level - The item's session state may be set by passing the item name/value in a URL if a checksum specific to the current session is provided. Use this option when you want to allow this item to be set only by URLs having checksums that were generated in the current session.

  9. Click Apply Changes.

Configuring Session State Protection for Application Items

To configure Session State Protection for application items:

  1. Navigate to the Session State Protection page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. Click Shared Components.

    4. Under Security, select Session State Protection.

      The Session State Protection page appears.

  2. Click the Application Item icon.

  3. Select an application item.

  4. Under Security, select one of the following from the Session State Protection list:

    • Unrestricted - The item's session state may be set by passing the item name/value in a URL or in a form. No checksum is required in the URL.

    • Restricted - May not be set from browser - The item may not be altered using the URL or POSTDATA. Use this option when you want to restrict the way that the item value can be set to internal processes, computations, and so on. This attribute is only applicable only to items that cannot be used as data entry items and is always observed even if Session State Protection is disabled. This attribute may be used for application items or for page items with any of these Display As types:

      • Display as Text (escape special characters, does not save state)

      • Display as Text (does not save state)

      • Display as Text (based on LOV, does not save state)

      • Display as Text (based on PLSQL, does not save state)

      • Text Field (Disabled, does not save state)

      • Stop and Start HTML Table (Displays label only)

    • Checksum Required: Application Level - The item's session state may be set by passing the item name/value in a URL if a checksum specific to the schema is provided. A user-level checksum or a session-level checksum will also suffice (see next bullets). Use this option when you want to allow the item to be set only by URLs having checksums that were generated by any user running the same application in the current workspace but in a different session.

    • Checksum Required: User Level - The item's session state may be set by passing the item name/value in a URL if a checksum specific to the workspace, application, and user is provided. A session-level checksum will also suffice (see next bullet). Use this option when you want to allow the item to be set only by URLs having checksums that were generated by the same named user, running the same application in the current workspace but in a different session.

    • Checksum Required: Session Level - The item's session state may be set by passing the item name/value in a URL if a checksum specific to the current session is provided. Use this option when you want to allow this item to be set only by URLs having checksums that were generated in the current session.

  5. Click Apply Changes.

Securing File Uploads

Oracle Application Express enables you to easily build an application that can be used to upload files and to access uploaded files. These files are uploaded into a common file storage table. Although the database view APEX_APPLICATION_FILES shows those files associated with your database account (or workspace), programmatic access to the common file storage table does not always require authentication, enabling other users to see your uploaded files. For this reason, Oracle recommends that developers either use the methods described in "About BLOB Support in Forms and Reports" or use the methods described in Oracle Application Express How To Documents for file upload on OTN at:

http://www.oracle.com/technetwork/developer-tools/apex/overview/index.html

Either of these methods results in the uploaded files being stored in schema tables and not the public table.


See Also:

"Differences Between Page Items and Application Items" and "About Item Types" to learn more about creating a File Browse page-level item

Establishing User Identity Through Authentication

Authentication is the process of establishing each user's identify before they can access your application. Authentication may require a user identify a user name and password or could involve the use of digital certificates or a secure key.

When you create an authentication scheme, you have the option of choosing from a number of preconfigured authentication schemes, copying an authentication scheme from an existing application, or creating your own custom authentication scheme.

Topics in this section include:

Understanding How Authentication Works

You determine how your application interacts with users. If all users have the same rights and privileges, they are referred to as public users. However, if your application needs to track each user individually, you need to specify an authentication method.

Authentication establishes the identity of each user who accesses your application. Many authentication processes require that a user provide some type of credentials such as a user name and password. These credentials are then evaluated and they either pass or fail. If the credentials pass, the user has access to the application. Otherwise, access is denied.

Once a user has been identified, the Application Express engine keeps track of each user by setting the value of the built-in substitution string APP_USER. As a user navigates from page to page, the Application Express engine sets the value of APP_USER to identify the user. The Application Express engine uses APP_USER as one component of a key for tracking each user's session state.

From a programming perspective, you can access APP_USER using the following syntax:

  • From PL/SQL:

    V('APP_USER')
    
  • As a bind variable from either PL/SQL or SQL:

    :APP_USER
    

You can use APP_USER to perform your own security checks and conditional processing. For example, suppose you created the following table:

CREATE TABLE my_security_table (
  user_id   VARCHAR2(30),
  privilege VARCHAR2(30));

Once created, you could populate this table with user privilege information and then use it to control the display of pages, tabs, navigation bars, buttons, regions, or any other control or component.

Determining Whether to Include Authentication

As you create your application, you need to determine whether to include authentication. You can:

  • Choose to not require authentication. Oracle Application Express does not check any user credentials. All pages of your application are accessible to all users.

  • Select a built-in authentication scheme. Create an authentication method based on available preconfigured authentication schemes. Depending on which scheme you choose, you may also have to configure the corresponding components of Oracle 10giAS, Oracle Internet Directory, or other external services. See "Using Preconfigured Authentication Schemes" and "Changing the Authentication Scheme Associated with an Application".

  • Create custom authentication scheme. Create a custom authentication method to have complete control over the authentication interface. To implement this approach, you must provide a PL/SQL function the Application Express engine executes before processing each page request. This function's Boolean return value determines whether the Application Express engine processes the page normally or displays a failure page. See "Creating an Authorization Scheme".

Creating an Authentication Scheme

To create an authentication scheme:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. On the Application home page, click Shared Components.

    The Shared Components page appears.

  4. Under Security, select Authentication Schemes.

    The Authentication Schemes page appears.

  5. To create a new authentication scheme, click Create.

  6. Specify how the scheme should be created by selecting one of the following:

  7. Follow the on-screen instructions.

Using Preconfigured Authentication Schemes

When you select a preconfigured authentication scheme, Oracle Application Express creates an authentication scheme for your application that follows a standard behavior for authentication and session management.

Topics in this section include:

Open Door Credentials

Open Door Credentials enables anyone to access your application using a built-in login page that captures a user name. This authentication method is useful during application development.

Setting Up Open Door Credentials

To set up Open Door Credentials:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. On the Application home page, click Shared Components.

    The Shared Components page appears.

  4. Under Security, select Authentication Schemes.

  5. On the Authentication Schemes page, click Create.

  6. Select Based on a pre-configured scheme from the gallery.

  7. From Gallery, select Show Login Page and Use Open Door Credentials.

  8. Specify a login page and click Next.

  9. Enter a name and click Create Scheme.

Oracle Application Express Account Credentials

Oracle Application Express Account Credentials are internal user accounts (also known as "cookie user" accounts) that are created within and managed in the Oracle Application Express user repository. When you use this method, your application is authenticated against these accounts.


See Also:

"Managing Application Express Users" in Oracle Application Express Administration Guide

Application Express Account Credentials is a good solution when:

  • You want control of the user account repository

  • User name and password-based approach to security is sufficient

  • You do not need to integrate into a single sign-on framework

This is an especially good approach when you need to get a group of users up and running on a new application quickly.

Setting Up Application Express Account Credentials

To set up Application Express Account Credentials:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. On the Application home page, click Shared Components.

    The Shared Components page appears.

  4. Under Security, select Authentication Schemes.

  5. On the Authentication Schemes page, click Create.

  6. Select Based on a pre-configured scheme from the gallery.

  7. From Gallery, select Show Login Page and Use Application Express Account Credentials.

  8. Specify a login page and click Next.

  9. Enter a name and click Create Scheme.

Database Account Credentials

Database Account Credentials utilizes database schema accounts.This authentication scheme requires that a database user (schema) exist in the local database. When using this method, the user name and password of the database account is used to authenticate the user.

Database Account Credentials is a good choice if having one database account for each named user of your application is feasible and account maintenance using database tools meets your needs

Setting Up Database Account Credentials

To set up Database Account Credentials:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. On the Application home page, click Shared Components.

    The Shared Components page appears.

  4. Under Security, select Authentication Schemes.

  5. On the Authentication Schemes page, click Create.

  6. Select Based on a pre-configured scheme from the gallery.

  7. From Gallery, select Show Login Page and Use Database Account Credentials.

  8. Specify a login page and click Next.

  9. Enter a name and click Create Scheme.

LDAP Credentials Verification

You can configure any authentication scheme that uses a login page to use Lightweight Directory Access Protocol (LDAP) to verify the user name and password submitted on the login page.

Application Builder includes wizards and edit pages that explain how to configure this option. These wizards assume that an LDAP directory accessible to your application for this purpose already exists and that it can respond to a SIMPLE_BIND_S call for credentials verification. When you create an LDAP Credentials authentication scheme, the wizard requests and saves the LDAP host name, LDAP port, and the DN string. An optional preprocessing function can be specified to adjust formatting of the user name passed to the API.

Setting Up LDAP Credentia|qls Verification

To set up LDAP credentials verification:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. On the Application home page, click Shared Components.

    The Shared Components page appears.

  4. Under Security, select Authentication Schemes.

  5. On the Authentication Schemes page, click Create.

  6. Select Based on a pre-configured scheme from the gallery.

  7. From Gallery, select Show Login Page and Use LDAP Directory Credentials.

  8. Specify a login page and click Next.

  9. Specify the following and click Next.

    1. LDAP Host

    2. LDAP Port

    3. LDAP Distinguished Name (DN) String

    4. (Optional) LDAP Username Edit Function

    To view help for a specific item, click the item label. When help is available, the item label changes to red when you pass your cursor over it and the cursor changes to an arrow and question mark. See "About Field-Level Help".

  10. Enter a name and click Create Scheme.

DAD Credentials Verification

Database Access Descriptor (DAD) database authentication uses the Oracle database native authentication and user mechanisms to authenticate users using a basic authentication scheme. This authentication scheme gets the user name from the DAD either as the value stored in the DAD configuration or, if the account information is not stored in the DAD configuration, as the user name captured using the basic authentication challenge.

To use DAD credentials verification:

  • Each application user must have a user account in the Oracle database.

  • You must configure a PL/SQL DAD for basic authentication (without account information).

    This results in one user name/password challenge for browser session for your application users. The user identity token is then made available in the APP_USER item.

DAD database authentication is useful when you need to implement an authentication method that requires minimal setup for a manageable number of users. Ideally these users would have self-managed accounts in the database and your use of this authentication method would be short lived (for example, during the demonstration or prototyping stages of development).

The main drawback of this approach is burdensome account maintenance, especially if users do not administer their own passwords, or if their database accounts exist only to facilitate authentication to your application.

Setting Up DAD Credentials Verification

To set up DAD Credentials Verification:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. On the Application home page, click Shared Components.

    The Shared Components page appears.

  4. Under Security, select Authentication Schemes.

  5. On the Authentication Schemes page, click Create.

  6. Select Based on a pre-configured scheme from the gallery.

  7. From Gallery, select No Authentication (using DAD).

  8. Enter a name and click Create Scheme.

Single Sign-On Server Verification

Oracle Application Server Single Sign-On verification delegates authentication to the Oracle AS Single Sign-On (SSO) Server. To use this authentication scheme, your site must have been registered as a partner application with the SSO server.

Oracle Application Express applications can operate as partner applications with Oracle Application Server's Single Sign-On (SSO) infrastructure. To accomplish this, you must register your application (or register the Application Express engine) as the partner application. To do so, follow the Oracle Application Server instructions for registering partner applications and install the Oracle 9iAS SSO Software Developer Kit (SDK).

If you choose this approach, your application will not use an integrated login page. Instead, when a user accesses your application in a new browser session, the Application Express engine redirects to the Single Sign-On login page. After the user is authentication by SSO, the SSO components redirect back to your application, passing the user identity and other information to the Application Express engine. The user can then continue to use the application until they log off, terminate their browser session, or until some other session-terminating event occurs.

Setting Up Oracle Application Server Single Sign-On

To set up Oracle Application Server Single Sign-On:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. On the Application home page, click Shared Components.

    The Shared Components page appears.

  4. Under Security, select Authentication Schemes.

  5. On the Authentication Schemes page, click Create.

  6. Select Based on a pre-configured scheme from the gallery.

  7. From Gallery, select one of the following:

    • Oracle Application Server Single Sign-On (Application Express engine as Partner App) delegates authentication to the Oracle AS Single Sign-On (SSO) Server. To use this authentication scheme, your site must have been registered as a partner application with the SSO server.

    • Oracle Application Server Single Sign-On (My application as Partner App) delegates authentication to the SSO server. Requires that you register an application with SSO as a partner application.

  8. Enter a name and click Create Scheme.

About Creating an Authentication Scheme from Scratch

Creating an authentication scheme from scratch gives you complete control over your authentication interface. This is the best approach for applications when any of the following is true:

  • Database authentication or other methods are not adequate.

  • You want to develop your own login form and associated methods.

  • You want to delegate all aspects of user authentication to external services such as Oracle 10gAS Single Sign-On.

  • You want to control security aspects of session management.

  • You want to record or audit activity at the user or session level.

  • You want to enforce session activity or expiry limits.

  • You want to program conditional one-way redirection logic before Oracle Application Express page processing.

  • You want to integrate your application with non-Oracle Application Express applications using a common session management framework.

  • Your application consists of multiple applications that operate seamlessly (for example, more than one application ID).


See Also:

"APEX_CUSTOM_AUTH" in Oracle Application Express API Reference

About Session Management Security

When running custom authentication, Oracle Application Express attempts to prevent two improper situations:

  • Intentional attempts by a user to access session state belonging to someone else. However, users can still type in an arbitrary application session ID into the URL.

  • Inadvertent access to a stale session state (probably belonging to the same user from an earlier time). This would commonly result from using bookmarks to application pages.

Oracle Application Express checks that the user identity token set by the custom authentication function matches the user identity recorded when the application session was first created. If the user has not yet been authenticated and the user identity is not yet known, the session state being accessed does not belong to someone else. These checks determine whether the session ID in the request can be used. If not, the Application Express engine redirects back the same page using an appropriate session ID.

Building a Login Page

When you create an application in Oracle Application Express, a login page is created. The alias for the page is 'LOGIN'. You can use this page as the "invalid session page" in an authentication scheme. The page is constructed with processes that call the Oracle Application Express login API to perform credentials verification and session registration.

You can also build your own login pages using the pre-built pages as models and tailoring all of the user interface and processing logic to your requirements.

To create a login page for your application:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click Create Page.

  4. Select Login Page.

  5. Specify Login page attributes and click Create.

About Deep Linking

Deep linking refers to the ability to link to an Oracle Application Express page out of context (for example, from a hyperlink in an email or workflow notification). When you link to a page out of context and the application requires the user be authenticated, the user will be taken to the login page. After credentials verification, the Application Express engine automatically displays the page that was referenced in the original link. Deep linking is supported for applications that use authentication schemes.

Managing Existing Authentication Schemes

Once created, available authentication schemes display in the Authentication Schemes Repository.

To navigate to the Authentication Schemes Repository:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. On the Application home page, click Shared Components.

    The Shared Components page appears.

  4. Under Security, select Authentication Schemes.

    The Authentication Schemes page appears. You can change the appearance of the page by making a selection from the View list. Available options include:

    • Icons (the default) displays each authentication scheme as a large icon. To edit an authentication scheme, click the appropriate icon.

    • Details displays each application item as a line in a report.

      In Details view you can:

      • Edit an authentication scheme by selecting the scheme name

      • View a list of the steps performed on each page by clicking the Show icon

      • Apply an authentication scheme to an application by clicking the make current link

Viewing the Authentication Scheme Associated with an Application

To view the current authentication scheme for an application:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click Shared Components.

  4. Under Security, click Edit Security Attributes.

  5. Locate the Authentication section. The current authentication scheme displays next to Authentication Scheme.

  6. To link to the Authentication Scheme pages, select the scheme name.

Changing the Authentication Scheme Associated with an Application

To change the authentication scheme for an application:

  1. Navigate to the Authentication Schemes:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. On the Application home page, click Shared Components.

      The Shared Components page appears.

    4. Under Security, select Authentication Schemes.

  2. Click the Change Current tab at the top of the page.

  3. Select a new authentication scheme and click Next.

  4. Click Make Current.

Viewing Authentication Scheme Utilization Report

The Authentication Schemes report lists authentication scheme utilization for all applications in the current workspace.

To view the Authentication Schemes report:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

    The Application home page appears.

  3. On the Tasks list, click View Application Reports.

  4. Click Cross Application Reports.

  5. Select Authentication Schemes.

  6. Click the application ID to link to the appropriate Application home page.

Providing Security Through Authorization

Authorization is a broad term for controlling access to resources based on user privileges. While conditions control the rendering and processing of specific page controls or components, authorization schemes control user access to specific controls or components.

Topics in this section include:

How Authorization Schemes Work

An authorization scheme extends the security of your application's authentication scheme. You can specify an authorization scheme for an entire application, page, or specific control such as a region, item, or button. For example, you could use an authorization scheme to selectively determine which tabs, regions, or navigation bars a user sees.

An authorization scheme either succeeds or fails. If a component or control level authorization scheme succeeds, the user can view the component or control. If it fails, the user cannot view the component or control. If an application or page-level authorization scheme fails, then Oracle Application Express displays a previously defined message.

When you define an authorization scheme, you give it a unique name. Once defined, you can attach it to any component or control in your application. To attach an authorization scheme to a component or control in your application, simply navigate to the appropriate attributes page and select an authorization scheme from the Authorization Scheme list.

Creating an Authorization Scheme

Before you can attach an authorization scheme to an application or an application component or control, you must first create it.

To create an authorization scheme:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. On the Application home page, click Shared Components.

    The Shared Components page appears.

  4. Under Security, select Authorization Schemes.

  5. Click Create.

  6. Specify how to create an authorization scheme by selecting one of the following:

    • From Scratch

    • As a Copy of an Existing Authorization Scheme

  7. Follow the on-screen instructions.

Editing Attributes of an Existing Authorization Scheme

To edit attributes of an existing authorization scheme:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. On the Application home page, click Shared Components.

    The Shared Components page appears.

  4. Under Security, select Authorization Schemes.

    The Authorization Schemes page appears. By default, each scheme displays as an icon.

  5. To access a detail view of all schemes, select Details from the View list.

    The Authorization Schemes page appears. You can change the appearance of the page by making a selection from the View list. Available options include:

    • Icons (the default) displays each authentication scheme as a large icon. To edit an authorization scheme, click the appropriate icon.

    • Details displays each application item as a line in a report. To edit an authorization scheme, select the scheme name.

About the Evaluation Point Attribute

You can specify when your authorization scheme is validated in the Evaluation Point attribute. You can choose to have your authorization scheme validated once for each session or once for each page view.

Keep in mind, if you specify that an authorization scheme should be evaluated once for each session and the authorization scheme passes, the underlying code, test, or query will not be executed again for the duration of the application session. If your authorization scheme consists of a test whose results might change if evaluated at different times during the session, then you should specify that the evaluation point be once for each page view.

About Resetting Authorization Scheme State

If an authorization scheme is validated once for each session, Oracle Application Express caches the validation results in each user's session cache. You can reset a session's authorization scheme state by calling the APEX_UTIL.RESET_AUTHORIZATIONS API.

Calling this procedure nulls out any previously cached authorization scheme results for the current session. Be aware that this procedure takes no arguments and is part of the publicly executable APEX_UTIL package.


See Also:

"RESET_AUTHORIZATIONS Procedure" in Oracle Application Express API Reference

Attaching an Authorization Scheme to an Application, Page, or Components

Once you have created an authorization scheme you can attach it to an entire application, page, control, or component.

Topics in this section include:

Attaching an Authorization Scheme to an Application

To attach an authorization scheme to an application:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click the Shared Components icon.

    The Shared Components page appears.

  4. Under Security, click Edit Security Attributes.

  5. Scroll down to Authorization and make a selection from the Authorization Scheme list.

Attaching an Authorization Scheme to a Page

To attach an authorization scheme to a page:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Select a page.

  4. Under Page Rendering, locate the section with the title of Page.

    Description of pg_def_edit_pg_att.gif follows
    Description of the illustration pg_def_edit_pg_att.gif

  5. Click Edit page attributes icon.

  6. Scroll down to Security and make a selection from the Authorization Scheme list.

Attaching an Authorization Scheme to a Control or Component

To attach an authorization scheme to a page component or control:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Select a page.

  4. Click the name of the component or control to which you want to apply the authorization scheme.

  5. Scroll down to Security and make a selection from the Authorization Scheme list.

Viewing Authorization Reports

You can use the Authorization Scheme Subscription and Authorization Scheme Utilization reports to better manage authorization schemes within your application.

To view authorization scheme reports:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. On the Application home page, click Shared Components.

    The Shared Components page appears.

  4. Under Security, select Authorization Schemes.

  5. Click the appropriate tab at the top of the page:

    • Subscription

    • Utilization

Subscription

Use the Authorization Scheme Subscription report to view details about authorization schemes subscription.

Utilization

Use the Authorization Scheme Utilization report to view details about authorization schemes utilization.

To view additional reports indicating which pages having authorization schemes and which do not, select one of the following from the Tasks list:

  • Report Pages With Authorization Schemes

  • Report Pages Without Authorization Schemes

PKw_\|PK6(AOEBPS/index.htm Index

Index

A  B  C  D  E  F  G  H  I  J  L  M  N  O  P  Q  R  S  T  U  V  W  X 

A

Accept Page, 3.2.1
access control
authorization schemes, 7.10.4
access control list
about, 7.10
adding users, 7.10.3.2
creating, 7.10.2
removing users, 7.10.3.3
selecting an application mode, 7.10.3
selecting user privileges, 7.10.3.2
Action Bar, 4.3.1
about, 5.1.2.2
Comment icon, 5.1.2.2
Export Page icon, 5.1.2.2
Find icon, 5.1.2.2
Lock icon, 5.1.2.2
Run Page icon, 5.1.2.2
Shared Components icon, 5.1.2.2
activity log, 15.5
activity reports
creating custom reports, 15.5
Administration list, 1.5
About Application Express, 1.5
Change Password, 1.5
Manage Application Express Users, 1.5
Manage Services, 1.5
Monitor Activity, 1.5
APEX_ACTIVITY_LOG view, 15.5
APEX_COLLECTION, 15.4.1
ADD_MEMBER, 15.4.6
COLLECTION_EXISTS, 15.4.11.3
COLLECTION_MEMBER_COUNT, 15.4.11.1
CREATE_COLLECTION, 15.4.2
CREATE_COLLECTION_FROM_QUERY, 15.4.2
CREATE_COLLECTION_FROM_QUERY_B, 15.4.2
CREATE_OR_TRUNCATE_COLLECTION, 15.4.2, 15.4.12
DELETE_ALL_COLLECTIONS, 15.4.5.1
DELETE_ALL_COLLECTIONS_SESSION, 15.4.5.2
DELETE_COLLECTION, 15.4.5
DELETE_MEMBER, 15.4.8
DELETE_MEMBERS, 15.4.8
GET_MEMBER_MD5, 15.4.9
MOVE_MEMBER_DOWN, 15.4.11.4
RESEQUENCE_COLLECTION, 15.4.11.2
RESET_COLLECTION_CHANGED, 15.4.9
SORT_MEMBERS, 15.4.11.5
TRUNCATE_COLLECTION, 15.4.3
UPDATE_MEMBER, 15.4.7
UPDATE_MEMBER_ATTRIBUTE, 15.4.7, 15.4.7
APEX_LANG
LANG, 16.5.2
MESSAGE API, 16.4.1.1
APEX_PLSQL_JOB, 15.6.1
APIs
APEX_COLLECTION, 15.4.1
APEX_LANG, 16.4.1.1, 16.5.2
APEX_PLSQL_JOB, 15.6.1
application
adding a page, 6.2
adding content from Web sites, 9.6
assigning to groups, 6.5.3
based on queries, 6.1.2.1
based on spreadsheet data, 6.1.3
controlling navigation using branches, 8.6
copying, 4.3, 6.1.5
creating, 6.1
creating groups, 6.5.2
creating on tables, 6.1.2.1
debugging, 12
defining primary language, 16.2
deleting, 4.2, 4.3, 6.1.6
demonstration, 6.1.4
demonstrations, 2.1
deploying, 14.2, 14.3, 14.5.1
exporting, 14.3, 14.5.1
grouping, 6.5
hiding features, 14.9.3
importing export file, 14.6
importing from SQL*Plus, 14.7.5
language preference, 16.1.1
performance tuning, 12.1
removing from groups, 6.5.4
resource use, 12.5
running, 6.2.6
sending email from, 15.3.2
switching active theme, 10.1.5
translatable components, 16.1.3
translating, 16.1
translating components, 16.1.4
translating multibye languages, 16.2.2
translation rendering, 16.1.3
Application Alias attribute, 4.4.1.2.1
application attributes
Application Alias, 4.4.1.2.1
Application Groups, 4.4.1.2.1
Application Template Defaults, 4.4.1.2.8
Availability, 4.4.1.2.2
Build Options, 4.4.1.2.6
Build Status, 4.4.1.2.2
Component Defaults, 4.4.1.2.9
Debugging, 4.4.1.2.1
Default Page Template, 4.4.1.2.8
editing, 4.4.1
Error Page Template, 4.4.1.2.8
Exact Substitutions, 4.4.1.2.1
exporting, 14.5.3
Global Notifications, 4.4.1.2.3
Image Prefix, 4.4.1.2.1
Logging, 4.4.1.2.1
Logo, 4.4.1.2.5
Media Type, 4.4.1.2.1
Message for unavailable application, 4.4.1.2.2
Name attribute, 4.4.1.2.1
Parsing Schema, 4.4.1.2.1
Print Mode Page Template, 4.4.1.2.8
Proxy Server, 4.4.1.2.1
restrict access, 4.4.1.2.2
Status, 4.4.1.2.2
Substitutions, 4.4.1.2.4
Theme, 4.4.1.2.7
Version, 4.4.1.2.1
Virtual Private Database, 4.4.2.2.6
Application Builder
accessing, 4.1
home page, 4.2
Page Definition, 3.1
Application Builder home page, 4.1, 4.2
Application Builder home Task list
Application Builder Defaults, 4.2
application computations
about, 5.8.1
Application Computations page, 5.8.2.1
creating, 5.8.2
executing On New Instance, 5.8.1.1
history report, 5.8.3
Application Date Format attribute, 4.4.3.2.3
application definition
editing, 4.4.1
Application Express Administration Services, 1.4.2
application groups
assigning pages, 6.5.3
creating, 6.5.2
editing group definition, 6.5.2.1
removing, 6.5.5
removing pages, 6.5.4
viewing, 6.5.1
Application Groups attribute, 4.4.1.2.1
Application home page, 4.3
adding a page, 6.2.2
copying a page, 6.2.5
Export/Install icon, 4.3
Run Application icon, 4.3
running demonstration applications, 2.2.2
Shared Components icon, 4.3
Application home Task list
Application Reports, 4.3
Copy this Application, 4.3
Delete this Application, 4.3
Manage Export Repository, 4.3
Page Groups, 4.3
Page Locks, 4.3
User Interface Defaults, 4.3
application item
about, 6.7.1, 6.8
creating, 6.8.1
editing attributes, 6.8.3
history, 6.8.2
Application Items, 5.6.2.2.4
Application Items page, 6.8.1.1
application language
determining, 4.4.3
Application Language Derived From attribute, 4.4.3.2.2, 16.2
application layout
LOV driving another LOV, 7.7
multiple columns, 9.4
print preview mode, 7.12
shortcuts, 7.8
application logic
editing all, 5.3.1
application models, 6.1.2.2
leveraging, 6.1.2.3
Application Primary Language attribute, 4.4.3.2.1, 16.2
application processes
Application Process page, 5.7.3.1, 5.7.3.1
creating, 5.7.3
example, 5.7.2
History report, 5.7.4.2
On Demand, 5.7.1
reports, 5.7.4
understanding, 5.7
Utilization report, 5.7.4.1
application reports
activity, 6.6.4
cross application, 6.6.5
page components, 6.6.3
shared components, 6.6.2
viewing, 6.6, 12.6
architecture, 1.2
authentication, 3.2.3, 13.4
Authentication Schemes Repository, 13.4.6
creating a scheme from scratch, 13.4.5
creating an authentication scheme, 13.4.3
preconfigured authentication schemes, 13.4.4
security attributes, 4.4.2.2.1
viewing current scheme, 13.4.7
Authentication Scheme attribute, 4.4.2.2.1
authentication schemes
Application Express Account credentials, 13.4.4.2
cookie user accounts, 13.4.4.2
Database Access Descriptor (DAD) credentials, 13.4.4.5
Database Account credentials, 13.4.4.3
LDAP credentials, 13.4.4.4
Open Door credentials, 13.4.4.1
Single Sign-on, 13.4.4.6
authorization, 3.2.4
Authorization attributes, 4.4.2.2.2
authorization scheme
of an application, 4.4.2.2.2
specifying, 4.4.2.2.2
authorization schemes, 13.5.1
attaching to application, 13.5.3.1
attaching to component, 13.5.3.3
attaching to control, 13.5.3.3
attaching to page, 13.5.3.2
creating, 13.5.2
for controlling access, 7.10.4
Automatic CSV Encoding attribute, 4.4.3.2.4

B

background PL/SQL, 15.6
APEX_PLSQL_JOB, 15.6.1
using a process, 15.6.3
bind variables
syntax, 3.5.4
using in PL/SQL procedures, 3.5.4.2
using in regions, 3.5.4.1
BLOBs
APEX_UTIL.GET_BLOB_FILE_SRC, 15.8.3
download support, 15.8.1
populating, 15.8.1
support in forms, 15.8
support in Reports, 15.8.2
branch
about, 5.3.10
creating, 8.6, 8.6
When Button Pressed attribute, 3.6.2.20.3
branching
action, 5.3.10.1
branch point, 5.3.10.1
Branch Point list, 5.3.10.1
making conditional, 5.3.10.2
on load, before header, 5.3.10.1
on submit, after processing, 5.3.10.1
on submit, before computation, 5.3.10.1
on submit, before processing, 5.3.10.1
on submit, before validation, 5.3.10.1
using buttons, 7.5.6
breadcrumb template, 10.2.6
Comments, 10.2.6.2.6
Definition, 10.2.6.2.4
Name, 10.2.6.2.1
Subscription, 10.2.6.2.2
Substitution Strings, 10.2.6.2.7
Template Attributes, 10.2.6.2.5
Template Type, 10.2.6.2.3
breadcrumbs, 5.3.6.3
about, 8.3.1
adding entries, 8.3.2.2.3
adding to a page, 8.3.2.2.4
creating, 8.3, 8.3.2
creating dynamic, 8.3.2.2.5
editing, 8.3.3
navigations, 10.2.6.1
reparenting entries, 8.3.4
reports, History, 8.3.5
reports, Utilization, 8.3.5
shared components, 5.3.6.3
build option status
exporting, 14.9.3
build options, 14.9
changing status, 14.9.2
creating, 14.9.1
excluding, 14.9.2
exporting, 14.9.3
including, 14.9.2
reports, 14.9.4
view options, 14.9.1.1
Build Options attribute, 4.4.1.2.6
Build Status attribute, 4.4.1.2.2
built-in substitution strings, 3.6.2
Bulk Edit Item Help report, 7.13.2.3
button
about, 5.3.4.3, 7.5.1
branching, 7.5.6
creating, 7.5, 7.5.2
creating multiple at once, 7.5.3
delete multiple, 7.5.4.2.1
displaying conditionally, 7.5.7
editing, 7.5.4
editing attributes, 7.5.4.1
editing multiple, 7.5.4.2
names, 7.5.5
template, 10.2.7
using Reorder Buttons icon, 7.5.4.3
button template
Comments, 10.2.7.1.4
Definition, 10.2.7.1.3
Name, 10.2.7.1.1
Subscription, 10.2.7.1.2
Substitution Strings, 10.2.7.1.5

C

caching
regions, 9.3.3.5
calendar
adding to a page, 7.3.2.1
adding to new page, 7.3.2.2
converting Easy to SQL, 7.3.6
creating, 7.3, 7.3.2
creating a column link, 7.3.4.2.3
creating a day link, 7.3.4.2.4
defining calendar interval, 7.3.4.2.2
defining display attributes, 7.3.4.2.2
Easy Calendar, 7.3.1
editing attributes, 7.3.4
editing title, 7.3.3
formatting, 7.3.4.2.1
SQL Calendar, 7.3.1
supported substitution strings, 7.3.1.1
types, 7.3.1
upgrading, 7.3.5
calendar attributes
accessing, 7.3.4.1
Calendar Display, 7.3.4.2.1
Column Link, 7.3.4.2.3
Day Link, 7.3.4.2.4
Display Attributes, 7.3.4.2.2
calendar template, 10.2.8
Comments, 10.2.8.1.3
Daily Calendar, 10.2.8.1.3
Monthly Calendar, 10.2.8.1.3
Name, 10.2.8.1.1
Template Subscription, 10.2.8.1.2
Weekly Calendar, 10.2.8.1.3
cascading style sheets
about, 10.2.1
exporting, 14.5.5
importing, 14.6.2
referencing for SVG charts, 7.4.4.5
referencing in page template, 10.3.2
referencing inline (SVG charts), 7.4.4.6
searching for, 7.9.8
uploading, 10.3.1
using custom, 10.3
viewing, 7.9.8
charts
about Flash, 7.4.1.1
about SVG, 7.4.1.2
about wizards, 7.4.2
altering display, 7.4.6
asynchronous updates, 7.4.8
candlestick syntax, 7.4.2
creating, 7.4
dial chart syntax, 7.4.2
displaying in other languages, 7.4.9
editing attributes, 7.4.6
Flash, 7.4.5
HTML chart, 7.4.3
migrating all SVG charts to Flash, 7.4.5.3.3
migrating SVG to Flash, 7.4.5.3.2
monitoring information, 7.4.8
multiple series syntax, 7.4.2
providing a SQL query, 7.4.2
range syntax, 7.4.2
scatter syntax, 7.4.2
SQL query syntax, 7.4.2
supported types, 7.4.1
SVG chart, 7.4.4
types, 7.4.2
check box, 6.7.3.3
classic report
adding download link, 7.1.4.5
controlling column breaks, 7.1.4.12
controlling column display, 7.1.4.11
creating updateable columns, 7.1.4.9
defining a column as a list of values, 7.1.4.10
exporting, 7.1.4.7
classic report regions
configuring print attributes, 7.1.5.6
printing methods, 7.1.5.3
classic reports
changing, 7.1.4
changing alignment, 7.1.4
changing column attributes, 7.1.4
changing column text, 7.1.4
changing pagination, 7.1.4.3
creating a sum, 7.1.4
hiding columns, 7.1.4
sorting columns, 7.1.4
Collection Showcase, 2.1, 6.1.4.1
collections, 15.4
accessing, 15.4.4
adding members, 15.4.6
APEX_COLLECTION API, 15.4.1
clearing session state, 15.4.12
creating, 15.4.2
deleting, 15.4.5
deleting members, 15.4.8
determining status, 15.4.9
managing, 15.4.11
merging, 15.4.10
naming, 15.4.1.1
truncating, 15.4.3
updating members, 15.4.7
column definition
editing, 11.2
columns templates
using JavaScript, 10.2.14.4
Comments attribute, 5.4.2.12
Component Defaults, 4.4.1.2.9
Breadcrumb, 4.4.1.2.9
Breadcrumb Region, 4.4.1.2.9
Button, 4.4.1.2.9
Calendar, 4.4.1.2.9
Chart Region, 4.4.1.2.9
Form Region, 4.4.1.2.9
Label, 4.4.1.2.9
List, 4.4.1.2.9
List Region, 4.4.1.2.9
Region, 4.4.1.2.9
Report, 4.4.1.2.9
Report Region, 4.4.1.2.9
Tabular Form Region, 4.4.1.2.9
Wizard Region, 4.4.1.2.9
components
about translating, 16.1.4
controlling access to, 3.2.4
displaying on all pages, 9.2
displaying on every page, 9.1
translating messages, 16.4, 16.4.1, 16.4.2
condition types
common, 3.2.2
conditional
processing, 3.2.2
rendering, 3.2.2
conditions
displaying regions, 9.3.3.2
list of, A
using, 3.2.2
using with buttons, 7.5.7
configuration
controlling, 14.9
controls
controlling access to, 3.2.4
Copy icon, 5.3.2
Create Application Wizard, 6.1
Create Branch Wizard, 8.6, 8.6
Create Breadcrumb Wizard, 8.3.2.2
Create Button Wizard, 7.5.2
Create icon, 5.3.2
Create Navigation Bar Entry Wizard, 8.5.2
Create Page Computation Wizard, 5.3.7.1, 15.7.9
Create Page Process Wizard, 5.3.9.1
Create Page Wizard
about, 6.2.1
Create Region Wizard, 7.3.2.1, 8.3.2.2.4, 9.3.4
Create Validations Wizard, 5.3.8.1, 7.2.5.1
cross site-scripting
about, 13.2.4
dynamic output, 13.2.4.2
form items, 13.2.4.4
HTML region, 13.2.4.1
report regions, 13.2.4.3
static display areas, 13.2.4.1
CSS classes
SVG charts, 7.4.4.4
CSS Finder, 7.9, 7.9.8
CSS Repository, 10.3.1.1

D

database link, 15.2
Database Object Dependencies
Next button, 5.2.3
Page field, 5.2.3
Previous button, 5.2.3
View list, 5.2.3
database objects
viewing, 2.5
database schema
of an application, 4.4.2.2.3, 4.4.2.2.4
specifying, 4.4.2.2.3, 4.4.2.2.4
Database Schema attributes, 4.4.2.2.3, 4.4.2.2.4
date picker, 6.7.3.3
DBMS_APPLICATION_INFO, 12.5
Debug Mode, 12.3
debugging, 12
debug mode, 12.3
isolating a problem, 12.8
SQL queries, 12.7
SQL tracing, 12.4
viewing reports, 12.6
Debugging attribute, 4.4.1.2.1
deep linking, 13.4.5.3
Default Page Template attribute, 4.4.1.2.8
deleting export files, 14.7.4
demonstration application
about Collection Showcase, 2.1, 6.1.4.1
about Sample Application, 2.1, 2.3, 6.1.4.1
editing, 2.4, 2.4.2
installing, 2.1
modifying, 2.4, 2.4.2
running from Application home page, 2.2.2
running from Demonstration Applications page, 2.2.1
viewing, 2.1
Demonstration Applications page, 2.1, 6.1.4.1
editing an application, 2.4.2
running an application, 2.2.1
deployment, 14.3
creating supporting objects, 14.4.2
exporting a page, 14.5.4
exporting application definition, 14.5.1
exporting cascading style sheets, 14.5.5
exporting images, 14.5.6
exporting scripts, 14.5.8
exporting static files, 14.5.7
exporting themes, 14.5.9
exporting user interface defaults, 14.5.10
importing application from SQL*Plus, 14.7.5
importing export files, 14.6
importing files, 14.6
installing application export, 14.7.2
installing files, 14.7.3
managing database objects, 14.3.1
of an application, 14.2
options, 14.2.1
packaging an application, 14.2
publishing the URL, 14.8
Developer Comment icon, 4.3.1.4, 5.1.2.2.3
developer comments
about, 6.4
adding to a page, 6.4.1
adding to an application, 6.4.1
deleting, 6.4.3
editing, 6.4.2
viewing, 6.4.2
viewing reports, 6.4.4
Developer Comments report
accessing, 6.4.4.1
deleting a comments, 6.4.4.3
deleting multiple comments, 6.4.4.4
downloading, 6.4.4.5
editing comments, 6.4.4.2
developer preferences
configuring, 4.2.1
Developer toolbar
about, 2.4.1
Activity, 2.4.1, 5.5
creating a page, 6.2.4
Session, 3.3.3
using, 5.5
development life cycle, 14.1
dial chart
syntax, 7.4.2
Display list
configuring defaults, 4.2.1
DML
about locking, 15.1
APEX_DML_LOCK_WAIT_TIME, 15.1
controlling DML operation, 15.1
FSP_DML_LOCK_ROW, 15.1
Drag and Drop Layout
about, 6.7.5.2
accessing, 6.7.5.1
creating new items, 6.7.5.3
deleting items, 6.7.5.5
editing items, 6.7.5.4
dynamic translation, 16.5

E

Edit Definition page
Virtual Private Database, 4.4.2.2.6
Edit Globalization Attributes
Application Date Format, 4.4.3.2.3
Application Language Derived From, 4.4.3.2.2
Application Primary Language, 4.4.3.2.1
Automatic CSV Encoding, 4.4.3.2.4
Edit Globalization Attributes page, 4.4.3
Edit Page icon, 4.3.1.2
Edit Security Attributes, 4.4.2
Authentication, 4.4.2.2.1
Authorization, 4.4.2.2.2
Database Schema, 4.4.2.2.3, 4.4.2.2.4
Session State Protection, 4.4.2.2.5
email
configuring environment settings, 15.3.1
email log, 15.3
email queue, 15.3
managing, 15.3
problems sending, 13.1.8
sending from an application, 15.3.2
embedded PL/SQL gateway, 1.2
location of images, CSS, and script files, 14.5.11.2
security practices, 13.1.1
engine
Application Express, 1.2
environment
configuring, 1.4.2
environment settings
configuring email, 15.3.1
Error Page Template attribute, 4.4.1.2.8
Exact Substitutions attribute, 4.4.1.2.1
Export
Page field, 5.2.5
View list, 5.2.5
export
a page, 5.2.5
an application, 14.5
application attributes, 14.5.3
build option status, 14.5.3
CSS, 14.5.5
images, 14.5.6
managing database objects, 14.3.1
page, 14.5.4
related files, 14.5
script files, 14.5.8
shared components
export, 14.5.3
static files, 14.5.7
text for translations, 16.3.2
themes, 14.5.9
translation options, 16.3.2.2.4
user interface defaults, 14.5.10
Export icon, 5.1.2.2.5
Export Repository, 14.7.2, 14.7.3, 14.7.4
accessing, 14.7.1
exported application
importing, 14.6
Export/Install icon, 4.3

F

f?p syntax, 3.4.2
facilitating bookmarking, 3.4.5
file upload table
security risks, 13.3
files
deleting uploaded files, 9.8.4
downloading uploaded files, 9.8.3
editing uploaded files, 9.8.2
managing, 9.8
uploading, 9.8.1
Find icon, 4.3.1.5, 5.1.2.2.6, 7.9, 7.9.1
Flash chart
adding to existing page, 7.4.5.1
adding to new page, 7.4.5.2
candlestick syntax, 7.4.2
multiple series syntax, 7.4.2
range syntax, 7.4.2
scatter syntax, 7.4.2
using custom XML, 7.4.7
footer
substitution strings, 9.3.3.3
Form Auto Complete, 5.4.2.6
form wizard
Form and Report on Web Service, 7.2.1
Form on a Procedure, 7.2.1
Form on a SQL Query, 7.2.1
Form on a Table with Report, 7.2.1
Form on Table or View, 7.2.1
Form on Web Service, 7.2.1
Master Detail Form, 7.2.1
Summary Page, 7.2.1
Tabular Form, 7.2.1
forms
Automatic Row Processing (DML) process, 7.2.4.2
creating, 7.2
creating a master detail, 7.2.3
creating a tabular form, 7.2.2
creating manually, 7.2.4
creating using a wizard, 7.2.1
page types, 7.2.1
populating, 7.2.4.5
understanding processing, 7.2.4.1
validating input, 7.2.5
full development environment, 1.2
functions
searching for, 7.9.6

G

Global Notifications attribute, 4.4.1.2.3
globalization
attributes, 16.2
determining application language, 4.4.3
format masks, 16.2.1
understanding, 16.1
graphics
managing, 9.7
referencing, 9.7.2
uploading, 9.7.1
Groups
Display, 5.2.6
Page field, 5.2.6
View list, 5.2.6
groups
of applications, 6.5
of pages, 6.2.7
GUI
about, 1.1

H

Help
creating, 7.13
creating navigation bar entry, 7.13.3
editing, 6.7.4.2.2, 7.13.2.3
online Help system, 1.7
page Help, 1.7
searching, 1.7
using, 1.7
help
problems, 13.1.8
Help text
defining for item, 7.13.2.2
defining for page, 7.13.2.1
editing items, 7.13.2.3
History
Display, 5.2.4
Next button, 5.2.4
Page field, 5.2.4
Previous button, 5.2.4
View list, 5.2.4
Home Link attribute, 4.4.2.2.1, 4.4.2.2.1
HTMDB03013|Setting Session State, 3.5.2
HTML
generated using custom PL/SQL, 9.9
not handled by Application Express, 9.9
HTML chart
adding to existing page, 7.4.3.1
adding to new page, 7.4.3.2

I

Image Finder, 7.9
Image Prefix
about, 9.7.2
Image Prefix attribute, 4.4.1.2.1
Image Repository, 9.7, 9.7.1
images
exporting, 14.5.6
importing, 14.6.4
managing, 9.7
referencing, 9.7.2
searching for, 7.9.7
uploading, 9.7.1
viewing available, 7.9.7
Images Finder, 7.9.7
importing
application, 14.6.1
application using SQL*Plus, 14.7.5
cascading style sheets, 14.6.2
export files, 14.6, 14.6
images, 14.6.4
page, 14.6.1
static files, 14.6.3
themes, 14.6.5
User Interface Defaults, 14.6.6
installing
application files, 14.7.2
demonstration applications, 2.1
export files, 14.7.3
installing application export, 14.7.2
installing export files, 14.7.3
Interactive report regions
configuring print attributes, 7.1.5.7
Interactive reports
creating a column link, 7.1.3.9
interactive reports
About Actions menu, 7.1.2.3
about Link Column icons, 7.1.2.2
about link columns, 7.1.3.8
about the Search bar, 7.1.2.1
adding a filter, 7.1.2.5
adding computations, 7.1.2.9
adding download option, 7.1.3.7
adding highlighting, 7.1.2.8
advanced attributes, 7.1.3.11
aggregating a column, 7.1.2.10
Attributes page, 7.1.3.1
changing pagination, 7.1.3.4
column attributes, 7.1.3.2
creating a chart, 7.1.2.11
creating a control break, 7.1.2.7
creating groups, 7.1.3.3
defining a column as a list of values, 7.1.3.10
downloading, 7.1.2.15
editing as a developer, 7.1.3
executing a Flashbarck query, 7.1.2.12
exporting, 7.1.3.7
linking to, 7.1.3.12
managing column sorting, 7.1.3.5
resetting, 7.1.2.14
saving, 7.1.2.13
saving a named report, 7.1.2.13.1
selecting columns and sort order, 7.1.2.6
selecting columns to displays, 7.1.2.4
using, 7.1.2
item
about, 5.3.4.4
about Application Items page, 6.8.1.1
conditional, 6.7.7
multiple select list item, 6.7.8
naming conventions, 6.7.3.2
read-only, 6.7.7
referencing item values, 6.7.6
referencing using JavaScript, 7.11.1
referencing values, 6.7.6
searching for, 7.9.2
using format masks when translating, 16.2.1
using Reorder Items icon, 6.7.2.2
item attributes
affecting layout, 9.5
Begin On New Field, 9.5
Begin On New Line, 9.5
ColSpan, 9.5
Columns, 9.5
Condition Type and Expressions, 9.5
Horizontal/Vertical Alignment, 9.5
HTML Table Cell Attributes, 9.5
Label, 9.5
Post Element Texts, 9.5
Pre Element Texts, 9.5
Read Only Condition Type, 9.5
Region, 9.5
RowSpan, 9.5
Sequence, 9.5
Template, 9.5
Item Finder, 7.9, 7.9.2
item Help
editing, 7.13.2.3
item type
Check box, 6.7.3.3
Date Picker, 6.7.3.3
Display Only, 6.7.3.3
File Browse, 6.7.3.3
Hidden, 6.7.3.3
Hidden and Protected, 6.7.3.3
List Manager, 6.7.3.3
Multiple Select, 6.7.3.3
Password, 6.7.3.3
Popup List of Values, 6.7.3.3
Radio, 6.7.3.3
Select list, 6.7.3.3
Shuttle, 6.7.3.3
Stop and Start Table, 6.7.3.3
Text, 6.7.3.3
Text Area, 6.7.3.3

J

JavaScript, 10.2.11.1, 10.2.11.1
calling from button, 7.11.3
in row templates, 10.2.14.4
including in HTML Header attribute, 7.11.2.1
including in .js file, 7.11.2.2
including in page template, 7.11.2.2
incorporating, 7.11
libraries, 10.2.11.1
on load events, 5.4.2.5
page specific, 5.4.2.4
referencing items, 7.11.1
setting focus on item, 5.4.2.2
JavaScript Finder, 7.9

L

label template
Comments, 10.2.9.1.5
Definition, 10.2.9.1.3
editing, 10.2.9
Error Display, 10.2.9.1.4
Name, 10.2.9.1.1
Subscription, 10.2.9.1.2
Substitution Strings, 10.2.9.1.6
language
defining for application, 16.2
multibyte, 16.2.2
preference, 16.1.1
layout
altering using item attributes, 9.5
controlling, 10
Link Column
about, 7.1.3.8
excluding, 7.1.3.8.4
linking a single row view, 7.1.3.8.1
linking to a page, 7.1.3.8.2
linking to URL, 7.1.3.8.3
linking
deep, about, 13.4.5.3
list
adding list entries, 8.2.1.3
adding sublists, 8.2.1.3
adding to a page, 8.2.2
changing parents of list entries, 8.2.1.4
creating, 8.2.1
creating hierarchical, 10.2.10.1
editing, 8.2.3
editing multiple, 8.2.4
example, 8.2
Lists page, 8.2.3
removing parents of orphaned entries, 8.2.1.5
reports, 8.2.5
list of values, 5.3.6.2
bulk edit of static LOVs, 7.6.3.2
creating, 7.6
creating at application-level, 7.6.1
creating dependent LOVs, 7.7
editing, 7.6.3
List of Values History report, 7.6.6.4
List of Values page, 7.6.1.1
List of Values Subscription report, 7.6.6.2
List of Values Utilization report, 7.6.6.3
named, 7.6.1
referencing null values in items, 7.6.5
referencing session state, 7.6.4
reports, 7.6.6
Search Dynamic Lists of Values report, 7.6.6.1
shared, 7.6.1
static, 7.6.2
translating, 16.5
List of Values page, 7.6.1.1
list reports
History, 8.2.5
Unused Lists, 8.2.5
Utilization, 8.2.5
list template
After List Entry, 10.2.10.2.8
After Sub List Entry, 10.2.10.2.7
Before List Entry, 10.2.10.2.3
Before Sub List Entry, 10.2.10.2.5
Comments, 10.2.10.2.9
editing, 10.2.10
Name, 10.2.10.2.1
Sub List Entry, 10.2.10.2.6
Subscription, 10.2.10.2.2
Substitution Strings, 10.2.10.2.10, 10.2.11.2.12
Template Definition, 10.2.10.2.4
lists, 5.3.6.4
Lists page, 8.2.3
Lists Wizard, 8.2.1
Lock icon, 5.1.2.2.4
locks
determining lock status, 6.2.8.1
for pages, 6.2.8
Logging attribute, 4.4.1.2.1
logging in to
Oracle Application Express, 1.4.3
logging out, 1.4.3.5
login credentials, 1.4.3.2
login page, 1.4
building, 13.4.5.2
understanding login credentials, 1.4.3.2
Login URL attribute, 4.4.2.2.1
Logo attribute, 4.4.1.2.5

M

master detail form
creating, 7.2.3
Media Type attribute, 4.4.1.2.1
Message for unavailable application, 4.4.1.2.2
messages
translating, 16.4, 16.4.1
translating internal, 16.4.2
messages in PL/SQL procedures, 16.4.1
translating, 16.4.1
messages in reports, 16.4.2
translating, 16.4.2

N

navigation
alternatives, 1.6
branch, 8.6
breadcrumb, 8.3
breadcrumbs, 1.6
drop down menus, 1.6
icons, 1.6
list, 8.2
parent tabs, 8.1
standard tabs, 8.1
tab, 8.1
trees, 8.4
navigation bar, 8.5
Reorder Navigation Bar Entries Icon, 8.5.5
navigation bar entry, 8.5
about, 8.5.1
creating, 8.5.2
editing, 8.5.3
editing multiple, 8.5.4
reports, 8.5.6
navigation bar entry history, 8.5.6.2
navigation bar entry reports
history, 8.5.6.2
subscription, 8.5.6.1
navigation bar entry subscription, 8.5.6.1
New Component Wizard, 6.2.4, 7.10.2.3

O

online Help
enabling indexing in Oracle Database 11g Release 2, 13.1.9
field level, 1.7
online Help system, 1.7
page Help, 1.7
problems, 13.1.8
searching, 1.7
Oracle Application Express
about, 1.1
architecture, 1.2
browser requirements, 1.4.1
configuring your environment, 1.4.2
list of features, 1.1
logging in, 1.4
logging in to as a developer, 1.4.3
user roles, 1.3
Oracle Application Express administrator, 1.3
Oracle Application Express Engine, 1.2
Oracle Application Server Single Sign-On, 13.4.4.6.1
preconfigured authentication schemes
Oracle Application Server Single Sign-On, 13.4.4.6.1
Oracle BI Publisher
integrating with, 13.1.4
Oracle HTTP Server
about security, 13.1.2
location of images, CSS, and script files, 14.5.11.1
Oracle XML DB HTTP server
verifying HTTP server port, 1.4.3.2.1

P

packaged application
about, 14.4.1
about Supporting Objects page, 14.4.2.2
adding access control list, 14.4.4
adding CSS installation script, 14.4.3
adding image installation script, 14.4.3
adding static file installation script, 14.4.3
build options, 14.4.2.2.1
creating supporting objects, 14.4.2
defining an upgrade script, 14.4.7.1
deinstallation scripts, 14.4.2.2.4
deinstalling, 14.4.8
deleting installation options, 14.4.6
deleting messages, 14.4.6
deleting supporting object scripts, 14.4.6
how to create, 14.4
installation scripts, 14.4.2.2.1
installing supporting objects, 14.4.5
messages, 14.4.2.2.2
prerequisites, 14.4.2.2.1
substitutions strings, 14.4.2.2.1
testing installation scripts, 14.4.5
upgrade scripts, 14.4.2.2.3
upgrading a packaged application, 14.4.7.2
validations, 14.4.2.2.1
viewing an install summary, 14.4.9
packages
searching for, 7.9.6
page
creating, 6.2.1
creating from Application Home, 6.2.2
creating from Page Definition, 6.2.3
managing, 6.2
page attributes, 5.3.4.1
about, 5.4
accessing, 5.4.1
Authentication, 5.4.2.6, 5.4.2.6
Authorization Scheme, 5.4.2.6
Cache, 5.4.2.8
Cache by User, 5.4.2.8
Cache Page, 5.4.2.8
Cache Page Condition, 5.4.2.8
Cache Timeout, 5.4.2.8
Comments, 5.4.2.12
Configuration, 5.4.2.9
Cursor Focus, 5.4.2.2, 5.4.2.2
display attributes, 5.4.2.2
Duplicate Submission, 5.4.2.7
Expression 1, 5.4.2.8, 5.4.2.8
Footer, 5.4.2.3
Groups, 5.4.2.1
Header Text, 5.4.2.3
Help, 5.4.2.11
HTML Body Attributes, 5.4.2.5
HTML Header, 5.4.2.4
Name, 5.4.2.1
On Error Text, 5.4.2.10
Page Alias, 5.4.2.1
Page Template, 5.4.2.2
security, 5.4.2.6
Standard Tab Set, 5.4.2.2
Title, 5.4.2.2
page components, 14.5.3
controlling access, 7.10.4
editing all, 5.3.1
page computation
computation point, 5.3.7.2
creating, 5.3.7.1
defining computation point, 5.3.7.3.1
defining computation source, 5.3.7.3.1
editing attributes, 5.3.7.3
making a computation conditional, 5.3.7.3.2
syntax, 5.3.7.2
page controls
editing all, 5.3.1
Page Definition
about, 3.1
Action Bar, 5.1.2.2
alternate views, 5.2.1
Copy button, 5.1.2.1
Copy icon, 5.3.2
Create button, 5.1.2.1
Create icon, 5.3.2
creating a page, 6.2.3
creating new controls and components, 5.3.2
Delete button, 5.1.2.1
editing, 5.3
editing all, 5.3.1
export, 5.2.5
Next button, 5.1.2.1
Page field, 5.1.2.1
Page Processing, 5.3.5
Page Rendering, 5.3.4
Previous button, 5.1.2.1
reordering components, 5.3.3
View list, 5.1.2.1, 5.2
viewing, 5.1
Page Events
Next button, 5.2.2
Page field, 5.2.2
Previous button, 5.2.2
Show All, 5.2.2, 5.2.2
Show Used, 5.2.2
View list, 5.2.2
Page Finder, 7.9, 7.9.3
page groups
assigning pages, 6.2.7.3
creating, 6.2.7.2
editing group definition, 6.2.7.2.1
managing, 4.3
Pages by Page Group report, 6.2.7.6
reassigning pages, 6.2.7.3.1
removing, 6.2.7.5
removing pages, 6.2.7.4
viewing, 5.2.6, 6.2.7.1
page help
creating, 7.13
page item
about, 6.7.1
creating, 6.7, 6.7.3
creating from Page Definition, 6.7.3.1
deleting multiple, 6.7.4.2.4
Drag and Drop Layout page, 6.7.5
editing attributes, 6.7.4.1
editing display on a page, 6.7.4.2.1
editing Help, 6.7.4.2.2
editing multiple, 6.7.4.2
naming conventions, 6.7.3.2
reassigning to a region, 6.7.4.2.3
static list of values, 6.7.3.6
types, 6.7.3.3
using Drag and drop icon, 6.7.2.1
using Reorder Region Items icon, 6.7.4.3
page items
about, 6.7.2
page layout
about, 9.1
page locks
managing, 4.3
page number, 5.3
page processes
changing processing points, 5.3.9.2.1
changing source, 5.3.9.2.1
creating, 5.3.4.6, 5.3.9.1
editing attributes, 5.3.9.2
making conditional, 5.3.9.2.2
When Button Pressed attribute, 3.6.2.20.3
Page Processing
about, 5.3.5
Branches, 5.3.5.4
Computations, 5.3.5.1
Processes, 5.3.5.3
Validations, 5.3.5.2
page processing, 3.2.1
understanding, 3.2
Page Rendering
about, 5.3.4
Buttons, 5.3.4.3, 7.5.1
Computations, 5.3.4.5
Items, 5.3.4.4, 6.7.2
Page, 5.3.4.1
Processes
about, 5.3.4.6
Regions, 5.3.4.2, 9.3.1
Tabs, 8.1.2
page rendering, 3.2.1
understanding, 3.2
page reports
viewing, 12.6
page template
Body, 10.2.11.2.3
Definition, 10.2.11.2.3
Display Points, 10.2.11.2.4
editing, 10.2.11
Error Page Template Control, 10.2.11.2.10
Footer, 10.2.11.2.3
Header, 10.2.11.2.3
Image Based Tab Attributes, 10.2.11.2.8
Multi Column Region Table Attribute, 10.2.11.2.9
Name, 10.2.11.2.1
Parent Tab Attributes, 10.2.11.2.7
specifying defaults, 10.2.2.1, 10.2.2.2
Standard Tab Attributes, 10.2.11.2.6
Subscription, 10.2.11.2.2
substitution strings, 10.2.11
Subtemplate, 10.2.11.2.5
page template substitution strings, 10.2.11
#APP_VERSION#, 10.2.11.1
#BOX_BODY#, 10.2.11.1
#CUSTOMIZE#, 10.2.11.1
#FORM_CLOSE#, 10.2.11.1
#FORM_OPEN#, 10.2.11.1
#GLOBAL_NOTIFICATION#, 10.2.11.1
#HEAD#, 10.2.11.1
#LOGO#, 10.2.11.1
#NAVIGATION_BAR#, 10.2.11.1
#NOTIFICATION_MESSAGE#, 10.2.11.1
#ONLOAD#, 10.2.11.1
#PARENT_TAB_CELLS#, 10.2.11.1
#REGION_POSITION_NN#, 10.2.11.1
#SUCCESS_MESSAGE#, 10.2.11.1
#TAB_CELLS#, 10.2.11.1
#TITLE#, 10.2.11.1
page view
Referenced Components, 5.2.7
page views
accessing alternate views, 5.2.1
Database Object Dependencies, 5.2.3
Groups, 5.2.6
History, 5.2.4
Page Events, 5.2.2
page zero, 9.1, 9.2
page-level item
History, 6.7.4.2.5
page-level template, 10.2.2.2
pages
about, 3.1
about page zero, 9.2
adding, 6.2
assigning to groups, 6.2.7.3
caching, 5.4.2.8
calling from a button, 3.4.4
calling with an alias, 3.4.3
controlling access to, 7.10.4
copying, 6.2.5
creating from Application home, 6.2.2
creating from Developer toolbar, 6.2.4
creating groups, 6.2.7.2
deleting, 6.2.9
determining lock status, 6.2.8.1
duplicate submission, 5.4.2.7
enabling user customization, 9.3.3.4
exporting, 14.5.4
grouping, 6.2.7
linking with f?p syntax, 3.4.2
locking, 6.2.8, 6.2.8.2
optimizing for printing, 7.12
preventing conflicts, 6.2.8
reassigning to groups, 6.2.7.3.1
removing from groups, 6.2.7.4
resource use, 12.5
running, 6.2.6
searching for, 7.9.3
specifying page template, 10.2.2.2
types, 6.2.3.1
unlocking, 6.2.8, 6.2.8.3
pagination
classic reports, 7.1.4.3
interactive reports, 7.1.3.4
reports, 10.2.14.2.3, 10.2.14.3.5
Pagination Subtemplate
Next Page Template, 10.2.14.3.6
Next Set Template, 10.2.14.3.6
Pagination Template, 10.2.14.3.6
Previous Page Template, 10.2.14.3.6
Previous Set Template, 10.2.14.3.6
parent tabs
creating, 8.1
Parsing Schema attribute, 4.4.1.2.1
password
changing, 1.4.3.4
resetting, 1.4.3.4
password complexity, 13.1.5
passwords
best practices, 13.2.1
identifying risks, 13.2.2
patch
creating, 14.5.3
PDF printing
problems, 13.1.8
performance tuning, 12.1
PL/SQL
running in background, 15.6
PL/SQL code
searching for, 7.9.6
PL/SQL Finder, 7.9
Popup List of Values, 6.7.3.3
Popup LOV template
Application, 10.2.12.1.1
Buttons, 10.2.12.1.5
editing, 10.2.12
Icon, 10.2.12.1.3
Page Attributes, 10.2.12.1.9
Pagination, 10.2.12.1.7
Result Set, 10.2.12.1.8
Search Field, 10.2.12.1.4
Subscription, 10.2.12.1.2
Window, 10.2.12.1.6
preconfigured authentication schemes, 13.4.4
Oracle Application Server Single Sign-On, 13.4.4.6.1
primary navigation, 1.6
Print Mode Page Template attribute, 4.4.1.2.8
Printer Friendly mode, 2.3.7
Printer Friendly template, 7.12
printing
reports, 7.1.5
Procedure Finder, 7.9.6
procedures
searching for, 7.9.6
process
Cache Management, 5.3.9.1
Data Manipulation, 5.3.9.1
Form Pagination, 5.3.9.1
implementing background PL/SQL, 15.6.3
On Demand, 5.3.9.1
PL/SQL, 5.3.9.1
Report Pagination, 5.3.9.1
Web Services, 5.3.9.1
programming techniques
collections, 15.4
database links, 15.2
implementing Web services, 15.7
running background PL/SQL, 15.6
proxy server
defining, 15.7.1.2
Proxy Server attribute, 4.4.1.2.1
Public User attribute, 4.4.2.2.1
pull-down menu, 1.6

Q

query
searching for, 7.9.4
Query Finder, 7.9, 7.9.4

R

radio group, 6.7.3.3
Referenced Components
Next button, 5.2.7
Page field, 5.2.7
Previous button, 5.2.7
View list, 5.2.7
region
about, 5.3.4.2, 9.3.1
about types, 9.3.5
based on a URL, 9.6
controlling positioning, 9.3.3.2.1
copying, 9.3.6
creating, 9.3.4
customizing, 9.3
displaying conditionally, 9.3.3.2
editing attributes, 9.3.3.1
enabling customization, 9.3.3.4
specifying header and footer, 9.3.3.3
using Reorder Regions icon, 9.3.2
region attributes
Cache, 9.3.3.5
Column, 9.3.3.2
Condition Type, 9.3.3.2
Customization, 9.3.3.2
Display Point, 9.3.3.2
Expression, 9.3.3.2
Region Footer, 9.3.3.2
Region Header, 9.3.3.2
Region HTML table cell attributes, 9.3.3.2
Sequence, 9.3.3.2
Static ID, 9.3.3.6
Template, 9.3.3.2
region template
Comments, 10.2.13.1.5
Definition, 10.2.13.1.3
editing, 10.2.13
Form Table Attributes, 10.2.13.1.4
Name, 10.2.13.1.1
Subscription, 10.2.13.1.2
Substitution Strings, 10.2.13.1.6
region type
Calendar, 9.3.5, 9.3.5
Chart, 9.3.5
form, 9.3.5
Help Text, 9.3.5
HTML, 9.3.5
List, 9.3.5, 9.3.5, 9.3.5
PL/SQL Dynamic Content, 9.3.5
Report, 9.3.5
Tree, 9.3.5
URL, 9.3.5
Reorder icon, 5.3.3
report column templates
colorizing cell headings, 10.2.14.2.4
omitting headings, 10.2.14.2.4
report column templates (generic)
After Rows, 10.2.14.2.8
Before Each Row, 10.2.14.2.5, 10.2.14.2.7
Before Rows, 10.2.14.2.3
Column Headings, 10.2.14.2.4
Column Templates, 10.2.14.2.6
displaying HTML after all columns, 10.2.14.2.7
displaying HTML after last row, 10.2.14.2.8
Next Page Template, 10.2.14.2.10
Next Set Template, 10.2.14.2.10
Pagination Subtemplate, 10.2.14.2.10, 10.2.14.2.10
Previous Page Template, 10.2.14.2.10
Previous Set Template, 10.2.14.2.10
Report Template, 10.2.14.2.1
Row Highlighting, 10.2.14.2.9
Template Subscription, 10.2.14.2.2
report column templates (named)
Before Rows attribute, 10.2.14.3.5
colorizing column header cell, 10.2.14.3.4
Column Headings, 10.2.14.3.4
Pagination Subtemplate, 10.2.14.3.6
Report Template Identification, 10.2.14.3.1
Row Templates, 10.2.14.3.3
Subscription, 10.2.14.3.2
report layouts
about, 7.1.5.5
copying, 7.1.5.5.4
creating, 7.1.5.5.2
editing, 7.1.5.5.3
options, 7.1.5.5.1
report printing
problems, 13.1.8
report queries
about, 7.1.5.4
copying, 7.1.5.4.3
creating, 7.1.5.4.1
editing, 7.1.5.4.2
report region
printing, 7.1.5
report regions
about configuration options, 7.1.5.2
printing to PDF, 7.1.5.1
report templates, 10.2.14
editing, 10.2.14
generic column templates, 10.2.14.1.1
named column templates, 10.2.14.1.2
using JavaScript, 10.2.14.4
reports, 10.2.4
about, 7.1
about an application, 6.6
Application Builder, 6.6
Bulk Edit Item Help, 7.13.2.3
class references, 10.1.11.4
comparing user interface defaults, 11.3
creating a column link, 7.1.4.8
creating with a wizard, 7.1.1
CSV export, 10.2.14.2.5
exporting to CSV format, 10.2.14.2.3, 10.2.14.3.5
including pagination above, 10.2.14.2.3, 10.2.14.3.5
printing, 7.1.5
sorting columns, 7.1.4.4
SQL, 7.1.1
supported substitution strings, 10.1.11.5
template subscription, 10.2.4
template utilization, 10.2.4
templates in a theme, 10.1.11.1
theme file references, 10.1.11.3
theme template counts, 10.1.11.2
themes, 10.1.11
Wizard Report, 7.1.1
REQUEST
button names, 7.5.5
referencing value of, 3.6.2.20
substitution string, 3.6.2.20
resource use
monitoring, 12.5
restrict access
of application, 4.4.1.2.2
Run Application icon, 4.3
Run Page icon, 4.3.1.1, 5.1.2.2.1
runtime environment, 1.2

S

Sample Application, 2.1, 6.1.4.1
about, 2.3, 2.3
script files
exporting, 14.5.8
SDLC, 14.1
rapid application development, 14.1.1
Spiral, 14.1.1
waterfall, 14.1
secondary navigation, 1.6
secure sockets layer
best practices, 13.1.3
security
attributes, 4.4.2
for pages, 5.4.2.6
security attributes
authentication, 4.4.2.2.1
Authentication Scheme, 4.4.2.2.1
Authorization Scheme, 4.4.2.2.2
Database Schema, 4.4.2.2.3, 4.4.2.2.4
Home Link, 4.4.2.2.1
Login URL, 4.4.2.2.1
Public User, 4.4.2.2.1
Session State Protection, 4.4.2.2.5
security best practices
administrator tasks, 13.1
at risk passwords, 13.2.2
cross site-scripting protection, 13.2.4
embedded PL/SQL gateway, 13.1.1
enabling indexing of online Help, 13.1.9
enabling network services, 13.1.8
items of type password, 13.2.1
Oracle BI Publisher, 13.1.4
Oracle HTTP Server, 13.1.2
password complexity, 13.1.5
runtime environment, 13.1.6
secure sockets layer, 13.1.3
session state, 13.2.5
session timeout, 13.1.7
zero as session ID, 13.2.3
security risks
file upload table, 13.3
seeding, 16.3.2
select lists, 6.7.3.3
creating dependent list of values, 7.7
session
ID, 3.3.2
session ID
facilitating bookmarking, 3.4.5
session state
clearing, 3.5.3
clearing application cache, 3.5.3.3
clearing cache by item, 3.5.3.1
clearing cache by page, 3.5.3.2
clearing cache for current user session, 3.5.3.4
clearing cache for two pages, 3.5.3.2.1
enabling projection, 4.4.2.2.5
management, 3.3
passing item value, 3.5.3.2.2
protection, 13.2.6
referencing, 3.5.1
security best practices, 13.2.5
setting, 3.5.2
viewing, 3.3.3
session state protection
configuring all attributes, 13.2.6.3.2
configuring security attributes, 13.2.6.3
disabling, 13.2.6.2
enabling, 13.2.6.2
enabling from Edit Security Attributes, 13.2.6.2.1
enabling from Session State Protection, 13.2.6.2.3
enabling using a wizard, 13.2.6.2.3
reports, 13.2.6.3.1
understanding, 13.2.6.1
viewing existing settings, 13.2.6.3.1
viewing summaries, 13.2.6.3.1
Session State Protection attribute, 4.4.2.2.5
session state values
managing, 3.5
session timeout
understanding, 13.1.7
shared components
about, 5.3.6, 5.6.2
accessing, 5.6.1
accessing reports, 5.6.4
backing up, 14.5.3
Breadcrumbs, 5.3.6.3
creating, 5.6.1
exporting, 5.6.3, 14.5.3
icon, 4.3
list of values, 5.3.6.2
Lists, 5.3.6.4
Lists of Values, 5.3.6.2
Navigation Bar, 5.3.6.8
Security, 5.3.6.7
Shared Components page, 5.6
Tabs, 5.3.6.1
Templates, 5.3.6.6
Theme, 5.3.6.5
Shared Components icon, 4.3.1.3, 5.1.2.2.2
Shared Components page
Application Computations, 5.6.2.2.3
Application Items, 5.6.2.2.1, 5.6.2.2.4
Application Processes, 5.6.2.2.2, 5.7
Authentication Schemes, 5.6.2.3.1
Authorization Schemes, 5.6.2.3.2
Breadcrumbs, 5.6.2.5.3
Build Options, 5.6.2.2.5
Cascading Style Sheets, 5.6.2.8.1
Comments, 5.6.2.1.2
Definition, 5.6.2.1.1
Edit Attributes, 5.6.2.4.3
Edit Security Attributes, 5.6.2.3.4
Images, 5.6.2.8.2
Lists, 5.6.2.5.2
Lists of Values, 5.6.2.6.4
Navigation Bar Entries, 5.6.2.5.5
Report Layouts, 5.6.2.7.2
Report Queries, 5.6.2.7.1
Session State Protection, 5.6.2.3.3
Shortcuts, 5.6.2.6.5
Static Files, 5.6.2.8.3
Tabs, 5.6.2.5.1
Templates, 5.6.2.6.2
Test Messages, 5.6.2.4.2
Themes, 5.6.2.6.1
Translate Application, 5.6.2.4.1
Trees, 5.6.2.5.4
User Interface Defaults, 5.6.2.6.3
Web Service References, 5.6.2.2.4
Shortcut page, 7.8.2.1
shortcuts, 7.8
defining, 7.8.2
editing attributes, 7.8.3
HTML Text, 7.8.1
HTML Text with Escaped Special Characters, 7.8.1
Image, 7.8.1
Message, 7.8.1
Message with JavaScript Escaped Special Quotes, 7.8.1
PL/SQL Function Body, 7.8.1
reports, 7.8.4
Shortcut History, 7.8.4.2
Shortcut page, 7.8.2.1
Subscribed Shortcuts, 7.8.4.1
supporting translatable messages, 16.1.4.1
Text with JavaScript Escaped Single Quotes, 7.8.1
types, 7.8.1
Show Page, 3.2.1
shuttle multiple select list, 6.7.3.3
SOAP, 15.7
SQL report, 7.1.1
SQL tracing
enabling, 12.4
standard tabs
creating, 8.1
Static File Repository, 9.8, 9.8.1
static files
deleting, 9.8.4
downloading, 9.8.3
editing, 9.8.2
exporting, 14.5.7, 14.5.7
importing, 14.6.3
importing into another instance, 14.5.7
managing, 9.8
uploading, 9.8.1
static substitution string, 4.4.1.2.4
Status attribute, 4.4.1.2.2
style sheet, 10.2.1
substitution strings
#COLCOUNT#, 10.2.14.2.5
#CSV_LINK#, 10.2.14.2.3, 10.2.14.3.5
#GLOBAL_NOTIFICATION#, 4.4.1.2.3
#HIGHLIGHT_ROW#, 10.2.14.2.5
#IMAGE_PREFIX#, 9.7.2
#ROWNUM#, 10.2.14.2.5
about built-in, 3.6.2
APP_ALIAS, 3.6.2.1
APP_ID, 3.6.2.2
APP_IMAGES, 3.6.2.3
APP_PAGE_ID, 3.6.2.4
APP_SESSION, 3.6.2.5
APP_UNIQUE_PAGE_ID, 3.6.2.6
APP_USER, 3.6.2.7
Application Express SCHEMA OWNER, 3.6.2.15
AUTHENTICATED_URL_PREFIX, 3.6.2.8
BROWSER_LANGUAGE, 3.6.2.9
calendar, 7.3.1.1
CURRENT_PARENT_TAB_TEXT, 3.6.2.10
DEBUG, 3.6.2.11
IMAGE_PREFIX, 3.6.2.14
in page templates, 10.2.11
LOGOUT_URL, 3.6.2.17
PRINTER_FRIENDLY, 3.6.2.16
PROXY SERVER, 3.6.2.18
PUBLIC_URL_PREFIX, 3.6.2.19
report of supported, 10.1.11.5
REQUEST, 3.6.2.20
SQLERRM, 3.6.2.21
static, 4.4.1.2.4
supported in region footer, 9.3.3.3
SYSDATE_YYYYMMDD, 3.6.2.22
understanding, 3.6
usage within templates, 3.6.1.1
using, 3.6.1
WORKSPACE_IMAGES, 3.6.2.23
supporting objects
creating, 14.4.2
deinstalling, 14.4.8
SVG chart
about types, 7.4.4.3
adding to existing page, 7.4.4.1
adding to new page, 7.4.4.2
CSS classes, 7.4.4.4
migrating all to Flash, 7.4.5.3.3
migrating to Flash, 7.4.5.3.2
migration restrictions, 7.4.5.3.1
referencing CSS styles inline, 7.4.4.6
referencing custom CSS, 7.4.4.5
SVG plug-in, 7.4.1.2

T

tab
adding, 8.1
creating, 8.1.4, 8.1.5
editing, 8.1.6
editing multiple, 8.1.6.1
managing, 8.1.4
Reorder Tabs icon, 8.1.3
reports, 8.1.7
template support, 8.1.1
tab reports
History, 8.1.7
Utilization, 8.1.7
Table Finder, 7.9, 7.9.5
tables
exporting user interface defaults, 11.4
forcing close of HTML table, 6.7.3.3
searching for, 7.9.5
tabs
about, 8.1.2
Tabs page, 8.1.4
tabular form
creating, 7.2.2
Template Defaults, 4.4.1.2.8
template edit history, 10.2.4
templates
application defaults, 4.4.1.2.8
breadcrumbs, 10.2.6
button, 10.2.7
calendar, 10.2.8
changing defaults, 10.1.2
columns, 10.2.14.2.6, 10.2.14.4
creating, 10.2.3
customizing, 10.2
labels, 10.2.9
lists, 10.2.10
managing, 10.2.5
page, 10.2.11
popup LOV, 10.2.12
publishing, 10.2.5.7
regions, 10.2.13
replacing, 10.2.5.3
replacing all, 10.2.5.4
reports, 10.2.14
selecting for a page, 10.2.2.2
selecting theme default, 10.2.2.1
supported substitution strings, 10.1.11.5
unsubscribing to, 10.2.5.6
viewing for specific page, 10.2.5.2
viewing on Templates page, 10.2.5.1
viewing region position utilization, 10.2.5.5
viewing reports, 10.2.4
wizard defaults, 4.4.1.2.9
text, 6.7.3.3
text area, 6.7.3.3
text strings
translating, 16.4, 16.4.1, 16.4.2
theme
Themes page, 10.1.3.1
Theme attribute, 4.4.1.2.7
theme reports
class references, 10.1.11.4
files references, 10.1.11.3
supported substitution strings, 10.1.11.5
template counts, 10.1.11.2
templates in a theme, 10.1.11.1
themes
changing identification number (ID), 10.1.10
copying, 10.1.6
creating, 10.1.3
default templates, 10.1.2
deleting, 10.1.7
editing, 10.1.4
exporting, 10.1.9, 14.5.9
exporting with different ID, 10.1.10
importing, 10.1.9, 14.6.5
managing, 10.1
reports, 10.1.11
selecting page-level template, 10.2.2.1
switching, 10.1.5
Themes page, 10.1.1
Themes page, 10.1.3.1
accessing from Page Definition, 10.1.1
accessing from Shared Components, 10.1.1
toolbar, 5.5
translatable messages
defining, 16.4.1
translation, 16.1
applications, 16.1
dynamic, 16.5
dynamic text strings, 16.1.4.1
dynamic translations, 16.1.4.3
editing manually, 16.3.5
export options, 16.3.2.2.4
exporting text, 16.3.2
globalization support, 16.1
language identification, 16.1.1
mapping primary application ID, 16.3.1
mapping target application ID, 16.3.1
messages, 16.1.4.1, 16.1.4.2
region titles, 16.1.4.4
rules, 16.1.2, 16.1.2
seeding, 16.3.2
shortcuts, 16.1.4.1, 16.1.4.1
steps, 16.3
templates, 16.1.4.5
translatable components, 16.1.4
translation file, 16.3.2.2
understanding, 16.3
understanding application rendering, 16.1.3
XLIFF, 16.3.2.2
XLIFF Target Elements, 16.3.2.2.3
translation file, 16.3.2.2
uploading and publishing, 16.3.4
tree
creating, 8.4
editing, 8.4.2
reports, 8.4.3
Trees page, 8.4.2
tree reports
History, 8.4.3
Utilization, 8.4.3
Trees page, 8.4.2

U

UDDI registry, 15.7.3
URL
publishing, 14.8
SSL-enabled, 9.6
syntax, 3.4
url
zero as session ID, 3.4.5
user identity
establishing, 13.4
verifying, 3.2.3
user interface
about, 1.1
controlling, 10
navigation options, 1.6
User Interface Defaults
importing, 14.6.6
user interface defaults, 6.1.2.2
column definition, 11.2
comparing, 11.3
exporting, 14.5.10
leveraging, 6.1.2.3
reports, 11.2.1.2
user roles
developer, 1.3

V

validations
about, 5.3.8
defining error messages, 5.3.8.2
making conditional, 5.3.8.3
When Button Pressed attribute, 3.6.2.20.3
Version attribute, 4.4.1.2.1
View list
configuring defaults, 4.2.1
Virtual Private Database attribute, 4.4.2.2.6

W

Web service process
editing a process, 15.7.10
mapping input parameters to static values, 15.7.10
Web service reference, 15.7.1
creating, 15.7.3
creating forms, 15.7.8
creating forms and reports, 15.7.7
creating manually, 15.7.3.3, 15.7.6
invoking as a process, 15.7.9
searching UDDI registry, 15.7.3.1
specifying WSDL, 15.7.3.2
viewing a history, 15.7.11
Web Service Reference Page, 15.7.1.1
Web services, 15.7
problems, 13.1.8
specifying proxy server address, 15.7.1.2
SSL enabled, 15.7.2
utilizing, 15.7.1
Web Services References page, 15.7.1.1
Wizard Report, 7.1.1
wizards
Create Page, 6.2.1
creating a branch, 8.6
creating a breadcrumb, 8.3.2.2
creating a button, 7.5.2
creating a calendar, 7.3
creating a chart, 7.4
creating a list, 8.2.1
creating a LOV, 7.6.1
creating a new component, 6.2.4, 7.10.2.3
creating a page computation, 5.3.7.1, 15.7.9
creating a page process, 5.3.9.1
creating a region, 9.3.4
creating an application, 6.1, 6.1.1
creating navigation bar entry, 8.5.2
creating reports, 7.1.1
creating validations, 5.3.8.1, 7.2.5.1
workspace
logging in, 1.4.3.2
logging out, 1.4.3.5
requesting, 1.4.3.1
Workspace administrator, 1.3
Workspace home page
about, 1.5
Links list, 1.5
Migrations, 1.5
Workspace Schemas list, 1.5
workspace themes
adding, 10.1.8.1
deleting, 10.1.8.2
exporting, 10.1.8.4
managing, 10.1.8
modifying, 10.1.8.3
WSDL document, 15.7.1

X

XLIFF, 16.3.2.2
applying, 16.3.4.2
deleting an uploaded document, 16.3.4.3
Target Elements, 16.3.2.2.3
uploading, 16.3.4.1
uploading and publishing, 16.3.4
PK^Gc%t tPK6(AOEBPS/condition.htmw Available Conditions

A Available Conditions

A condition is a small unit of logic that helps you control the display of regions, items, buttons, and tabs as well execute processes, computations and validations. When you apply a condition to a control or component, the condition is evaluated. Whether a condition passes or fails determines whether a control or component displays, or page processing executes.

You can specify conditions by selecting a condition type when you create the control (region, button, or item) or component (tab, list, or navigation bar), or by making a selection under the Condition attribute.

Conditions in Application Builder

Table A-1 describes many Application Builder conditions. To view a complete listing of all available conditions for a given control or component, click the View icon to the right of the Condition Type list. Shortcuts to common selections appear directly beneath the Type list. If your condition requires an expression, type it in the appropriate field.

Table A-1 describes the conditions available in Application Builder.

Table A-1 Available Conditions

ConditionDescription

Always

Always returns true. Used primarily for the read-only conditions of a page item

Current Language != Expression 1

Verifies the language setting in which the client browser is not currently running. Evaluates to true if the current language is contained within the string entered in Expression 1.

Current Language = Expression

Verifies the language setting in which the client browser is currently running. Evaluates to true if the current language matches the value entered in Expression 1.

Current Language is contained within Expression 1

Determines whether the browser current language is contained within a string. Evaluates to true if the current language matches the string entered in Expression 1.

For example, to check if the current language is either en-US or en-GB, choose this condition and enter the following string in Expression 1:

en-us,en-gb

Current Language is not contained within Expression 1

Verifies the application's current language is not contained within a specified string. Evaluates to true if the current language is not contained within the string entered in Expression 1.

Current page != Expression 1

Evaluates to true if the current page does not equal the page you specify in Expression 1.

Current Page != Page Submitted (this page was not the page posted)

Determines if the specified page was not posted. Evaluates to true if the current page does not match the value entered in Expression 1.

Current page = Expression 1

Evaluates to true if the current page equals the page you specify in Expression 1.

Current Page = Page Submitted (this page was posted)

Verifies the whether the specified page was posted. Evaluates to true if the current page matches the value entered in Expression 1.

Current Page is contained within Expression 1 (comma-delimited list of pages)

Verifies if the current page is part of the list of pages you specify in Expression 1. To check if the current page is in either page 1, 2, 3 or 4, select this condition type and enter the following string in Expression 1:

1,2,3,4

Current page is in Printer Friendly mode

Only displays certain page control or components when the user has selected printer friendly mode. If the current page is in printer friendly mode, then the condition evaluates to true. Use f?p syntax to specify printer friendly mode.

Current page is not in Printer Friendly mode

Hides page controls or components when printer friendly mode is selected. Use f?p syntax to specify printer friendly mode.

See Also: "Using f?p Syntax to Link Pages" for information about f?p syntax

Current Page not in Expression 1 (comma-delimited list of pages)

Verifies if the current page is not part of the comma-separated list of pages specified in Expression 1.

Exists (SQL query returns at least one row)

This condition is expressed as a SQL query. If the query returns at least one row then the condition evaluates as true. For example:

select 1 from emp where deptno = :P101_DEPTNO

This example references item P101_DEPTNO as a bind variable. You can use bind variables a within an application processes and SQL query regions to reference item session state. If one or more employees are in the department identified by the value of P101_DEPTNO then the condition evaluates as true.

See Also: "About Bind Variable Syntax" for information about bind variables

Never

This condition type is hard wired to always fail. It is useful in temporarily preventing controls or components (such as regions, buttons, or items) from being rendered on a page, or to prevent processes, computations and validations from running.

NOT Exists (SQL query returns no rows)

This condition is expressed as a SQL query. If the query does not return any rows, it evaluates as true.

PLSQL Expression

A PL/SQL expression is any expression in valid PL/SQL syntax that evaluates to true or false. For example:

nvl(:MY_FLOW_ITEM,'NO') = 'YES'

If the value of MY_FLOW_ITEM is YES then the condition evaluates as true. Otherwise it evaluates as false.

PLSQL Function Body returning a Boolean

The body of a PL/SQL function that returns true or false. For example:

BEGIN
IF :P1_DAY = 'MONDAY' THEN
    RETURN TRUE;
ELSE
    RETURN FALSE;
END IF;
END;

Request != Expression 1

REQUEST is an internal attribute that tracks how a page is submitted. By default, when a page is submitted, the value of the application attribute REQUEST is set according the name of the object that caused the page to be submitted. For a regular button, REQUEST is set as the name of the button (such as CANCEL or SAVE) not the label of the button. You can also set request using f?p syntax.

For example, the event could be when a user clicks a button or selects a tab menu. Depending upon the event, you can perform different operations by referencing the value of the REQUEST application attribute.

This condition evaluates as true if REQUEST does not equal the value entered in Expression 1.

See Also: "Understanding URL Syntax", "REQUEST", and "Understanding the Relationship Between Button Names and REQUEST"

Request = Expression 1

This condition is the opposite of Request != Expression 1.

This condition evaluates as true if REQUEST equals the value entered in Expression 1. From PL/SQL you can also reference the application attribute using the following syntax:

V('REQUEST')

See Also: "Understanding URL Syntax", "REQUEST", and "Understanding the Relationship Between Button Names and REQUEST"

Request is contained within Expression 1

REQUEST is an internal application attribute that tracks of how a page is submitted. By default, when a page is submitted, the value of REQUEST is set according to the event that caused the page to be submitted. For example, the event could be when a user clicks a button or selects a tab. Depending upon the event, you can perform different operations by referencing the value of the REQUEST application attribute.

Use this condition to specify a list of allowed requests (such as SAVE or UPDATE) in Expression 1. The condition evaluates to true if the value of REQUEST is contained in the list.

See Also: "REQUEST", and "Understanding the Relationship Between Button Names and REQUEST"

Request is not contained within Expression 1

This condition is the opposite of Request is contained within Expression 1. Evaluates to true if the value of the REQUEST is not contained within Expression 1.

See Also: "REQUEST", and "Understanding the Relationship Between Button Names and REQUEST"

SQL Expression

SQL Expressions are evaluated as a WHERE clause in a SQL statement. For example suppose your expression is :MY_ITEM = 'ABC'.

The Application Express engine processes the following:

select 1 from dual where :MY_ITEM = 'ABC'

This condition evaluates to true if a row is returned.

SQL Reports (OK to show the back button)

Use this condition for reports having pagination. It automatically determines when it is appropriate to include a button that pages back in the result set.

SQL Reports (OK to show the forward button)

Use this condition for reports having pagination. It automatically determines when it is appropriate to include a button that pages forward in the result set.

Text in Expression 1 != Expression 2 (includes &ITEM substitutions)

Use this expression to compare two expressions containing strings. Either expression may contain references to session state using &MY_ITEM syntax.

See Also: "Understanding Substitution Strings" for information about &MY_ITEM syntax

Text in Expression 1 = Expression 2 (includes &ITEM substitutions)

This condition is the opposite of Text in Expression 1 != Expression 2 (includes &ITEM substitutions). Compares two expressions containing strings. Either expression may contain references to session state using the &ITEM. syntax.

To check if the item F100_P2_DAY_DATE equals "Wednesday", select this condition enter the following in Expression 1 and Expression 2:

  • Expression 1: F100_P2_DAY_DATE

  • Expression 2: Wednesday

See Also: "Understanding Substitution Strings" for information about &MY_ITEM syntax

User is authenticated (not public)

Verifies whether the current user was authenticated using one of the built-in authentication schemes or a custom authentication scheme.

See Also: "Establishing User Identity Through Authentication" for information about authentication

User is the public user (user has not authenticated)

The public user is defined as an application attribute. To set the public user for a specific application, navigate to the Application Builder home page and click the edit link corresponding to your application.

A public user is a user used for multiple users. Sometimes applications have pages that are public and thus require authentication and log in. This condition returns true if the user is the public user (that is, the user is authenticated as themselves or some other user not equal to the public user identified in the application attribute Public User.

See Also: "Authentication" for information about Public User

Value of Item in Expression 1 != zero

Verifies if the value of the item in Expression 1 does not equal zero.

Value of item in Expression 1 = Expression 2

Compares the value of an item with a specific string. Comparisons using this condition are case-sensitive.

For example, to verify whether the value of an item F100_P2_WORD is contained within the string "the quick brown fox", enter the following in the Expression 1 and Expression 2 fields:

  • Expression 1: F100_P2_WORD

  • Expression 2: the quick brown fox

Value of Item in Expression 1 = zero

Verifies if the value of the item in Expression 1 does equal zero.

Value of item in Expression 1 contains no spaces

Evaluate to true if the value of the item specified in Expression 1 contains no spaces.

Value of Item in Expression 1 is alphanumeric

Evaluates to true when the string in Expression 1 contains only alphanumeric characters.

Value of Item in Expression 1 is contained within colon-delimited list in Expression 2

Use this condition type to check whether a certain string is contained within the value of a session state item. Verifies whether the string specified in Expression 1 is contained in the value of the item specified in Expression 2.

Value of Item in Expression 1 is NOT contained within colon-delimited list in Expression 2

Evaluates to true when the value specified in Expression 1 contains a string that lists elements delimited by colons.

To check if the item P1_TODAY is either "Monday", "Tuesday", or "Wednesday", select this condition and enter the following in Expression 1 and Expression 2:

  • Expression 1: P1_TODAY

  • Expression 2: Monday: Tuesday:Wednesday

Value of Item in Expression 1 is NOT NULL

In Expression 1, enter the name (uppercase) of the application or page item. Evaluates as true, if the current cache value of the item is not null and has a value. If not, the condition evaluates as false.

Value of Item in Expression 1 is NULL

Evaluates as true if the item in Expression 1 has no value.

Value of Item in Expression 1 is NULL or zero

Evaluates as true if the item in Expression is either NULL or zero.

Value of item in Expression 1 is numeric

Evaluates to true if the value of the Item in Expression 1 is numeric.

Value of user preference in Expression 1 != Expression 2

This condition is the opposite of Value of user preference in Expression 1 = Expression 2. Evaluates to true if the name of the user preference specified in Expression 1 is not equal to the string in Expression 2.

Value of user preference in Expression 1 = Expression 2

Verifies the value of a user preferences. Evaluates to true if the name of the user preference specified in Expression 1 is equal to the string in Expression 2.

When any item in comma-delimited list of items has changed

Evaluates to true when the value of any nonnull session state item in the list of items specified in Expression 1 has changed.

When any item in comma-delimited list of pages has changed

Evaluates to true when the value of any nonnull session state item in the list of pages specified in Expression 1 has changed.

When any item in current application has changed

This condition passes when the value of any nonnull session state item in the current application has changed.

When any item in current page has changed

Evaluate to true when the value of any nonnull session state item in the current page has changed.

When any item in current session has changed

Evaluates to true when the value of any nonnull session state item in the current session has changed.

When cgi_env DAD_NAME != Expression 1

This condition is the opposite of When cgi_env DAD_NAME = Expression 1.

Checks for the data access descriptor (DAD) that is being used in the URL to call the current page in the application and compares it to Expression 1. Evaluate to true, when the DAD is not the same as Expression 1.

When cgi_env DAD_NAME = Expression 1

Checks for the data access descriptor (DAD) that is being used in the URL to call the current page in the application and compares it to Expression 1. Evaluate to true, when the DAD is the same as Expression 1.

When cgi_env HTTP_HOST != Expression 1

This condition is the opposite of When cgi_env HTTP_HOST = Expression 1.

Checks for the value of the common gateway interface (CGI) environment variable HTTP_HOST that is the value returned by owa_util.get_cgi_env ('HTTP_HOST'). Evaluate to true, when this value is not equal to the string in Expression 1.

When cgi_env HTTP_HOST = Expression 1

Checks for the value of the common gateway interface (CGI) environment variable HTTP_HOST that is the value returned by owa_util.get_cgi_env ('HTTP_HOST'). Evaluate to true, when this value is equal to the string in Expression 1.

When cgi_env SERVER_NAME != Expression 1

This condition is the opposite of When cgi_env SERVER_NAME = Expression 1.

This condition checks for the value of the common gateway interface (CGI) environment variable SERVER_NAME, that is the value returned by owa_util.get_cgi_env ('SERVER_NAME'). Evaluate to true, when this value is not equal to the string in Expression 1.

When cgi_env SERVER_NAME = Expression 1

This condition checks for the value of the common gateway interface (CGI) environment variable SERVER_NAME, that is the value returned by owa_util.get_cgi_env ('SERVER_NAME'). Evaluate to true, when this value is equal to the string in Expression 1.


PK͑xwPK6(AOEBPS/img/query_finder.gif7GIF87av|~|<tN|lԔt~tdLrĴLnl̴¬tzt̴ƼĬ||´tt쬺μʼttdnd||||LbܜܬԔ䤶܄̼Ĵ܌|T~섚¼d|Ԭdd\\llll,vH*\ȰÇ#JHŋ3jȱǏ C ɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѢ*]ʴӧPJJժIjʵׯ`Ê$ٳhӪ]˶ۭYF@ݻx;ܽ [Èi8c~KFxfɘVy9淠)AX/S^ͺkԧ),}۸c6] N|1i^Μ䦛K9LԳ߶vC9`z_Ͼ٧GCw߿~~'ˀh& S.V(}Er_-I~x߄$gx,TN Ԃb#K1H#6X ) B̍-LF$,))eNV e-e"Kdyfi@iB&eIb|g砄iR($Mi^aڨ+:Tiq)1&`){ ߨᚢZ^i*ҬȒʟ)1kZ~F5M{ {ì-:Kj SJުv.^ڬlSoJ, ԰V\E-A-{F0*} 2%[r(o+I@:Ϫ` G&L83J.0G-33lS'M ]ۚ-x1×fJ|sxŤ /F_9п s^d-8U;J/zٲΟ'%?Nתm.7N<`v 8N!@/iN}a/0us硣y.7N~GtSO2WюqTJ7pMd^t21ldRWq[_ރ)*AR&-iXN7#!gX;n۠ ir6cZg::1ԏ(*d|zII,[ 9B C!ب72}m<LuCZxb)=iPK" b2dGJ&1/xG)1-o%HfB N$h aY?O[4i~ !H5˟!yyL(6-JȇE`RG:HqJRu)RRT5z&Qh4%i$&*SRWJ: UN}*=ZtDLyS$Tֱ*gKMTVUnPWU\ZjgU=i_THz` kNS#duWYӤٿr ,{ȺliMSҺ% 4Tͭnw pKMr:ЍtK]'b xKMz|Kͯ~_\'/N;<~'{ GLV:)4^ lJL8α)❌fn{7P;ԡH"&;P -XX2/.gY&{|Ѭ8-j[iE*rxγ>πMBЈNh3}&Ҙδ7[0\B^oZ W:*^!TFw-8+` Yd;j^$.׻R 'La)H=a];k }U\"DX'ja +Vpf;Lz6[: hrma7mKH$rD! V(ɫD`AD r@[@*PN n;QOaܿ{Nu$/ ">1a "H]9ϫΒ/h&08x'`::;8DD[A '[MxGz a r/o 0ހ"@J8HR>oO@ӻfXUN$[>/k{_~O~>b.>JZ^@`n@!C0|7Fq| ^h^ϗ'u8@ 7}ٷy7~w~;z^y'^7{|e{||X@xȃ:H6 ؀(Hr{rWǁ(*~ztw%!׆EePgGIE؃ CH~h؃DȄErQ'21g{4Dž煟Xd0c8Gh^!@ },8zq{|8x~|؋:xE@xY}}dd*X+Xߘ@Vx^hkGPPwg}ʸ8X2q }OHF`x2#਎^fXuh^]>!" eqxz=ٓ9. Ȑ>9+qPFR)(oi^5~&I舒Xp@^ o0&@u`wyzP:Ɉx48Iivؐ-yQ9T)o`pY]5"bd|൒Tגl1p :PLxᥐ)9CiGȇ|ȷ97AaRyU[")*^5WhI%l$n`:ct!c"&雎^ X^|}Tak :X@hɝ]s ^6ifph i4)|i^ ^7SZ90jީgy w^ ] >8**QwT`)` bpJ-1ZHs7:MNPR0:IbZ VBAUVUY [xz|ʧZ : r>?A 8ƦhGjC@EpzoFGТH:ZJJLgjk1204@VbŨ 'i5`7ʺڬκ9;Jի#@%`'P iz蚮꺮ڮhh)i- Z|J^` Rְv{jWy(Pp (*,_q/[@0-:B=Dͼ@]HJGNPMT]V3 Z\^`b=d]f l=3pr=t`o]xz{}|׀؂Ͳ~=؆}؈$V؊؎ؐ_ٔ]ٖ}0٘V%E٨_^ڧ]F۸^ټ` ^^^=]M_=ɭ"}^ _ܡ"ƽݥ^-ޝ -^}ܩ]+ -ۮ=^ߨ=]M >^}N#}-M*+%~>?N.>3.:<>6"н>E"'^0GPU.[~O`0~ t>9CW~>$^RN冾ZH29Gf}I&>nBPNl.h鄞&|ۗ>綾\/Hnn1鵞8~^m.˞nN׾^>T=>ެV(-]^nĞN>㓎>K_^`߰]VObrNW vf.0 2_6E8<:@BoN뾝^eL#'aD_S~!`߽YQcRo_Uo `Nߡ_N^]q̎Nhn_ .ns_eozn7n ^폮土繮.Ԏ,^_Oxjm2ߊ_N~t_ټo镎~$?_ꪏ棞1 ,HPB  xQF=~RH%MD B+ |p%Øb"%K?6VnR$*Zri>5є苣Foz"C 8UR+|$8:M25DzEbf i/\""Yn*>ԎiRDL)Ġ YvӬHOu,QTòu&l% Tӡ(m"WF{m`?ݴhHE:M'EiJdRԥ/MKa:S4m iNg8+&~K2LRNFdR_+*Stt#S>ԁ!i50cZX&80ԟToPUeeWQT zp@H+MD_)2O>-Tu$Pg␾`ьC0a9X%j^A3Fgq@V.VuAJ1Y1KhIeH58mKqˆ[e#+\˸3N*VLbmyI)_BZ$Peϊ}{ԧzr.+E2d)۰pS6v`s6]p۲1"g:VEi ca^xQr.E7\9:f+-Tѱ|{\k8弧>ܳ~ʕlN#U/liWId7ZBnr-"@սnvw=ozwo~x>pGx.!4x%>qWx5qwyE>r'GyUr{/Wa>sV˜7?q6?ρ>t, j 6&Yj|kdֵ,z-j,fdB#fTc<6nD;3D5N|EݒaiuPGUɶV<1|!JO$! Zb;&+ekLPӗOhOzSsȚz=gZ% y/>GӰGv3~-ĞT?OQN_f/?R4,)jS@bӊ*B ,=G4#J؞_c* T:+R> ?l@1*0z:, s\zuY1*y+ZqA"m "Aꚝrq*{C \1IC^T°;NS$lP21T*d>D%ri-.E<,E{+앞R* dhHc/ mG#pT*S2l{,FH h#>JJȕTdɗ<əl=ɛ%aFH =G!DHNtB&H'0|H4J`R@\R:$B;r٫ŜrJ, FA$B$BqD?x:4TDQ<̢Q,+@4F`, ,4Le"ҙB&r$ҪeJHRkp%J{&M˜0 1&NL=2栫d:+%~ <,жߓTar8m)ɚR]MC1=ZWFZQ 3A-ɳYR^2G=RGr3e%)E-"V*VCXLLklmq! dG¡P%gEC0hEEU4s Q%JEI|K;D122+It. N*LM*Xυ`l wbT#K-WP̄U=rBf,6!T)QcT$PpX]T;IJ&Elz.\WW!A;ZTguмK[UεeMr+JKY ǁYKy+Q %[]hپ؍fuT=XUU]0 ZMȬC'qXu``h `K?3MUCSMOYm ߴW%۩n[PtH_POQ`YYg [I?cDs<-|!a[C(ެR&>V7"5R2n}松օڍwY5Y $a&D/\^CF⎭36B<[aSӽ.NcE_Fb~td31'05 ,?;-$6<\,W1ܽBM2\S&m]JXV%LbĊS-%YH:T\l۳$\>1&cJneiYKN||~^!~e~肎ߏşF0OkŃZb-AAwX`t6]襻Lv%a iǔ=6ΨAhlF V읓lK,@o;VLe0-iʟmHh[i[.NUd"-\+[ dL%\;-ݧfj:e̎g ؖ4 VƕCb_K;j .k>k6*R#4Eh3&4.2V$XV}jd-NKLk6.\`[v~؍s"+=fmU%V؃Ga;;(VKFMA D[  YVX}6 c{n ~N9ٺPJ"ԝl\J;2u~ſ=Of/kpr4(6UpTMq4.7 7_Vim* l|>UN֞;od{m]Im5\d2SoRfKE;j'Oʜlr#tm/m"]@mW r.'Ȃr趻bsCme<9/oX?βn#(0 B.h!Â*X0B/ZHbD"CzƇQQʒ)+:TbƇM'ОhA2m)ԨRRj˜1!Fjeɮ4C~5rY@Պ dǚp~u"۱'ˎlM=JTĊ3nU R2O0ksg$ 7ʪKϜyVʚao~ Y1aH7*ID(?׏'I4yu,w[Yf 'o> U|| x *x_M5 T &!.x_]!z!!Xx")"-.V"o.8#5x~0#=#$Ef\1gKKvWDrygVvQWj !\` ِcI$ih]ΥOSda+yy&Te:(y%|W= ڝY}y$^ac5m &hVܤխGД>)NPZg*)+'sfw[*]YK"!v:v8,zƹҲ$s~;'R+^ZĭV8mr&%kɞ֯j.s1Gx$=ye]m趷jt^2Y+7pSl1L)ڗ9;sAs\S:F!>+3B En:=5U[-$x5]{,_=67]6i uwNgVr%K .k'#mCGEG*A+mhM5ITDc1_xs۪drj%DM޵#o[鋻yon_w{n _;t߻Գjy|Sί^Q=+/8exqv,+501`F-'lʄ.eEiA_JkSD) g-P2:?EqY3PO.AwK3ۘ޷IY gre;(7Lh@jɊ" E8 Qj&Q⁜?' `Kh|PDӹX&7Obb &r}jI6rv 4Uh #n;4=-:ST;Vp11Q\݀gCp}^f&?|p%$sqkD7"J:Ҏ9%*1HO8NrD`M})Ё*,(Bt}: ѱ5zEc]D bs]R|!tnVLaΦmf$px,*{><\%aTJZQW$ޟ\Rmqsc# JVr2|'V,%,J`"hVMʆO qʯuWZ* :j̅e=-916"oI k:D ZB1I9F{r&XNq,WF3Jtr'UK^'5ܯղ#,j˸UN6{@ڶkT*Vq5PqK(YZSk4,S JWΥ!*3W)(SM;ue|m*i ^i% sӞGJz9(,~1[Ӹl۰sx4Ƹ9.emQD9D$>X*]bf[PvtVy+JdN gLMU+ /X}dkܧtuSCK:S٠kf34ޞzu+ -gNvO|+Z=!!!ơ!֡!!!  "!!R,"#6#>"$F$N"%V%^"&f&n"'v'~"(("))"*")!̇QĢ,"-֢-".."//"00#11#2&2.#363>#4Fc@;PK-&y77PK6(AOEBPS/img/bldr_hm_nav.gif,GIF87a:̼Ĕ|ܜƴ|||~|μԼʴtt||$V>tN|l􄞴Ԕt~tdLrĴLnl̴¬tzt̴ƼĬ||´ttμdfdʼttdnd||||LbܜܬԔ䤶܄̼Ĵ܌|T~섚¼d|,:H*\ȰÇ#JHŋ3jȱǏ C1ɓ(S\ɲ˗0cʜI͛8sɳϟ@ Jѣ@"]ʴӧPJJիXc*ʵׯ`ÊKӭfӪ]˶۷p͢Kݻx;w߿ /È+^XƐ#KLyʘ3kΠCM:ҨS^-s M۸sͻ Nȓ+_μs-XABhνOӫ_Ͼ˟O@(h&^}G Vhf"v5% @,0 5 db1v2iH& \PB˔TVe~G#T$ȗ`)dih~Ślp)rD4׈YC,1 Q)H``6裐F*餔Vj饘2*`v駞^ꨘ~Pªp"XS42+kl &ܐ ,A:*"J'5`P +>RYfFrunwW+=J+}vwkSIn1;ә+'A(2 tR)\.g֗n`Tb%]tq!Aa2p@ nlT(p`hK \'HA̠)xA n  zCP$8#"G 8a|'s;9z6A$G ?O;A"px*|IDqD5"@2FeDXF:PK+HG3a4摌w IH2фH\yЄbI`D\A†PPRdQŕ%J"! C╁?l<+ )yV2|wƸ@ҍ~{` IGc2l>Nl{7^lKXۘ;ٚ3;`^|* w$O԰ AT}m[>JN02f-}'fq[ z( _({}IwlPQr؀a]gx~!Y ph: wIS{GW?Ka(hp+؂}r1rF7y@`9h:LNPn-USR KSwU`.8[QPZ|tRmrEE8fpr8tXgF8";=!!H\(J@؈&s2@0/x X؈@w&@E8XhG& I8Xx,*@+.P/ RqC9m.1 3ڸ؍H5`7$p긎؎836p@!r) ِ9*  r,b'ЊN($Y&y(*,݆4!@`$:<ٓ=T9TYVyF1J Ifyh0[10$᧖vyxm!PYy}!#9Yyљ/9yٚ9yTYƙyʹ̩ZٜҙY)yI9Yy虞깞;PKo1,PK6(AOEBPS/img/arch.gif/nGIF89a忿@@@\\\ٸnnntttuuuyyy޽___eee999ɶ888)))̙ӟmmmvvv 󕕕///kkk^^^333111ppp???ooosss}}}jjjhhhǾzzzTTT;;;```444|||lll +++fff III777 aaa:::<<<>>>XXXEEE!!!wwwgggZZZrrrHHH###%%%DDD***AAAxxxdddCCCLLL---[[[BBB666000FFF===OOOcccVVV,,, 222bbb~~~"""WWWȰ$$$...KKK555MMMYYYʛGGG&&&PPP'''RRR(((iiiUUUqqq JJJ]]]SSSQQQNNN{{{!, H*\ȰÇ.Gŋ3jX &R|B=1yjMě8sɳϟ@ }(ѣH=,J$J*YO&MCjʵׯ`l׊ٳhӪ]vm6XF`@CUR@T-zM}!B@ FbK˘3h@W%{M EvF-tɬc˞M;=]ͻ޷&“+_~9xϊ;)2N:p?nGŁ˛>=Gzɫߟ_'C_N { F8[VHځ7e}* $$h5,vh4j"D*r{# ڄ5iN7dfܑPFPIi啸Q\ve`ۗbi&kd2'l f -YCt"@v)huin^z_@*rt޷ &q\nA菏t* $.i4D4cENEͮh>")Y+R3@Bg EJ#?Z ?EЁAYZAhMO`#JRp  ,H(&cK$s61s>1,!2:RDC2QV "!.8q3I "Dl u AE+6(%Q c4#U! ft"S8ZI.Y0UC ȁmh `XaPt7$ErBH >jQ+ae0P +!"r^mC)L֗~E_1 \D2>XF ;@BpC+@kF @ 0L!p> x 25 !V03l0դ};_Pw4eD0p _;A.Fnȷ/9?_CW>qȆ7x kg{9gT`% PD EKAB\hXDFCYpatl7q&x%dfn0e p2pxF3y@X@Ͱ` ~Іc'Px`dr& @`ޢ`B8( ߗDDP Qg@ hVhh@ |P~;7P *@DXv|O  [/p'*X2g~~F$`xP F h56~,xWiYkX e ]@r ɐFhv T7HM)Z@. R8qpPڸ8 ww~%K` A،Xr&`Q x PR`u xD7 @M Xhȅ4Va Y 'gq+h3' h% @i8i b`QU@FͶ/9T' z0u@ T|<b{  p< ~`Cjpm ` L!0Uw,N| H  8w C ,$IyM&$ 8 0Y]К9Y Pyb~D)ٙMRI9 ˀ2%0 Pyؙٝ[d$rNlF.1.M瘎ʉ# 7p :Zz  ђ'%!@`0 @ @P<`0qA ,ڢ:= s79W4 8^Рw bf>ɟ)N 2YxP£QR @wwp}P>`* GНvzw>GR:28qz()%^*p}`K0dZPPק 3ЦL f7Z@~Z5F\NTP 00T |0@pʦ|nTGA ЧV TpCz@3LsYqJѫP@=M@pP( :aV'ڤ az@Q@ {0 P0/`, \=hP 1a qB N9 2  ;ЁR  @{  +xk$k(*kp/[Nn`wP ǀ (]w\0@N[AV.p~` @_ &`xȊP Pb1r pW+qv{{*+{'^E[ AEpNp@@ ~`{Pw PGyyh@-p}G pXUP[>t˼y0 m1$\&@ e0M;ʳ0I p<>L($諾 p}JW`( : 6`O lp>б"==r| c1,3O`_;0ڽĉnj`נ plù7pT]7}-7ɡp Py C0ʮ b f`js00  v. @{o1`ippf!sm2ڪM gCt46J[9 T>dP; ܝ ~F0j N2n^5L:;n e?\ HnH.i"@һ| Pup#ӋK>4|ȟ G2H`M.5~GA DPtP z N4zn% /Q.5mp 7}f! ?|[DbG߮=#?Pz^x_``0Gqo?wqoNۥwN?M :NP p ^l/Coڛ9!y!P:3 Q FĬ ~X,.^ @޼QIOJ+9MP x0 MD0 ? 7U W`65D[ V.Ҍ?.q:zQAa5 ͚=}Th( ЃMG4bTU^JuAMYn8# (cŋ8(HqA h! ТB9aSf|t+p)njQ T p b٦)M"'d0"LZR$IJXm2̞߾ZCݿZhҥTs!oOʟK,BK-܂K.K/L0 C{l*?nF$1:,45>qAJN;#7p EF &&2Ƀ#́@ B$%d V %L%0hßd8iËrҠ{n@ 80zH# 1RRإ͚#1п*무j뭸뮼+06t)IDQMQMa[)"1C?T*-)&kሂK# \2C' RȤO&@<@J&&8Ɵ' Y:g(>M O{XjSTUVY'\36 f23ϒBf ZxgmI C(SWK``_DQ {H0MZ$&V*o(xX )2bPf ?$"XBI*`4Z ҀĽcGJzw1 8r䏞d9. 8zD 8"JoTdWUZ+a!AE%1zR^{*/TB%p !85$*COʠ#AlGԐ~*QA:x (F*(AT!HP /n(VPDd 38#OK q(:!0cG H=:|}G?40(70|vOxī񐧼0#ϋ^wm{GƧ AZъBHk=GP+@4&x G"X ĂĠ&DZA,qjx(@|1'}Q }4By2:JjY0A/yMBP1QdjXTU5Pc{ZU&"aM?"PdL%XtTH W!c?a.`(D@VR`I%!8##G1EDX%kpyP.0V\{*#]0C '(]q 9nTDgegʢO`pD :a(9V8/AQ$T #A% h.1e @2Q Uj)T%5VLBV%tKU=s*8 "^"o0ƌJЅR\]xKLNp` Ђ`PVjgŽ.z\9^~{%Fpa@@^1 D%8E@6h%hJE q8(ba5:X>;Гs7@SC㷔kڻ=!p(x.A^*jpPnb@;18` S#p)+Ap/Уl;/B;S6c;kpXx z1("n ȟ`pAh HpD;h[?# (1"04(ܶ2,-.d7;5>5O !-Y,ec'W0= `%5'(Iȅ1XpZptc@Q؁JlmnobE,@@.\ CxSqW'?Bk:>p~pD5xL PL QT7;;?x yʐˠG{PlǍHoLJ ={3􊈴 Jl3 ȞI L#`ɐ,ǭ;QLDŽDI,JHsɩ H(«lQHH[`M$Kw臧 ?/4EvdH,L6H4($Eh0  SPq&pX@@$0> )0L5p R\DžT6ʦ˽\  &HS''H8OL!yȃ' $O@'8L ,9Rx8x DX_X>(ă$G3O@RTGLI|\866, X"Hs h:)ޤ5[/9HH4 MCXlL5@N`O0cL>M$\Y$ȣ'076Xb0.h/( (jHތ2HKPw@dUP L,KҦ`ͯ4^6~8:<>@5DWxij]O9nopqhhP)bXjf7eEfa5 \ [`4VVb&vb(Yb,b.b0c23Fc5fc7c9c;c=c?0g  6钆MBl陦隶XG8$š.=Pl_b0#(e$hX&h)⃶ee.fFf/Qh&J Vn&_&lUpr-҃CH@  ɥւ\&~1 shYZNh\f]~^h`ahcc6N ޕXthU FVnSRhL2g-Czllb)4!X.F[^h]vhf&V1gv^㚊f0; 7>f":(Xp]ph@!nnK>G0PUhܭ-PdpkfwjVmk6kk[p%2e&m(XT1'sh, 8Zȅ?^-;e 8XhA.&o1o6؂^8@־o.>`]؆rd1% HMȂ1XpWXYZ[7C`|p8s@G=:PtYgC?3HRXv /u`8ծo~mAD`^(*hr NJ5|}~@0(3YT5E؆7HghvgW _z1K X4yP8[ha )=K>H.xh+8O@ӳXZ.pcꄤ(TЅvNԕ %*@ +h „ 2l!Ĉ9W?nDuqpHP$,Yp?Ll%̘2gҬiDGp)fF2I%2)"qD)ԨRRj?,h 6LAx b[3)JJrҭkBK7Z fM1 `` 2/̃8ar 50]H&ǚi* /ٺw.=6=DDڑX8J\ Sַs X"a 9jٲĎ>QqCf1 , (1.b0|=dvZxKb ܂4 ӀGE!-8 C@ Ҩݭ"=I)Ey$I* P F"TZhL)]e`P 0,+&9uy'yyCAi)*@'$< v F`5t:3IZ*jiJ|gJ J!$hJB*);PKf//PK6(A OEBPS/img/shared_comp_icon_2.gifXGIF87a|||ƴμʼ¬̴´䔪̌ƴԬƬ¬´ĔԜ||䔪llll,@ 0l8QXDa 5I G #P,9-h6)ʠ#!&B' s]uKE% !"E  ` oDbxEFwys͋  ȽFLgN  Xf0p`p%,!A;PKaq(YPK6(AOEBPS/img/ir_srch_col.gifR!GIF89ak9skkJ{!!1R91c99s99{9B9JBBBBJBB{BBJBJJBRJZRJcJJcRJcJkJJkJJRJRRsRRsZR{RRZJZZZZZcccZcccccckccccckkkkkZkkckkkkkkkkkkkskk{kkkkkkkkkkksssksssss{{{s{{{{{{{{{{{{{{{{ބ{{ތΌƄkkkkkkƔ֔ƌޔƜΔΜޜΥkkkkkkƥ޵kk{{ƭƵέlƽƽν޽ֽ֭޽ƔƔkƔ{ƭkƭΥΜ֭ޭk޵{޵޽ޭsƔΥޭΔ֭ޭ޵!, H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶[)ݻx˷߿ LÈ+^̸zZ̛˘3k̹ϠCMӨS^ͺװcsʲsͻ Uʈ+_μУ6^Unjo֬Yν>v<OI+OϿ(-Gz͂ 6M5ByɣyRYW0ka  mB!hJe"g "4h$9爦L'Az aT0l 2"DI'dg)Hԋe9R8 +dʙ̑?\j  Q3 !Zxc0$It ܑOݓ$zy %.2*楖A)ܤ!N6tfg$ gD$D" }D`Fp:e蕝"%0[W*B5aJOGd)Ԏ)jy3D phTc6 (|Eo6+i%2&,.YBa۳)Ŕ0n=xZ0+E0C/S ")Cnv٥\)gKl3@Kdb&c3@m?#qgf K޼Ҋy+H@ 4K5d72ㄭ9.|3d\,\ʧ*4Ûi{P=,椓nrF`3+a A-Ap@ARrF፝5Xs\8f9r"scN CN@4K?"9Yfn9 =i:a @C>@X'x3' 27e~ "NS,|=0|{WCũ >=耳Mbʀ %ҏi ~}sD%:LP\Zb)ԁ$:̌ w!H8zFA1BFYNE Jқ|}LzԻ?ꋒZʴ>Ͻu2OO~;ЏO[Ͼ{O*H"*8HO3d ~37(@ h XI8  ! $ P6x6x)-(3X&H\ׁHIPPPMMPMQ8w)\2#`Qx.AhWUȂH#Ȅ[8y5^8 YQA1 a j<8T I` @XA XxÆp(ȉTA P ȅUx b؊hx8ȄNZMp MP(ᘎ(8 Xh(OhNZ_ HM Q >H QRX 85 M(9ɍ\ x0[=9BB;9MɔxX۳B;D[F{HxRҴNPR;T[V{XZ\۵^`b;d[f{fTl۶npr;t[v{xz|۷~;[; ۸;[{۹;[+$ۺ;[{ۻ;[yʻۼЛV  {orȐ;[;kۼr@ҰK[뻽ʻ\  f P "< ,l$ *0&\p1Ll+ 7L4^/^@1.@LD:>$?^ DP>K I;8@ N~>d.B=~A/jLL0mjDPW@ne>g_FprPnPO@>kh nO|n45/.=$C.yly䲾cNCNN^N~^>lnlЎ>$w8㼮v>PĮ6?__ "?$__&*"O,0ONA%4:<>@B?D_FH+2NPR?T_VXZ\^`b?d_fhejnpr?t_vxOa|~?_?_Od{_Oj_^sf ʿ1AWG_1Kroi{H3=M7VAeCѡaF6u DP ӕa&5Ĩp ctcF6D#9 RL51vsÈ6kTP(yCT)A|.Leʎ<ӣV]r}z2؃QJS'؄ d5 @Έ)W^q% oFXă &`ȱ笖Pgn.)-&@ Y.=Y([ @hAխ_Snxi傗ʗ3(3kG?]pc. ]=w%Śc:qgM#RthD,S`xK6h ۮ=Xs $<0cDǞ*IȱCȪȊFs\q#vh!Աľh7qg2G~tlх]i6I\ȭxrtcM8cgl&{=sSO^lL -K'Es .  3JUWeUjEs!ࣨ4œJ<;#[㛱ԜXցnh15]؂dg$h& ->t ifX,s2VvBrd(w?- S<{2V-dc^6׃ĵXKO-,V7~5vY[{YtTn/%EW wҔ%edL3+Z81`'%& ig6h^G&o`ȶa~90m>Yme1&(`;Ɨ m$aTGO7UE5Pjv9*qj9YI1^t <9]d|9ԥ9x4j4\qDsށN~7v%̼oAwi>lAFg gV%,萢@dNbHՈi 2X@Úr.ꀦ9Ds/2Lr@g> DƲ%z(BA(H :Pe@ec'aM#D"=6+AŠWĢGD.vыa#/E2c(Š%o8G:zǮ4'6|lX1r d"HF6ґ^?2JVҒ|d&5INvғ^IRҔDBJVҕMVKZҖ,qK^җ]/9Lb&Df2Lf6әτf49MjVӚf6iLnvӛ 79Nr2Dg:չs"䒗:9Oz꥝aXO~ӟAYEh=ZáG>aЄVԢ\: Q^RiH}QD 4"EiJ_IR<%>MDy'sVL!D`; 3DȖ7$ITo4+S TJ,hiDӰX栋]]V$QSҔBT,wD]4=x- b<':Ӂny4yc ٚi?W &hA CǾBPIt%׼je [QuNO:xf[XAlTxmA!7|3[HP<G_ YU3iJ͝-:{(14095G%σT}5= m.w]tcK?D&5XZ gن7 [_3 2x-\ 4fOaM'N/~_u9រ]#Ʊ4|b`|npG"P"{q51w؈]^O e;u$2B@._bW58k7ZF-NVC<5ucsfX$Mߴ !^Ʉ8uWu8B%\knt邇յۋ]fǽxŸKݻ:!H7sY($\ٍ㵂C[+S1}uFJөo9۫Ջ_:[9]G"c+wLHU̽kC1_7{؅H yxHcJ}4!$9ύEqe!n*cDIԵuvq|'>4f4%'%{՞0o>wu{Yu{g?xG|x7|%?yW򗿼65yw}E?zҗMG}Uzַ}e?{}u{~?|G~|7χ~?}W~;PK?P-W!R!PK6(AOEBPS/img/item_finder.gif$GIF87aL|~|<<̼Ĕ|ܜƴ||μԼʴtt||$V>tN|lԔt~tdLrĴLnl̴¬tzt̴ƼĬ||DBD´tt쬺μdfdʼttdnd||||Lbܜ\^\TVTTRTܬԔ\Z\䤶܄̼Ĵ܌|T~섚¼d|dd\\llll,LH*\ȰÇ#JHŋ3jȱǏ Cr @ɓ(S\ɲ˗0cʜI͛8sɳϟ@ S ѣH*]ʴӧPJZ(իXjʵׯ`IZ KٳhӪ];sʝKݻrЄ߿zgKp2^qLŌ#+dꖧczBMӤ@YOװc˞M6m׫_ͻo۸YM8ງ_^̣vt7_AÈOC'O?=|(KH g{>.ha f(QN 1Bz("1K%vጁJ1Ҩ~6¨;f#?id7;dLdRh\7e"Qb(b Bf;fJci&p)nsR|Η'UǔGxt(ytܠGZ_"Di~HNZi} vҧ:|JkfJ_驨jJz+KSV1ᑷ袏>)A~gܢ ~~/뮭j+/t.I kpBkN Q'1ZlmJ n溰*_1$aj3lw' 6/D']+KJO2f<c{Iv\ifCM|_ÆYܲpx^ $߼ǹ " Q;ذ >' P>QIK`1621<(/DtZ G:PQC}XJp%sGe cH?ӵЊ8u@<U.hIxG\bݐHE&$2qvGE.zy $INp4G/~taX ?NVu*GYQ@ $QC$ E4 LjD:s05lgB5#IIY3g))Jy_*o]{)~u{('  |̵}^ \|XΗ} H%k`H%$x}؀gwX+-(^ yP~\7y'>yws7wuw7x@x]ϧ}7UWh|hه|YmPn(p(bmHbh[X%\h}*6 )(z|P8~)~=Ȉ~@ ]f׉Ed@KgXX|_|a8ЇhjXn @ЋtHxȅVHȂr|Pysȃ׈b0(G] yK8y@q͈db\878h)Է p èqqيȏׂ/B0X~b"B61i0vH{`-puxt`U}ّtxN᷂% b ø Z8($iCPx,Y.0y79b@8<\xٵM~0\\P9 }TYGRYɕ( tC'lychqQx 941i֗C@8YМٜi蓌y]n "0tPvpx@yoy)I퉐) !q$@{PǸ؅+ћ)|n^`\1ל8i)9Y` k.o 7 ؗh U) uZ$xivx(mu4_}YSp*Y1g=?k m`"`xU%} xp~Zyew{*rRcjVܨZ \)Ud@e`?p8asJeJ DsZ*ـJZ:Ȫb!j[; rʪիeq 2!T U@APǚ:*w_)]JKMOa䪭ĭjkHn nuH!SpTЗS`W𮊘۱ X`: :&=? @bkj^36Lw@B@;oDP E`JL۴N˴GI`nai],-0kv4;uvP204Pr;t[v;6p8U;zE! #@0eh;ng{rgkgѕ&ph;*V`PY\`e)d{bxnm׬ J$ `0P ; dXbi 1Z;{_׋GdZ{% P%ۿK&6\\| y\|ċ| "<&|(%,.,H2<4 &Ѣ8:<>@B)uuBUHnCGKEIS>[E9\@]=[@.]IeLnX/J.kh*N,^Cmns~bS~ZNjnzN2_]~]_m~n">nK綋e{N|cy>x;`>XMvQHi鷞^NN삮穎p ѵ笾n.>l^~+6^^P_Ne>N_~>O%͎}A~~n廞+ N)._?遞'<./dK nN7_5^]<dEc.CR\NP?XUOW^[]daUjlnu]4_8!=e֭| Km? -kmE*栯Y^Foaڞ]avg.ȯ _㵮ю]Zn~`o/M?6O9?ɮnA@  8PB >th@D\ĘQF=~RH%MD  TB5(̛w&SPEETRGyjӡԧAy6=JqVS~VXeCl!ԆTVT-[uśWR:qJ3.N{}jЫYƍ?\-F0܂:wٳaҥMF]f%9uDGƝ[/V\pō<>|1o͝xҜV\vxAwgZ[m˟Geݿ_>||#@ 0Ad 0BlB /%XG$DOD1EWdE_1FgFo1Gw,`C#$H#4G$4 2J)PI+srJ-r*,$L32L53߄3N\Ɣ3O=N?lS:>%O:Dt,|2UaIR\YE.cWg/טmMIdS]QoE;4ܲMSW7tt T]]eӚ6KlzM6+\*[TiڗW_[ ?PA3VjT_+:TmSteu]35 ׋3UC96 `M.]cYwyYb~YhY+zk-hr,_TY)XWLϾ3m6zH6l?RP¡p '7Mǫd7q?9GOGݽI_YoǝiW=>x'xGysH柇Gܯ^@M>{j|GH,}W㗿CuPfyl0-q±nԊa R,i2`eYsZl rgW>RH./t |ca @zA-j5l xDP[5+nݚRŘT[30Q!:0ЍjKѨCte8Gر'8" /ݤ"x*>691[t,ņ8ljت$m]S`ߊCo ː&˪0Ж4^Gg|lFY>汘Ŵ. q+G q(Uejknz/՚<^cDK Rll$6IuԼfܮRNK]$7#F-f|(K(>+(_BNXi5 ;MgJA *sd$iItP1ishjS 9eSZz:)Q%7K^T:UVժWE^S mիW'ѥbYͺVHIek\V*Jr+SJկQ^׿6>ɄZF< !ʉPReÔ!/}.b&R$ L/- &ȯ%V}$DUlj5m-NkҍCd7VE"wY-[eV1CVVʪ~NPNX(CV6Cho5 3I3g1rqaE8Es0aZ` b3QC7Bd1Zpi\087 [`F>0p`]"= XƦ=lvbN2d"NK-bOxTm^!<2]h f#3gmie9RQ&el-Ovg< +D>3fȊX9#}fAm΋6 4(9MiHSS I kTȇe_ R &7԰ )h]W>uskcsʆvql<;מʹ9]cUFwսpoMmkswz}o~ew;GxQ 'wP)pg;ZleAX>1Ҍ]sѥOɁUi]69!6"\u.BoHc93&y]9#o;4c.tlt{'qk}&ܰg K6k(v–,@ӎ"NXA0v l̔u dw.2$;gpz_ÙЍ03K]1Sw5eZ\-}s}ﯿSCs5muPYg|J'ZwiC~^ױ?Rmv[W8K>4 +33~C!#u i@{7ݸ@RloA"ĶLThcArTܫY1:I󸍱Ͳ(#$$NZP§ l3!ðjr3&(⫼BBSS2Σ.ƒO B"Tʢ0j;4D c64//w'=/3(18.;b5cDŚ8B D{b:r;+ۦ˂{Ô#5DT<̻Bړ8<,tC_=R]T03(Q3D4AR۽(5#mݳ*[@i?{'2p, qDF7T>&.Uƣ/$Ҵ'K A#3TAGG:' I{9 [+I̫IIɞdܪDʤTʥ$J J4<ʥJʪ$̩ʞJʯ,$˕2KB˴tKKi˹|KE˾<4Lj1!defΝB,ÐK(gDҤ%$`ݠ]r`_}03^9̷-ղ%t&}Wo3RZ}&H&<|`"߀F kg=% +j|)Z@ CCŊ 4(љ7޽M =Xy9r"WC,@`U縚 d;`ToZ>Z h;| [.;q i \Sqwh֐ vvzQWR5~|qQxw#xi9 . ޠL2Dr`uc l(XvHwv($ )@uqwu)%I'|cjNV,hu@w-@D WEE֖~q@%nj6_չG(!̠s)'Qq՚R |W$` t 죹QC$ Ed= ˀ2P+.br2cj;|;##K{+U"i:dpucFnovpꗛ y!Tkj%.ž\l[JL&l > .$ r^TK@.W]u:QkEu 6cr׳/m-t.C<Ā[+Sn &JYTsۨ8y""Q9lȨ cQ ލr 8` pU AnC7,d)iUpiG±:QqO_} IP 'c؀7W #sT (5wH /A * |b[rw}x@9Es٘O`&HCZp&! N`, AMЂ#|q&W*&JqM 5b.* dE X P&T`FhiDr(㜠x04(\Vؠpa1b\ 'E3b$^1cla 8*q{{x$&ɀkc[Ga]DE^xJ13dGI~<#)>q}:2f[sŝ &Wye0.Z9bNhEXγBS g*_vGj4Ѩn6q4;jOεZ\umUѬ}-LcҚv0y,C{fAFma7_g^4-Yܭvucg_95cx[Zq, v bpNscC2 'xFBϸ7{ 9 Y(OW0gN#ym@:qC HOҁN&zG<|߮?^^|̏=b@v2UCwu/߽l7Ѫ_={oo|zﱏ{3Ocڃ/f1(r_-mƶ}~g{旀~G~X bySk&}GnȖjzl%{$}#Ȁ귂)w{,{HcA| UiՅyw'f7|y՗}޷W(M|GyO8umnWl:}l&eTw/jv[n4&wlǃn\^dLGz؇׆凂8T|HpHn r؈WPq؉oXXx؉u 8X0؋ ;PK_Go j PK6(AOEBPS/img/ir_chart.gifP!GIF89ak19sBkkkkJJ{!!!R!c!!9!!)))k)))111111{19R9{99B9)9991BBJJJc{JJJ)JJRsRsR)RcR1RRZZZc9ZZZZccccc1c1cccckkkkkkkkkkkskskkskkk{kkkssscsksss{sks1sss{{k{{k{{{{{J{){{s9R!ތΌk!!kksck甜Z֔甜11RJk!sJ{Μ眥99BBcck9s)ss{!{BskkkkkքJJZZkkk{)Jεֽ֥εkkƽƽֽ֔ν))R!ZZkkƄ!ƔƔkޥ))s{΄!ΔkΔΜε99BBRZkssֽsRRRZckބތތޭc)Ƅޭ!)kk甔{{sスƔޭΔ!,H*\ȰÇ#JHŋ3jȱǏ CIɓ(SDz˗0cʜI͛8sɳϟ@ Jѣ3 "]ʴӧPJJ*OVjʵׯ`b KٳhӪ9v۷pʝ-ݻx+v ߿ lwÈk-ǐLʌ]̹g[nϨS^zG۸sl 5}kMxqޛM9dK9s{rp2Tr@^/x FeNso^0޻DLz/L;;l$}~I+G.GKy4H^EPy%&dM9M /8/wcKy7 dKK=(8tG3НX`钖 O-@ȑ k&d|OJMwS@Wbq`I w(K*j*h2)Uj (~rjZtW' "h]z~)vk\|ݫ\l4ޑ5௵_4 /![ݡA'R|kJw^0AݭH/<07pI\r'8+j]<\!@-D #+: ԧJMjZ%jz ӉMٺڪ۝ ܔMݍٍކ.G>e8/W3N{A_x#yCM^cG8PC 0bI%h߮xe9M>gsz꫷z_{ ǫκN;`t1P?y~waW8 ^7l4c]7uA J7ܵwgmBP!!ok`Aă ! cRQC/`GXBCs8gapڛ`( &p"KC*)@ OԀaX,nу_ cKcC`   2Č#4Dxw<(D s<|:D$f5z%EDR)/,,HkiB茉;ۙw׉!q^# [tO|]5A@ `/BFo ޘpW ˠ4. Jp^!搑`8s!l`˧sg t>v# B!t LZp7A'AD~b Eb7k;z3+m4v/t^9DK KGD,| zr7BP`}#H9)\#PI} %Wjٺc+_S;QQp'}7|q e&r#|G `U`m{ T#  `@ ާGtV%B$C=R{' 3Xu2 FTVp p}@|~ v^Bwt5P:|80P P @ n$fIS2C(8?`>~!˷=(n]#4%6.{13nY $uJҊo˺2p {LNƹݾ[i=zGq޹mkqF,z !K;޾K{3Lm웿簿M~cdžVdI b DV(ΣNhLug Ep_%2,ppqjEAyE|.ݍC O:u]pbm<\lcLiZm! oxIR!/8#,ʄч -9!\ʗ,Y<ʥ,L^ܘP?8_, ^/b?d|Vhl4pr?=Y2Az/vxXo}nOo̙N? R0!б)ю͐/oH6])Ofҫۢm[3;|.8S[CzS]U}_ @X-M֊jP1~ʕذƚvmݾW\uśW^ @ő3 Q`bwg 33-z'8Gz3h.K7U"@NFjg3J }e`Þ;6Z|G\rmHyĈE60w$SϲZ#tj͹=U>3{<΃ɷBk8s.B 'B &ÑCx{d7d56pqF\Є[B#D2I% Рlx ĉ#t鰒>B <| jWr!g#8;Gt{3%S)ŗ +Qrq%4RIj'F"3ѝ2`O13ԥ3sSM4_l&=iP\LD@e:: ETD$'Zk%2[[o7ܘuѴZue׹lV\y祷^rs#yv8ޭ6^{F8CeX~!8b%&Z8cpy'&u+bWf^M9%Q o9gwg:hYf6ffi#Ui꽢:kk;lVhF;m׶Yl&;I[nƻݸnEFڽo3n\sO)HH2Η>^mzTDKl7h/Qg!B/.ЌFDMdB:$X| FH/)da 9;SuC^Ո=> pD%..tK:@ZaQ2Qe7#->gUoE:˄ T4zP IT&UQNݓI"Xß֨NS{Gy+QB] 9JҐ NQ xW܌lE _i J-(]u:R\W~`Z1iJ(s#WIӛfsyucD7ip2g|ΙLTb;Nxd>6Ԡ@I)P6ԡBC%:Q 1(8#QvLhHE*Ԥ,IUύԥ{FLe:SԦiNuSjoiPiS4!-}iRv`jT:UVժWj0թXkXUJER[|+'7V)M+EAVpG[W5Aj^kn`cYĞueda1X.ف` 231;:Y♁rd+Z&y=-fkJlg[YɷrKݚ/mstۺ NMIMV mǙޤѮL.1 5 p[^qkcZoS [*84;7nH2(hڱ\/xsR\ Cx$v=]l끿6Akۛ|p72#kD<<>9sc棾n>aXll>|\y.?2> *R2| nmɌ=P g*kWNk<ki<1{>5]N{E4p{@F7*-Je$-wPh-CjFB>.CXu mX2tΌj) {H fқ.=;-c˘6(x{Wٷ>p7Z ./2>l˻FK+p?A okĭD7yus<6Rn8Nr jԥ>u8^uK6ӓ؎@{վvo_{'TPp{.w\JX?j%o <ox/g[\Wka|7xwf|qyїK`7}ꕃzշ/w}}u{~?|G~|7χ~?}W~;PK/!U!P!PK6(AOEBPS/img/pg_def_top.gif5GIF87ak̼Ĕ|ܜƴ|||~|μԼʴtt||$V>tN|l􄞴Ԕt~tdLrĴLnl̴¬tzt̴ƼĬ||DBD´ttμdfdʼttdnd||||Lb\^\TVTTRTܬԔ\Z\䤶܄̼Ĵ􌚔|T~섚¼d|f424¬ʴҼtttt||llll||||,kH*\ȰÇ#JHŋ3jȱǏ CI$(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]S ӧPJJիXjʵӮ`ÊKٳhӪm `۷pʝKݣ_˷߿+È+^̖ǐ#K0˘3kΠC|@ӨS^:5[˞M۸iy 'HEȓ+_<. h&hسkν<ӫ_7A@˟O!feլq̀h& 6 M{fV,~ (|LQ ,06 't8樣Q߈@9z$RĨL6Y`%E֎TViOgQq)YSKg4`J-t0 ,p馒،ҍWgPR] f {2k餔:R>ziZr)ZM{N窬Zi  \@k^k+z tҫPԠl:R;Jb-^ rk-~KѦ.2;2􎖀P(^oKp0zt*D,q(MSg1_w#1#|,0GB*+o8L Lt?(\PG5JfP]uPSmXs-)]uXuc4^-hu4L7މ߀~A ^8~߉MPԽh4Wn9J`yc眃ny硗Ny嚣î4 @|;_ ?yJCS(M}[=o_܇OWCtP  >XH\4@ ,k@3 tȠ7 v0%CЄDa U+d!G(ЅaPA w bA@ALu6рLD")ChX̢-,v".r1%^T HF31iTF6[̣A"q@ yPH"F:򑐌$fHdXd&Qh (GIRR<"IVr)C fIZ̥.wY@4LP0Ib% 1f:Ќ4yŲ|6 x 8IrĀ/_Ōvo3 @m"3M(.} i:D':jԖF7=` HA:I=(MJWҖ^e@AӚ8ͩNwӞ@ PJԢHMRԦ:PTJժZK1ծz` XJֲhMZֶp\J׺xͫ^׾U)`KMb:d'KZͬf7z hGKfV HjWֺlgKͭnw pKMr\ࢶЍtKZͮvvW xKMz|Kͯ~L` TN;'L [ΰ7{ πMBOh@ D+Ȍf4-iH;;i';Ț1=O 4VKՆgMk/#zӤn0!:ȿ.5yTȻqleҧ6v%d7ƶ]]n{mlj+ӕVuZ6)jUۛ&uMyO_wyߧ޷ gG;4cmc1/w<  =nϛ'郗6xyel05iŎ}g;NOơ>#Ϻַ~[_2y).=HpS\&p;`ϻt;<sz-j ;6Ƌe߻-pG>B?vMv]_?z[.ytOxox+~Ͻw/eýc|mzg灟cÞ_g>^wЯuWݿvyOǾ~Kc{A?ꑯg^W}/~zs>v{~u xuw~~m~l7}חw *iznƇyv.}B X{N'{'8gk}胋7xDX;q秄\gFPx<TXVxXcS\؅^G(b8dXfxhjl؆npr8tXvxxz|؇~8XyQ8X8MAԉ83X~r؊!8x7`2,8XxȘʸ،8،h%0(8Xx蘎긎؎8XxXX%@ 8Yy );Hِyɑ 9@0p Б,ْ.0 Ȏ0u@t  2y( LٔL PRiJ)M T^9Wbd\YHDIp npo9tYvyoI2r9w99y<ᗁYɗ1Y閏i)%+1h8 zp  9Yy|` $P & 0ț9Yy 9Y֙㨜ٜٝω訖B0ٝ虞i7(i9ٜ:YٟyZ*APF8@ 4 P P!!`R` 2 ` 9#Z'+Z!*-j>*I0.(:1AJCFc0}+A+  p H Qlڦn@R@@@8u:wʐ3J ^ FpZ` PᨧAѧ@=8`A50{`0b"Pet۶-=B DGS O-P}mFX\},_۷dۻ=!Me= }=xm]m ߂]]..zR`f ه@ʼM.FMB<,M0۵č.];mlR=S>]MM/qfWQ,ml) j~~I2] ߉ .vN跍CHM~a7 0\ ̠|ܢR [گ%@Ke-گ]3.ZNT^G؎\]d~j.Du^^D+mNN~(qrs@u`w  0^!M̤YNpJ$ P{P.|`]5/(ם[>E7qٮh^纽?=5~Na~U7n -mА]nZp>P @U&( ?*,۔?>ܖVNHoEKj@WP~7_\?Zoh~Sk^ /~-֏~kmp*9,I/1EJ  Dhp` :H0D- @F1;nb6,dI)W/_L0XAqCEF,x`M>ݘQUF@U;Hk֧[EزSվ([ cȐ)cJ SDҌd?4h ,_|ršV 5ܹI8j֭5ά3N0=(Zn 3uMn'+EF\sMOǾ9Lx^eKtZaݯ|7 uRF{^o#=* 튞 ; c.;s*øc#1p55$D CŴTﮍ"%tX&xҢ/$ɢ@2I% 2J).hJ- OH1 +D 5" qK(-.1O?'$) OCeNDRQI'mQdԈFpAvT V~"VYg5!0!\V_mUWSKج(e=#('Wk\+46W7\Z=[qE[MHt߅[r!u7^{wKAҠ *RX^(@aMEX45ba/xja/G޸a+9f-.cngK>!wh1:a>ieNj$ Px"6>aQ2fm߆;nFYF [oN@ƻoK;p/q<)"qZc 9HBҐD$ HF6ґd$%GLMҒd&5INƨe(E9JRoDe*UJVj򔭄e,e9KZ*e.uK^蕽f049LVǘDf2Lf6әτf49MjVӚf6Mnvӛg89NrӜ;PK܍>:5PK6(AOEBPS/img/ir_filter.giflGIF89azcks9skkkssJ{{99!R!k9!s9!{9)c9)kB)s9)B)B)J1cB1J9cB9{J9JBkJBRBZJcJkRJkJsRkZR{ZR{RcRcRcZccscc{cckccsckkkkkkkkkkkkkkkkkkkssssssssssss{sksss{{{{{{{{{{{{{{s{{kkkkƔssƔƜΜΥkkkkƭΥέkkkkέֵ֭Ƶεsssƽν޽ֵֽƔƭkֽ޽ΔΔk֜ޭcޭk޵kksƔޭΔޭ֜!,zH*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲeFw0cʜI͛8sɳϟ@ JѣH*]ʴRNJJիXjʵ)Ԯ`ÊKٳhL˶۷pmuݻx.߿ L8ˆ+^̘Ɛ#KLɪTϟy, XʨS^=rL`ipI#ϡJJcLJĦ͌ȓ[^{]6޲~!:&YN!Ӈ{ɒeʒ-B(5|S8ز3 +0l@@B "l0!vi 6{ :MTxa 4ֈ0)SG+ 6nѢ /r6&G,vp‰@$O|C;b m&l顓0U"T)$dɁ1d#iɋ;梌"'L||Xjy f6 4*ꨔ= ZAip ܴ1.&b &;0u. PӬ)ikȜOH ΊcjۺB r,L B NA:Q[b;͘b HgU WiJ+Lʄ0Ǭ@CuHTN b:lCu9ܰբI;`1\㤴;6sd-a7mls<.Pit,Pq;]|6r-^Sބ'xLhx z/.9_Ony_9o.z١n:ҥ:̩:.n Ҕ{/I<һS-UW;P ;M./`T[s>##k7>Y5ڧ {(>0{ATFQ\޷.1EY/}7 쵿 rd;p1N/f`GBDy৴0c~Wp]o8&ṄC1L0@vP# /Er1_k5Yh3f6\)+X*JJBEF1h`6O]t! 8Gp^DOG3!k{SIAw zLbY=@n2 #uq 'i/&4hFCJW|G.Kދܓ`W_9qs̗ZJJR3@ : N0 A)gC̞os# UXb,#LSIz.c,I`Tghu1 /n _WO"e(:jPRg:a)Z'!]n.d)(05,^h#F5K'RbTmt_}SFoGVC]- q+\ Ʊ+^ɨKMb:L"KZͬf7kr hGK٢ HjWֺlgKڶ1Amw p][vMrW(mt+[q8Cp+TLx?{\ u]»xɛʵ&ů qh0 \B'La ^0 aV ~i 6(f0q` vŃ#Ʈ]q5 c\ȸƱ|[$4Iy<[ *3ME xy=sڵF+V_1%Mk殚ˮuj:ҵlGMτ 5?Pg~tNv@sͩu6%BLyXm=hі*4lSMo߮{ƻ0γn?[;bwelRqq626"ԝƳjM-s<ԋE{ Yb_UksB77rupC_7Hk+ȝp.ُ.Sq3ծnv|P¿9./xz8yz5k>6YsU;pӾv[:]z37^xM,O-[{Sgtud53>Adq>k677=.v{@/8i |W}l~*'u'i֧}}ۇfb7|t{i.qw~MqZsTq'] g.k߇zzF O{'X6bqHpH}cGzߗmt|ihlqWxn6] , P9fDpa8e gVz0t`msnچpCD6bPx8qsbX[mdhhXoc8o(#f ։ ڥ]o gx ؊Hȋe/ Hcf˸hy__LHZp ^_ ؍W]u x(t7ՌHohZEZYYyI ِiX&~5Iy"c5&W%y*W).XdP6y89y <ٓ>@y 7p9A:y6J9$#2VT@PVyXZ\`Q9]YfY_TbT o5ul:@`c@p5}i;`7v5%yl-٘b0iy^9ə~iК0G `Yy:p yi0i Iq㙘fi@PiP):IYD)Yi:i `i op0G*=0 b@a"ɠ))Iչpiz* ٜ y6F)0Cp9:p9Z0zi)*.ZiZ$*7p)OzQ 7ZiEz,8IZi'@yjk*kЦJ\: ikznڦ` vJ]_9i:@ R Z:<@sd5spcB2zZ`**^㪘n0ʠjꬨ*:Jڪc nЩg:JjԐC`ʗĪ9Ɗ  ϊ𬟊J ?犩ʪ* ZZJ,K/ފbSኪڠ ЬzjZp*(%ک2K67HJKL[9RK?@N+E b;LKS{kO_;xz|۷~} p[{[ ;[{KP 긐;ްD˸m4~ ;[{ >뺸» ˻뵪K8U@gټΫлX;87ѽu[_컱[y.ѿ<\| ;PK%_qlPK6(AOEBPS/img/condition.gif\GIF89aM"@@@PPPQQQVVVWWWXXX\\\www!,M"eH*\ȰÇ#JHŋ3jȱǏ Cv@ɓ(S\ɲ˗0cʜI͛8sɳϟ@ SH*]ʴӧPJJիXjʵׯ`ÊKٳ_)E˶۷pʝKݻx=߿ La{+^̸ǐ#]+˘3k<51ϠCMڬR#ikרWM[OsPkq N8ӽwOz5ʡv.yyνwȯnrG/_}k˟O_ix뗝=Q tgv_S9H`=x^p fᆒ-F#"q,ހhHA<ؖnBxCL6dnTv%JWuhOvMd阘elʇfp)'Zoix^Ug|~*(j^¢6裐F*餔Vj饘f馜v駠*ꨤjꩨ*무j뭸릭+k.6F+mNkfNZm+[榫+-+{*ҋo,5) ;ڰG0Wl1>б_,$[ o![)0{3 ̰k-o8rH't3C:4;{sOWpB<\w`NGZ]_5gOtrӏ-7kͷۍmތ^ܐ#nfL9ڏ/fscn[ۼ:}\ok]箻BOn.cK񏀄bX6D D"Ҏ_\Jf$b% ILa (GIJ34eVe \HQzdA:KO"d%'5RLDNJU~P(` '& lG岒09b6H:v$3( (HḳNL ,gB :_&T|(D#zЉjR(A ъJ HGA~4 7S# `@ *юVԧ)PbΠ.GETtҨK *IJժr䔓,$ݸRl@4)w*IF?\9Ժ"JkQ{VZ C1`:j`؀ZqiDӢId\JNr5Chَ`Ww3@ڶe77`6 g7mh[R5k< .@Z]n/{\wqxfjK7.خC׿U~w `7u-TKKڈwVȰ7awr0GLb1VX~#W.cxʶQ-ux3_8T-&0ş*L*[Xβ.{`L2hNUOpc8Ex>l~A1h{ѐҘfiLoZӕnԧIӲ5J-SVY)Z*֕9kQz׎v]^RIM ئzK5mb۰TUQRgunQk{նڭV*vOEoLQuMnӯYmR?{ 8#m{[[ xpwo v}qfk51{ ?qwގM]+^kA8΅ss{!͝Nsߗw.:%{ yN򑋼^wvy.c/칿s;{Opg|+m[~ٿ#9G<~mc|5_[yop /{=o?>Ǻkק]?~=mx||d?>7}ǽN웜QGwn5W}{~'}qz ~7vG*܇nz{svB'~"؀f|Wwzwv"|ׁ }x/|;ȁ27A84Fh)~7ȗ|'{((|W(ǃ~]o8{z7_HWxdž({.6WeX{zX~džBmPgkfhIGWxg7~@ȇ5~gt8uvKx3rH'|xlhryHJy1 }hu[GO+}oBr҂6o9)Ĉh&fh*"mX,8nƍFqhjk*X*m)&iϒ9,Y2 *H&9YPxّ)) "!9&Y%y*ɏ). i-2yh196g5y:yg9><=B;A9Fi:EyJy8IN)6MR4Q9V2UyZ)2Y^I0's`E+GS)eh+;gni+k,:t+q7D34#4c:ӗRS+a):T:i5XS 4939e3+wY:s`~:*sS;7iW399g6b ɗi:I)!ٖY2֙ٝҕjImSy虞깞ٞfCTyٟeْdsVRXvdFڠNR*5 zTcB FFJc!*D#:yc+:4B-Z/*P5B5+D۬뻃;»k;˵kR;&+Ojջ >k+Df۾;[fP ٿ8YjY9-,!P*uZjJ -oZ7-j@sHJ9H&oA%b,(w"k@u\R!PlZ+,jmfȷz'vȱ5h *Z{{2 er,V`K8S* Ĵ|;+-U lɱ9dBaBz,b3& ӠsT CmUO#Q҆&u_XQ.j>)$6,%lS3@WvEu4F]Pu[Ll¢['^)*@e誃 !a9%ܷs Gy$={Aªq/nF]alBG-r D"!l0/wՂJ]@PRz]ǟ*pI p`Q}>77  B* =5lj靸4KtIKښ]/Դ3Aj'Ek$~ iAp-tà -F#^XE<EB@  AT Zi 2 #e؝Up$:PDVp2t(i)z:y?dl&L4;Y n>p HIOc8J 2nZڒ bȆD &H~)b"<2ɐd24)IMh: 5MTnd7IT9Γ;Iͳ=쳟?JP ]/A }HD%P!5H'ъ^" mF2J2$`IF̠@,ڋX0(Y(K Pt0OYzvB)HZdPr;b hET{q$:( zQK̀I(C0St2MY/:Dhʴ5)Y:X=lW6vM%cz֪b5e+M#ؔ { aQ2V e]@W@ң& ka#zv8*G#Y>*5QǺWFS~%*U֨B-Uckuu--A2ZV[VzeyRbwɭu/&#mt<$ܶei+pV^`(*^ټt(/: C8/SC bpY .p/2\6ذN,:։vb2-ۈ6%CLJYGa.K&n a+o9K~ie.y#aU#:WGuQt*ig3\l7DQ}jW5}n| @̆eDo i2U@kC3`[{qlj۴ͮG˴ bq#-3CK VcS\@t;(L,!Z%҃`,#Nq/3aNGN(OW09eqS8Ϲw󞏜χN&4+;OҧN[JbF0k`{Rg; ." dwRwz{ R|/ y#c|.M] kE5{ ū_}az^9uW^侇y5OsAC?g O{gxKq|>7xʧG?1~\yl{z7p7sg}xx'~7~X{gXw($&x|y!z|m~1z} h}9x{ 1w8~GW%DX@h +܇W}4hyWVXӧ8胼IȄFwmhp8|NvPylQ}t h (x?(GȈG姁(H7Wu '1|j'sȉ{}Wwj׊8XHw8rЊy8RØs ˘Axs،8v(XsKHrXxuh؎,ȎxtRvͷrYtQ)7Ȍ s)SH9rs$(s!w%-ٌ*Yr7ْ.'| !mr93GZǍS4)IF)s< $ɔ'Y17=@QY+/Ǖ]M I0g&UZ)OɖG 5_ k1ki-o|dYt $'yiF&珔YyٙHiv ٚ9YYBIٛWyyٜ9x9d %kgh+5b)m !P2@"Uaٝ)y9KQ I{Hy۬+ ˤ+ Qo? +z˰?Iڵ#+*빆J{ZVp!z{}[̹Fz}z*aKcke˻˼ڴXص[['Oj+P(ᛰ5۾9{1 lqDa++N[JĿ N_  p P,,a |NxM7-,/l Aa+1A< ?q| ^uGl@L|O,SNL%,3<*U Q[@LbMljA`\JI\Y\x,Wf~l|!q ŀDžȀU|Ȏ,ȸG02|‡ƍǘɊǐ^|ZxlʟǝlȞ,-1vɪʸʸ)1ʧˈ ̻\ơSQ$ƥ[<ƧƉ-L͚, \<nj<%]\|\\J)}<} АO[] O "=4a&}(=;PK?wPK6(AOEBPS/img/ir_highlight_rpt.gif5GIF89a0kkkR!!cccckkkkkkkkkkkkkkkkkkksssss{{{{{{{ބ΄ބ猌Ό֌kkkkkkƔ֔ޔƜ֜樓kkkkkkέޭ{{ƔƔkƔƭkƭޭΜ{ΥΥֵ֭֭ޭkޭ޵{޽Ɣޭ罄罌ƔƜƔΜΥޭ!Υ֭sRscssRcs{Rcs{c{΄Δsޔޜ޵޽{!,0H*\ȰÇ#JHŋ3jȱǏsIɓ(S\ɲ˗0cʜI͛8ss'@ JQ\=K LʴӧPJJՓGjtկ`ÊKY[Ӫ ڕٷpʝKWڻ\z˷߿Kh[+^eǐnLc#k&-K&v H,~TEЂMBІ:D'JъZͨF7u HGJҒ(MJWҖ0LgJӚ8ͩNwӔ 49PJԢH 1XybX@g.lf4_ؼŮvջ3zݼ:c7(s$f6,&s,5Wo;_XOf-C'o @XАuAiJ[ڼԥN:Ϟf. VBЍ4}]slukV[Ԋ&pyMno"YEMF| =x{Rx7?@\[*b#^xϸ=uSn[nLWy_p<7׸ws{G|2w%1x[)8s0\8?DtÏ· s߼n +ۗ){'<'koμ>C>'+nO>?yk/|7~?|州1O~_HO?0w@؀n ̿w' op x ~ 8QP M xG"8$(gg - X16XB8"Ȃ h؁LPH7;H=@VK28(hhd~DX'"рxh"wK؀S(N p[h(x8#'~~  HRh#QY'A8H؇hm ؅6艒鷉XQ(8Ҋ8Xxؘڸ؍~?EXZ4明hE踎QEx؏9YS ِ9Yyّ "9$Y&9y*,ْ.0294YS :<ٓ>@B9DYFyHJLٔNPR9TYV9?UHZS.[`b9dYfyhjlٖnpr9tYvyxziS|9Yy~9Yi' ٙ9me(]@ٚsid'ٛIcTٜf)bII(" Й)yٝYy`9 x mp_ gyCor9q_2q)ji+`艗%8p Zj0)@L +XAz[tJIʞ Q;`%sPT:2- ^0*+SZ[Ra٢ YꦅbJfڦ "`,@iuG0m Ryʧ0.tjt* p*]:zZZ> WJ:^wZgiLZNz0< 1*P ZJ 5Ӻ9@x`**j*:=j9 +5i%Jjjڰ)?@K|Q,1k5B QЊ5C? jY0ʴ2ПZE Z۟Q j.;Y_ '⩲ h۬b9`)p{y<[ 7۸8ࣂ a;[;N0*rʣ][ۭ k1`;I_%{[ijx_? I+N [|::;x&֫۱* wK۰ CZ/YL K+ tKk˹Kӫ|*;|盽6j(qY/z!`ɠz!̽x”J(,+;8 @+ ۸?:~Z:ܥʺ`eiv4 ˶iY*s+qyKnpKń٢tǃq]0|ikDžuyȼ Ȃ DŽȖ|ɘ(Rɞɡ)iə\ʦ|ʷʬʔ)ʮ˲/BVbɉǖ .#%CXCʳC/*쐳<[%. 3 EԎ+sp9gO>O>-"A !$Rp.4I j1nr ^ %%ĉ=_ŽI14DHXѯĜL3l.0sKZ7OcOSDS'%RL6)T55Tz "gUՒlTNC,-KVҔXWrG , Yb$+p DO?œ N Y,R66'(wm4e =v2;0"3rsW6}tyW1}vt ؂ Ƞb)U$76 -. I:f6Cy9LFyfuV0O]:-4@伄pAK RJs%E/IA9^nOHm#*8D_95&śby8HfL[YnqX`oZI' /쩣$o: qôAk/|irr/N*S۫jJ ۭsYs+wn w0 WMF'0}3?< g_µ??ӿM؅πTS@/zsi`w@ }`5AvЃ ~0BDa UBp5!N$\8CІ7 qCЇ?<8D"шCD&61Itb8E*|>bE.vы_c8F2ьgDcոF6эochFEwcG>яd 9HBҐDd"HF6ґd$%9IJ|d&5INvғe(E9A^De*UJVҕd!H0e.uK^җ4%Df2Lf.2~7c6Ӛf6gg89HPsDg:չN@vg8M vӞg/ݹG h@:MSF Rp(%$ZW3Q&2EQvDEP6DJIҗҠy tSl'2PfFkzHYP=JMZRAtKM&Vhsj7ţo~*rETQ>SiQbhCIW5xm[zG+CJ QX^MS⯖^3Kӿ"&(uA,eM[WNEjYJLjUeK Z2mfa- ؒua*JQcH5)  e&Kݵf6H}yQ*}KZގz=]-~?qߊ^44=/EɋR@,~;szWBum{I[T.hy^A\ZVD*+"*oJ"=pQ5Z;<׆O('<"8}wcc^2يG T'IebY˥&IL k[>r/bY.~kłD\,-/K!9y޲#z[ =ia᳖T]K77ʡքAm<_^+8;ʚ j3}]Kzq; p.Mk؏ -)B!W^K_1; 6 apPvp&kqcP\?A 47)]a /t39vb\Y̛.Hk*/ j ,+jÆ\h<ިok&wBoCkQ~v;?tùHz̍ܓS"3--Ⱦ4;vGc__ˮ|w!wB;|ZG|Jb"\|%?y憝|oyw/(A?zҗ7}U+}e?{}(?|ɣG>A _&Ͽ&iNW4Awdv<噋rG?'/H3&gdV|ĪR)*^J`+A1$$:>BB5OJ3:t@C@Gb@@hCbU= @Zz: ĤRArbA |@M@=@mAXb6"+WӺڭ^+3+J2JR-JBZB3)<-^RS,j:۪˚K,-2d-ڢC9j:قC-ڭ>,eB1,'\345,,DA J9bž,J)YP3EjNt6R)"#QkbŔrEXMc+!? TMbWZVй0P$YS$e]7(8 9=NDR@QupUAFd{*DfZFd|zHuJm=NOP#L6evSVeeJUve_:WerZe>;_Z"]fMx`d[g-USg$YEij$i>=ΣS{[FB:1qp[uNWvqVH$=2?h9|ony%s(m%D5A x$w[Dbݽ8gY:Μ\ujMxŵ#E-Ï&А֨΢2WF郅CRXD{W"vDXA)XcikjPnZ銾ga茮0(dvG6}/$F&Z6jsZwŕ.ZnZo]Nkb붴gj-6^HLC#^ԹV$lmɳm6mz\;[u3ͳ]I!5n·H]b@%ʌƶ6_Ѧ*۱$Ln&қnc ˶uU7-ޣͼC{盬5]bnMdshsV%~D[\΂^d_C̬8<$p >F `D_qC0n#uMR`&q~7 v0 ..no γ Z27_3gu*fCN2Êͨ9ٗnj)P*.-G{P+b:m\6w%c 'ZOf5Qlj54l;34FIf?zIZckcLtX>ckEbRltB LcZudctkfu?ekXoݬ#.[oLZ]Ot_e%a7c]'cMegfwgv+ed$Wj6lvkuh}_TqGrKEc/fq:vwSwrwVw^fn.OhqHZ@b >)v>}%xV_2VTw|)jN=f:F6NxW]rxGToX[YE2\y,TbMY(G4JB䢹iC-Ç'YCأŽ@̤Ey>bSBg2in2tmtk&.&Uʟtծ]2'x/wojf5v{N7"{.쮝9Ğ ǨW&Ƕ{M&ybnzS\-V]m|$|R }p# $%Dõ^oL ]IW pϲ %q"ʔ*WlR A 2t1D3nhsHLTV)H^cAY2YU#R$:JMNjE v TZ<yXrVM+3bY^5oߧz I[B%\slrõ%=-`)ЧJU/vN?ˮ 7IY ^;6Y)qE&Jh mҺ/SR39D dqqmڴ?MOfh7[mcMJf Zx!dn%fPw8"%x'b`dÄ1vQ5ڨaj}#A RCǢ/8!F:$QJ9%Ur$d%]ra9&ey&JX(W"mf9'uy't'}'u(z((:衋B:)ZZ-j)z):*z***:+:"++ ;,{,*,:,JZ{-j-z-[{.骻.Jn^z{//C0;0|0+jEK<1?D1 <2%+ƹj1^r21<)éӼ3=o/HG"pF#M!C0aV lS]uW'"6YkG[8ن`KW]ٯ?7N+vjCwwf4m8b;gC.n!TH y?1;>tء\t!Oo;c|"X0 S3<_4L?wm|}}!W.=w|GXQB`pyh4'<{ћ^8`9 n_)hH!f@} Ѓ>}ܡ7vF2ic0!3ݤ+ V &B_4DϘI ;Z8EUkE/Qd4ո?|An^(EA|M9"5I^#Lj9R1ld1<*Βa ?G6h\XVI92rd%g {͍x#GMr2}50dfU%ccFŮi+M!tR 'x4Im66ߍl\:%Ie 4yi%Ӳiʙ5uh$D/6'BΟM4ۈ7,aESс4O;vs%M!,g),-[.j>}ڳDu2ZFBK"ZjS0UF#ΤnRsd:脊vZdYj5HM#BRC՝ `RkF+E^#Q9kY ԝ69 h ԹMeվ8? VDUZUw] Bx ||`VJ"d'=r]i] 6~ֶjC97Bm4pY.7#DqJ+Zђ"͌m53Ӭf7}9b^?n6vY<;~.ٗ%?І~EC3ю6W-ISZ\43g]zӞ4QPԦUjUծ~5c-YӺ֣-r s]׾5-a>6e3~6-iS[;PKa##55PK6(AOEBPS/img/bldr_hm_top.gifA=GIF89a5{9BBs9J!!s1!9)!!)9))9)B1111911Js1sZ9BJ9R9B)!B9!B99BBBBBJBRBBRkBsZB{BJkJ{JJcJRR))RJ)RJJRRJRRRRRZR9RkRRRcZccZcsZsZZkZZc)!c9Jcckckckc{kZ)kkkksk{9kkkskks{ss{{s{!!{JJ{R9{sR{{{{{{{{s1){{!Ƅs1Ƅ!1)RRsk!BΔΌ1)99RƜΜ֜ޥƥΥ֥Μ筄)J֭ƭƭ֥!!91RBZZkRscZ{ֵƵεֵﵽccss{!{1Rsƽֽν޽޵91{{ƜƥνJBZZRΜ!Υ1!!))ZJkZֽB1ބsޥ!޵B9)!樂J1ZBcJsZcs{εcBZs{ƥBZkތ!,5k H*\ȰÇ#JHŋ3jȱǏ CFɓ(S\ɲ˗0cʜI͛8sɳϟ@ JR ѣH*]ʴӧPJ}jtիXjʵשUKٳhӺʂEɶLeM&\0 "\xꦼd_)n'S160# &w%{q1VKl c;S澎em$ Ӓ핮WSn]c3+۔ ]va:سkיmTOXB'=y2;U&88R+%*X"'^WW4\T |mǞaF^x BƂG $});PV<*>=<q2D;(<ƙ<t-nP݅[}m"xrV0W *O8C!'Qn~mn'\{\O4af'秅p'}n4fgphp)*)=:vsa#;Xc3\ݣIAY#)<ߒw=R;sY^0u a ؾ5H]=1v8>5O 7?sb4J1d&lzVE# ޫiR^R*y{(LO²xM+i`HZq Y"!H"qx;&D H*ZX̢.z` H2hL6p@A:x̣> IBL"F:򑐌$'I9R̤&7Nz (=iQL*WVR|,gIZec^ 0YG^L2BЌ4IMW>̦6Mg֢ 8ljkL:[iu#)z,7~ӝ@JPeMBkyЅ:eC#JъZF7Q>f E?*Ғ4u\!ȶå *C uĆ$ ais#C,Q# JU* ݱOƢRTql0U;]:d#Gl4+ վo*M"u)L!Qx_KG :^zTH8#SgǢՎbi8aZT amY@ZF\MAVbt4-peKDAGj%A֦GmkcJtjz; 6BrAbhtU. @Yʖ7U){MN{"el͋[ʵ1*qoKѳv5, +88e0S `pYغ(GKcLY1WaR5ѴC6_2iV`jjxxn|ilTyReTD7]7=iRђuLHftA3g~~_ dAQ]h;u-4|^.\`NR[ۑjՈdv/]T*>.}wm;Hǝ>@ i WXfw1m|[ |;סf0G}#2mxBZŋK!׸t5r]l{[v[k` T=!Ȯ6ZB7nZ|3Εjי6ŧNH1V'_ kcSz!jQVhOpvϻa);Ox=Ȇ;񐏼'OWL7{Ǽ#5қ}Qֻ^A CЁϽw?|:XbX$mO;ЏF.xS?=?>R]^و}8 CK?nuG MHXN Q` XH(O(x{!O#txp4 Z6Z4ă>XHDB5=h5 EI0,p`pIPHӀc(HRtTlSMoHnXHjLsHuxw2xG@{xIO4O9'&4d qTNGS XV|ԉhH1:I9`2 x9@xaHIGe8 IkEU0%7xFtzČ(HO6 `"`R8 pyč䍯HhGـ-xIP &pȋd,'pTĎx g0 g7 t:pPPfP  ywpTyH yG 鐂tdP8Ydh+VԒ֐$HH/釀Ddky[c@d0bp둕M_uĔMiH`H S MpP{@}0ّ ! ЗP`4(1SU;xOI(Yd G?8x @xdTCKɔK)d%u$Yipx0 Qd &y'`*yYS{ȐGG˹9pf0p ruix{ٗ @ 0 [ pٜ>5rg0ˉ aV:YP P Ϙ  )ЉI "*jšH9kE..ٛi"8*YHi> @gyɢMY R Yz鹞|ƤXykiOYʋOHsHoPИk:b:נ0IiI:zZ{P)Y: [d"LƩ> @ c G)f Rq9YXz \I+ʢzyLcp: O@f`v`~jfx wrа` a'zګ|ԩ Jɫ)*W{'0L " k@Z&,b!},:::Jʗ}) ZӺVl9 b*J[b^6 ʮ~YZۮ0 Z;Jگ L+N[Z[Yv{xz|۷u; G:"cMpT2 p $˪k=5c:KT zjBۥъ * ZBPqj~Y ̫]kQZrcR~u iv;ܚMKM`[+{p+$ + { p> RK{K:9:rZ[z19 ,`ccUQ 9:Лfj|h@ -ؾ8fK XZ\^`Ű0 X <ń+tLZ [xr,nj20<% >:ǂ|'#+|gYŶ :`JrгVYڬ#iت·뫆1, 0<`~0Y;}î [+dp <\| `lkȡTM p؜ڼllk#* ](,L,K k0L#<[IL(VҬL &EqÐʰԠ ҳú|A:<:ݽ6:}- Ԭ [NPR=T]P=P0\GG[ 0 j],\j ̵ -GI *Y=@ #wPG9) `ө P %94M#T0۴]۶}۳ ɜ`} j졄Miʽ0 kPKفmGc}(Vfix";ܪ"p&` pUM8 0 IMgpܵ)Ӛ $Ьzψ -P2rKhV3ʟ ̰ ӊ ̠ >L y<>@ㄚĈ@.,`+T^V~XZ\~ ` k ΔLᣬO: pxpt^Lo[׊@{mu^@q~oMw4؈~٠\ܑl<>o9^q+" <ٟڳ p   >ؠ7q` DM ު .>^nPȰ dپ.l~譈0tͪǁ`^銾G?}r钜t) C+. .0_O>Ȟ 켲̞ ڨ:- mpT@ nώ޻jN~]2ofh]@ -N~+2Yp {cI.xD鏯P-p^$)?/ů^8o@ɛ)P @ @J3miAXu/1y^ ?_ q_Iy?p(H"9@:́ D-^ĸFOH%Ql:Lf$ԧO%pcoFv%BxL/աǵVTBnC3ΏZzAyMϭhq ĵp T\ l r3V7ĘKE*..u3 u/-nP:%fڠ30Ks \@7'ѕt,P:B0=+H:8g^4EbM0E @ղ1fBSin7=|fH߯\_E}⨺H/u;;Dh`bt+Fq<˺&H h3**8 e*^䢠1 ]Z!  fCrP0TQ~ 뇆#,τ3MjB&$< W`Ur*Q E5phd#x(O-CJkf9ܧA5FUB|3 p3 /Nx*49%13j! y$ۊ"rt7ŠYx\RQ H)K9wT=v|2`Z, CKpz9qx08 Rz#e2Luծ٘D^׼ &hP# ̹ :YwS(4-cw=P F7*4 97d;[" 3`->{375T8K!/m"i lu w 6 ,) <]dB$E4?vS=g?JGK0ρu7$Y Yײn6ƈ4ak & 7Є'(p5< =0}ָ~f{=h ,mD 6H>s \KY "e)p_T_B4D(0 4ʋ{ ՂIR:PvZew(B[0/ͺA\l-c /gc254V' &C7Q(E)P  LmuhjSzLl9 ,?Mt}c<[)Kߦqml @5DR hOnx1xh}7-4)@Mr-I#76p \V`r >Β ̎&r; &x0R7?wU?ʳ3GG$".@L=Gm{6H;DGzڍtR#+a[PH?Z1?LP~~.sˆ;ܒfxM0&H} o3QK|(3+6˃蛾㼈Ú=J+Ӹ۴N3 g+R0S>ӹ xA:-{&'P#e64º63C?[^@C,(@ף?;l3#B$l8 H&軵Q3rڠI 41< TC7L)l%fOPEM8+7Bڼd"+Y&2 Ĺ+Q a18bsCJ?Uԅ*d+ @BIx1LFeLGTFkT@kC˂^(CoDCpDK6rܭCU٣Jj `|r8 ^)jӑD.axO"u8*ʫLȤHRr˼LV`\`X@=564TJAAͧ{T801[D1_tM狦KssTC#22x_^ǯK5O60T'&4M9TeB2i 7l '$i>K* IKET@cH u]]?8P,cE+mjvc*V8V)m!R3:x??%hA`#p<+Tg6fGw^QaXaȃ1JD҆jB`2(0r>XZ@T@e(a+9U0 pPZ\^>_^އ݅b$E$V@^}m,Vg_p10k(cs>4nh`~c]ܕR3ȁW{.wE>V%#hd[p<~o0;@FnkN[_fq\`-wshn ?f0^ʹBx~%]eU(ll!8RMj^(e`РxhВOs=}d9P60 8иL*+6 ܂xNp]ұp;Q@E8$@aAB3ɟaP#K K cðd4 fЄX`1ԥnzj%`i.6:|'B; flYLyPt9y"T& 0N5rOUp$d:k@BT-KUt?w *AK$2)Y+^b"y'!'J6F!Ȁ /t4*MXRF.5:S Q)N4B#`aZF3Y|+r\uaTsL@lP;+^#}yZ0p>nv 6FoWZlyoyѫ`zl}[u_%A9Ŭ߱d _ !*-eơaE=^ra`^Yz j!aQ 6#ZT PDp@@@w!~<(n!b`!a-AIWI9x*h0#aݡ):*Λ* + R >4""7v7!0}N 5*c6CqQ(< V\6= <㻸 1i-#M*d7-!%P xUd#Dv#A$! .b`G$JvGH IJCL.CJ$Hd:nL hP #>v9ew L^Kg%A4dPdWTV0\eVV~ZeX:"Y%LZΥLe#%V(#T%hTQ b"&DSYMyS_c0a`fh $d"$eefq_#XfiidjVf0zfjf%Ц0fm piCd&s.^>0d`Vu^*Tvn'wru~'xBj:0Z͡L'0'{{'|n0-L'|'{dgy)'u'&heg0'~O;fgI4(x^on0v{b(ƨh{ohʨ*(>ɄF8(b'iڋ)xbiujBiC8l) (x)i};<'M))*j^B_)<8N*V^*"*(*voB**jj*6>*(*ƪꢪjt 8,%*++*橲*+fZ0*%4i^+fvJ몪+z+F;,%++v뻊+fC6 v,&.,66DDMRFM>,v~,jF,qȶ˾lJ,VbB¬FȖ,vli-&.-6>-FN-"-V-fn-v~-؆Rؖٞ-ڦڮ-ۮն-ƭ-֭Fۦ;H;\QᎭ0C,BMJV.J.f;Bzm ք;HMdѮ.mߺnb`CnRn** @ &L/.v:*~/Ү%n64/ք0`b.n40n-h /CYRm .辯.V0M,p/"0?:Jo&pD4p "HfҰ0χ_nvoF*0nϯStp Cn c0 O1BgF7oGq.kqӪo.'>Mn. Af Jn k*h22nV$Sm-/r"r(+%f%rV2nM62&#GJ'Zo$Ӎ,2 rVr/,ۄ-2ǰn!+r4g4r6&r/Oo k(w32'pMt"6[3"2.:ⱽH r*2 ?R>3FC23Rm /24C.DGEECB{4 ./ӰGۮBL H?l3M2Ow4C'J49 LHArAw4;n,KO[S5; .Z?tMp?pQGӄ!pZ?SmRZOc'uQDJ3\cgn#r[6YrUGUdcWL#5o0fR^5^N'WG/_{t26@[tJSju\W_no]cZW!Ӷm_2p6J/NDhpiuTus6M<7 {1^S;/kw/JTdOvmo7lnlDNijY_(3I73.R:w$?~ ,o'?/o&.5Kx}"s[8qHsD8nwMDkCqߨiWv:_{?jn-$nP#_Ӵװ2ꮉn3O;43k9y՚vfspon3;/ pӰ94s0./Y_U-n0ﵗ9AyyD+ㆮKq'Dc:p vj-~/WKǐ ;ۇoN3m8;_{F;ㅸmKy;;^P;;׻;;;<'/<_~GGGECG H*\O Ç#JHb<3jȱF 91H{$I;ɖR9󟂛p⬧|?o )G g {KEuIiS57OFuMlأHTE%[O[U;oW[q_xm4]ݭtLlEe<+u-+_Ҫ{8㘬U+f7؉eΛ6խw{ 'fCLV̓m~sͽwvv&L^q;݅w.x矋\tʖ>g|]quw`m©ރ5{ 7| __t$߉ Ow ; 6%iha`߇ʝHdt88co-NpNPˍ8"ХMz8tN>zggcRux5w0e(a}Gly-\)(qʃQi>VzTYMj=qJ)jꪓ*무Jtĭ뮼+k&6k;PKUXYTPK6(AOEBPS/img/find_icon.gif_ GIF87a:j̤¬Čllƴ||ttμ||ttllĴʴܬƬ̼ҼԜ䌪||lldd܄tt||Ԍ|~|ܬ||䄞Č̤̔줮,:jǜݷFY'`;q##JHŋ3jX Bɓ(S\ɲ˗/=4%$̛8QL@ԀRJѣH*]ʴӧI`#Bnʵׯ`ÊKYAhT۷^Ӯ5R˷ߦhu%G +V e`Q/аϠF1 fSiWn]s]O5t wSP Rć LFS+եcN6X﫫8+xoU~jt?8_8 6(@qמ{Vwiםl[|j{'Zu O lRc2h mt<# t6Ou'Im5H,a\w'~߾~ӏ `-РAH,Ё `(AF7A N`-@$`ApLaL`8̡'!>HD#:1ITD&;-@2 u08\c1n0n`8.~k|]=q! mDL" F`$'IJZ򒓴U!m Nz (GIR*;M€,eJ` ȥ.wK^n—0IbL&1_`+Ќ4IjZ̦6ɃmB|7Ir.0:v(p/MqL:ۙ *N|)\,S6|ĝF8 @ 4 Vv|!Ѡ;Z>O-V˷ծ/Um`X'0 "lh!9pY_h|q T` -pbmf:֦wf6moxcxM_UYE D nH0&|-+}sx?mzwW @6 {[<gr|FOze]G'{Od h8|ZUЗJz5vwgy_H/ J\# ˾AM~ Ny;=~ӡy7^吖E;+N*gOw]X:( 8 `,{Ͼ7 hxt&|Nkt{O?/G D& 9WH9 k`@`uחx8 uwSq d{7(aP%* x$x`'c@v(8HWFxHJ&CPp #Vx0PX؅^ Z8 dXfl h8 j؆r8tz(T8{H v x8 xh ؈؅xzX؉78؇xȉ}h[(X ؋S8k9 Mhɨ؊HXa(xX HӨ9hݘ(XH،X|h㨅؏hi X8x ؐ  Y  ّ i!9I$y(6Ȓ. *#2 4Yy8:ٓ> @ 9D FyJLٔPR9XVY\ٕ^`b9;PKu1d _ PK6(AOEBPS/img/image_finder.gifBGIF87a,P|~|ܬTVU%&%568̜mjkD>DҊtx"$dfd\NJT]fdlIFC>HXBkPyv嶹ئϛtts;@MФxdrI0k`,缾Ie77m9Ľ_8gR^kiiU[b:Oab>nhExzT>!m#6')0U0͈R4gp*AjTԊtN<#0}\lxvXU=^DU]3:ؚJ,v2̎lE8zjtN|l,,PH*\ȰÇ#JHŋ3jȱǏ ;Iɓ(S\ɲ˗0cʜI͛8sɳϟ@(ѣH*]ʴӧP *իXjʵkR^ÊKٳhIY۷pʝK퀙m̼| 7&y8cxKw=,@†ϠCMg^rlרUw~M6 ]ͻvlݳ{ ȓ+_μqf=uq75,0"O|:4`ݻG}wç~e{ǟ}h`|7B$F(V9TP_zaWv6 PAH+b0h*h8@XhHN!9LH45@‹OAd%Yʷe(}&czyYlIVxV!t'xsJ3u@x|DI"zϤ2 )EJ)V"(i 穢6 ZPjx&uPA#띑<+:/lDj|֞mn^Fk*|j ޚ*چ+`&9PAoI"Z{̺K T&Ҋ~#qƯ,uбI+{&'kKl#_ L,!#l rIoJRT;X҃VgWa *} ; v6Ӌn\wmiRq|7'O7]/ yWwߊ/]gSn6gklNRO5W[56ֳ鞟}bvKgҚ\͑]fer;;Ncvń69{+_3 ǂ"8W-t ':G~ lG0brx+੄oe; i!^" < wIJE@\"7 qhC}F/f$J$]dcD<KiG6xՃ񂸾l}(Ͳb%.Rz< !Orben$bGa+WJSrΙT:ʘA#37dfgGؼ˴5e(GZktMcFeg%YDF8Uw`Bw7N4@ME ,fэ6r-0g@^RҴ)N>iN̔d#av*D2N}*UvU*TӮ&)CYmiQ}Ҫ[ڥVֵnn=)\VXzz\/:֔UR`*؆Չka9PbRNŠt2z hGKҚMjWֺlgKͭnw;ZP`@@Mr:ЍtKZͮvz x bv$ `p|K-Jϛ^LկZΫE'L [@ 5$@ͰW΅g aeK`B`1d H&;PL*[,rW60L\H48>aw'pHx8Ňe,tVM`E*^ 96/IPgR<_G(Ҁȵ1d!^|gZZ׻-׺浲 i~Ȃ&rlPNz85g;; 8@%_aIiZ@nE>p}mw?wo}xJ^{{߻FxQ4z;c} DꥀgI=Uݰ6SZAo{.1^_xeNsY.7xu-qϤCxi7Wĝe\@.?Fyʛл@6^.ss$hgiT*iƕ\n7e$2#5x{}qhksgwc%/Ow@q5\7LJuwa?)߶~7Oio;'>–׽uu/ۤ|׋w=J$:O~▟aG~ڗjbWtÇ|ɷwwiP\zg\2Fpu7~ƅ{#ywz}GG~)#(zz4X\~>~$a g l7~9(hP{~#!0Af cWeMXMȂ+2؂>Ex^vG|wC0q| wU7 `riHOȄf8d8/(wgg`؃@~~)yXZ KX68~41khhHhy hHr8K] zi7 ꦂgR7HQ8쨃x~B( EH.ȋXȃ{px(y?X ʸ׌G)$Y| |tU%1|  @%(bH8>刉 ㇀H 8z?Wo ic8 SoUo ]YjyxkhcykhWYf#ɇ|*Ƈ%xX"~hxٖ8h@BDY~H_ L)0i H'ȕYH9@iyO? rI`z''g%bpz #P !8yɚ>ٛp9:AvK){5s9?*ǎǎljHLJ~o~u:ʧ٨\ꌘi\~WX&phO1:ey\*ڧ \ɫ:\S@`.hJ_sjH2'vvອjĪ|ƺczɅЬkZu:Nkʭ:lߚsldjx`թdmSvzJN &{ʶl!{HA')Km.6m@<۳>L۶'ۺ۾ ]LƝ;Mx:WA& Q ʱBhh=p l NԝNV=ޠ]"M~01 ^]x -^Qmߐumr\ [*~~P޵ ժl}={=Hm <$m9ݙƬo_OSq-ݍfBn>|`Tإှʡ,K=[ac~T-~q~-stq.VU^YN6:^̰.Ǒ.4LCR](kͤ6ȟNU ^l^.a=뙽~~;~@^.n~nԉLu8~腎\_^.ٞzn~Tpnmeˠy*NL<2>L=Ѝ>iرRB,ꓩK28JN3|R_MVZ^ b_MfK%M ~oXTF_p"gB 0/lM!ߙN^]QN?oۉ>.m_g!?' =,)|^/!Y]ۡ}BnqNo~/AWܾ?fe>??t~?޽ DA 4@{oS0 A&/ B~H, @o8,G~L,32I%ƏTnHqJ4K/kK1$L3D3͟TM7߄3N9dsN;3O=dN>4PAOBE4QEUPF4RIttRK/4(+մSO?52NC%TSO `TTWeEUu5VYgVZo5/mյW_W`%>26YemLXfXgZY6[mIv[o[p%QqE7]=U]wd]y-Yzl_7"  |'7` @@kq&h Yd4`A6%X_}5&7c0imEenF68AG&hNN`/pe&ZqgϮka[m۞j8c:S. {ٱ5.l~q߶&r'ei%m(d8q~{ ?OW;Txc}"|( 0@1L nu`a@P:!/~UЄ'Da UBvʟQ8Іak8Pя 9HB 8()L"$HDW4 !ixу`#gєDeYPD ^0KZҖe.uH"L'*Za %0, Q؅Bnv]v׻ͮgڠtj^53a @pv %lXI͵" Z=0PWTp5aw-yb^wC.>=uW>1 0>#[#veyYOr\b,`y4H$ɉO5I5l|_ cV2sm$iSK2blF%Ḋ6)ѼfO!:_dNc(E1~y+I<b/p_ D@ n ک4SOѭ(&}koOz=-0`TM jtkcYЂ_Ss}`@)#L=me1 U.Nm c5rlמNG+9\CLñ,0|@iC+$!߷}af N?Q bāYK҆gt9zH(-p$֌k-7maۘ &T֐]z/uu^,1|12]{~[7Dk*{@^j`;!\G '|!;D|A\ƀ1c ;@睗9>m,{9C@אwzwq7_w{Ma T/H>;r>軡xy`# =bc ? 6;?8]s:to',k(8ɵ pk(Ckp@?>z7=KC+<Àg2 7A1{?þnzAwK< X`"!$Bj xCV -cY7*466C04$Ø3D<%=*_z„cC(!lDwXu`>|(DA?2;"8"XۆDJDK,L=o==€؀89l(F0xp!,Dpupw@v`UE& \t;BEQ#M4 cBz<<eL6ý=jVhܖiTp. ?",8 ɒ$`$(r((rHW PzT =r&|6{7NJrCĴcۀdFKĉȊlM3 hC RdpIPtHsIt@r(!A|+!J,D4eBZ1?dlJL!|C`rp.8sPM\ꁲ JAa}솾d9(&(깮CgDBZLEȌsL|ɄA`Y8mC(29$ E7Np/N8Sd\TLt2DCN0?$(؀gPQ:pQ= pp8QżM7:7IIp?oL{J7m#ȉdN)6cA h<$`655m(4S H'3%'%:} [?0Rp@kXjH :*mI`Cua75)s2YlLH4s.:Y€o?S9&|>Qē(diPaԺQjbU9 O!?@,L-Ήc,OUU ̑T]=J9`&%C*$U/]ƹiq[ , j=T?Em.<mmn:|PpqPsbetLWz29?~AݠioIP؅j`X jHVX!r|P 'M4'l{F@)%|=YOmVul؆mHVR*d%$ZR\Z)kڮDЉ։]Օjșb0ۃ*mZJֶ8۸RS-Zz=>%@\#e݄L:\L%.6O妒W ݔ%Ľh p{J\j;l(mȆXp#JL:]޽`[S-W(i )*++ <`Wj:BցN*Ҥ$NYq`j`|>?@A&?^9lVN4x76n9`Zۅ4s SUfV6&\41ֹiN曑Ic @iњ9թԣvc? ;F/d< D1mǥlfC)^ f逄ѿb&X;#-}~@:Ij q >ƭ!\J!S讓vJg0fú"AĐc( @ vh[izvHj"JSz".j܍jp$Cd$!4j벎jk6ƟV붾v븾뺮_kOk(& lF@1QxlƈȮĶl%y̦ >VlѾ`h@m l&m.ضm~Ѯf> Іl^&nnmfll윀n&lyFl>ƞmlmnFv.oζV^noNnOo.n'p¦~ ppܶ>mo&go&qmp(o _жq6 q׶qOO_lq wlrr&% 7oFp#go*Qr3_rVr1qnÆs)q0s=4;s>r:'.r 78p~ rqWs=/sDqHuMtNrp/t0_s6 ~o!nrrvY[gr;lmYWu`s-W`GctÁ8XvHvvivsGtWugvwwwwdžyz1|}hx+7x_Wxs)wXI%kxnNx52 7y/)Wy%IwiyyyyzWf6BH P[.FkSP?{߀o?B x~ /n @/e/ @I艙/ (UX{ŀ@j 89AO)_|h|?pzh@>Gိf{Bxd7@> P/4#(9"~p~57؀շЁ׀@1>P4B 2lpF'Rh"ƌ7r#H,idLj%$̘2gNM 6P'P(``Q2/Q 2e j*֬Gjbǐ%+ Xbdko#b(a`.^$HDMMm,/X*,1f'SFve˗7s4!o r.-qQhukL@-,4"I82Y‡E <ޛ8`ʽBp#>s$"'v{:͌Kdf8fG+0 (Т@ Q 8@}Xm@EOp7L4D EA-A!εz')^O"Zŀ`B9 0E?e _}7*L RP -$BEj1C0,8&|+R`r(cpDE܁sJz|%uFu]D LEqZ5 5*x;.Цҕ{04OUK-E| (; 6wГ*$ԍn_߈(65]1bG:8$%HUrƎ+m&ågA?UMC\FWXIەx` _ɉB f?> Jr[G2a /.Ik&P-YS MfP)Pa]=6t%u5{&MvΘ( sv! o LTZl;I`x >(Z@ЀxH/!_cAmRhHAMS9@p ^iOy@5&@P}q11eR @PWb,IşDЀ߳eB" %4 O!1܁A"(% X`  8, 0 ET@ VW[xAV94Q\kD4zAA0SEAE4=!)f4Q@ D*#\@ " ؀aATy1 S&pZXXxU^mKP"%P# k<A%BELhQT'v⻴@B$)&ț "(#.bV'ڡxN1vA@pB2"ހ8JDL$F"6 &FD%Lt^*@'8E(aH)~\ȍ<X\$Ё>e.#5@c h$&\* yA\_8SFHLԲ!}MHHl@J&'6`A H-BPxN# P>&4  @@XTdUN.R#TB"P4FD`]*JDiB ,,&K9cf'.^C)Lt/frf DgnH&k聴 S4Ak48#mG܍g ] AA(#5H!Pj'>>p\d_fj& @ ( B܀@+d9@⨑eDA"$EqAZlK U@ `'d"A\>4AW @t (h i ȀfA]5ߎ f~ lL,DKRH(WFiLU4<x@ t@mӄi PF&VAћZRu)@izH*up:mNv6ƌXQ臦fcA<0U *KB*[*W0L]Ɍf@ h@=@:TFk-Y(mlezȪ`)rꐆT6#ɫ (p] | \eՐwLȥhpz,z.LAv=\%Iua b&yj(€Hj  -v@HzIJ0WHתNc,]p=x橯m-z@ HQ:ŚZDumEjE, [i DTVS'--j lGŌT_@d>oWD^n |oVXWd/⩞/n AEkVd2"GD>(%Ϙ@ ʨhNG>)&ԫ*&Ipz,Xdњk7o̝Xx!yee夑0dPjsaH{kf `^gj9PI-ϖ A8'40`)tЧq0\3+25ՠEЀ@4llva76D Jns 8/߈w$86xЁމW>r GAm /jy4HN9鰿rs2dz켫[AԎ˴ys8 wALH;}C觯wKWn=RȀ@ЁLr4L,2'A / 00@(L WB`@rG) d[ _=HLQpz&j@4Dy0{ 4H6񉘢0@{mV쵀 @\ #0 /?QiLU4`{y`c(pFIR.t""=Ĵ5AM 0 [U c;1~)LRj-hd>@L' Ѐe+ DtH8ftc1ds͌<Uv$pM(ds:P\Mt{l3DI\lcm\O&A\r'F ӠGMjRVN+l/3Wښf2ܘ'PYbzбb|P*pv)5ؠAv+ Z^&p6g@ =U|p}~ʲ~dpv|v3-H'`[p2pYA^.RuVPw:_m]B1q} - (܄ 0.Q݇«Ls@W{m+ ךP\ ee@|D5 JoXN Ѐ[cاXufٸzi`el&6/l&Z7J~ `JpR ƍJЅ>bxX||:r3 9БX#Y Pb#A޸pDFfxY(|YE).%*c֧JЩҹRau YspsVL` ({Qge9$9udžt `x'YMX36 `2@ܗ+;g6@j~5v.)\PSzVC apzfhK `ro +[aاY(c CM+CbKP㠺Vgs`3C[E4뻻2DLW*+sz_7 W^ Klx|D6b…[F.\jUUVzKfu6O`5 *P04t@0 i@M_ 4rFVv|xl5ql'&u8} I?6EMFv KTfɜɞɠʢ<ʛ^| y~Z)̸SV˶|˸˵z *oʱC˺̷˄bXP;:~f@,x 7[/Y $λvC;Hς$s  '#٨Kd=|]|bb5Z,taab_cDжΌbri Ѭ Ső.&] (]@o :h,5Y6ӵ\6 Tܥ$. @IX;Uj^^0;ӯY} 0BR%E TP>.UmՎW"3B-g؂=؍{Rv֧!Ck4_ sNQ P uzݸ߇9 `ؠeRVڦ}ڨڪ-e0dV/etACB5K 2 `̽0Gso;ggV;HZT 34&ֳ&i(-'5V0Dv.M oSZ3ff>@B>D^FPV4@a,Ғ, :ACu.ʕ*#]Luh~˂VXn\#5owT` z~:zι,b\/,)f؄d%[NY-)W- .al> `{)r=jQ~vM.Ѣ yX0=$F#B. P8\{"kƽ.鞝PdŞe>鬱y0K*蠑(1 He>GiL{uLXB/k2yD/h= 03 ?( ^5|'\$P:eG|`[)d ;PK{KPK6(AOEBPS/img/lov_page.gifn,GIF87aԼtttt|||z|t|4<$,LTLLlltt||ƌƜΜ֬޼δƤĬά̔|ƴ|||~|μԼʴtt||$V>tN|l􄞴Ԕt~tdLrLnl̴¬tzt̴ƼĬ||´ttμdfdʼ䌊dnd||LbܜܬԔ䤶܄̼Ĵ܌|T~섚¼d|Ԥ< C#(uq1`̶-VЋ'Z"GG\Ԡ0Hzd'H-'Bq=p{~J-їd\n!IbViO1ke:iΌ4iZ̦6Tmz 8]$L:v~ @JЂ@І:D'JъZͨF7юz HGJҒ(MJWҖT }LgJӚ8ͩNwӞ')PJԢHMRԥ PTJժZXSծz` XձhMZ։p\J׺vͫ^׾~ `KMbrd'KYBͬf7KVp hzњMmHKֺe-lgKRVͭnwW .Z}Ps>ԸGPWuJA]Ժ.v#ݏv`wA]7My/zzwzK_нt3_,-|C^ X&i ~w\Q,o ]tn= `EqAVXnC+^ؼq!q|,c!7 r^Gk6Mۡl.8@B8DXFxHJL؄NPR8TXVxVH5iE6 X8dXfxhjl؆j[^bvxxz|؇~[3@Lh03`؈U7Jx p ـ XxX(0XhuH:%p ~PxȈp ŋ8˜xh،ƅ5x_0 0 ԰ հր p؄I8Xx؏X9Iy M9 ~0XSB K"9$^P@Q$ْ.0&ZC@_ A Ap PȠJUdPŔv?> 0R ?4K:KPQbI`e݈Qp0 @ AP ` ǀ I(~EWH9 0 i0g ɆRɘ IAL % L@`9Spp@2)Q=*HJ@JiQz p8 7 A*JW:eRpI "pڢgi*Rkq $ʞMNZJp:*)SiJ:Zh贩:ZZQj@x`Z  el*pqƒڃuWPګx\7umqڧ'jGiy |=؞PJdzjȣMЮ캮*ڮڮj:zn H8tસ(2 bPӚQXpuIɬ65@ @ 0K {L([7)j"Ų.2; Z{ɨ9{H嚰+RKXKY;OZQZS* Ѓ۪pa*:J6t+r[{[$V&w{궈9m/ 4k:Ț|[ zr"ɸฐ+i F R[[蔺jG[K5[{;{NZ[ڻ_ { T B`˃ ;{+K˃V{ t~!vu/f'Q ;y;ժQۿp E{ʻ K7*Z»P <"0Lº˯*ܼEX< P CP jp {@hpk+kET,Ŝ۹bbb ˿zCP Ԍ ԃ@ʃ Zв կЛfd-MQ) ]t˪ք<e- pp p (MuƜ)L߻eu̕8M|QO ՜SE]ԔQ ԧ=Ԫ]О\]ϝ>.e}}֫= exʜ,u}-MeAh T0 eeP  ,t|қۙ}ߓL`:]u?ެxS|[Ő=7Q]d~О_=MMi͌' %p ۽3?h E  Xcݔ-j%yLQw0 ՍP`n{MQ<-Q[@a>!?3=H-euۖ|&ޞ^NANP ydK:c' `^bNLhQs~\wLq˰.lMNȹ| @(> Ҍn郹Sw\ڃz gjx5Վخ<,%>>qr0tP`ώX$ux0y{>g ?ٸl y޴?$O`%,%BPD^_Jb0dP3@ TSfphPF?yjiH5FHJ6kZ\^mo 6Xjllcit_vjNuG RS@=PVp4>ߜ@Q%f%Y[ ^PLSO__^QDPFpH$M92,!O@C`55P /ޟE|P@=?dF DPB >QD-^ĘQF="B%MDRB\SL5męSN=} O5 4G;j|UTU^ŚU֖@~VX:a 8U\uśoײ}Y4f-(b?Y|_ƜY3P=eeҥMFͭ]٧hƝ[n޽}\pōG\r͝?]ztխ_+vݽ^xk7^zݿ;zǟ_~d0@$@@dA4/A'B /İ& 3C?ѽ C$DODSdE_,qEgFFw1H!$D2I%H&2J+J,2L1ǔL2D3TM7߼M83O=JN>TM?%P.-:F%}H+t҂OQJ14TPGմJI=US8 T_VQMU;]tVYQU^7546<#.8XdU6 }YheXXgZk%7Zq-lp57]xߍ^u-܅W^t7`q78ݮ Xpan8x-!fOa1Xc7eUn yaKek>bAN3N9gc  ѱ~:jj~ :lǦ:뭻ifjmKi xKx⑇^yx~zk^:UXa7_?}Շ}ݧ}Uzɯ?緟@Oi?.Ё,`@Blh ~Ou; R0Bp)(! OBЅ& cX0/x l _(C氇;! m(ш:D;|+D*M>&c8F2ьgDK,&_Lc8G3щ{#4ڱ#9HZ·d$%9IJVҒF^ғ%%3I@v2De%GG=%,WyHDE`[B ]e09LaeHK<4f49d.SxΔf6l*&7ũMrқӝg<9Oz:O~fNԠ(:7ԡM(3..1@2v@D:RF &@JUR DiLc: tT(lQjԣ)IzRԨ/uLejӚTFѐu(=QYҤ*Li@-UN5UjQUԫ_iS:QTThYT ժ[TvgjV%Z.E\_÷2_%R5aDԳ+dS:ڭ´3lj3S_)\WVW,[Kk`( mrKYӞύ.XG]Nh]t1G^Zv'k6x{ze%}^vm}+X _ X>M0l`'\ {]p~^ֻ#bBvme1^w<)0P8nNrC]x}c+[$Cp)d9F,ˬ2Pa*[e dn=/*^M1hkίI7.q m^uEj'AlElidFG#:fE@e=kZZ ڬqm|j+lkb״{ _kխu\Zv4g{>6if8ثIYXk 8Ȼ`Y6N-Se^q[{x䷻my6[#fx^S }BqZ"7<|43CAypWr\Z.ݘp|.k7={\7HUrԾAVO| M݀ &pUށ]d7;7v,{x=Mպ۝xG\xg|{tÝ[oR7C $ G}U h _}s>f:;m^?=_߷ߴfQ#O> {|5/g@Gտ~]`Ձyk]gw;+ӿ?5@n,@ e+t::(2w[2;@ A+A@{@}" A3A78Gk:A| )~&\'(9e˶!A %B'/)$*9Bs..d/C#C3=RC/6|õC@$z8r9B`<2ĉ@āS F3HԈIl+L BĢKD+C3tD#+s7EW9! @cXEa EEE_#`BZ$F(\O C}tGl|GPDH0ʫY#;DM4dM ;PûP PDP%_,EL = 0)>[=+}NFJRZR&={R)RRsR/S*}Q+,=ӀKSR30R"u jl}N PPM1ATǻ RT @]+G}+ԯsP]uUK#E2l2(56}dq4as-tWj |ݮrFdS%Up @xRiUXF%W?JΉWKXOVlmAO=֐1J4DԔV>eX`/eDuUJ$X};YQԟײf%Z&P EXXZ[Y\5ZEQڋU# ڡ ѝYU-t}ׯOMۤ]!u#5([7}6-ٺۮ^["٘ؖj5ӏMZ kۭzܢ\\ 1%E\Gϥн=[-[ܶ\]>jŀE]8ڊ]][%ބ4/]Z.4Δۮu^ުŅFʂ׎eӏ UٴIL[1 ^y]݊%ޙe-m[Е_&Y,E$}0 a>6Fa)vNܥ`x\[8 &!6b!F"N#V&ahy"%b'b&,b(b̡bb,&16c.b/& 3.c4v8f5"E1=`;~=A6iuixxzg~j闆g>is\hgh.gsnjkiF}ni|fny벮j6@ixtNivn^j&lj{>l^v~†jNЖgF:jVkvk׸Fj껮.mѦm6pfmnef뻾mFnʦmHN^hNn6mlԶnn찮onÎm~mofh&mXkknk>pojNi.p'qWJ>wqi@q=r I!~^q#WN&wr$ig~o_q*r"q.r!(n16 4Ws)1i8r-:==??AA'CoCGE7EgGGIIKKMgMO/OQ 0uuRg0SWW"oZWu^SOu]`Uc b `0vdXovueOZl`u\vpo rgwh7avOwty|uzw{~tl|+Gx!gslux/w'7GWgw;PKKs,n,PK6(AOEBPS/img/rpt_classic.gifo7GIF89amMabbbccceeejjj}{{!,m H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJjT=nxʵׯ`ÊKٳhӪ]˶۷pʝKݻxkƍ)ȑÈ+^̸ǐ#KL˘3k̹ϠCM4iD@c˞M۸sͻ7i@`D&B&AD&PڸAMFiX^8eAUf`%A]ihj7@ep润@mZf|ȜY硈~ !9y!qpD@*)*jxj!pچsa@av꨼`qjP+F+r&,wv޹^![2 #:ٻaDjH"(ka#WqA;w:a ,,'C4 32׬a@{39mL_<4E;TWmXg\waMtdfvmcۜ tK&wxzM7ߏ-n'zK-G.Wng{砇.褗n{ zǮ?MfԒ.{/N|<紋xc//=Ooؗ^}oϽ͇b %$OA. ~&\ 'CPPYB(q A,B"1dbzq@h!R1ZA;r^\,>. Cbƒ|yq%P@'G=rRh``(BD*ъ#*q?("ҁTd#HrD&7HEN. ,er!GIAHґ,K( LYEx@?-ǀ 8EjDŽ@Dj&D%:C2t(2OzR'mBu)Pt&5h;‘"7=qOqQ%X9@.T ͥ 'G>t+EpzWM;C>ɺO}zx KVvBE!Widl(ىX>vr )HK R,RFTmT:UU3OMw`B;Osƅj" $ @ u7B.ջr\^ap}k4vM-sg\v[&wyEwgqznҦ g;6.2ldk'(\> ,/lD1&V$)p\`QЮ`Oȁ S`OGFb7qe{</Gh?;%2pT1i!XD',ZRa *HΔL>jIz| sIΕűvIm"ΑóS>[5(̠l AACr# WW>4=_4rrް! 9I뙠n gn_taĺD }إ"Y_j{PKV"@0jq;d/{ζ$ Ej_K:Cr 킣zf#V⼳Ԥr{~ў M%t=Lۻ^ڞrDqM~P[D()Uz!ENr|G{D7G?%/PX5: ڄZ:ԝtSE޹.Ɣ~߱bnѽxWfY;rOLeHO Oo񐏼'x_6-O}P/?֫~m_<=uw'=;OC}WFqЏO[?/]!|-B+Ns>e?"=}}?Bigq h ׁ 81&)xG(؀႒A2qq*h,D1(q}L~>h=؅Fǁ_؅\XҜ:9q9Yy597y~)" yٞq៞=,CHIzٟꝲgH-9 隸Lx15),I>)zJI6َ 'ZtY'sR|y؊Hhdؤ٤;y(ps7ʥ81y | eQ2hBwDȗYaڐqyLj9iH*. iaiҹ(ڋui~ |)z]ڨk ٩g@zC)X^(:IȫyV:w)j :w9}x I^ZQ'yݪU0yJZȭ\jړnz_y 9Yٝ,v *ϊͺk ʖ۔˨{.H :Z;Hy뚌j-Z˨Iʱ7.bJ@ˮj*{.K ۈɤZIS _)Iˎ:M:yVoش:`hNu d{ x}!:#[ "*̱2Kz٪ 2 JYk#/k" Y{ț٪T [#+-˹Yx;˺ -;˧1; :˸vۦ0(J+KJ4Z3ɼ{"~{*!N ̽齎9ZL%{^OڗfZx:M9_-*,TZ y+ ;C ۳ْZ5 Jk *9;#L t,6 \{9Y]*_i˰RlR[; [k8ŇmlJ䋰kXH;<|LY|yb,.\z{ B̵LP,k JȰɁ쭉L{X9lA+ǘ,ŢQ!7X<:l̈́lzF+4,|;[̾ƅ^[ϯ(ȹ̣:/d+^ *GJѣ ʆ[Ӌ,V!>QL#A}"ECH]{Ӧ/ԇ<՟?m{ImɌa{hjؗ~΋c e=;Z]ɶոDym\Р s=umq׉}!Ԃ6kO,LKp Tݽ9 ӢQ٢=̾٘:3>zٯx!-;eɳC=ΫZݳ ߻NaNl>OZ~- ~np‰m<uL=OH ,x B >t!C ^ĘQFpPbE$Zr$J,/|aK4O1͚}^qHD#D3Ɔ%eLUTT^H ]aҌ*9mٵ ۦtmSWy6m\z,q۽Ga>|{6T1] kvq]w%oތsqbΥz6VZlue>r^ܽ}]Í[-~*k]acM\w[y}vŵs ^<92o:,tc/=;||~͟W/@@K#@.As?A /p Op8 ݃5 DOD1EWdE_1FgFo1GwG2H!oPZ"pI'k(hJt. J.Ljĩ6,MT>8=ܳ9@SmPDU PF\P-Ii2EKCÊ2Oyˬ8-ˍMjT"*VQz$cj̸>H 2#$ H ~q$%yM \NV #*;IC"W4b-)4۩tZu T[(DJJeuPjٹ[,+V;A 3Mx$x [{6q킻r6F_eRgR̀7u9y{EXX٨aܜ@Y,6JD?OiȤMfj:FNq-]C[zP!fݣ _R̖]X:Kq333ReS>u&Q[D]:_TN V4e SvZ;(/qغ zW6tih^A*դ{QS +u+ȧ.քC]^K5v5t^HUxBf={Oi6|r]e΀H8η+b@W)p)Zwr&rtEv")9s%zشzgxf{Z<Ծc 7k3;`|{˻;;f*57;ƆqE.%]{Qɫ(l%ɜ7Ys6lasAZ&, iOYL f(+X]fPӛgͅfJ\Y ~'v-{J4zfSpn=q~oxq>]iJkW.Q[ұYjVCtNpGүzhj 9~CJjUc^YS/tlG'n̫Į60D`ѻ)ڗpr a >mjm-m[ֻtF龯G%pFW蹭pxap~2c 8E.Xu6 khܙu-'^C5!g,e,Kw?ϸCafVYW2k=u }٨>.|ΘV]pۖNlLxo7Js]Ch \t#;w;Ra3Db24[=%_:R"CA< ޓ @AA{Z@Ջ[+\kѫ'Iv)QS4[[ճ('\B㛫Bʛ<~}ï3+7mKh;(D=I*r+r-I9Co#nDi:a> ;i k'=<<b;:{8[;2SQԾO;3sK ~񟞲9Z179SCbA˱5dBb,3f96āQntFċ)oţCŷR;bEh*WuLZ⻼3<5xUSC@ȈԴx{ Ȓ5B@ƚ_d|s@?J;`J Z # 6;+>.9>J=|Kt><@"t7KЌF*C̻;{MK)L TgXr&FB? L@7AUa+L, N"3eE#,kl/:T4O& rI' /O6T|1\J($:TS'9L4"|C^3ʕKDDJUU*-.DRE P4 p^c.S:;yP MSMDLp1ʤ<A4W<MH_d2Nw-DR@ltWTMݜΪD̆u؇؈XO1E&="]Lz]W/"-M1=،W^]جtM Y@XWŭM-YB]͎9OPeWTwGOW48 \Zb ϭ% M]ڡENeOdE2m.MTF r5SnbG]EaR24M.".sf_cCS-`w蚕hafl=5UԠ{CU&:flKԽ6Nܚl;ݸg^mMQ h]&[\ģwiq8[&ZKy>m̛kqO~ )f%JcVnjiD~jb~+˓E4ܜ^6M^omE!`5KFpo<\fk\&pdRo oo@^e}3 gYϮ eq-m~YZf坕F)Z.g[6堽6No2Df$~*]ƯC,oΟNm~%2rNAMnO)N6xn糖f hEht4gG+Cd gdaNCwbFY Ie&F7%Tqè iFiG]vQӼuE/fbEHۍXoݬq`GlDfSj%j3FqXt6nm$^GkNUukfS(NbjT$D6UbuqubC]ȿkؕ&=~kuvڞ_dQObn dvu`/S[hlWU׎ʼn7S@%픴fۿYu%Waje8o:6<9_Vnvy5:hUKVnގxwrM/qWL$O/KvlvkdoY{SeOFWoޥ_f5{  '?{dgV{O7'quMʯcWo{?qo/{N^EYZ1rjv?l)"Dabr#+~(_? E>7lgxAobzﱾ|vP=>?~,TsRCNvgBg|}oHG,h „  #BPċ7rqbG-R rĂ$AzdeI*;bi2K: :TG'S,gB(Z)QR"jTFbqU #&5زI:EU,ܱi֭ݳxk\JcNwf70QѮL%{WiTGײ;z-=g)9-[xmƕߊ:0̲Vz7a7\vcvxpϠ|YٵN_tf弯ޮyMwE }Z֐=9zrt% w͗ރŠwކ {jǗdiB8|/⦘aMMͥ(F:.ى#7n7d! $\ X%V]ʁ[v~OvZ^֝Yj7Pkby\d?yy$fuH Z'%ZQՓJJYEۗjb8i:ҩ 5ZڣWZ*<*֕JB&e jԩ_X*NJ,% 鲋*kl>[-^NmrUz[+k+g^{/// <0|0 +0 ;0Kl2@chuH c u$TD 񆮹DЃ C FܓQt9 rEa` poSz Ap9#77:#*GI@f"甯t, 09y♄(խږzwL)g3b ߅McΡ#N6<;.eDZ*%[H5 S,2 Y6JAЬq}'xч~l(e*Ѝb&͏NZlo*}Kci)U(ӝ>)P*ԡ Aeԥ2QéS*թRZEBխrہW*f=+ZӪֵn}+\֭UvzjzS=l! H@zЃ*<068BT+`3+S.u rP,d S!U}VJʠ-v PP0!`5xm_c+-27)Dk+@Mp]@ȭ*f+^=r<ߢ,0*t fw@pF xL*+{{`#! X8"@2 Yfȇs`f %(F .,ޯ _wD6HG63c'yIqA^)H!^Np59ʖ9dmq 21283f6+z!I^,jBc\fg AgvQ 1{Ѕ6A C9̲HOF؄BBa+a>I0UzHnmFk[SVD] TZ#!7A݁ |HvMiWެµ9N.~S^1 wD88؀aY͏rǕU{sֈu^p' oU-Uzw"p-Av@._WF?Sr3C0?V0P40 8 D@PyT&]C \x6p N;&(?< m\ Sx<37^.ѓX/=SϪӫO_/5'=sz^yyq{+S( @s!L;xշL2O! BuhFAJ""A_WB> Ёz"@ V"TiQ Ơ    !!&.!6>!FN!V^!fn!v~!!!!!ơ!֡a;PK)[Ot7o7PK6(AOEBPS/img/ir_select_col_rpt.gif* GIF89a ks9skkJ{!!1R91c99ZB9s999B9JBBBBJBBBBJJBRJcJJcJsRJJRRRRcRR{RRZJZZZZZccZ{ZcZccckckcccccckkkkkZkkkkkkkkkskk{kkkkkkkkkkksssss{s{{{{{{{{{{{{{{ބ{{Όƌkkkkkk֔ƌޔƔ祌ΜΥkkkkkƥkk{{ƭέsνε޽ֵ޵ƔƔkƔƜ{νޭ޽ΔΥΜ֭ޭk޵{Ɣޭ罄罌sƔΜޭ֭޵֜!, ] H*\ȰÇ#JHŋ3jȱǏIɓ(S\ɲ˗0cʜI͛8sɳϟ;JѣH*]ʴӞBJJիXj jׯ`ÊKvkԲhӪ]˶mسnʝKݔp˷_yMʣvUÈ+^̸ǐ#KL˘3k̹ϠC320Ij}Ǻװc˞M۸sͻ NؽH4O1ǣKNسk.r]?Nӫ_o FjϿ?pXwf%^ ^X]nCD(Vhfv ay"lx,N㢋,zSn`#&nx|X8&)$fdl)TVi(p:v%rlwcbdm"%tzʚ!$OrgQ,C -lBʡ$Ikс,0!A7#("ڝc^i`$b+ 4=ݭC-35̠Ң )4}HDC&^dgjz%rҋ0rX,5_f'O\sͰɱ 3C@1=TEݷl~ Fsϡۋ+]Ջݽ>l&(*3Lsmq+D\IC `i7\#2z w>,0#9bL. Zl2Ӭ,};`ހߓ3;;A+`{ILh1ӷQsI}}#S`֭m͵]^P6kpMq3۹q&+s6<ĿB'C7|;# Ŀ;(! P zm1D三2z̨FݱNhm.tfwR 2Ap D!f`becKÝ;@#tZ*fwS]YF %j6@ƔI61Bjغ6Mh!.\[^ <@9@8/ۅ7jB3 6IFp `?@F\C exp Pb`E \`35q&KS%*ր 71Zjf4$ c"Y"W5 B@>8# ؀|sb5H0z j jჿӄmg εwkotȮ9&T@n_3J_:ӛ؈E"թ˪n\J7)~F E7MzۻӀ%MLR _liMgڛk\q vH`BeO{:.ʻM>(Oʍa ߲%Hr(_loa+04)mG5&ԧN[C$zg)aURq^0 X`Y 龤h=\6nCi^ft5ǨDet"[sY@g#OuRA|$;RqDч$Hq;wwLe :< mL;/{EEÓB8CFx"'HP~J%AQxXA؄Y؅^H[(6a_Xf[hV1 I t(vHgxp(t(v(xPU80 p }8">XX'؈uHOh$/! o(IPFFE(X$n2 j.,":]  ؆8؊SHDH(&!#DZEA" xX3QaȨ"(эwx>A 0(08`(#A2`؋y  @<ψ9" )Hȃ8 IvH ؐ"yFs  "9ِDL ;Y(h SE ]iXȘ̸#%0 4F?8! hX8ɕBI@ByØ𕉹ً 1!ɕ;m@0 k hu)Ivكxp:Y YFF蜽HeVt$N9)쀖"#(!FPɛ *a]ꨓYIl`ީUIWٝTYPy`(]šٞ-0yy)9`َ̩YcS `5!B:)繚#J,oy+-j/2ɥĠkɘ`Ŏ9 9m PzвYY5x51::Y6 ڔeZ_)OIөP)Ɖ[ EzPZ򉛆z9F<Zoi' JzTyȚʺڬЪxԺʫ*(:@!*ȭIQJz9$ꪂ :Zzڒ{:+ ۰GX"X{۱( 3$[&{(*,.02;4[6{8:<۳>۲!;D[F{HJ PR;T[V{XZ\۵^`b;d[f{hjAtpr;t[v{xz|۷~;[{x۶'$;[{۹;[{ko;[{ۻ;[{țʻۼ%;[{؛訔KqP ⻾۾+[[x@P諾[;K#aۿ<䛿 ܾK>R|̽<$[[,.% l" 6l*\ 79>l2?| h۰=<>RKP<LPV|XZ\\ܻU,#^\` L# VL"L@ӢyP O [0yw f&Rn>pR~] [NONߴ因޺jPL>t^vǸFS^aS;aF>ESm~捐rw>N~n}>r.^>kbN聞r^jާꚮ~.b萮Zn|KNK~cB^z>&annmn]N~엾E^i]rS.>vFN턞歾ǎn赎bގ֎^J~ "?$_>-*,.)0?4_6O6:z;/>?D_FHJLNPR?M.pXZ\^`b?d_fhjlnpr?tV_xz|~?a#p?_?_-J(հ?__Oz?_(8ՁؿzJģ??dGof_N/O^@ENB >QD&4pŊ XcC KJ WHȍ0idŠY\ISN'OPC]*ZoM>mGt5 2 c:X~+O$ب"L0Q6ܞr;⤛7&Ya=wRj .4̚0hP^hǾ@A˘5 ZBU:aVתπNC7zfU( ~XKݥt* yu G ygpϣL!1MDNFm0 q3Qúl"CC+2At:Q&?Z9SiҨ%q⬹cA MT)լF."KTh)kKQ#B@AzKUDL!SJMզB:QRY:TUEYChTlNBD*c6L3Ph]c:1ʒEdlK_¨F2DP us=wۚ.}F\2l!WaYk7}Eۯ&WsM c{3z9dA\cuJ#"WǮڣ5%)=q`}fd t_X 0,1g*њ!{^THXU2(}=MfRlqLU[+eZvd{)ypbƱ[-H;*ɛp(Hx4;ۅf 젓n=<ǁi[oOevakq[|;kP?gY:zx?|Mze%z]ɞ|t>sߧ~7e׿`8@2$[@.`%8/o< 5AvЃ Q>8BЄ `NBЅKa?^8CІz uC?K8D"шGDbD&6щOb8E*VъWbx7Ћ_ sF2ьոF6/i`3F:ю,y#DяB= F1d"yA:D*d$Gy rِGJ a&E9n![THJVvД\N73(  A er!/(];t0* "ʤ 49R!LJ6UIXCbA-#=:Sy1- 9Hɫp%C' = @BB B*n?)ְ;yut8 Bi:UN#D+[~'0Mnv ]'8)B&G=iujj Sh冪i2D=?%);> AT^Ag?yTN'a! F_:03H_ Kbk&"Dt+̔ٱ`E-zQpZq[,MVpIbL$}Eɳƒ;>p%li׹ZMHu-SbQYu*+8y+*$m]|@Sۖ\5UBE ù 4(7l+:phj2#QCF I5uWu冮q |ڏa"^Uuoi) l櫌LE0u .ѵ\nXA^p"b&Ru]{L䥻zJQ#p;\nӆm_<#8/u mo"pDi|e-)N)yAh\+:47ʚg=͖a E/֡4ail`8lk6dwF'es3l]ju).Dӱ>Gqg3YAT l[r }8(6WK1*LU_fq[ͨ6!j;"d';ZP5[ٳN펊;sͶ{!Zl}nuu:vL?Y1aZ2 9~PZ%_)܌2Wr ks|tK MzԷtW곢յd_;ObEgG{վvoz>ĝw;|Bٻ't*gzXhI77$8x<$%'_yΏ$Cy_2K1|U/K'>n0 s'xʥïԒVRW2aO k6joYδXB {I!ֱSұ鴠[e|/&Ykr3?1ڈ)ʩp?*@f80`HZ8?ӈ? KכB*3ɘ籭+ar8R=,q,iȒ#,?ÒP',!< 9A\SA$ <B k.K B_ C/_){IIQBA C:b5/(0VZHCM̾{ #9: $E)ԖC>Ҙ!%[_>E=r2[$2F\0+D!5bDD)2*E˜8FET2_b+6Ņش3S3D],4^QkEGG{-|lD5yI-N/DRGMC5UkƃF,592}D{ @W"YGv c*9< E&T5pIHxaLs {|c8r۷7| @Ɏ(AՉ8H4ǒJtDIBc# t09ËKLу#dL: :cDL5;`tLZǔL3ɴ/LML;;$4DTM!"d΄,̤, > LC"$c¾_룙,>JPOBr m/ @ZBSёXr: A 4(Q2(8E J@\@ *"@JrR@ | ф\уjQѺIK=PjKCǝڭ"D1/Aѐ76<%8:U [BȪӊ>*C+A*B-H.T4ӂ{>=ܩ*Hz?=To01- 2YLS)찕(kQQU<*IеUU:ӓY}4lbzDP/z˔M{!jdElLDm7# U5e GZqɘHvmot-9a8eԓd/a<"ij\2j2HGkƸ uFn- X}=*y5U"8l(l>  ΒIϙƒ8١L} * IE44lyH[SYHTٰs٥M+KYkY\ u\GsmUz*d=)*P[+-!sE ?1ĪzY+m6)Jy3SJ,aʱ8[ (J|sJݻ--F ܹEKXX#$ۯ@9hy]0K֭5X]ڃ;$^]d^ 52 @Ucc R)"T,QR*R'Zꒋ$ l3nd^!3bgE$8Vm&2VOIVgJVoDVU%Ј^ Gaގ8{jpEf F]BZH&kf n>Ƿ@tMFgzxrfyXi쮉k\Ntgogzo|={FhRh&dhH䲔YYJiZ f_鹡J<ܭAZOSXȚuZS[ڐJ0ᎍ`8jn#nfJBQh{Cˠ^[.F[5J\Uz3X\\|\cܮ6%lfc޿d]喸DmI^1D¥kiMa M^ ^FVv!&6Fo_evn;2o_7G?UWw ע p '7GWgw;PK**PK6(AOEBPS/img/lock_ico.gif GIF89a99BBBcccckckkkkks{sssssss{{{{{{{{{{{{{{{ƥƭέƭƵεƽƽƽενֽν!,H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ %Q+^̸ǐ#KL˘3k̹ϠCL:(XƜYͺװc˞M۸sͻ >ON3Q̇;l@ls5E\Q{9q .^T',0(4Ft5*rYޟ& g%MV壔Vj饗r%E 0GQ@KG1g:a):ZiOKB)n;L$KJ )x'ڧs'CM^PDfjd+%2mcP--WVvk;U{( ALč+vqоy!R`|\dQ* {#8Y<%ㅌn @8F|M;"D2m[찲|r0dMp|1 d+ SpЫ= }ළ7$ƾy'H>~b>Ktjk\F_xEb=jX p6pi/K67Axg(ZS$AHܭ-wQvǚMx )^D$ mg6w?/(P5nC~w8oq|5# ^R^hCb7%bOS+O!p5xj`d 5qAܦ3, {]3(Tf[R䅷qTw@f44ґs$!AXnR7Ϗf]_Oj`wމ ȋ\G7*cbwh]:n/YD_ 3JT4, *P6|}U@ D' K 4po2! #QQ,'w60 #'}s|趽m2n7i}DJJFr"h,sظ^FIYfoLiF˔|(U&3ջlh Ѐe(:!o, Qd56Hꈻ:ⓟgU͈L!z,1jQ_7xg\d2Ĭ%p齖,ui`ÏrSifg ; a\Fy}.vnNcj>A + @6@ 0@.g[C1p*݆H׮s}Zmk;c^UE$B8\./Eid[C)ϲPE.իHMR9/ Jb:1̠ [R8C.AlYA$@=~K g+WvҷhWCT;V8!?!L[YF Ʊud]fS5ȍ\ќZMm99`ʈC4R&Vt>`HxA>рw , aÙlyVw̬A,]TFɳQ`~>;bN4,! M(̈́/ieaump ډוl!ta PAf$m [fMͳ\ |#v-w>x`i#X S$Y:(⦝e¤g#N)B0ěI8 fB0pRz<> o捒A M@ѝrb;P]& B@C};GQSv{:`/;>57\pqҙɡ`! `@ 񙍧)yj7En;~S?/@1{opOcX(0<ϽwB1 @#Ok@[w_Vs0IAcϿ8Xx 68Xx؁ "8$X&x(*,؂.6Ѐ4X#1haV<؃>@B8DXFxHJL؄NPR8TXVxXZIg\b8dXfxhjl؆Vfn8tXvxxz|pXr؇8XxYdgX8X؇8hx8Cbd( ؊sha;WX6PhXJHXX(ȃ،0Sh8y&m(FGhרe3=@Øx(9[XبDhXxxI&`nXC yP0(y hP( P6؄+(Y&(#Ɍȋ#ɓJȔeْ/3Axq_XYdXJ@V@-^9aY ;a)CL(N B_1hiߨ;XJp)P?x_9ٚII隍̨ٓ0Y  ҉ڹٓiVXhIV-9 iٗٞVω)؜X9Y2iE9 "99a 4Py(y<~ÊJdYɜ᨜9v)(xY81jBС)P>ʣ☌Kʚ*SJ_J <ڏ y !+_7yDʚkj`LLIڛ{i_bꃂzI|Z-p ژs>ئ\mi=08;Hwjzy駰EIJE湬ͪ:ǚʬ܊IiJ*:Z舋jax)j٬K(YiP ڃڃ JkJ*kIiy:+z)k&cT-+*/# 3kﺕ('<bɖJ[NDbH-錎ٴ˖a0)Oʞc;jPhH~: }kx 鄁KxZF [=k{X+{v;[[xۻX[{;ۼZ(W[{؛ڻ۽ۂ2h[!VB㷾۾[{yK< ;[ %<[, P"P`aB@&BpqX|6|8"<PC jjXn!a<_xz<mk[]b,M|F  ȭ{P|ɮǬґYȆlqȬaɻȫʐ<ɫ\ɜ<|˵ g! nPLj\AV5 ʎL͒ ||lE˳LΫ \˫WP(*a<<@o=q]v7m>@B Nxl%lLa!I3N 8v8%f]I>d^hj!TV ݨ e~xlB<II}3 犾 0*T>0\蚾~[L~ꨎ奞~O>^˰60>^~M K!^~خ՞ОH^y<꘮>!>1D6OD1EWdE_D;PFo1G:GPP (HbCDdI1J)J+. uj !0B>7RI5 J,߄3N9s3;`B$JKY͔]fYgU%c.f&A(b0-"S!@Qg.:kNN:(A>R#NsЪNk߆Sem5P2MIu;nټ _B>C~[W'h<¨-0.@DPA$kmϘ.[[l&NJYo]rk0, }o[pxM8b^.:, ~տ%*Z}ֳCmjO)t[509z9\ :)LaIxz`Alprj0΀CH?t7\#x Wd #8'i:|r(̊ iR!5ͅ bѰ aŌj_('QINU q^ēQ3iReqN fE@Pld_C:%h1:jpLlf<3?v1 vH%2!II2MBd%1<`ui,II9k{2DLilAg)UR eѢ5MȝLzIm2G 8S2"iP/4:AnԠROiLV(9%ЁԢ'?*PJCI6aԤ'[.MuS&ICPԦzdճt54iPj`CEjRWTNJjTԦ`WjVUvի_kX:}QfjZպV5bhS:W 2k]WUݕyk`(RElbe3 1ukI;Y2hxrִ2J㢅eKEU9 A/K]aTK}əEHr͐]nu 'JQ"lk-UY&;f=UegtSmݜZ[.Dv-1]tLc\DbؘSng7Q%g>34 auhtZM3>oBv91 MwjrnݸxO!4("[S:P.ٜ!%zr[hg/6xRv=J-4h8<@)DiH&L6PF)RG;Ѣ 3T)dihl Q2Q|矀*@#5Ȍ ;@A裐F*餔VjPGtR\*ꨤjj˜2ɪ*무j뭸J%}p:ӧj&">lQF+Vkfv뭵_to9,ʶFr (,ldSI +Vlߨ ̢L2ń,$l(,(.|PJ)ϥ*c0H'L7PG-TWmK-M` ;1@mҒD#S̻-tmx|xoI|vb\,ڌ78P0-gwC梃n-ꛧ~z-aFLR%Q$7n|x||?<S<BL:äo>0q/b[#˯㏣7"E!p|Fa]G9 >o~3= Hk^Gh=3FyF/ @F IgP!f%;&" a$:q'^h*B p0&;\FxqD|_REq0u#WA<ы" 8H%ba|H3$m$u$1E#_hG-!'/zb k$ :<`d-H(DR.k!FL.`Ș$掔$e"s%]`R9"T(c)ATӔ8'@@t-o4L]2HTR=yO*s@t"6Qq&8=)oS( I# <uFeJR2D>R`1'NYӖ;uPZϞΔdMЁq?hdaQXժ (4UiuUzh5kXպVujZկUtu+]zOH :( P;T |lT"UmdJԢ"UiN{jV2gYuMc1 ZNR;&Q9ᶸͭnwVtoKh \ c_xƲŮdZvwd]Sj/zyd~Ek%A NЁ 0E_ N@MHc;)fKZvW:;X~MSw|% h)Av@L"HNr%,a P 8bMіx Q'sZ/ƓE#)T L:xγ>zN@,RD9|g;UYeI*4Lsf^3QxԨNWVհgMZÚ3+uX4&%5&j[YJVMsK9vkiFS2$Kn{a5 d׏uK.uͩeT6{ц6,%オM(-gO;/Ycjϸ7CtR,YspڞxR@0gN8Ϲw>3z\,WyNHOҗt\ʾ2ʧN閺շu\%Ǟ'<)9h~=%ao÷$tϻyg}A$Q%?{]9ù[1$~%zLD?m}_E7G~I~HQ#`(!WBG淁ENP %#X :.;4"mBCB6x)97XE҅=8=" P9ȉIٛIY(Ey%9#Yv2cwyuy9Iv癞I w mxvxYuIٟ qYzw7j>}FR;w':Yx$zp w Z1I#0'D)nb5$vII*b(i(G"iB*Y>}g٘P#F:&iI2y,?V$Չ$Zj&HCW餦IhxɦʩIٜwz:9jx*nj*YڨӹCC(ɩ=&eCgijm{ ɗzڪz J>)z m:eR=ФɔZ::Ǫꭻڮ; )Ŋob*~ȣ :@:x犧9mU ۓɰ{kګy>د5 Df-ʬ[:٬?:@:ߚa!똵jI{z躳zB)|YI*˺zuٴڶyk[jug }K2Z[ (`Cy s 昉ظ rZw-{)+9ډ@ 9$[ʫJ8hKkr%;ۻQ [?Dƛۼ{Iwx[k>̻3K>s˟8("*˾;yâj*{JwCk,˳E^=ڥ 6S :8O7󒩚XzF1:LKةeR,R28 kɔKKh)ğx]+/ȭm |ʵ\;B/|ZÔ;DjKjIܛc |)i;y;Ĩ)[ \G)ȃ J ȃůz*jg;n̫~ 2|Ì9q;-X {[o[T+|IK\3ܳ \lxVJ v˜Ӹ*|*=iɢj˕Iʺ)! /+ ;z[ޜW̘8HKϘYKŌ\왭D¼&&#\- UuWCbkd[}l% ̀k?l,\+m#}̲<]k @;>ʏ5=o<Υ˰?)L+c+[iH<,N\Ɲں+ cָAj,ųKflXj1}.C-R>D= /1=}*]ڨ-*ڬ=)ڰy]۪=ۑmۺ}zm4 48>(-3=@B'ܫ۳gy ]=M$3 ވ),Z(ŧM׍ZlLY|=&э1\އș :ѝ$  M Hm} ճC&E13m!jʴ}\= κΙ^ܺzbr+~#^>Y 茎&Yۑ^鷧gЖD(R^$)vv'>@ B+ Q^~>^ځNM?__i^@ ?_ "?$_&(*,.-O P68YQ:>@A?D_F(FJLPR_VpAX\]^b?Hdhjnjr?tuxf|A~?M  _?_? h?_ȟʿ?_P(/[?_?_@ DPB >Qā*T@DU=~RH%MDRJ-]SL5m1F4RTPE'Z1PNM>UTU#O]~CW͞EVZmqj5\u}X`R~{Wb6KXd'YfΝ=S2CFZj֫Gr8qcڵmWHoe޽% ōG\r[xcpխ_Ǟ]u籣x3[LI|ǟ71t>U#@D0Of+/B :o0C0X1DG$DO41`vBC$=D1FgFmTEeGP 5$HXF%T1Uh?TeI+2K|2ʐ1L1 2!D3͖by/&߄3N9N'1ƒ-@bs74PA%9sOQG)3դґ83CMŤ+0$LNSUqUV_2QK]Go1҃&WK9<͏:%:- Y Q hXaA"%eS*֣kbYh=bWq# ^}EMiUeXc;Vx}7Bo"XvC֥yI݁ͺ7}u\o+sӥ8uiWzU)8`CIT5&3c=.dgx㗷%9fwaXd;2Z{h"&h⊗@Vv7jVju;:lw`klhBz {moZm8k)ef\g'g;r¹7nf;XjCuIv pr}mm]Gsk7`-曏)zIz]"mI"P8pKydogqM56<<{(9O1d!dPp އiw"< M- rpD_ <(z^o.O `C"pAl0@|bS7x}66xG :(A:h*X1rVXťwY?E0񅚓a@v$< (R{d" YHD2G$ (I(NQI ȧpe(E9JRҔ \-&;*TSe-sYK^%(U)V!GT!9IjV%a iZLd8+L -ӝg<9Oz%@2H#L:Nų<@Pxg>OpEiMJ6ё$o8hVs%)GY=iF+4pv7iNuSԧ,SɔiRT6թIjJTdWT3-GCv(Hwx4PJ֯Z/]I Z`Hwk^Wu0p@կElbX.UzQo=IIQζԛTfٶ6 H&xmle;[v&hAKַnp;V;d1ZY͞5 "u-{IBmk˚*dEoz Ґ$]&siVַD-&IߐηfhjYk`7,ApeWG wéͰ'_'FqUb/qexrGyͣr{<6߹g^ -/zɋq8wvΝIxЉuo-r<`{׻=]Qw;vx}rN]?w ͳn[B-٣|E?y ~ڐ7ܑ>zŸ9z֗AG}םN+.Y<%v«^?zsm~_w;};f|W_:E{qfʹP۽̻뻿C[4{@K;C@ҋ?˽ Q /\{ A_Ӷ.CAP:sA^K A A 4-!4"<&$TB`B'B(.|+A/$C.0< -2dC:C4)lê:;:97ÇCA$B4CDDTEdFtGHIdeLMN=CK?\1OTTUdVtWXYZ[\|E/ĐNF`PX#ESC.Oftghijkgő`LFb| ?O+TMչL U,:ÿSu8;@V]MWXY}{[UN%VUcUXu7G%MM>N5Vde}5`UY;5XAMA=, Z2RݳSCq7ڤRiڊ}ZZ-qzi1Igڰ8%۔UšMH!PEXA+2Q\ !7)\ݞ6!9NU\(Y]3]K\͚ܟ%5ݼAǭ!Η] ]ͪҽ1]A!e[ɟ\MӨM^ 9֝#*^ڵ*2Z\8b#! ][U-%O a*W^_(ub '~YU`ez&a2K`t)jazJ]na_-.j_ &n3Ubj/Taa$f}=(b2b߳+,V-b*4'6^Z0&S5c@5؊"6bȈxc2͊Xcd0 A&B6CFDVEfFvGHIJKLMNA.1)HgeH;UfVvWXCQ&RvH-X@_`a&b6cFdVeffvghijklI ;\>eq&ro -Dufg-Vvx4ϑzg+_{}|&肞5F脾2f>h4芶&6FVfv闆阖陦;PK"\]a)\)PK6(AOEBPS/img/d_toolbar.gifGIF87a,ڋ޼b扦Z LnhL*W Tj֮Z튙ey,>uk_[ƕ7>z4hԔfV(3Uiֹe#*C%`** #`z[b+@뻛vR|s \K2˙+s̼,l]܊- >[^n]|>Nߺy H?z%9'*\ X1˘ no l`C qQ8(kPWM&wQ%țY׮ry}| ߁PܭUT4GU +WHwEB}UW[E'>I=դWeiS2LZJo}[>6WzƑx v9a)Señ% aNݕkyEWē`R號!|&w"ሡ~b)H}eHni~ jJ;PKz*PK6(AOEBPS/img/edit_all_item.gifGIF87ag|~|줦dfdܬttllμʼļμԔƴƼ´䜲ܴdnd̄Ԝ||Č,gƟҲܦ՞ /3,--'޻.zQB&ԑQ@473j,§!2d!R$ɒ%JբA Vt sP5j|Raϟ@M-pD&(EO+pP-JjYr~YC !H%w PEE>"YEi>, E"p?G~L 9 IɊDb`EPpf,X1Q) HbF@!w]A7D$Ѐ?2}( E"' Ә6G9a6 d PKr2RjRRܩgRO쓗_gt,nH0Mo:> ,{ @B4rә(JyhUEayJg=@>Ʊvd:ȋ'L)kͨQ.X xO' HֱⱬƍYI@4=ht; 3HaUke&rk=@`)xRLYTL\tRTRH &K9uGspr  X6+p^T=0I^󖗴&xC;_Q"f@?4r5'vxmU4"6&q>(8#­ <2\n \YYB.NRHczQW}3H mJL?~gΤkh3n1(VV jz/1GM`!,Jӛu@Wil1m 3.;BSЮ&Mzη~ZW67;VNgyͦ)ʙv`.X7No8n"y/K+<09 5v &(@(?P4Dwяu#KzpAq>z9eڙ>uKp{=:2dӱO|)mʛ5$ ?t>s{?3Vugo?G?{~=n@֫^]xӝG_ҋ~뽏[N:cvk;߮zOp*9֕NϿXw@ ؀ ؀ X8X~}v}'灃}{wϐz?wyyrGzϧ|yw||r}7 >y([xwTvvG}wAzdhx&(~"}('VMhÌNH9- 4yI|JȊ{KA)}ocVXK)zu~;XY<IGI NYLT28M{cP ȏhMYɆ }R(Cv( yX:7Axyr 49@yI?f:șWGl8 ex/H4؉HE;ȞLd)tũ:YYwGi)s=茥IyY{Om9U  LN؉Gx~,Z()YUH87ؘy0r+*Xz IuOʢ귌㓚(v v9\:Y bJBaZsh:=jӦn DԺɫΰںڮ:9:||!xZ!+u~ *ʹdڥZAwz{Ud9۱ 7";]S&3(")10:2$Ѕ/ *<ݺṒJM/ Ч ꜝ  2y;)ڨ:㩠_ګ~H7 ʳn衵:Jj%*zKSz-{PKjyڴ]iqꋌ 3m+6%;UM~)[@U-{7]E1y3e>)51m~ 9/u=y.܀M" ̤ІI\hB%<āH*Ik&37xz795LJL_і4W=i3ÚԳVIk]tabZ9i\[ȷFvmcK[׮ImWZ˖$鶺vc{܉nt( ӽmە=~1^I/َMu;&qqx!pfg<xO_c$_c7 sw׾55^n\ 7c;>:Α=wwoc8Ks]Nk;f߸n[;\ {Ej#:֧ynŗDq\&}7~%gyO:vd.:ugɯ~mkKp֧:sOT/xW~S+֗N|o?Y/O??)OϿ8%1x ؀G~TXMAH؁AR~' v(*(("$h,X6x8h4+Ѓ>@B8DXFxHJL؄NPt_/T+Z\؅^؅Yb8dX_fjl؆n(hrXSUWq8]|[臀8XghX1 I)PP0yU5@`,!o艈ȆXi8HH( !2#{ hXHp(XhjQlPh+jȍ؇Ȩ1`҈\)ҘHv0xڨXX(x8Hpv!#Q( dxq)я%a#ᆪ! iؑl8"(&I*&I{P- \ 0Wx8y\1)M)"Ȕ,YO$TiUZم5y7i=iHFz]ؔiw9x[xR uTٕY{i]{ɘyٗ|i{iyK9#Ai*88 xrىt!y_J_iZY)隻H)8)9 <ؚy 9y Yae%q6Y2(jIyṛ)y~Iɑ)*d8,驟!w8 Z J i ڟy ڡɞɛ) *ɢ-$\ȕ>ʤC晣:5ZBDy dfw#!XIyK2)}fz<ڟwZDJꥀ" c3/(rjUHީS**J*: Z|詓Jj*ʪJګxn!تҚʬHQںڭຄځ+㪁zzZ횁J: ju t[; v0 t`'NFڬÚ'' v@>7Q$0DDE*qDstE,{0s*|Ӱ z@Dk5 u) - ?,aH6B5B;+&@BK$aK;QQ 9S10R4*E1O) =88>뵩!KdP$;d Fd[eh*ʶ,5YsB?V%ܓ } Sqm݅ݒ{M>>~}ZqܓSp= Sԁߍ %k࢝(⼭,VSܞ1A Nr}tld~ۼM)-nPOQLNN~SYQ咝MP)PNU 2@,SMh㼸A㛀߰|AX{'nS}hڐ>ٕ~昞\n铮d_.揮^0mN7}~ q a߯A͝܂. nn K Ꞟ)_L.>ծ]~J~f~خjQƻ+ .ܼMJ}.poN߻7>B. _ V>Ɏڞ~^N'OV~ꕾ*IЎRۙIp2Nꥰ P?OQ~@\\HA,N>+nɮ8s?6N*wom/v%操,H A/0(3J oTmߛ_B@ `%a,8[!-⓰h>U>N/yo奾?2O1o>N5졎*&ːl`{P@IN=~$&1? qPSO{`qn hҤK6mIR U JUć(G$~RH%AdF-[~*U]tN=Λ@4ˤL*z4jӣI4VO}ITTu(J(پkr.%!j$3ذ„/y )jD\0NQ@-<`8=g\@paITM bNȰ!8)BT%* =vȰQM\ݾr$UԱ4ОVSnVY\zSX{9uǩo0@CJ2B;XH 7,PFsD;찐 @^w#>;RCpt Fu|%+xˇGVx1g0%Z е6z!S_^R"KzD -왅xȉ~vkR~}:7lOl&3G]*PfH-`&lZA5AvЃaE8BЄ'Da UB~l_?¿"t">瀢8 3(Òp{"IE)VQGTG^ʐd$0qQfpс W=3fщPi-#S LB9,BI5{md"&"U&M7 :N(gGeJMS`jd,YH0 óE-s<8L\ȝR&Ac*. e3̶D_, <'\0CseFhtT'`A}Gl95H/JGϑRuEGA #\:3зT›CuDR1*n4X M:NaRi-KM#r+pzW"ᾸD1TեwU*%$EVcjNx&gE4Gծu}krҪjkwuu^Cאvnza6LmJ0SfP$Y>!?C 4g?RҸȶ8tmzOWܚw}N6ڶw$=zMIs0⤦ S$AM[X4$P:BQ}YTK]f?ݚ, ackQ?o+LfKmԪE@~X)BU:b .' K܍[ҝ0%=ebxy'A;ִkZ-. i:ښ41~N4 d8 #Li1wф@Vɂ MLETNQ Yg:)VmHb2Ϫʜ|i*ZZ"Țip{qSFd"*K;[lM-"(_ _oDvWkL.r_Q^v۶XUmjui3GkE/I(=y:XE/&{>  KHڃ\t\""(^+qGMHZe32Na{y1Ss.U0=A\F5.! '|kÉ#BGD+\AD$|02X]x9 #f0zuWܗz=*lK" PF t 7[egPugA~[L2^ĀG/M#Ы=?oLb?^%G&" @Ta?޾IiF{^D<860'C)틿a>6QjK(]6JdO>%/=H+#I3+B@9 A| t%3(`Z<7Xy (ܝS2`B:ڞ-\BR5d6t78c{.T!0KIZc;Cޱߙ%IE:ܜT: B=$/$C #0L*kDd9TUn9QSQ!|+D t:' GddDTƪ"A6DK NE##$,CR (c:e udGhgT;;@<%GL!LŠA{)wzxzvlv wtE.EgEpEl ,t,I`d!Ƃ쨏 )t13, `!|&GF$ ؃D| } HIIJZȋɩIʯF39@4Ӟ<$ƈ`m D.&RҐZKZe$KcuQeEZSimt$]e:6=Kh}XbѻȂ,؄(܈>sD߸`ݏ؋$8 Eم\C! Kc''yʴ`ߺ߾o{AU4K0;j4ɪ Bn6FJ4С;:^ jʑ-AX1cX>y)v;mV+3<18mSua /$DP>8,@@:ڵ>뮱 bƷ㷐P+>ֹAkT;9 rѐ#eU (K( m#96 4Yֲ4vƯ+2wvgzsR?u( ൭dnEK"6:5h?&165zz^c9=~-yk0EebiƁ$f$sZsC733 5W{5`v_fz.iCie~T#@}f4fCͮ~|(rjh\jv9~^7vg*6!0[Ӫl[L/Pehph,hfVge9kNjl}&cޭ`ziO_!PZ?`Rp4P$@=Q[OBUkt6=BcThvjg0;m=eJ5aSDv5A$P4pCA@8(ݜTՓ3H:vnik~#7?x,S,wK1ް/(@&KLx|%xW/ucNxwG @8x3oGE?L:riwygiwRF!iA荠,͑'?uug5jÁڦ&u5AD)((H!Z@Be~|{ s|iqy] p=,(|!ߒ,_xv?Q|w}y{| o,,-zAr%? (?|UFy巏ط:]yu0_}6((#dEg 7=] x݃AM 'Hr%;@.~_J4'U 2l!Ĉ'*,%JԦKD(<*EQ @'Wl%̘2gҬiG)[)#G C",i&R~N"@6q\h"֋P/Y訡jIsƠ4JqgۼzwoΗxWPu{e wS6{!m,CfuI 4W⣽ab)%U]H^l hR>%B/l^"C\8J7 S": ($A*{$\g 9lvxO|LB[w?x b\BC \HfЇ,&a:p{c`9:$Rp\wId J|TvItQB%{|zU, 8 B鈙=&"_BGBJ 'ZҔ,נBڱ_lRqH&m.#GIZ9'$Bhx@A jq dH薌BԹJg+m%DaA(d*]Y\iXJ늞ExƠd;ɡ"!I(d ;\`'W=.t( |.mgPjQ+F_Uo *.ol*Q'd|(ű =tEJI IE{&J ?<</ hH[=Ay. g1>>髿>:_V !~a[iGdt\$ ֢)$2| #( R 3 rP art&Lvx-4"XD *QS(;(N1Q,bE!Z^ E&BqMϘn+#hD71t|+=0cE81Q!)B*ҊsܢEKS6d4yɂ C igR񑽼b5~rZrFCIYjR5(JOU.} S*6)N8ӝ9)P]ӡA=*RIԥƨI}*Tuԩũ@%;OUZE+ZKnT=^SUm&*Omft-iKѪפUcD)iraILJ،+^M֤g:NUbVԬX[i׺B|)eS˖`Eʶ+iOkTm k9[f1S.~1c,Ӹ61s(;PK%fR4M4PK6(AOEBPS/img/ir_ctrl_break.gif(GIF89acks9skkkkkssJ{!RJcJkJsR{c{cckkkkkkkkkkkkkkkkkkssssssss{{{Ɣkkkkssskkkkkƭƭkkkk޵έƵεssssν޽ֽƔƭkޭΔΔkֽ֜sޭcޭk޵kޭksƔޭΔޭ֜!,H*\ȰÇ#JHŋ3jȱǂBIɓ(S\ɲ˗0cʜ9 ͛8sɳO6 JѢA*]ʴҤNJJu%ԪXj=zuׯ`ev KِcϪ][5F3wl: X,ptcUޥKeS^Hd 0 !'lD~memqpؙIGyQ< m=GzA.2h蚊y#oС}1UbI2~# &bMg%dHn@`k9pDvCIW|Hr $)%$nONۛ%R`!dq7F սkYS28bIޑ$LE!Me'xl9?&RG&ےɹdoIZJU$*ZoŁ d Wjyy}ɪ܆0*h~7rX+$$kK ^ź: \xѫKa̗@T!k@!2,1)Ol1J_Hoq_ rL2&lp* r,ԅgR'$.ᬳH>K%O@wa/ kVa< ;p)䤀-yj8>s(ZENg՟ON_.bt;{自7fi-֬w{KN^93N$fq 7t8';[S9Þ!U.>N jNi2A统\qpHp5 tƓ¬XB(!9! }.Ld@8̡w@ " G""9< o&:PH*ZX̢ .zSܢI2f 5! p܂ЄGB!hE5эpL@G;a{Fqx &)|T3ƸVcXvB젿YB}&|)Idr9>ړҖ|Y9{\ ~%<4hP'|]x78{jmn?1A~u'L|SaPG~rg~} Soxi*e_FERk#eT'S4}EOBՁ~,POUm7mXeoV68gnVUbWq\teWӄ\xkVq5eauXVm3(ElOauYzNNWQY(l Vdx]`ZfgjŃ͵[\7`]\Gd]υj? ]okօ]eN]P\|3fVmec^7Zee_u:VgFU`a{PhUUhe(Y$Acbc.f0ƉwnDZv\v^vgMaeXe^YdCFdyGffhWjVcl(OneprndHEvKl\q'p]uxkDIgw~TEvhi,j<5lLDjej&(OdlyI`ek?keؑ&R9&a6a}UmmAxaGmm!i+no֌4ygTqôpp2yooo'ULWPUSĕr`Yy}A$}@ĤBYvIs6GL8o0HW-畉\>7ttɂtiryrcGv\wv_yWZwhg]Hu9{9PIwyD{כ9Dx'xĩylʩ59yt)yM2ܙFk4z[7Gz'HiH`{|I{d{ȧ{){%E|ʷ7K }X~(:EHTz:~9*r'`JXE3IXut=,D D(5uÀ'X؂ z!YU;ZdH2HT$DDS($8?gR/8RXUWUS9(jvVimńFfjJKX儆X8pSؖMDXȦn*Yc@gH]=j&RՇ%WՈoڊ凑]xjfHwyéE3G8O8aʌ;v[(1ʧe7ڋaf/vc!ȃ* @x-%k'%vUO9mn;Xfn[p] *z#dfkyǢL^)riy Kvٙf Ǵ {Jy]ژ+g.:y4vKtEftiTiĚ9Ggu-GHՙIxۜ(;/9dQ ˻ۼ|Ǽ΋w[Ksk Hywa׽wKwHzkx{4 z|lF3Le%P%h$ J}l_IjA]q9ۙO,!MݹNPVՙա _ĺ쉺uiv۪g֖֯>|-~Gɻ0;[Q؆m ؐ-DEt(v}Ex=zmEkkfGE |y] ]]ڙ4C-}֜=j"':W12L>- 2H,ǜSJڣ]5s&|8X2X]jEJjrzE}m:WU tCEm܀IoYՑ[anEbJW;S֮v//LpmG w /}B*B,/$?G4_ħ{v)Rd99'ڨ+PۦۘINjo( oBdvf'>O#ET ǵiHڡmt(YL"E׬ٺACY6xG>mgԷTZuـ~)N-7m,0-iL IKfT;~7MgI=daoB6kN%pohO1[5S98*#ڲ|$|*JɲPKqƥ6)KX?9"'pD^x`!6 td1Eq P#H$dC<3N9N.l;;<ӓO5#bM QGͮ 5|$b,dROJ/M\"EUWmB!5f'8W!VZmоT]u]EGHYgv,pd!]gZT%X:\sBs_v؉Ky祷^{7_}_#&`{K^fa8b'f8a/8c7Xc;9dG&pKF9eWc_9f]foΘfwUuJ(!hFiFfifJ*Yu褯.jᓃ޹O`F;mf'`E&m6n~+8/ `;5q;l N4(xJ&7̝:)1r8_1sH?uS[+)^Q%ukwA]v x㍏x矇X>W\wh~Ĉ>_7xcwp_2??Ǘ;H?OsǾSZ!"@S!*` xYp `FXBc`D(o_V0^ A`x )T`T#Fa&AT~`l+@Sxc%:%CE?V`!"W(# RFʰ' d^%H QdsE,e DaCIZ &d 0 (seM-UpCBjȊjQծw%)fV[Kغԫ[aĸկxld#ح>֮,fjD{hcQFQִEmjUZ֪lke;Ӿ6\'pIַnp;\Z׹qqbv׻ox;^ _]׽0/z Wn,e[~ ~7!k=p'Z] Wlpwa wXfpWbd$6q;be~qetV]0F/1=A[C3F.x[W;* q N  uHbÓ(_`B~ Q&™5k~{IQ@S zɖH:Oix9Ҝ:$ԏJ;ʵ0OVuJjسe eJ֪ب&ʝ![1_k6-ڝ".IXj*^gDx/H6-+X޽Z H4kX¨]03ϤsnZPZAƪ#2ǣKӛO& =w5 Oӫ_Ͼ˟OϿ(V݁2f` 68ԂF(!;Mh A2"Pb$b'"/H@98 4(ŋ9 3b@y7 dL򀤊: \$O`aEBiĔ\褘AX">Fe4,Údh*9RFIr:euSΨ^08萊.*(h⢑y()X)1ꨠȪ:馰>+櫤i䩽*̂ʣFi괵;;rjK즞n +ڦɪ [2zaR*nf/vˮp s0oiӸg \0[1Cp N<y݅+tUxFw?;c{_`۞}"_qz?~c>>>g >sӚw@eOv4lճ`V?Oe<{!>hͣ 7N /FDR#a@A^rJ)rwJh N1wBΪh2+^ߒUu^_EGcsV}G=^op+TjwԳ#>NV3px7 աOD7mtᑞ9\# ŒM4-i%0IL4Lf'f:|4YcRC4nna 8YiqY':N핳')z“9~z 5*Ђ:Mh1І *ъ:0юJ n@*Ғ&M\Pڅ`*".uHgѲLRM҅t .L_ZL)L[sƥvmkBFԢH* *Se֊V1JdAR޲Ȫu#Ǫj^Q ֶձ1}ld'KӳRV,*H뉟k:˯~]Yb ZVJn1 khASqZkSٿֵxilw1+e};Vn׶"p*^^"suTq:]aT wW+VߛQHU.{Jɾv.+5/n5|[p֡T L·eA|+XZJ Gű~uW ýawWD`!oa+ccV"F*S3Ȳ6U/fN3-Ь6n),:+v:>~0]@=Akh z};h6z ¤e s9Rki#{rT{P+CiR3aBx5=m\ZoJ)l:v5 XV6=v[i m½-ָ6߆Sb_[ܦv~˿e=m;& ߶Mn!˵7p6˸v.pSuᅫ:&7 Jcپ8WۧJ n~UF– oUkKT83z`c漭vh}DWhRYH97Nw(7'׷ZbڻF[vO^ h(팿žl{8u=gz/w59>{=F6٥y6;'^2L?v] {߽3 }x}n-]_&oP!+8XxHm ؀M8XfM" 8&%x*).(-CA}Rv6rmw|7rQǃsf<7xs8iNR~a3bGkx[H {^kxFi`X}6yh6CEe+K_hҗcV|mv}AmIobW'mS7~5eb-rc7l&|g|EJPlx8~bV8oE|?U4XCHssLJGG{go_p'^`^vgzWxazjX'bx̣58DFsf*eX?tNmzIZ/CwψzņLXwnzy=g{U\9RH0V#.(H!}[|g]1pvl4^OƨlbH`'HpǑɘ=SII=B oxϖt}[xyH(\е{8x֧y"sHǏƈctGGFb",!!ؔwWfcX{8^qhyZi>ɋp98z2xz)3 L bag6k)on&^gh;QЎӦp;ȉmh {dȒ߷vY| gzv=h|6`eXae k.Yf'v}b 2ZP9k09[p꩞9yK`F :((z,hg涛&=`c krYit&֛͉jmNeIC]h( "9LdȅAԘX'*t错e}kXUXd]wcWoG5w7nfsj7&PڗuiգwqN uK^i(/}IXȌ@p[fq)QIXhڧZP'٦TZȈȕjrZp98}ed{uueGٚh#bŤʇuTgפox hgTDڪZo٢DIt⑿+:xz|9sC{٩ Uv|׌p٨tb.^m%Y*jJ%y$~XŪvv]*znzHɯL} Зdju:Nc$+.٘'\ VP؉o TpT!ꀪ յP6l IVZ;fM1` b;M[f{hlnRZ@ ١1Tĭ E*zy{Y^ѷ:ڭryavY(~A+Wؚ;XCRS\PpxZؒq;5ьHx wiʳLKLt[[vǮ WY尻{؎'i~Q+t۹'廢;ms<7Kjt;87+T*i'?-P囗 gZrU(Fwʽk@) ¡Wmiu|xle(H;G)XrML$T<RX\\ K`P28df|*jll"pr<Xvxǁ|g~yȂ\g\qvȈ~_aȎܵ\|ɘɚɜɞɠʢ<;PKD@;PK6(AOEBPS/img/reorder_buttons.gif]GIF89abnacmbgofjjs{ry~x}|~}~}ݲ³ôĴõŵƵŶƷǷǸȹȺɻɻǼʼ˼̽ĽǾʾ˾˿̿˿̿!,[ H*\ȰÇ#JHŋ3jȱǏ CIɓ W\ɲ˗0cʜI͛8sɳϖWJѣTӧP2MիHNʵWZ0,m uKnʠdTP!e† `- # XwzRꔖS=>a US#QөcZ rPCAߖWĐD**h2Q\Wu 74cJzvKݐ7nC#btQ>$ d\QsEP h`1t@Wz4ބ -R2G0`ȇ!Fh'l%Ɋ+Z`v,('.`蠃AyCRX*pDz豆> RJivܝ]"tI / de᥹c #IhS 1@Mq1ZibX $: )裋)Ѝu ymP k4i lI^H}0*f}+٪&UV^ \s%/LPAMa#Ѫe#6k ׊v};".ʩSD, F!XA("#-ZPp Kx9{T&(@_y `r$h-r!ߺ/7Li鮏q{qvjl'm"H h \d1vk.Tau ؜nuIEs)Q$j4f2nv//pqBPi,ЌsAM'eG J+c@+q5a5K8?,qŇAA#]UV[1GE @tAp v`Zb>X'ct'8~Aku1d:t!b "'ؑZ| I_CnDV X@(r&LaTPfE.QX(6!Hpn> E("FFL"C&N(*>qVbhCx` # 2*2QeT؊5J"$H:q cdDhH +H "\ (⑐|$[1F9XR4Ȏ(ɈL$X9fR B~Xd( RBҗ&.e ]2uGj5f5CYO=p3*N:T.uP/L5օ^' Î$f7E668jg3TE#HwR3{p8d%1y`!5dv:3}#zn{,rd#߿qK|GTYg;ٙy-.4wIg繗|B Z:R}v|`_J1n89O7'} |FoD$߻~?N"w݃zA}HA}otZgBggC|akqm'HT]W͖|q(XxCvz7YWRжuch praVGcvde|!q&|7Ov6UmcT8[=8c:bٶ[AmVU'P-HM84~OGEHH^6gXZ\R^uH[8mI(W$\:%O'b/H|xdj}VQTfpbYgo8&fqpxe]~fֵlXf4mct&>V[Uzȉ؇x]Bp[}X1Ƅwd(sHmhp&[v\6'ieZ!7熆x#X"^q&SBr8H'yHa$VOXB9YyBVa 9Yy9א69$Y&yɐ ؀(ْ.0)16y:2H.)IiIHY3*LْMySɓW8I>9)?`8![g 6)ddYٖnn9Zjm)|)jjQDxx9izٔWiyzYI Ɩ)b)U yq a)iie Y ©KYIٛyi9vFI}iuɚpXRab n!vX&b,01X6Ҩc<@SDPF&J6NF RVIVfZv^ bI&: lfp)gtigxީg|g)hjhh.N8E*餔Vj饘fM:A駠*ꨤjꩨꪬ*무j뭝ު뮼+찵J&6ˬF+Vk&v*.ܲ[뷭 /B믭{j*0#ٲ[/ZJ쮾z1/'ǣp,/ls/M(rI]<'tMW УuT [;]rSi,rz*04p ]nrsm38 e?\>[뛱T'~\3Ň6ҕwR-7jʍp~׽̪߭,k;b {x3ȗ|څ.2 ш=ݸ¶?; LѢ 7oo=K^F5Ƚt9ߧǷإvm/|Uއ=^ͦ={<0=XxB*\ 7AIPw~( Q|lgCwAzZ<&/xRAMq[_UxErqes NF8%~QgR3!1V&kc젻zE-R"+dw& S|qG8^uVF)k=ml *J]AZl)762YJ+s^%0IbsX:I2f:Ќ4IjZ̦6nz 29BrL:vF$ ;PK`PK6(AOEBPS/img/bldr_task_list.gifC GIF89a!,+|*\ȰÇ#JHŋ+0@Hɓ(SH` VʜI͌ *<yϟ@3 ѣF "-cEK64(5(TWV婵g@"P@@-@BgvKdV c T % V`o*^1XAB- ,A3Ϡ/FPk3WS6ݬW"W$ܽ׶Y)`l&sҏkU5P@(!ē˟O(h& 6=(Vhav &a$h ,.() @8:裉<(`H"i`2dN :9%W UJY` 2)fGjy &a$rZ9gc*if|9|dB9%Yg~&AY饗)riizjirꨍJƊ)f*뙁Ϊ*믫j*`w26k1r9R췾 ;k+ŶKntFiK/9_B"Kzユ롡 "(pr 򋬎l; 8 ٪L7s jz33`GI6f+Z,q+? bKf[krﺷKrzF7kp?݄wc]'|8׆Ē͸SڸÃGnߢؙ*{/jO#s1Rvիk,`bK{"X}E^+NzO5RopQ;^,{v_:n}9n2֨ y+] &p<G4iPYg&ڜq,u5$p8YqRjTג-%V0_NDC( у"h(b]"'1fE9i"@W7Ʊ|_fgRsdּ5.K\#$,3&).7Vd4D8Ml3՝5~#1}8Ѐaѐt܄@ %%HOHvd%.%ithbf Tlh"ׇ%J%KwTDE4F;% 4j>O÷UҘNUSN.NO%-.SS-? kzTM~'L4 xn 9v+v~6~;PKS2H C PK6(AOEBPS/img/pg_def_items.gifZGIF87a|~|dfdܬttllμʼļμԔƴ伺Ƽtztdnd´܌||̄Ԝ||܌줢tvt464TΜd܂<֤̲tDڴԾLƌLʔTҔT֜\ڤll, ǛΧڳާ߱ N;r /\x6l!&sfxQ%Iq\D%!Xv._4^L 3ɩƎ{JO- Ϝ wtIeJ79}Y(…]2:a;$TWbk*WeE])mFq]ݻUgV(JnMwZȇ\SoUǖ^5ri~Z4mi~}v6m؞Br-ole+Ɠ+sMȟK}سk{n묪 Xi%YϾ򫾟G^7KaJ{ 6.50„VhW MaK(⃟D8 |4Ju_>מH&$7ǓPF %`'2Rvb"~iItitV^bm)mI .fXf2k,\bclD&hv6ЄVZ)Kɗ{bg'\*\DJ(Ǫ*Y*)JZh^뮾_[y(J*za^ IйĜzn,AnKo!nɶxƽ{F ſh$ oɌ^KL셸^FKḻo,$%Log |0!48J<̳&1c]7@e,4N;ʹfTmMX}DΥdo_n=#ӍK`&~8~ _xqmOzIX!fBg矧褗NI,!{WZ,A{N!nQ}I.E`C:WO=NPNdDSA/>D~M'wm Òߝ:T_ R ܏'EO|q> 5AM1k EQtl8 2# AAF ىB^ѐd((L8d)C64&NL*WP^ъBte+gIZ?ȥ.wKX?0ILCL&+ _*Ќ4IMUљ6nzSN8Ir48vӛ;ybŌg0~>]>J8PwB#ZЇR!/Pr HG*h.*A-'4-@wXҚLh@Ђ@ P}V68@2P0Nj :p *RC XZTV"@n}k`!(vJW;9 3دcMP˺# ;4Nֲ H*vhҘժȫvBҲN` +XV%+4G(*b@v&-m\jgikɉC],4PZ򖠼@v^bv X@{K_^%`_WNWD)v TƪRB  2kZ|f6pF9SN_|eX򀿼81U2>=}roML n@@6t ZϚqLVI;\@z Px8(yѫ^QG-˫j5c.c^fyMn>z6d!PA_#g!ppj}W{ nEoc^ٺ;6i P#->vl-VZ ,j`TJ׻kcp^w?e-\7Oe{2AKt=H⋝wM7qN_=YG2P^0 k7HO|[ S 0NsߨIPΗ'@A Tt,X ~}vVHطj=w;ܚ6^4oN`l X3$eMYrw~NO~Fw~oOZsMXMXM xL ؀8KJX'Zׁwmzhu&x*,hKd284X7hJPZPZ(AXK/є{8J);VЃ  PYAH04~J`Keig)eomJkhJpJ `vfׄqiT؃TXPY  ]|r4jhnuȆwwQvphIht%pHNJ۱؃ Jbhc8؉XcȆo؉XǸgHψ؁ڑ+x|ٱEȋJxxЈԏmxH)ɐ ɏܑR兎yŎ[(P8I/9Y:ؒH<Mx\'t(9(7 if) or9 V] @`HdeytXA59:8 $$',JȍBْؐ 9.9Yy9|]iWx8șʹٜ~E(8 y ډٝ 9W NО &1aٞ AS$Ok uCIʟz:izQ*N)Q :!ڢʢ٢3JQ!K I:*Q;%+ 2:6 0JQJJyLɠjE*\jZ8jU:SyTNYN:7d]ʤZd hjj*WLo)sZ*:^z>愞I9ک:i׉~תJ~7ڛAzh{yĞI :zGʩOZyZNuJ$':BW!t`^ {NV4ׄqJJbڬjyLj=*KLGFj_ [*Jm}׭ش]J:*Kɬ;{XjB{5J(\Qۊk5K}Ұ`}_ɼl- *}{B,alPǸܿgAͻ\ML׈mȼ,͠{Kߌ<=f[Ҕ錽J <ċt"-mϪ m>3ncd>mw=L 1֚ }g1-2p| ,%拮 ~Jͪqjà -WnXI.݌+îJn>*lH\خ;PK1AePK6(AOEBPS/img/demo_obrws_srch.gifvGIF89aBBBRZRZcZZkZcccckccscc{ckkkkskkkkkssss{sssss{{{{{{{{ε!,]H*\ȰÇ#JHŋ3jȱǏ CIɓ&]t`˗0cʜI͛8sɳ*} JѣHy]ӧP]*իXRʵׯ[cVKٳhӪ]˶۷pueX˷߿ LÈ[ݗy)JL23k`qcAeFLiʋѧc˞mp%V3n%l[[,z s.i1oZlԣN4yw}ᗟ/|uz_|(}szGPxI'av݂u[~&!i,x` !Sލ7sn fWbȡBgnGvZؤ+Vi'"rWBI<d_7cr#{m)ۛUUvI5i(joyLJhCH"i饘f馜vif"YbK"ꪬ_jejkTQ뮼+kj6{ˎJZmL*@ W1kJvK)``$PUyPrd,n<<@) MP ` #| ݋oDP $0 L &A,l -e_lP0K&XЯ"2R+1ϼB )Xdd9ܐ/!C!$,B>hPԒUmBX <tA`- $MMAKͷ}O& t)D0].dn; @,m = }vK-h<]غA, A"X?#{B@8pȟ<۵@/LYk߹B lAxoB P<>^B7}`ah`+@oE a4@(` P V`siu&NX8ߩl{TBf%"@e=%iR!(D#T¨b9(Ԓg:BL"ꑐ"IJṲ&2MzҒ(Q2V<*UUrP(,gIZ R6^ 0IbL2Lcj*j+,$/$5YMY &7I@5t$9)s)d<[ܠU';S8Sm73<ݓ (9cSeqr·9-Y 95F/Qj)I5zҍt9; z4%M3:?)N}R5*7 N|RJ8-jNUvt2!*OcTbuEA[b4#E+IkVJuGE\] ҖruaXAԯn5qIUjTvju`ܸe)TثGaZYZղDE ӵVM,`I r4m#ҖEMj2wo S})5m(s[[6eAnW]XWxs ^nv-/5]x6|KMz_tos `U.)|+X\6llQZܻb,amk܎M_n7ڷrU+]j Z*% q 3ݰnoDekٿRNq+bXF.)+fƖY[˺V,>-Gp;** 3[K6t&d=_ʚiQ2:ѕ䤝U^: GMRs*?iUdͧoTˆ)YX?&-[.an():#UnzbXAullp}qY=^-j;Ԟ j\VniYmxã}mnQo{τ& dLVO{,\-gUsX5j@snəC?wkG2N=16):!ߘ'bn3qLp1knݓ=x[WOjG_wc{]WwmLΝ<2yp4Kx7 k{up-_gƙ)7?s[67A{~DV-|īڎ:;ɕSU>n{;Ue7FoL+a/+<ԑTʯ~Gogv95{|n'XXv&rpWrzwo7Vy%z41Yfyx~pine&|vuGu_{do'pE{ 7Xt+&nwR)x38qj7y f,nA7p+X(W%'Tog he`Gz HWSgUH~~G}{i>~xzWX3~8LxF8MxOaGhVWZ\'rlw{vhkBhRwf*vp#tW9w*hyaGeoHktۆzRn)&mh+GI҈vTo^dp؍XvmȀrmgyWi&k]2Yx˘|Ɔg|ⶆʶhqr~|(O9.7ȑV I׈&y'#)=.-:4u>qMflqa ^x+&Մn7騅Vu oL86]V酠gK iɖ_ '{XHIY{KYqVTg{?I|57y6yy5IՋN6 ٙ0IO|9C!:ɕiXuiHGiӘzY y$elvDm[n[jitGJvaũb_iuRihVIa(rY9Ձl6'bg/!uY/9i/z ڠ:Zz;PK{vPK6(AOEBPS/img/plsql_finder.gif(GIF87a<<|~|ljldbddfd̼Ĕ|ܜƴ||μԼʴtt||$V>tN|lԔt~tdLrĴLnl̴¬tzt̴ƼĬ||´ttR쬺μʼtt$$dnd||||LbܜܬԔ䤶܄̼Ĵ܌|T~섚¼d|Ԭdd\\llll,H*\ȰÇ#JHŋ3jȱǏ CI$(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*M*pӧPJJիXj)ׯ`ÊKٳh۷pʝK.MB%p˷߿SÈi8LJl 2b5)[0ϝlixN( װc˞Mu 4Wͻ۹YN73u_NxrָKNةwe*+S@˟O~5`l޽~מ& ԟ"Ƞ(#̅fva KNX("z0ڥNb'L5ވ#:hDK=Y.Ո‡PF)%#C*%-%W(\30|Lҙiy"nZ&x<9堄zL{gt5:jG{B L,;ک*j8Ҩjk}rZ,q,]R*a8x:+ +Jj—RmYDiƴ4nJ.0,+{"+Qq+l pɤkLqk.$.M"@[j/\kA K)i,-2|6w26-CxJ9ۇ-͛bAW4ո\f=Ph73t;4.NR; vuɄuxLxJ$xҘqMR#CyJǨ>zRkl=衔[ܱ򁫎K-=^Wc.{u.{wou܍ǟ>?R..H~Zulmi>)_]Z Cd'r4Χ>agC 7;e+~`d 0. 7y(XhPڒ$Ni(!p;Tz S }5":3͋_7vg@H1jHA3M tDP<40(O!#KF0>!+XJ@/vIiJWF.K%@Ky.GA0lsy@EFi-aGTѼ.ӸJPz)\ FMtX L[Ԁ9vU|Z CuĞXt5}tՇzelE"$IIr=gYϊZ 'IR3%7ji @KWJ͔kz^JYPĻ`>`,RwrR41 SRMnPU͗ըЧ` +U5UQ+JԶ61CҵvVqWM)XDկ3]ƤD{Yɪ=!f3 ҡ6ֲujYԣM,l]Z6lhwCݶ], WKܖXj :ЍtKZͮvz xKMz.8PH`ͯ~LN;'L [ΰ \5%$ (NW0g1JL@L"6f-cOx&p*[Xβ '9=k`!x/XvpL:؂g>πt'Y%xar[b.ְ V0N7N{ӠGMRԨNWNհ&gMN`A v^׽vA/:%lAL`"@(vUB]~2 kMn:oaOlAY,:F [6@*@*BP"TP(V ؛vǽ'XD&F0Gx\!0 Xw]a'(@P|)Jn+|V&L! MH" +!:Ђ`-= x>!bDBxEHW: 0\PLOId}7HlbK) yULwN(.Q2at/~x=߬Ⱦu" 0QBQ2& cʔ0{lF?Uoo@<V)NXq~xW|6Pl`"P|FF{f _`8ag_؀b`aT*P*+,+|ghӗc^'`Gh`0 @ @~`K8~~ S`M_tG*Z:p gdX{!"_'x&(m8f F12,HZ'}G}9Hy _@}Gw~T~7Oc"8HJXȅ[t~tXpwtzpX*$Hq؁Ȍ%kh膂8H⸇،8X܈ȌX8xpe,2h+2( Pr,g}5 "І*gn7׊8xU脪xz i'yXuЅ(76g~ EH8(HXָHIKٔ=?C_FٌGXi՘ Xdig/HiPh _"p0_=ّ"9$Ê(!2)6ahbXؓH"t`xXjINY)x UY9Vi)㨏DIyff0fP*i+IIө`vW`0j` YU!y]:qdh8Xtx@ɍSɜI)ؕJ#@xyjH\ix$ZE*ȝI?ɝ p5Q 2p_p_9Yژ~% bjd+Gn:Iq zh_ePl912*iɕEw:y*(Qjϙ3ڕx0ɨ(꧿ik>:YCYuyuvpwy{ p,iYi_-ɫ ڥ!^1Yo~@qa0uʎZyu!:J ɨz䪨8ʭhiEu *Z`7`q ] s ! y  ^"˟]ꑥȟui9Qbn V@ȆJ|鈳Hɉ])4[ųhE= 8*C+P*eJ\@uw6n%p; e{1e3v[G`W_U|m0KY=a9*ZV۴:d Y۹˝_5hiCcr;uQvXo:{Z˸{d«;ơ ƹ;9G;]PJc+rAV=QW;X`E{wgdG&K d_NOQ S@Wcko6~kfx jYk7=Fu\p(*+J Ex_>*A C 0dLj!9AE`HqEJPcIV|XZKMP`v?m23@5PcD g!6GaQ*66p8<Ȅ\Ȇ<:<a$P&p(rkɠʢ<ʤiVʱǪB=?MF}H .@LN:R=T=U}XkZ^Qb=*d}hmlnpr=t]v}xz}iGL-~=Bp؈؊،؎ْؐ=ٔ]ٖ قMؚӆ}ٞ٠ڢ=ڕٛ}2٤ڬڮڦڲҪڶ}۸=׷|}[*Dž{/mܳ۫]ݤ;)==[HM}mݡMޗ7}mͷȽ  # ߖ >-6](. >#N~ ͙ ^ np}~12^ C>]J"#&->/^4nWn p82A~E G^NpnΙΝr>2c_.9b3:Y `爝4..fBE!M.u,axUN}~;ꊭ d^暞D.n.^tqꃞ \.^Ү~.kȮ%E{؇pm.> ?>/%_* '?&0->@4A_F:mC7JN_ RBVZ .^_`ߴ>fṋtbk~?{pA>)>0qR9Itۭ~釯@~~j餎_s| mbIm>.¾Bnßw=ֽa/On/P:۟aݟ@`UTU^*@V]{NlР؇dƄXVڴcd %EuG㋀LA# z0B"Tj¦/DG$DODq7Ƥ^f$ph,G} 9ܐB#r /)S2J)EjpJ+IJhQG FvGǴJH%T2ɥt3C\,O?-K3G4OB0L0;9D@?5TQGsF 5adTRGqAԔS<3KoMJOR6Xa3|44YeHSUv٪h5rWLTjXo7`=eE$UhlsZ&LH_Dr,@Uձ`u]4wٜ)JԐb\x߀7cu8G&d~?։$N*ZJ^-P9ːg:hd..`v5g:꤯r磷kii +&M{{_)_ZpMC@O_<~s~.3wW Bӹ<@ρ$8A-F8t, Z6TI2[]@ &,7 cþ-Ј\O$Y8E*̉PqE.V.V0-]R5+ Q,c*L!w#h"0=*]f$k&4Ik*Բ/{ [c$%˅ ׎tFejA׶:m*WB'JV(9 vE2xF6эqU)UُekML4()]?'61 J`UYiBX&5?We+V*fGf⤞=ic5ju-)!i7nʛXdoLVԙ-Ks^'$Fd}E6Nƻ 7$҄fP{hNiDž:e!Hxiy; ju:o/I) ҫCLםڴTOT(1`VtJCT'Gr1G;NLLYhv#XLf)ZYEv (S;UFgke+Mɺm@;aVT$Znu["v`?hq}ĵX;[r5y\P϶o;|ĵ:x(.'hƽ-uW*XS3U}*+VBV O4Yց^|D_VXIۣ^ q*;a @^Tb/~Ot=hBЇFthF7щ~+CgJow~t5iNwӟuƹҕ&50-jVկueT[̧>bEY׿vgk)<$6x-lf7φ6 %c;ԲmnwۜvLm$Oyxw=@{w߽o{DhsG]#> zN8q\F-rWl/&[芓<Tk;z&xmr]Ws7߸Y>tgKǺsA\_ug:nKsFŚ-:N}/_:w{'ÞndWxځv_]ѕw<x"9A c*ϻ1zs'wnfG;7tٷ : =zg=pC>W;|~\}c_1B_>\z4?x#H+=ؿ?Ծ>3Kޓ?{?>T?+?țJ{k>?#>ߣ3#@ỾK{= >󸶻AC>ý??zk4',>˃),"l#$̱(9=*d0$=B,!&,6t7|3SCCB8=CB:?4$D DAE$CLI0iDGԮK2OPQ$R4EO@XA6$N4\ţEY\ܜTL+]L3;`FƨEĐabt[DflFeLLtF F`i\FSoG/l$Gab1W̙k,vsttTGaFJ:6ʘjG "*9+BGؒyǧع%~t${#ZȽNjrA㐐<슇HGÔ_"ȍHPbC$3 \IiN)ȋ9ǙI[G82*QuJۚIVd>y,ʍHF:L*FI,dGŰdI~JĨd'}<ìwK4J9m(IS:L Hy1ɺ̗TDŽ̀9Jӫ|̖wGLs˥|ɳtڴ6 <~aGw$Γ4,, DNpQNN< ˯ND3 5#1D1LO&|1 O`$`NTP-]  PP P-4   l#MQecP}Qm'J6*dM,\7ʤ\J9KEP˿웎ҹ|ͧRSJ3Q@Q'Լ)5IlL-7SMr&ESU5tyS"QLl˩Jl1 R=%2͉3SӓHQKҪ,:Kެ6̼ QMTRLUGR[]L$RҤ\T#=B=6J K})IMY$PB*TET)u[h%S1cX%%=\֊HUUbV4TtuVW{bWLG׀.>s؃E"z-X(Qu!S؅ÇXWVĊXWeX$ْ5ٓEٔUYX؎YXXŘYٙY]ƜZiY٠5Zࢤ%ڗ=ڦ]hX=؝ZڭژڬݍZ|ZZ [-[PZٵ=ڶ-[P[]QM<$5"  WQePM\X\%$DTխ1\\Ŝ ]ѕEE]iJ\n}[Mص\݄\ܕZݭ$]UEPu}^-N^M_^--_8_F]_h_F_ʥ߀%[__ ` Vfv`T<c% ` y "a 6+VaJvanjaI.)a# !&"6#F$V%f&v$'()*+,-./01;PKm1m((PK6(AOEBPS/img/drag_drap_ico.gifgGIF87a|~|dfdܬttllμʼļμԔƴ伺Ƽtztdnd´܌||̄Ԝ||܌줢tvt464TΜd܂<֤̲tDڴԾLƌLʔTҔT֜\ڤll,ŹͧŶءѸܝ{KU Je0P}Eď*P?JzܸTC)Y:P-qִOQ"o]~0_y4ɄN*E*aT??騪:y굩أ9L;vڳ fBNϚJV.ߧzzU޹ZuCi gx ;^fV~bMC c/E}՝oeF0dwΜ;6S)&Ern.ܭnԍODZv,m?O<]e٣+?{wWu H`/r =.65IdZ2!Z!2ޒD|L,$@Dhc'<1$)Dɸ؄L6Y3aVhp =HH晨4QG,ɦlF)bavz9ʉs~ʙ=f*cI  JtD*t8ʣ駠ᨙrإbzK`jpDzk~҄K\:碟*#6,: *ǵfmb,: `b[/58ԦF+g)'p~mKqK\_, A!\l+,Ѣ4s@ܰz.#FK< Q?-XaMdɲx򚡸[78`owlo"cgy8~!褏nwX$:/ߢKN./abaD#\_3W_}YdڟR|}>hZhD곿~>?O3jML O焤5p]Nh<*Pa ̠1h^5 9rJ"Fg. uT* [IPwCRpVHD"z0 Q`$n eQٞ`!#g=̢U 0dZT m&'5 h4#ueȈ p 1r@X2-ِ"*Ε KQ F*y Kj?$+, Q#L%<2V5`)Z6DD^ 0IbFQD J2f:D1IjZ̦6nz 8IrL:vM4Iz4/~@AІfs66*rH=jJt p h5x)Lc:x!F͵T!ȭ r[ d*]w%qSVM vu.k\F5kٹ! N Rtk^ur\R7ؽ}wd@T`n O*SWl` [Xo_wnC v@@xWv  W u| F$/~a"W%fg+f/ _6@EC eN:` [,nsv3D<H&ɀ *@xEr EEN?`˝=-h1ZfFthr2  b@  ^e[RPvݱ;+NoϬ]/d[3P5h`[O:={Vt~l!e@5f=~@q1An[1fh p `<@qqk67Bp o5`(H V-mqq;>p;HHPlM? W o}0|}|~q~KyMg!%70* (%1X}[n7 7'W wYxЁ!~N؄(~( a`Z(V8/c S .rÇ; 'W?W7PG(gTU(b([HX Yh/(x؉h +p5[shWw~ꇄyW腊X8ȉ$ȅ'8}ֈsX~@xvǨh茉ȎȎk p9; pK6!|0PPWј3xx8ȸ8*h!ّ )z07~͘hdH!؈;ieX#c98N>ƴ{(Ղ]D`b9dYfyhyNZ9M\)}SnQQqsPkRYx `~i)QؗK(vp٘T0yPRɘx!p Y КyI9P9WiiYYIy0K y ٜҹY9 驘ɟ幟9 ٛٹO|I 陘JiٝI *ʚJ|JZ9+Z.Z %O0JH*pq ڣ>ʣ Y&oQ: Iڤ:9ڙ١hjԚpr:tZvzx `|ڧ駀4ڨPzM:کZNꩤJ: ʗZ唩:*JʫjƄ1ʨڪϪ˪*DʊJjzJʭ:*L蚮:*:z)yTڠ ʞXڞAz;ډ޴jj:{ { {&'J٢ Ezʱ7۱*3sKڙL;= ̹z4=8ݬg\O{PJ?ǻ䔜ޅԍo, L蕎%-݈YA{k=ՅK =AnZ> -ΡM4M~{3~^ḒؤΞOļu LtnMû[`LڛG>⸘1މӀ9)~HPGHNM!TS}^``!;PKw  lgPK6(A OEBPS/img/app_attribute_tabs.gifGIF87a{Ĭ䤦tvt̤|~|伺Ƽ̔̄|$V>tN|ldLrĴLnļ̴tT~̤μČ܌ʼdd\\ttԬllll||촲,{łݬ o*\ȐW#JH⸇3jȱV?IIy!u50ò˗0cʜI\+kܹ歜< ɣHJyK'PJJիXz)C˩/`ÊKٳcr۷p VݻxB%+ LÈ[D˅X|1`L˘3k\cT$oMӕ;˺H8ɒ۷t!KhOoȓ+BܵaǺ6ر[quk{ӫL;JUUF@& f$8z bѠi؊)XكaYn8YE߈$3+t`]~bA+x97c=⇥z@Nb-b*[v%~_~ebMD;Yd i!@hfhkfo9l'JRf'6|0Ɵ^꟦1*@tcffꄩiꦃJgz량b Qa/r%rib"6j*CTs랽~ h&풸뮽bء ko5a͂z *ІZص i ù[:n6+ @b9 pyB+ȩм+_1!ҿ@:1[pW-/ǬXj1H'_ͪCt)!,}k-ص\Hƀ&:<^ȅ/|h·٦*1f-H4^s+lgn{R.6깷'_JHWv[PA.W$'5Ɓ\ W?"x=񞻚$M>x<ܙ$=_Ϲ-t_>i mWϺ~th϶'nO}Tv±]cc}Jw|[ܳ՞w9~O큏7x3u5y]47cԕǻ[ֻ槏SU/ t:ī]y; =˟ԇy?Z޿ˌ|/{o~wo}cou)/qTXx ؀9@WX 8XCh؁ Iz(n2`3@.0284X6X5`7` T,x@B:ȃ-CJL؄N9=qw)x*,^`b8dXfH.0p1EZȅgr8hlhDo؅t|؇~imHgtXjF"0PP&p(PĈXOXF8(hT榈X` 0XxX]dD888]CXx_T؍L  Ij蘎fP`zXU PS9T p4 ِ9Yyi@ّ/"9$y Y(*) '.)ْ094@2Y8s:ٓ>92J:FM @jEjI*HZO 6**1J\i$d[IjڠpJ|iCc<9YKڢkQ\ixj f:E/٧z[:%*ک颂:Xڦpꗫ s RvJ uZw:jZ4F: ꤂Z Ɗ_0ڭN:J ,J京HzڭyʤzJgJ)kj]zZz Ҫ_zJ;jzϚjZo꫽ʬyʭ!Ū8 +:Lz?B+JQ۳D+X{GkyH6;R`˵=bKMI J4:L{ksjkW۶ [;ɲ3˲˸*;A;o[Tۯ;K^k{kʯ!xc&+{;:ۺ{[ۤlʵ]z[{8[ZM*ě K-۸ +tz˭9۴+[z ;k[o[ZۻۿʯJ;jUF ;׻J[Íks:[9};%{ [˛>; 1 TB\YalN,]&,f^ VV} T^a/լ@`}hb= fn`( m v}ǿP0~ s | ؆} |]؈؎- =ٔ]ٖ}ْٜٞ٠ڢ=ڤ]ڦ}ڨڪڬڮڰ۲=۴]۶}۸mڑEM FE<0}ȝP4WT]WV4=]z]E-M}=j ~S0^N>@@M t?Ld  ,nND 3 ~N%'<->DID1JK>>P@)E\HpD1.8.DK>>$UNWWBr>x Fc2.4;n)oN爞q4PE|n^|~p>耎➵q`H ^n癎mZ.~XD`nzSNn?=~ξD~.y.=G>ͭ~DT̎^꧞ҝsI>T G _d _ ";PK PK6(AOEBPS/img/pg_def_copy_ico.gifGIF89a^;bnacmbgofs{ry~x}|~}~}ݲ³ôĴõŵƵŶƷǷǸȹȺɻɻǼʼ˼̽ĽǾʾ˾˿̿˿̿!,^;H*\Ȱ!Q#JHŋ3j8J Ǐ CqELn`1 0YTe̛3/d91)dF QF8KBN/>gq jRɓO`"PhӲxBijiZ۶bU*( HO" x6c ۔Q݈,JnX]>$K 9EFztM'>դK,X˞<x" 7+pg?A ˝VP'4 J'fi p9!ΟY'ʂ ɇb:Do?v 1qDaa1VYA'[mDH}Ih,gG H" &x}]hPxhX#_xQ Hxi`i0vWȓ“2P!=J4 <pB\TQq(f RYoeG\v $$@[( `( @%9R::磏ɡI(/`Qłevj6ֈZzaizNR$FK( =Zs$;MzF4Iqd24dAijFvV6,ю2F4pG'dʪL0MЅ}U2FFK =4C p%@vpv\_# ꜭ^#$0{D.0 8 )Mlslm&-؜U<^oٿ'@C~{  ZtH@;PK?nPK6(AOEBPS/img/pages_finder.gif#iGIF87aa |~|<tN|lԔt~tdLrĴLnl̴¬tzt̴ƼĬ||´tt쬺μʼttdnd||||LbܜܬԔ䤶܄̼Ĵ܌|T~섚¼d|Ԭdd\\llll,a H*\ȰÇ#JHŋ3jȱǏ C|ɓ(S\ɲ˗0cʜI͛8sɳϟ@ JKF*]ʴӧPJJjOVjʵׯ`Ê= `ٳhӪ]˶PnʝKݻ<߿ ܗ@M+^l&Ő#'n<ˊ)˴ÞCv,:3^zwJVװc˞Muk 1Wͻ ȓ+};7Уnnѩ<{r.{Gt9%֫˟>=;(K1{5 ڧ`K1'a~ n $^(b桅M Ԓ BK1P</R3hd|6(LK6)+)BVQ٢Y/֤0pHҘ:d)%j4fv'|z)s衽XaҔ0ОJi`Jp:`4|J#Fj)*Ɬ*j*zk ^kJ(ǢlJl`E*_ v1JS%b̸)qj'. xo*[l>/JVZ/ ԰×&FWA-K_lpLJnI1,3#,/|*"NK_(}kYz1Td%ktZK-u+W3@5qx]u򡉒36\s&%(y3Dw'IM}_p~nRo.ְx-N|7ӧzI5^wWw$0Eƭ{sNI"Ӧg80so=NN= <曻.I7Oοki ӗ~҇?/ܰԶ/[eF-Ah+I u^DNn G29$' Wh=:G詯A9 4ޏ C [IJ"tZ|TGEa|5{@xT F,7l7Ư"Qù厍ntIҸs2G92PbiR==8(wr;_ 8=|zebGQG䃰Ifr~\ev d!;C0%9wX9Lb8|b$"EW+BEڑ=8R`y!aAiO(obsfZ<1OSК<6=cg3OioI\=G#0J5M=>̟brƑgreGOsKY*SFBLQl$۩?g/] PK$8.N}jhU.YFMÌөZVԲ`+LӪV鱵8EkX׷.]OIW4լ=#_0a"/k^SMi`+':%,fU G%;٦I@@ͭnw pKMr:ЅnkOl`z xKMz|KtM <h~LN;oΰ7{ .oXx؀ 0gLCX$&n vCv EdHN7@ZπMBÆN+>b,'MJO`bEy{ WP Bo0 pL빠\wXȂ',NO+ϻR 'La)HYlѵmU\"DX' ja +V0^cFot Ppb'* m B5'z3E(>qO G`"Z`OD88+>T vöqM 8Q!|<#C`D|,ַ{xa.a3Hd=@ +x |wX!G nWM& oȰ]5yo@}%TA^U__yTtz}y.В '?wo[})׀򗯁T-̏)o.<ɞxo p@ DB߮u^Sh/Qb&`0 xPg|go, }'}|rw}%}g~]ztgU{Ezz{'.hW(x6x$~׃6! gx{p| } Ȁ"}]SW^1!|Z]O 0t'{4x{2x88+xn8"(k(s2ۅq烾w@{PxGrI|K|KHh}e}w^!@ |HzqwXhl{؆o06ls{xExFx||dd*8+hȌ˘F`0uu }c&XXBtWh=苾8FP@Xx&ȌȐ،ِh]SQUX^]>!" eQwޕg8xȆ-(0Y݅-I4i{xF@ ni ])~@ H(ȍrs`tPvpx `x1ٖ;Ah-Y;&2A)Eyەr萆 MI)]9M)^o\q 蘎6Y5؊/閪Wi4x,ȇؓ6AaЗ@yU`HX)+LI)7Xx%l$nP:b}bٝ'w{'+yi7A` u}bcY)٘%f`gBb ܕ: )@١IY ^ ] >$Y & z`0T``bpIʡ:dGb?OQ S`/V3j`5UpVpUYHfzhjZI E]=)@B 0c[z51DPoDp-I0ZzK-Gej]/0 3@@l!FJ`:{'5`7ګګ9;:Y#@%`'@hؚںڭ|h:h&*i."6I0]P ЧM;u['%Pp@۱K_q@]0,.ǃ0}O0<۳>a2[7/0HJ) `b5T[V{XZ\۵^ \b;dm }~-ԋ Ӯ ʀ}nBLԂٜٚ[|ɪ<ڤ [ڨځMHmѮڜԱ]۪ɶ۸ۼMڵ <=] Ɲʽ]=ݔM؝--=]}ꭹ֍xL;]}%>^ _>~];+%P^ _">,++KUkEe(^8&I EޱB*K]J]<4nO>IN>YXK>^cB-neF@YN^e>T^>qN`Pny^q>4VJEjJm^]|n勮^.s..AN^Hynb`\M~.<;d^^⣎LN>쁎p쩞^.c>c]D^됾`^瀾cn̮'.^a.펞h.V>N`O_^ ^] _> "?$_&&,c0 2_64:<@>D_>FJ3n ^R.^VO_Sg;^ٮ_Ue߳YUrQ`.^l._拿/u~nb踾to}nH^z?;n~/.¿^찯ßʟp^uIN^t^į'_A$PB8D-^h1bF=P@%M<SC k&4H!DF̙S!PBbR:o4t&QGoʳգQu 5V&VM͞}VFG>ZkɯfRQ7^|1Ƨ_Y$??d&g«A 'p"B 7C?1D.kED1EWdE="Ѥ _Fo1GblD2H!G I%dI'2J)J+2K-K/3L1$L3DL#[)=7߄3N9N;3O=O?4PA%PCsdQG4ygy8Iw=z~zǵz>U?L|%|׿^'؊7mCu 'EZ eZ=0[_A]n]?)~%mE lP-UЂs 0*EX֠c}Lp`T&Ną*re3C/VI<DQhBsq 'D4 !lnLE#!# P(/!#," B$E-/}`7]`ֱ p7JRH+e*Uҕ4P+a9KZGe.sK]җIa9LbӘDf2L(yτf49MjVӚ׬&/MnQug8eMqs4g:sNutg%1qԘx螵dYG6)BZէozRk1"P]>ʾꒌ+8hT5|vt\`5܍ef4 ”Zwכ9MV-'8}ׅ3X:0|c-/1ӀҘ`#HzFʈ<16:+ d LO2:#8W6P,h90(_,Nn/$Gy>珁nyyJHWt\MwRtjQ:HEmUjVկΒjg;kZַuDjSGuGiaS6vCle7Cvv'\Ƅ#cj^7HT$4 v98w<YsuR}mz;l7m;~BxZI͑Ѷ) BE^%[, &f`p*!VV˅pqi򆝹hF! ^}btן|xgs+P|X=(Ow oM} AϏ?`~?dke~?1T 3Tt烰ӽkӶm8" k2b7Tt뱳8s7lڷ7$C2Iy:CM8-; "zb={1;<B ($, #wA3*LAK1C:p+̸!:,C=6ÿˌ;sDD@5:<.L=Z&lD͘DL8?M11cD<0k4:k#=qDc*à Z#;Ll_|kEWGcC j܊< K88<09:=T4=fD!$BFFXF#nƥy<L BKAỽ7. SSx4>!twT4.{Wȭ H 4IrTAtI(ɗl@TɛɜӿɟʠĵII4ʣDʤTʥdʦtʧʨʩʪʫʬʭʮʯ˰˱$K ;PKÚ##PK6(AOEBPS/img/appbldr_task_list.gif GIF89az!,z+|*\ȰÇ#JHŋ+0@Hɓ(SH` VʜI͌ *<yϟ@3 ѣF "-cEK64(5(TWV婵g@"P@@-@BgvKdV c T % V`o*^1XAB- ,A3Ϡ/FPk3WS6ݬW"W$ܽ׶Y)`l&sҏkU5P@(!ē˟O(h& 6=(Vhav &a$h ,.() @8:裉<(` "*DeNRNiXwF&$_v)eeI%^zf%Hr'qzR'\禠V'y*)}d V**RZ^j*Vfꨱ* iZjj%j.K-.-2'ܶ[*Zlfn:[oVj#n{-6,.f/v) zzfɃ;Ƞ^fK,98\>-@m4EtI/4MSɲ39OORof)06j(w'V)sm;J7 1j+m'_6#\v-c*\.&쮶#zy 8jZz㤟:ǧg97?p6娯^foaCMv/ ;7?o;fo9u=dz{߇v_[X:/~|}([iudvvi%a3`65B`g?eOy:5YjnDFJm|sD@qk[[ê70qUs> À'$"Q_nD.\ֺ"p'fu>daFD Έ\>DA0'sHC1;\̤u33=P2B}Q 'HZC& MzrG(Qn$*h&AQAL%'C 'WrKb,=BjPt%Fi|!6CS6qQc(<M@ $릧G*vT"$pZ+ݴIi:HLMMқxH}pvʠBS#_Ƶmݤl Кi$=Hwٿ4.}ib*SlKi\HIAgDoLu4Mnz*A7XHݙ0{[&>_՟L+Y:TYG-NtQ}ϣC*τsac<(T!a{}^"#+-ZDQ [^>uE*_ϫ;i'B'R6D+Q-Ʊ)icݸ'y,(H ;PKt1 PK6(AOEBPS/img/page_processing.gifVGIF89a111999BBBJJZJRJJ9RRRRRZRcJRBZRRZZZZZcZkZZJcccckcckkcsZc{cRccZcRkckkkskk{kkkZkckZsssss{sss{ss{scssssc{{{{{{{{{{{{{s{{{{k{s{c{{s{Ƅsƌ{s{ΔƔ{{Μƌ{ƥΥΥƔΔRcc{筵֭֭ΔΜ{sֵﵵƵƵ޵֥cZksƽƽν޽ν޵ƥZƭsέcέkεkεsֵcֽތ9޵B޵c޵cƌBBZcΔJJR֜ޥJRJJJRZ!, H*\ȰÇ#JHE2jȱǏ CIɓ(S\ɲG.cʜI͛8Qɳϟ@)ѣH$ӧP[2JըSjʕT`B)6V]Zm϶nUK%ۍfy[ߑwXٽs6؎Xrvn%o\eŤCg.mri;linΐan[h޿;>NxͷqZ̚4s%Fvȧ/v}rǃ;+7o/F~py_|摀Qy"ǟVq'WayN`=؟[u{Xp UEXbr1( 'd h_~ JeR{HdP)\A)Vb5L+f9R^&%edԖl馚h)gq#՜xŔ,řVy_VZ(" g_ZϣVphK! *fr¦v"}"ꨤJhZAiJ~f› 'z "Yqϰ{O,ݪk@볠Sk;Ofk-.+8G$kϺiz 봷@,$!ǯ#S<)Hn<ӬԒ+cN&2&,4` :J3b?s3LL3,h@RS=uGg+2\s}L !Y ێhѭ-rw4NJ/ݴޒL3￀Ll52 Ѐ.cgMyA9w]Sl:$ #L:#.ӎXN6HJ{G~n՚q |$2/J)!,HLK-kcLG"$PS3r>$_H 1Hi:D @,H(Nfr%'GM%)I9M l*/S!%BJ0IbȄJ\rЌ4IjZ̦6Esh8Ir3v<_Nf̧>YOv ?)O7U2MBb^l@'JъjS ؔ7-юz}(8?JҒ4"IWRԚhKgJ| ȩN1|P{YӢuheNہ+NsPTJUD0LMNUS:VfhMZֶUi`SYJhjWIWT5m[KžUs+`X\aB[)Oʦ.d a7- VAҚe0ce Ѧʵekl;KXvUkAWƵkʭh)]PA޶-mJGֺoXWp' zM.X:jt{b\w_*hyQ\mr/릲VBnuKa׾mۛ]6 ?1 Ij[`3R.1|a WxƸ 8A DN29T\~uZ ^2qc]~\5!YKV?,aʗUgݡ9`p_Gc lAmxf,;t=h`}O#@ 1} VO@ޮnÌLԜTP:||k\vnu lh {ش-;h#W[HIMgCҞv]%kSvOU&Wu$v4~L.O8G;''N[ϸ74 Gp<?ʱ|-̇_\枬Ojof&1}.sʺ{7]/=+4щfqts=Sc!-r=Kss=iڿ.AZ};7.wZx5]}/xm=ӻw=}sA,W6ӭ^C{?9ħG}͜b?#wZӞ}5Z9Y}C/׾W;M[_;|3~jĆ~[_j#ғw:忼KllGa}wie|Lhf{Xqxb}Hqwdmtdhqt;U要#8qff+8qHs='Ws6hq8

B(pDXvHoJքN8mP6ThVxBZ`\؅`Zb8UfHWhWlhT$r8toxxz|؇4Xq~5XXx^؈NP քsS?N  XJ%t`ʼnhN@ j&&&&g]u08NV kR `ZXZhfVt[W .` P %sk2vdftixMpM j|D JfjBxhgzdV| oW JF ;5;Xx5wxF+lҋy7~G{9 z<~. Ib 7h3y7|ig㷐v'J FÏҸ{'{4tg{W~"ɐonjj 䠏IgfG'{f } C SyD}hƑ 7xI~יwz i h`f`旙}G|IlY 9(HZxGL9k٘0` > HO IV MA0HHŜ"xP  p$Ihg` hO wR')ȔQ-xb/Q3!:^nXt(:O*(WnR#lKҶNl6JM8 LP5EOtJB2aM9zKL:MQjB0goCEzKS`krObn*MVOIKJQIJT^uj4mpZբJNԨM4zMzD&+j"/z42ʪXU&`jˤ0=7lzzkR ˪꩹ZzʧvJJTKLEʤxZ*غ܊ʭʬ zXiJcۦ:ģZʯ{j˱; p*ĺ=:;k «1k19$ ozoR[*GZJ٪NKu&kKzjR>Hb;d[f{hg넙Զn RtKwQvȷʥz:䫌%OG*pMlPkF[k+Zz];A˰J=K#)[ꊲ5kTRj˸+\{JۺklNUzE6뮡ŧXUjZK示~ؤd[x.5N{˾[˷ʽ3քԄC;)Q+M? s Z,m{۪ʯFHkKZGHڹ[˹9:JZ+OL+K#,ܰĿ[; L+,L=,lˤۧ7 ̸-RkElg|7HJvEK; I+UY<*ܭMt%˿bۻKE<ɜɞl$Ah=@vo|uoA{ay2 `g À=rzɯoj6΄nlQ²䦶Qbq@P⑶Úݣk ,PԦ;ޝAxn>{/' mfJy7<:Q;1}a츷~!v(sϽbù1/3C.[.2f7V|зus 'h֡NS[6zSCUO_Q )l׻fX_ &9d|$mus`7%!b>H*Z~ /6]XaVu;U.kzפU m,r F:Aa6J,SĢ"F)QVIJZłd$Nz򓠌&CIR7VV򕰌,gIZ̥.w^ 0IbL2f:Ќf.jZ̦6nz 8IrL:v9Nj @JЂMBІ:|D'JъZͨF7юB4  HGJҒ(MJ#Җ0LgJӍ8ͩNwӞ7PJԢH5gPԦ:PF*ժZXͪVIխz` XuձhMZZֵp\ ҹx+\۪׾*_K#6,+%d'KZͬf1؃*`̰ҚMjWֺlgKͭnw pKƶ%gY,ָЍtKZͮv"7]nsMz׶/@Xۚ m{a_kmp 8 ; [ΰѻNHIEwM>  *,8αw@oHN\d.Pr*.{ iA\/hNflp\b2kSmV҂@5 6 8HF;ѐ'MJ[ZWq}N{ӠtPԐ5vKS:rr?Xl&5q^{Tlsg :HB `5@묪)1fۡ۾u p7ַkvMaW7v8A IPvN`{ЪKfa^oЇ{3ݦ.inb˼VwiѼqk[fHA\Vʮ.[;㤦7L3k%z?jS,6q-{X2u;/-^ )`Bp(<ϱjt'P?3Ӄ{/3[neiO5Y X= 2ݹXiؖj Jz"\S J}؜{5}{RG}76۽O:|ޭm_|VZ}'~b}wo}~y_o$ӞIaC* bq['w|={hf(8ẌXg$e4uЍXsk0{׈W`xz<'3<WW)ptdZbh/kG3րk@ ()w$' ){+qJj8X`HH/X%)NJW/xn1H~뷈6O8R87G[_V_Y~bk~׸'Pvpp޸U+zwIxYIP| i׈| t8_xzH9w8x1d8uzyTx{9kYNPJ("Ǘ{YY|DzTwf}YSWȋMYuOQٔYc Ԉ[ɔ]I^Vع(gH#׍\@#8cYyh_8|RjyY~IwѨwyГ`U/@$٠ ZrhHYX*ri*ءx$}My~V\ya֙ߩ=ȝ߹șbEZDh7)u`Mfp wZ==i٘zzXI kʢ z}-ɒ$G|2w#X_8Xhɚzw|4}y S24j |0HAʜ9~ȜB G^H:郴ZMZ``i(`"P +@ XXFi`ȑ  3Υ :e`7rڡ٨ZNhv(7{ڭ èDM {9 巪>ʝKZ:gۉ#^ ~$e0\ z(I@a*x7HsJZY8YbH/hU&{yQY?W8t }WZ킧׆#<xˠdghg+zEKM{/aʅH,8ɷJ7(Mk)Mګ0Ei0G` Ph%[wյWUwud{kQ t&+ɠEGw8%K+ǣYnf~Qڽd@L0PuKeoʘ廖iRtZ[kxN ~OO&{^`O]ggT[Rw#^~N>Z ^3&.S˽M ,.02>4n:<7~@R)MF~HJLN? PT^V^QZnRCM`b>d^f~hNYOEnpktQ]Mz|~sO_戞芎^玎Qw~M^~阞难霎鍞Oy>>.NM>^.~O鹞®PnM=Ȟʾ^O~~n>ܮ\NMv0nlphb^~SSt^h}P~MN~oO o /_T)]!?$_8.1"Oo~:H@B?Do8G/_?S?UOWI_N3a_WM_/o/cfEk^{rv?{O\m/X?Oxo/o//0_4?'Dާo/ğt0oyd aF?$oE@ZDaXQD-^ĘQF=~RH%MDRJ-]1J4NlSPEDJP҄ ּx3Ξ;5uhRL:}UXe͞EVZmtHV jkR^K]y-w߸?Ydʕu+O†"NXgn&aE+,mYlڵmƝ$7Qw^- n4w nAOu_Ǟ]v?fjѥO?^]Yは6?zǟ_Xku.K>ob/B 'S?d!$ 0EWdŴ0Fl@?D@g|+@$H#FĊ 8jFl2)K/N8 '=rKij2/,_RH0N;M21OUNEeQ,N@tIݬODu4TQG%5"HCԴI3[RLQݴN4Ro5!O2|x'x^:t矇iz]5{?|vygx寇?_xw?͗#8@v)D`8.ЁuA VЂI$lЃDBAN$ U›e$)!D`(Cư5Hfd!FFGDbG\C04a+pEa _"Ejd18F2zd]! xB5RDN XE8$T\#KX7sABf},c"-xƐOBʱy #JG~1!(Hғ"U AFđ$(JKrbd%I NRX%/oiS2Df[ҏ"-YERr%FZj4e9Ne1lc4qAt|'"WNNaG)Ll$g@Ldd5g %5 LX Ԣ#m zi23:f!EiGRTd+uiLe 5sԦ7L8ȏ}<)N:TԴ-,iO;b͇f;QeR:Uti|!ٹFCz$OYQrV+*Kp2գjed Dsh+Vƞ3|S Uvox^N6n,&Ԡֲ9Clbϱұe,Ye_BYfS>Y{ظZDmnAZf n+zuEnL\6,unt0N׺ t]nDoxMU]׼ey׽m{׾}[׿B,)-l/"%%OI5 oE,U,ke|pUu-L*<$/j|(Oʡ򕵬t_st;PK_|wPK6(AOEBPS/img/access_control_2.gifSGIF89a 1cBBBccckkkksk1s{{{ƔƵƽΔΜΥενֵ֥֭޵޽!, m1F*\ȰÇ#JHŋ3jȱǏ CI"@ᡥ˗0cʜI͛8sɳϟ@ JѣH*.GJիXjʵׯ`ÊKٳhӪ]˶۷ptj2˷߿ LÈ+^̸ǐ#KL-Z زϠCMӨSnCc˞M۸s;ni N#<}ڐسk]{wOLBy˟O(JϿU } 6 h_-}fe-C^1($h(C Wʐ4h8ڸb~Uކ@)a1 5$L6P>I WGF\v_NYe17hg`4@. n|& t壙ij|3x$6裐F*i10 |% âv駠**2Z)_^x説W5(Jj /|ꧭ k쟸+eV E Fk` "0^V׵u[z+۷ᎫWkolN9_oa/B8bnV w)P^v_1<D'JъZD0`Br(Dђ(MJKQx|׈G&}e iЁЌNP @ PԦ:PT09jRծz` +XzU ɴ4 (/SSp}!PzC]x%:`K54d'KZm,9Lr)?B>QIlӃ'ͭn?2@m?GK\V-(x22̅t+Rez.xKv)Mz|˓yɔͯ~މ}9[=̿3v#L jΰ {0GLሸ(N1mN4,~gL8Vs>#^ȄA2e4~ym,#ʒQrh0_LS]K潴96X̘)f4΀`f:WfB3FgF+:Ѕ>t-iJC:Ѓ2-=h%/͝hKГ4?-VkԮ45}jL:Զv4WRӞNtm]aԞ+~7fa7:ڌ,ea{{۽Ivm~7fyy}yqWҊwjs[w+p|c[q&wGmqq/|cfMp69oXXw<~̩ntN1.;8W9m.{֞ caѻ&ׅY=ѣnva zܻn8dzls#cpȗ8/8 6817bs(x3臿؆Hxq؍F#XHpƨ89}8娃H(?8xhH3ҏؐD}X|49Ia{Y#ȑy !zQ)294Y6y)9H},.&9F~?i㗔L-AٔPiOTKYX)b\&`b9dYfyhjlٖnpr9tYvyxz|ٗi9^`y٘.^"_ٙIS(E_՚)_;Qy1@9_ٛG)Ù‰Ź _ٜ Aay)ɝ=As7|6`ٜ7i6Q~W5.<Il4IZFC-꠵) dɋg z0ڟ2!(˹ /!% J3)ڛ*錻ס2& 8ᤣ>a<ʢEGڞ0i)Eqz;٦/3/0!,zr{ڤ3ɦUJ_z*:}jqڟ ڨ2ڨ4iy|d{DJxj}z*{ڪ @v y~jꦽZ] ƪz꧜Zqʣ9* {8z:ʪoڬj/!v. hʬuJz*z-:`9݊jʫjҊJ#j$Ŋ:t_j $k [KZɭ2Q*ʤL" ʚ:j.T+N 5[1۩<;D!OZdS+ ʵzj`k 2Rjm:۳gGA); K8^'_ڹUZ[:tڹkD9*1Q & ;N> k hC!G;+Gř՛ګ⻽hۥk b۝e9Kپu /a ,< ܙL?[l K ,~y(*,.02,]7?9 [;,%6L^=9CPE*?lA<^G|7MCO\(IŌA Ԧ ,)sT x[Mv}pvي}ێ'թ1=ݟ]н"Mק݄}ݍw "aՅg ^mim= ƭk }y1h=$I-Jm(ey&rmj/-FӠ6v<}サu}+⟊gx-Xm} xߑ|ʺQۇ1吁XI.*|NP1df~&?Ea8>~\ܟt>vnp4ʍ.;b獡O"13|븞뺾)@Bon~ȡ~]Ү| bޮ>FAN^u>Ǣ>~畾ZȄlTǓ|EAi噝 .n_>N ^Ͽmmn!A'8:Owqڌs5?h<^OS&X:nn}_(8}VhY^k۱ǁfkc M_ nٍ-v-ߖ~f~ݣR N?m?؂u~CwLyݻ/rd-O~gqB@' 8aCB #4(‰XQň=~RH?n(1#G$]i! -ZxQ}*AEETRM>hBBU֧ }{e HxtV>{LpyGNw">x}, DȐ^*<ςj f"Ѓ H tV/BdvlGH0 ai@P78pG|ZAЇNqJ aDHD _ g'^#[DɌF:vD/l&>:"h p1^c"!7%⑇#8IJJQ DıR*TcqQD#*xII2"1P0`O(S>1$0C=B$r* @"B t>f6Mnvӛ\ L @ ]L:@ 8 BzӞg>O~s 4d(; hD%:QVԢŨ@~J([(`'EiJURԥ/)J`t$ `@ H?jP:TըG4˛2Gd[T:թ nN}jVSv;\jXV2k ZlРQ CbiL6˛~ v겯MwW Q%H=* ^(\}(vA &0~E^ it j֕pƝTzR9BlKއ5@ =SPehQ-h4_QY yIpEu(a%܀ Y9.y0hycRHdqNjz Bi*Mi(W |P mdMYA>h&fʦ;YjTX衴V4 @u W7Np) 7j۞t 隫ܾ*n? -~-fZԛ.kϺɭ @/W폺 YGjT*5`ݸ@ /+2/pJߺҥff*/9أ~QxPp'p=OciL,l۬'I ϛ~A.C)lep前%F*(B,(rI˾(|Yf8jgokK[[?rAڧ/rx1*'( mLag@v PIQt<0H?e٠/Dh .T`! Bp2G osp4`cDL6DQJH*Zjf`` H2b/p<:&Íqcx?^#8/⑏Ԡ#+F:E$?06q,IKяC0( I#9Y]1d@ Ǡ3`[*`tF0Q\NHL*1>MVSnf' ɭB e8 pA_0NaT6h ''%yMN'"M3<S% j,DNPM@/#Q~ @4zr$-5ˋҔ7,@Ԣ3WZ@8]tLM]<99rR6]Ey1LzZ^}XՖRP بM=SLX!/OJ[/(0 QjTUh7}QLӭZSΖv%-EV] jSm@X* 8cJ\F| WnV9|NՊF9zӶV"˝W8@Y'JX֫UYkO /*jNլ,ZZ6 * FWm-xUjsR]-X`e WzDK IV>Wĺ -VHD](IZZm]EKO*ӗ3\'Q,x˭1Zc yY!_FŬG2H(@/Z`3 f,L1m-23'GS߰47 Ms4GhR$`1V+cq")cLpv^B^4Y5jֺ@1cb^l ~[;N6]VN']zyƵZ3,`MT{1p';vg{ݽxo_x-nr Fw𒏰*ܠT~q ^7/I6bw70D~OGQ^mO=غ~v}c{. hONvJpsNcd;ޑ.]~'5NxCwčqob䩝kqvmbE߼\_w.z7}Q8xorּe-|Wݪ=1.DͥíD95|Û2Bo|U /n>ѿy{zu7c='yx"{rwugqX'CYyܧp7{fvxgvkW&v"C,8i.2h4Xqv8XG{>wÁ" zPy|Mpz 7zy{wA|r {XqB`>G|[ׅGq'5wnd}聓7CsLxbq4q7zgs,ׅkF~2SA؈z؈s\wovCxEȈfhHu=W)G~oA=x'vD:8iŘkEQHXwMԸ*H04Bx A؎@8T?곏=3KdXNb@KLE&@l#NPK` dNN)@P Pd dTfQ]~g?W]QRKVR RR"yyU+IW U_ZcaV!N1VLXA^Zfr`uWzTED1YY* ZDd"FNa\[ ^DZ6u-D`+9]u^@cVa7c5hC^@`K`N afkPbbd  aabe@:vS?V^_,d Gٓyt`;9e ffgg VY1Y+Yr9%깞 Ҟٝ|lXgt`tGAPy}Tc| }Fs3spVGȈmpl8t DŽ.'{q6րe鷉rw|,|/Ho`|Ǘ}ifԗZjpzl`]zr.'6I= qj |1:g~Pj_z{a:GgMt8k7Bp(t9yJ{*s*UxzegrZ*BWl_zC:VWї{ƟNW}g8opXZmZtiJ'qJtjKI$hg7T :zڮ2=:3Q ;[{;PKPK6(AOEBPS/img/groups.gifaGIF89aBBBJRsJR{JRRR{RZZZ{ZZZc{ZcZcZcccccc{ccckcckckckkk{kkkkksksksksskksskssssssssss{ss{s{s{ssss{sk{ss{s{{{{{{{{{{{{{{{{{{{sk{k{s{{{{{{ss{s{s{s{{ƜƜΜ{ƥΥƥ{ƭέ֭έ֭Ƶεֵֵ޵ƭƵƽνֽ޽ƽƽν޽εƭƵƽƽνεενֽֽƜƥΜΥΜΥ֥Υ֥֥֭ޥޭޭ!, H*\ȰÇ#JHŋ3j࿏ CIɓ(S\ɲ˗0cʜI͛8sϟ@ JQ<*]ʴӧPL*իXjeJuׯ`ÊuٳhӪ}Yv۷pfm 2߶f:˷߿ <&ۀ5;ǐ#KL˘3k̹ϠCMti`Qlװc˞M۸MvYu Nw,{m1FNسGVβ;`5o$Ey)\k_Ͼ{5<澲kͶ,Y%<`Hq6`& 63Vh JXr?̄($%ZH7jAɌ rX@)DihG6PqLFieS\|+~fۀ2(`BI#Rl(ʕe9\@Ib **ۘE2#%K,)oFp[%jODjvhcDSGZ1)WUJ?!{(m٪~?^M tIL3㜰{{*!>*Z$"fk4+tۚL.ne@x4pß L~Z rʙ+G!̒\K23`*Zwc6pc*7ӀĢŰ8K@{K2|⫲( ˘oH^kbfm3cESL 8܀cCjH *_@ՎI}j8ő?LaՕ6Jm>$ʫr'qp3K3e;[wag)XmS-we0"M>gc; هnZS;% fa@ ?⬘KD_8wdLwsZW>6` W(ʤ`F47lg *ӌ9C>b @S XKǢȴbkɒ')J1s hG@"gdI2ьhb-DTSȮudK] Η&*?9qipa3\cWEqLP]iOX\֢Aj:* CZd9طۑ1C38RԦ*k1/bSkEob)s!0ӄ ?®xU x:ސ!p}Vw-llM-;nӂL#S˼ਅBDavòlפ7Qp`ʴW2ۂc2ar3ow[NPD<[4/ҩve6~V81"18J;B8%9E$D¯+X2؅;"Hn唔.5KJKignY]rǀ0?ΈNt~)E;\b My}"ӌU8&02#̦"V!)d1N{v^5W R'B~PsЎa3Γ.(;i{dm$vG%9L2mwIrT N;\&~'NRGϸƽr{ ?JCN򒛜&#?W򑤼0y_.|4w@σN_eFOҗ;?i:ԧNHX:^;.?fOѮn.vϻ~</?O<ƿP|`7`j.؂1؄05H8<@(Dx|GhqH0"X0cH"x#hۃ wyDox `+/0`|#>q` ` 0 ppy؀|~HȈHȅNd0hxp c~\X~Gv0 7ЅVq` ` p XxhӰhA}8 H䈎ȎIW8TP(  8PhчMx~(!yHӐ* 0x2")h%y+ْ/)JPYHHyFyN0 X7< `9 $)HVIY9ɕ* d ҈\0JziNٗ}ɐٰ0j9[ɖmي< p =`jQikɖ)9 q `)9zOɐ{"藬ٗ׀i#i陞 pٛp _ ^~ .XɤPg cѨjjC4I* g P` 0 p  *퐑e4w -ȮLWYPPLbQ N|8PpNP堧JzH쀨HpٜӠ^.{YُQcq),K1;Zɏ5k8ʦ7`@p KIٱqz[P 8^:h z 6k  dkh j˄lۇ4s[w x y@pg(P˵Lc1_0@ Ho* *)/Kۨ\ fѝv 9NYJW  Z3{  {ٻؽ5ʙ) ; [xpb! LY kKKp3/ aȖ,  \ 0 `9ۏ#|yLkP ̗ܗ0PP KQYG@$03{x l JLP,jɞVZ<]L2ɚ`?,:DEl pf8fQ pp 2渙əpiˆ @  lȈDk앋ɽ9ɕɛ2pKy@l `ذdWʊh똖{OĬ|Ȭ 0_L: O ,`"z\¬ ~ 8 C4ژV۬ At Ѭ, -jj yLv-Ľm~<|0,$x`͖Pꠃ IM͕S=mWQqpDLe@+-z `` #`Q] aЖRUP @aaجNجli]pٙ01 p` 9{} 0p) b`^ Iֈ TW p` -݆0mݬ Q dP= 9MĿ-Ý <] m-] VMџV]!|U@dPB -^En_Պ ժLժm/@ L>X,T^V\^JNQH t?^An~p UM͔̐= 1.[^[p"~ȍg}W-@~陾JP qC^܁װא M  Ѣ.ّMm]@Am^~0>~5/qvP }D W,̏⧎K }n /,y p d~}nE~ ^ @p0 饎^@4 y`b= W> _~"KOQ!  h.O0/3_Ln°X}S?ZV_ ?DP p`nrOvy{~o/o@0,ogjmO>c">Ox吟|_ @_ <y@ _ٵ?W/@Ə#@0Xg14?̫_ `V`0npOAO>;n֟&8.y l۹w}RH%MDI/\‹G@ DO!C%RQ#G)E#0`JWrȍÚUk\}[ lׯ|}4 Rв&Զu힔e@V:O 襩ӹhKn=6餷fk)zkN˴F;3}>VR飙FGm/6;fv#;`Hnhk ǶPC$/|{=0k 36q{]{,q]EatUVO"F 򊌦38%E"W(1msCd1fzD8̐DJ!HFD$"IJl.INjl>JR*lDNJVk^KZZ efK^~k&~Lb2kDfnLf̈́fMji&!MnkNrbfDNvn턧OzZsħ6O/?P-AN. uh62QVԢhF5QvԣiHE:RԤ'EiJUR^4 ;PKBPK6(A OEBPS/img/pg_def_edit_pg_att.gif -GIF87a|~|ĔƴԼ¼̤ttČĄԜʼƼ䤪||܌줢´lzl􌎄윚ܴμ,ŷэɃ@0>"C?~Xx Hb=A$ B@$(Stƣ =  p!L\3? 0t(!F1%%*hiS8`A5 $IԳQ%uV)TRE+ 0P:ٲ'GD|tI ZAF-7-9.gH9-tPӘOG&pᗀm:V+9uBֹ^h/?m[o3o^.yiq邐v-(p ~8BwyeHB{=暩 xBmۃwbz#ruh~G,0ƨ!pЂ % <`y)pBFqjiy8]stMه'Fv(lУ a{k&1%dWֹ|ZiZ5P v'$#8AZHzEn]!p^#,:{yazb:U~bX6Z!;ꨤk)–tā{zf%z؆^T``Ae2:-%硚brH0Қ$$ ( [æP@8AƟ0DŽ$q(*r%,,̋L8#ZҖ'F/4O"Vݥ$] R'$U!Wob!?;M%'Io Z!kMԏ<}Gmmҵ&_y]MV\ vЌ8ToMtُ7N;>Дk.[ xjAy8┧8{xK^9Ҋ[~yCҷP~Gn\P[6c+|C,5NիOK_HU~}ć=rr/x׿z_hK1.sňt[@zmBo#FB FEiO8R x u3@.+tz8*H]AvWT^>HocTDn7MRe4cEq:x̣>>s<IB4Y982s$$'/IRٲ$&7Y,Mrn$(GYQg1%'>Gnj%rFq0zx>L GV7ff~YCgX5iqlK+#AYq?,^!Esaj$zI;¨K+!9B[ |!2J'D!M\{gmOぐ }9*bt͠<1'hOڌd5qt[AqT|?%~& 9*b<88PtTXøQ-rvm*< R*M}翘zZy [qȺxk\1׽}`=bɑ:v}dZ3fq2ª./7@$Yg@{6Ks!Qc ͸QSdl6LzI8jR:˾k&i=E;(NwDTRY^湯oY. ̮f]ܲr&QkT <EM\l6]s*Ό{ bOWeeKaPLN2atd ~ƅCLbG(NĉSbũX1S,ؑm0vK[ɢ1q+i[G̳:xY|d ؉099@q}ׅJ!C|ʆ^׵ƦT9kϒ/9<({L8}qf3)f*'2Uh`Y}{G@1qZ;h%ϔ[NI~51,YSֶ&-s]ڲd-lV-ܤJbc%I6Ҝkf 7^Fh& m=KcU)[Ӣ~ѣ4n|y5L5l'j/tLr 8r4)_ڟK7|>N, P"(t[@Ga %m;~W?6w3/o@aAfS/Eury[mzU[qSDTqxsN7;_O:rבXxز{`"OW_{-{Ҿ=ǵ?%?q$.n's1ۚQ~xsn{^YMKlo4_J?yι}USzu~w=kG_^dpg(uUw7 c|fUE$8]$A g,l`Cu|4Wgz.A5|~6f|8j,>H@/؃DHbCx7ЄNPR8TXVxZ,;PKJ PK6(AOEBPS/img/new_menu.gif}GIF89a )91B9R99J9JJ{RR{ZRZRkZcZkckc{cskskksksssss{sss{{s{{ΔƔ֥ƭ֭Ƶε޵ƽνֽ޽ƽν!, H*\ȰÇ#JHŋ3jȱǏ CIɓ(²˗0cʜI͛7Ť0 )`JѣH*]ʴi:I Bx!S+C-Xa<5]ːLiْCNxAn^O`K E-"b)X_*EDPӨS^ͺ׫Nƕ0bȇ7̵\m3^;x19Ͽ(q{ם@Q}7v (Z̑ZvA`vGtv <@#=lkiL.$H#ЁXf\v`n YZZRF tixgp% hjZTCiZ7$F*餔Vj饒'z&hb* V&k:骬jiꐩ6ꮼ +:mں6F+>{ƶ͚-Eۦ c!`tab;ſ,_&G kA./o$+i C0^A&Q_RDd,qe$[RJђ4%d/L%M+(*_r!Pg͘p5MxjsXfʾqvql9YLY1<5j>%m̂1edtb;aPi ք(z9ъZN'4HPKtӂ:PP5 .W*ʖ<0Td^Ђ:\u`)ҠEKR6.T*T \=^:V^ {BQ/SSڕx dYzEXZ.խf\KԪ l_z oӘĊvMe]ZՒղ= ¢b+JZT:jXZbp\M2msKKF6UA[k]ޫhbȤwAv(`foy`UԽM*ח%_w,`PYCL'Ob0_J-څ1S Wpx;6qe7x786&;yUmKc'pl=LWV~hpsl2I/htЈ~8ѐ2g*[YmχnpWR N4j%կ^-|<A9mT:;q|1:NtZ\_׺rDw:.5Qlhlc;/imiڼvc;؃+]rڛߍhv'؆>pưzj~}hs[ ϸ7ڙdxq}na(xWq0p}gvA3~r5;|>Gϡgb EH=VֻDj}o߉m.;Џ? h? s^> Y@O?@? O8W{fs~w: WNf5~kF|J?:؁ "8:@ H{vׂgF|)NOp~:<؃>@-H0j:HC)AR8T(fPA"@(_@"PPXdXfx"@Wx$J!@Pvxxz|؇~;s_U/"8Xx(ȉ؉)0:хq^赊؊X\pYS78XxȘʸ،xXxؘژx8Xx蘎긎Ȏ8X؏䈏Yyi) :yِّYypX_>0<*y%Y,p߈/&1Ix('(DÓ@QPSUy&>pV\Gy19 T9ţВni)ia*DiNy,Gs9p)R15W FiPyd%)I^Yԉi., d)()Y)XZ 'қ,3(y gy*hْ"JyLyY(ڢ)9.:4ʎ*Z8; ):@:<7D:Jz ` {ا~& )IF)uJ٨:Z@*_@}jj>8y.ʪic*z5i=ڬoJZj6y&:ʺZڬŊ^:*mIzZڭʮkZ*Iɬ יʭz ;j*)Jzs r#ɫ ˗"[(+(, .{2[1[z8:sڳ>@k:D{F{cڥʩ ȴJ媯O:Szj괒jJӪzZj4KʯKz{>+| d[򺭏n+b۹q˯fK;;׊aڲ$˵򘻺tʻ [:zȋʻ4ڼ(:˔{[^۽lʽ{L(;hck諾R˶zº˪m컸<+\ezKmZZK꺼<`K\,[i+ۭ[nI <>B\D\ĻH̼JN,P;TV|ۛZ̏1Ib = 0W{+!̨+쑺Yn옵nZ|6lj j y< <L L{ʯK*Ɯą[;+Ǫ+ުldbڰ7,j&,̷L*ʋwʰSK7Jˣǩ|8½̥-\vk1ܷ͘ eۿ\\gl:G8]k|U, MF ==,͏]<B*UZ&}(Nj-" -Mm ?l*.=}EpܫO- Q=TVM΂ \mƽJ˼LSU;%\};D] } |sM{l֞# Y-؃P(-Mlgb] Z,ѻׇԐl֨ړjS=d}ڎЅ yϷݎ-wLNڹݾ|q ۱=ά]݄M̌-;mҵ}F.MTQ N,KLHlEB?< +Kk۸ ؍>^x;PK PK6(AOEBPS/img/download.gifGIF89ak9sB{!{9{B9!!!!k9!!9)!!)9)kB)J)B1cB1k11B1R1119999J9cJ9kB9{J9{9ZBZBkJBkB{BBBRBcBkBJBBJJJJcJJRRRRkZR{ZR{RcRRRRRRcR{RRZZZZcZ{ZZZZccccscc{ckccc{cckkkkkkkkkckksss{sss{s{{{{{{{{JcƄ{ބ{JZΌ֌ތތƔޔƔƭ甜))ƜΜޜƔƭΜ眥99֥ƥޥΥνƭ֭Υέν1)RRZZ޵ֵέν֭))JBZRcZkkssƽƽƽƽֽ޽1)kk{ƽ޽!!{sΌΔ))99B1BBkZ֭֜RRZBZZބsޔޥ޽!!J1ZBkksRssk1){{ﭥƽB1Z9kR{Zcks{k9!, H*\ȰÇ#Jŋ3jȱǏ CIɓ(S\ɲ˗,ɜI͛8sɳϟ@ j#ѣH*]ʴ)NNJJ*OVj'֮`Êuٳh^L˶[eʝ5.ݻx˷Ͻ~ xa6Z̸ǐK~i#f6hg6JF4ѦKNϡ6D6ٶk-ɱ6B8Ƌ#ONBNsn.`e@gykߙ:L/OFe~_߾zM({Yeg}`N̈́a{^ءx}衁cEӄ=8O 5xS#H##yމY`SuPFC*YeXb%^n9w9 H+[ >ؖ; _xf)9tiN0'#H!&%*墠~*ja=S8&(j"RdzyL6 RQaF`}3,}i.W6:Xta[G.¢ۗKڋo˯ n/Kpu /[ænqMo,XKoLr^ˢ,0,4l8<'ss [B}F[th-ʹYN?(RLu _5ZE,Xd" 5[K,cQv#,Ȩ)]vȴԾ}|au4y7نA*ɠe1Gq !p zu 5`ʶ`$dl!*%0z#75MN;} O<&S'n;{|aT҇E;~Tl& 0&tD2ϋ &<#5} bZD 61!_L ʉNܠ).H.*OSL5.zxU48 B 54ɢsQ*@3$A(&<41ь# 22:qRG8QHJG@b+c!F;*rHi!1Ex$%wM_&ix+҉ޓ#@F,0/@سޔ]kހ{*[O vw;fWu|?YskA 3C&{痫so9OU"O~w ?}iX,7}O,۾g{a&0g|G|{aݷmz'Bg8g89zb\xG~~ .yGzRugzgzD!6|_p~B~Bt x|Hw@y:9RxP~ǂ. pIWwSESWHmGoGqGsx>uh=w81-qPxqi)'k6R- '+Ur8+h'h17#Hp?Ę#}ow8.8!x1gR/c_}1Pĸ*E |&~H|F~Ra袋-:ђ(bpX+VS3Ql4rĦ!ck r!Rq\0x I(mTu1)rQ?9X&(m- h:Or8U)B u֕؎c")k88hePudwTm9䗹ŵ $EeR299) ԗNG.9EejșPȚW/ciUy PٛY{ ǹ ʹp 21)]pqF 0yɝTq]$ciߐđ]\Œ: /:T4z$ߙp` ) Fj$O @I ʉ ¡s wz|Ш9*xp٧ Z٩Jihr))5j4QZxͺϚ\ zt` 7Q jI ` `ѩ p: @P 0  p*Dqg  @  j ?jhtn N ^ 0   ȥ:qn3E IP I a ; 6Q"QTJ՞G9 P L1  p8vB9Z,U N@ |Ag; l 81aj Nh+` P +_6cYಀPL °`k_{>I L0X0@ lnR7l@K wPͫ|ɨkȨ[a c`[Ԑ{'a [lp 6@ P0K鐷ap+&@ T yw L@N`I Z5$˂\dYZ&NP 9s?%kHK ք'ĿzjaEZ\L3YR `vFƝ F@gG4d'gFiX/z|rCA]|Ȉx}}p:A B , U_7|1ɇ԰3Ɛ<.@ʆ+s, Xh,C   hĿ  2 33?0!l| | d^jLRiXB*;Z]:y%i(ApZAe "-LчkXؑ82&}2LU04|F5S8Cd05}vӐL@ԩ8S bNQ8Sg'8s}c"Q7S^0YlL@'͌ Pk* Mֱ\ 2^9`AUUP@ I-˵2Drq?û62 D0MDٲzͣMڦ 3m#ڪͯ=Dۚ٩Փ2ͻALn9#m8٭"MCm _,FgkfmoqsJC'; zYAPJP A c =/00\' # @+ N0qy @# 8AuʴR1q0 ^o`MZ30 P;A0V<7ͪ \P =+ Z.R0v͓% \@x@d`p@#S:o@#@  qmcmmYz籃 ppnN.;P`\K+&WL2eឰ NFN;@U` J` *`d@RN-rΟېNA ?o+;.- -S0[*J9;- M=@`>? p=Y^#N0Rp, _p@;Pn >?0SO )]*cC%(~ix߂Ndvya]|h9XbϖZ?oOusuw/yO{dm?tV pEd~v aY1 Z v C` wJU1 `pv@A kcpOԠQ`H` 0QN0 |y KI:"6Z v!l :p:v=YH5~u4f)̘RO"ʄ3;a1\SbСE7O~ӟ42IhBP64U%ӾPVԢ'D NMbԣC9QԤ'EC!ђԥ/XјԦU<ә7jPӝ?jRNBSFmR:v:H(U:U6VŪԢjTNkZoMSU ;PKh-PK6(A OEBPS/img/pg_def_editall_ico.gifGIF89aP=(((bnacmbgofs{ry~x}|~}~}ݲ³ôĴõŵƵŶƷǷǸȹȺɻɻǼʼ˼̽ĽǾʾ˾˿̿˿̿!,P=H*\p #JHŋ3 ȱǏ7I$D&Sr˗-_4sb71B=1QhP5#*J2%-alu*U2)LYhE\T!%>]VmO[*En H-I[y1&hQPD"$Ǝ@$3h[Cl3f!Z !_l1u"֮@*MD{Flq-XHHjas@<_,iN[nqCPl\S :v!_͝?}=Ԃ_%DD{u aG[Y#2f(NC}4p"LE1J&Z" @ck=&8Ep lvhdiH-dI)he&Y%M` vatQck#z(ȝpy'HJ$%\@8 h!lDa\Z祗 ,0da)wzGA9[{IfRD,r1(O0A$Ulv!-bDA>hB 5fiky`Z+ms! ٴ OxYVrA@C

N~z{9F:>.;G;D^꽯><|z|K=Ooɗ=o/lnl C,-ǂ H!\ȰÇ#S(ŋ3j(b,. CIɓ(S\ɲ˗0cLɱ͛8yϟ@ JѣH*]ʴӧPrIիvׯ`Ê+TD JX;mLJ]Z]q%˷߿v g`aܻ#K3k޼43NXɨSk35.ֶZv6;ljM2˜ ׂaʼnKuYe܎=XɠHJ!I2I],ZT2"%GP_{bfF7_R(vAb]@iصa{ m> h~(&˖]GzyYOGa饚Gԥ&iƈf~jf^ߊf*iC(yxN9*E:k,ۋ(,iz .Ky7k*oȪ3ۮ뮼Z,sV' e iuf!";dN-K$ʯޫ".-4{(L cDC'1rl #ݬ1#kmG\{(sͧ -kޜk7i=En4^HmEdNjaWpoYײ8Ldw,ɘ\v+~^}z_@߀ n@vz;ﻷyë<`G`y[4mՎ6qloמ-+΍{gi =vs[heL;o'HudZʙ2,pzzs A T`@lH3M Cwxև0\a8L`Gky s&:q!>$mq \.zQǨ~hf6pݘ:ڱ[V mAG!F:|$'IjD̤&qMz|CIRRL*OU{fIZ̥.w^ 0IbL2L_ Ќ4IjZ̦6mz 8Ir=<:vg`)z̧>DA @JЂMBІ:D2ͨF7юz HGJҒ(MJWҖ0LgJӚԟͩNwӞ?}p$'Ԧ:PTJժZXͪVծz` XJֲhMZъSp\zl0Mi06 `*mb^ͬf7k-b\H؃'HjOǺ},3$>`nw[}@h֠ kz&Ѝk`#%&X@n{zupG}@zOԽ tK_>_ VLS~4:[$Ƕ 8/A^0=|[J~/n,U(N[X ?8|'X8;g@W&;/u/$T`epP+ r<2ϷV7,p`Vr@Ӌcn. S̈R@Ns:J[ҭ-uvg skX%uW=:zm~3gMojf OsueTg؃fІ8kMj{!f_(AN}DX/ӶYl6~VĢh0Y']F ꀤ ϸω#8'N#T @ ` ,Jkwŷe7]QHpőR*Q?FOַ>\,yc>sCB+^z`$ \܇m vhϻ5MhҮOxxv:̮+o}oy [_څ[[3w,#lOXn-4;BO ;\7W^W{ɟZG!~1䵞'bAn_" jΤ齽^Q>O}PW_a'?ALaH~8ⷀFB!]A~q)r:?:Q@e9s~WzmZ|Flwnvhghwهg2҃|a BX6S䇁%"(w$:5Z7ƂaVl?\ȅ^H6xfo ~GmXn8#+s8w88yȇ~XpH|Ix~H؆g :.@.6+.T7Xr3"]9hcsU'({[}1~3(Vw&Hyǃlx X=؀8 ((ȌȈި(8Xų2-*2c/b-Ȋ.9?/_S{}|jcWYa:h¨~WHȍ(Y}8(F&X 42̣É8 64 Ás@?67k7cւȖcal^ [8%)ٌa1# *$Ɍ{x)I+r1i)?:e.ؗIPJIXY:Q<R0XLgDB̪iG]:R0C1<0T<vP03<?\X0 ǔ<H0C H^<0<C36 ɸ';\ɺC3@P:01 9T|#컓,g2͘2P̮0pl?`M:V`ӌ5 Eˏk z G|Oc1T - M:0}, 4 I?AqA?@\|ɧ^Q_Pj1 W0l) \S}= OH DNԧ< PC<P?A8VNP(z$ij4:q=@ӋDMDRMPm]ԆMF=JQ=ݩ:00@L 5Ph@Ld->`'}>*e+۝ԍs>AW1`93A?N  ;0ѬM ۾sj+hjқ[: 4NMmonn.&~qt^~n'5}65N^x> }Q B6@L!H>AW`6pS殍\94ܛ۽mKh!\j+` ˥2׍-1}0ˎ~|Nޮ>>~.s77`.AP?QpAEʔۺ+n\d>nZ|O'ynk?,N)O"& IR?QA00.Qݹ@l9j۸P뾄3Ϳ OTf^Iq؍x. 0ݎjk.$AQn#_py];@AKQI^W@c8P{Hۭ 춾G )ܴm= Ncsq(yԄ^~ox~vɯOH_@NL LH Nn 7`l׻zM.jN?s?t> 08((sHx(ȸHX)xII9Xz9Zjz q SpC4jsDSÔz0QqmMA!p >N^n~nn/?O^>]q¶n 1hj(O8=US&D"ĉf$$F4VT8aR(5)zi)K?ƺ3Ν@@P79 P8R 1xU!~ܤ,X:)"Nzl^)06܀C 9 N6 AƲ$lދβYm p C  \+bya@ (XLn1Z:ǯ"Lr&|ÍF <=1#s=5s䌏 >8:q<_%J/tNBCtXdM`X&tjv۰D="v?5[#s3}=13}.8u 8< 7}7N8fkۚoy'=i=Pqƃ,8ސ^8߃x쬫:/xz\O./wK0llcgNvfX <o0D #QCy҃^ Ğ$v(@ap >Q|DB&$Ĝ ψ4/ 'C6s@Ȏ jTW:9. =,B|_12Oc(C7хou=1;T+#N {h-' ZQ^׺efy@{( !@FXBOJs)D%AyC81tla.!P|6/$MΏKJB V,WcOlCAxBӌE׆Oj6uGT}9Ҕ+b|&yјe՟ 5JÛzs:}HDW9(uLmS ըJuTUլVc,ŤK剶udQY`lm[ ׸ut]׼ꕮ,%1Ou (*v=c ٠pԺjvg׳haOԞ5ik_ 6fWKv1],r@0+*w]+mb[N4u=f "<-0Asj^ͦ7]o]ۛ nu\Kn{JŇ ռ=/{˫p}jaw,ͤ` O.R1E  n\\/X1|i\_x qø/汍|a C8K6scnX,E,ķ5qmUb LL2Oq gƙM3<:SKq;O- zLt ||xH=g%?{/'9x1iPjBBz3~Xz,1+AwgMC8kRzm0C]Ig:f>:`Tz=|=wn4%kHѺ&bӓv!MjWk[9cdP`r3;^v+gZzFw9ފ7kE.maH^cc=y>vݼg_\/ }鸗[fNz<@F @$T}\߉!>=6ǎvzZ:7'_u"}﯍:پcs/'|oyL|yѪ?Ћ~_;ag~[izo3(ǘl+ ''4y 36ه1Y.ْc2i+99vACI@ 5 ?iMLiؓMɒ:VA-PX)먒E9GRY9<ٖnKY%)qyrhqF1$HɈ]D鑁y}hkٕu\Yxyi9v9yaɏi=9iɚIٛ5 y©IiIYhҩ 9ѹ_̉߹(!iyh4P KBWS˔@ƴH?II8\68L ( ۩ JɝʛiIɏΩNi:"* i #Zɢ7ڢ0ʣxz'Jy|WǤIؠ>|YZ^ )89`)=zT\ءٗz٣dyZhzV*8:By],<{ڥÙ}꣟fm:Zd虞 OځH긓DB*A:٢*Yfʜ*CzWFڪ*癝zDz9ꢰ;:9ZjH*S< :x*ڨ!*ߚJIOZjʬꪺ⊫ڝڝj!Ȟ*QaUEZ(:pZ X*C:wVڧ#sɇ0[+ DKɖz98~*Wt^ٲA)Kx;)1ΊQZǺӎex[˶KY2a/c+ׂ;۶sFPsKr=`JK*|ˌY +uo;/q{+S~K Qk=kO;g\ڵ d\U#wM:趢 jx;Xd,y +bIKDG`˽b\Ek:qxh[ Ÿz{XOkVW۷۞WKt7#@:؉7(L;H9 Ll%+?{񸾭@ :!_һF:C\I>Rh`hTWEi sIain)O9D9h'{Lɩ(V"kyL,e\pJc*)8F9qlzӟl킋>HܡfЉ-=˞ڭ ؊MD{*]M]ۮɰJUi-Mҳݹ<~NY! }cYk,X|P\;ѭȲц?K|*œݥBS리ɴjM4F;&]il [V;ӫ>,yԣOg؜cJcKw'պ] .鋥m,4Y^FPc6-.<$k0m  h燞FÀ%s_^?׌4P N^~>]Kn}&W.͋.{>YV'n[ˋ~$\K^ʫnnRG貶4뱗x& [ފ'.^.EGeҶ[PQr҆u|ʗoHϴB zBntY)+ϸ?}>ۗhW i"+6ޮ"~`lD_,OݾN\̯\ʌծmښ-߫Y<طjĮE?ڦlߡl<}w˚ykoNP/ȑP݂@C,9 Wi37U8%LэOiȈխpڣg^ˆ߫raͫl^>}-oPN6S <|4h3!/UwQ ߾ _PB? &&İȔ '&o* 3hѨMAdk,-Qr i]l)HFm\IJ`zy0b33RK.5혌S[E͔|"ь5{Ajְi[v8B(;)݂RݭG_:E}wÂU췭c F0QAŋ`O~+54 2KW7Uڴf_[Ti+<{:[? p<7(ԙ1sYײ=^ܽ ^>e>-rweIDe׊&D/)bU܁RuF V1yr`iZNbaUTI"2X/qhKŢ"M% yd#ҨG d<2ibq4Մ cbi:>yN}yc|`着ٕ&袌6裐F*Mj饘fvid}ץZ~~>hI<Ꝫbf=ꭶ_+`R6`6F+mT/Nkr*iWcn覫nx2kޫo[_ ;(+Wlg(t^2,$l"nek0,4#8 '@CdɲlhH'L7(w 2AWm#;<^/_;=ibmܜ3;pE/{hf?ڛV֒|g uS-7ޟZibU`}"砇X6;W?CfEӡ,{# u&$F|!>/g)D-5.%yT~t ܑ"'蛇'cuX_[S *^rO{L`i|+ P@23&un+!FC5G8ӉPV(Bh5A!PBWb L9c$Ąf\GD .uAu'= rh* G" -vCrb!ps8u.2ᛛ\ +WeĪ_iU-τ+{̲iٸDFcTSuRϡ$qAЌPf(FLO9A!8hʭ\#+:ŏZ K>2>=7cJnS46RI>P0t^PEo ՈG22c7GZr ]9FqP<8+^.-%bz9=*nb)ρ1c>VBJԢBj+;'t01;XD`*j: NԠmbC5Zj q8;Dz*tLUu`,ef}VZƢnI-+h{KY<yq04k^ "SMjW 3.:ecZ +]WK]" a bʹbe$k˵!IFf-:Us6 J.À+ޞ!wzލA卯|rͯ~fvOd7F'Z߃ K{nG (NCLTg=˷afR)HY=B?wZ ;4|J&x򮴬W-TU48`L0f7=\S0urU.^vBЈχ jp}UKg{.'eZ4.E=fV4d@r5Oɉ &wT'!u|t~%z'}c8`E5F)XMhMƃ%ADN?c sG!4!5hx AMx IHfa7tqTcUuyQfeweuuH]xŧ}$G\$)Pb8.R"zretmG%g&.Wx}e8ouJ؊υ{$gVU$+BjHvwiv wL,D['68/XzNd2AuHw¶t|sIGSzO}:C#(攌N͘mx(qsRsh[k'Onh2xq6u'gxnS(s6EwrӏC`8ewh\}G5O%pX>CSْ0:׃wDtrUOɦpr'4y)YG+}.yw5vZKuuWvwŋbKWp()C\HYljslGFiriThyj8|Hf5sT|y(C4参٘qDmcypIy7r9IJ)Yfi3Li94 )u>9㛜dBADfdY^I)6)K8~'tX斬9J3iO%f:y0xƝO`I93iWHKH[v֕6KpGLȘs/&wlWSGhGסzc@ uיeQ'lu5'^0f(" 5Is8I,wFn6Lk7vk:ʣR/*zArjVR 6zg\vhI!S⣓EtZvC hi~5j֕,]q(jZlڔ''wXiYĄt[ڤf|6~3{H8z53ๅ|EHV:Z(﷙8y)f{ٜ`/z-rFѣFC<(Ԭ֪E$<'ʳςjGM$ME?-ԆJъB>!߅VZwtQ&T!32Į(rYA{$43x){) Z%K*K9gH%˱ JRG2k {1KFkMI2{Gձ;3J1/{"e#rpbp{h*1kƇVK1zk3,Kuj vnX)*w w^ɟ :벺Lr;)0 tzlr8iO<ɕD0ۧmE4z[fA8|B%+1Z\_YɐHL*Q0 t_&` Yˑ#,$)x]OZH_3 g&C(m?ZepQOU'y,Sx9}CDeΛY\%\>}SIi Oݞ 髵c- RM,LyܶĤ7Q}/8#7}?˺?0R۲ͭJ<ڸNd܏Sgz΁O*7@ : }O @9M9XӔKIMQ{}3Md   ֍} $,8):[tX B3^8&%P*@{}4aʹ N݁?">$c pH ߜچl4V5!8N`#VGLq$օ%|١CDN$f h܋3e1`8[; `2风a~槮^'0u;Aw;pS뉞m C왎>۹gN u3~ێ{av|w g}&DyQ[KD2^홍yJwݓllg#;2 ? IF&=ptޛ+qp #=$O&ZvU=I9oU6O.8D:aÔB_UkfSe> ? n TV?N w.otA\ U[]0Qk?mϢPƳUNغR7,xϲ2ni9Z %SOi._U걯goi?'e"/.OOfY83jsJf8^mQW윥v\.`rp 8hhX8XxYiyy :`@ +j2k kR{˻K*l[{l }0qmMA!Iz)8I>NH/yȟw(M.y[80 %C>Re 4QWcF8+I\Pr.qmscI9{5lڸy'\&Q'6e`SzU=R|d5VYu`:xJQNVe92f,@Y%Ip+}78dBeȆanSz{Z콮kcK55׸ 67ۭc˝[S?/QUK~E ]frkDGL]|Hɟ _B"iRSeDefTgI]*n#Ҩh7ND⋓ʦ(oE]9)qjkvw^eNޭ _mƙ'zM6i욯2ײI~^VfGyF(N}{j BoXn,iYaz)#)w+̦fZ"w\JS}٫+ &{,dlnqĎl8xDj.otV-$lꚍ*>").HuÏ!ҍ i2'TeN> qټ"¸ger~\,|c,L8PBa6L@s͎?ONW v]t=XpOmlzt {wŠC{WE ~É"u+CʍZy m}ڟ=9 #^}I~by 1yzyo?x֑%|3R0H:N<Ӿ%oy5 iPz@  {$, OL|/T⫠ ?ҰP$ oC) 8S q5[—$mJlblE'Jq8JPhq[,Cqd,Qq[$qTħC3q|E/: r,!hNJ *y# Kj<%/Lj&P &OTRK QrD,e%W\r3l^ F:(Shd–H3 h6Ɨ f,kT+R%MqErD2STl; OXP&69Oue?"Tx*t 6\ GRS E"ԘM+iKІt4C1bn1[iT"D,*jBR^Z9墦+.1UU'9%D{JQzgkS.gmTƩvY]ꫫ憘BINuE.RA*T&S9'ar ؓjv)%_AMӬQ[Xq \ml 4fmo[ z2S[*V%jcRUd*\I6ԭuKۈVCb]찧U rW3RF1d,sԈpWz);fT#I)Rn-gzV(l8S`p;kxE#kء尉O,Ip,n*1Y˘voLG/xm0բc FSP4=wh51f|vꂎq爵U|DoRb۾ uoakLn76u4溅HlH=ܗ[޼?uw/j=HzrׅuG^1[vHO8J}aOw~5od9w'<qlX%EZ㞵ntVu˪qXx-0/< 13Joحu/L=K67~KGuճxs=p3i{.m9b5XZqXY'wCh< K+%6IwywyC'}Cv}mw~~‚@jIwOM)Z) Ε{){7\S3vڶF7:7u7Fgux6n^fz~$S'6fHf~-+@2CWrxvL`[]j̥r^+xwgPpV) HHm>F[B>;g`H}Vn gh& 㧉HhA(zVpI1aadcH{b"O(m_% bYK|8xɐ N i )IB إ1Ƒ%GL!+y38h/Y=ɒ39e 7)a(4ɓi8 !Tp8o=g$gA9gC9ET}W9K lVjej󕄅jfFR)E(xoZ DM&Rl{Y|GFjDv'.UV$(1ru\r8iXx%Mmir jl{"#xTShTzw'o4-&%SH Q]kŃZ餄)DDIɝ@](wљQx"Gcn5.f9*79)e֝y#ce(Re" Y%|4IV@d9tf -qr{rO~TnG)ohB|0$kʢr3)yԈDcV%Q5עGY*K{ԗYH*`8cSꥺTP)h_jXc]zmJ/qz/Qu`p*yJ;i}Mi&ɦ~JnʑZUxc*8t:Bj JM .O٩QI\t)%w[b ;ȏByO{ʫɚcZ{98}Eod'$3 Trkp+tk+WpYz*z7is^uˋu tS:h~2u65vx '6~6`'b7byEx|w4x;G2蛾5~ wRm}pX˷\lL7o&G@jy$m jL|+0#l؊6"Ȇ$X×Dì[,;|xE<&yE;za z7y~zs4.s,bFԑ!:(dy뜌|BRȔD7F~ms>KϾK!f2h-6FG龩T-ZNźTVhɴs9sR\8d.5s9R/7U\CjZ'@Y@>R Umq=v;3_1WJ $v2 aSڠ'==*GQ)NZӚ6|=؍KEM0lԳ{j PJ'9VO>lJW:FՉM^*TBcg/7)ZERuoEOg,Oއskmzm_.-(W}OZÍT!J ?ߧNFٟMcȯAttSn:IڿgOJ~?G^GR?3_  ύ '(''Իҹռ׮ y#eTVg%up!CjhKbDW/h*]?v|Iɓ(SO5Q|0P#A8҉)?4+[ɴӧPJERGZ)f)&=0lYǒUkڴh;4ٷsp޻DWZkUkAKJL{JP5Mg˅+5믂Gv:Ӭ%5=ҵeE);ȓ+_ܲ] R뵳j; cݺW⼌7OϞ',}L2}cSz%\bw F ^܃5Zb'xb(U'~$h(v"V0UjX w!mڡch."dL6~7.?v%WkEf^nYhjydWI:p 8]"ZVn9ޗhu]` l莎nkV9vd jjyxꪬ~l)jt_D*8y&K_,FNf+* #iktd`;D$̺ڋ pF,Ī<tAd $lr$^{ S,>p>'-ޜs,1>-ۛ,\w=SwPX/4hmlAWc^mwvq٤d3eMjn8*H_}}w0>ʋUPQm􊞴먺WN_pґW[[Ns0Bž8J<0[;.yߺ~?Pkx)矖vn1Rx] c.2/Xf@B{l> L 6A/*xA$3@RV^ $ Kd*pH(p< !,XB vHʺ(D o_d KF5++ǎ_ eH{Yrͯ~ݯ_%]; p+¢U[D&V g:@@K(Nwf>ZvF8#Yo@L">f1xi?ԨƽݕmbC}.{YUlU9KӚca*-kXL9uγb1vY&ޛ\oFW5J[:~&6xq{齁:Ԋ@.Vհg-IOָεw^g- bN}W kV:Ҕn6Y܉j[ζmmn߃}jeNnZ?펷MR6}b{sĻ#- DOp;e%--q_07{ MjwOv_ >⊻ )ۜw˚@y1;&ӧ> bo_Sx.u;ebe!Oz˹ul6xo7tžI)3Qc#:%Ot#c˟] `|GO#q7\ڮ}ˇЉD+:Q}5`_Y,ON$u1#Ͼa~o>/t%'NGOϿM.)tIϗI "HJz@8Xx؁'J2W{LD4LPgNwYYH('ey+l-L6=/ͤr0hn5[ LIM%RHJx;X{C(E;'OuuV/XZvE[m8[/bX[yfhNc0ex8YXxhW80Pz%YxoQL4 M񉋐gN\ՊC35eR8R:5  8XxȘʸ̈4xSS-ŋ،؍8Xx蘎긎؎`Hx؏9Yy ِ9Yy  "9$Y&y(*,ْ.0294Y6y8:<ٓ>@B铁;PK!G ddPK6(AOEBPS/img/sampl_app_myorder.gifHNGIF89aLPck9s{sB)9{!{B!!!k9!s9!9!9)!!)9)c9)cB)s9){)B)J)119J9Z9k99k9{99{B9{9R999BBBBcJB{BB{BBBBRBZBkBJJBJJcJsJRBZRRRRsRRsZRRRRRRRRRRcR{RRZcZZkkZsZZ{ZZRZcZ{ZkZ{ZZcckc{kckcccckkckkskkckkkkkksssss{ssssskssssss{{{{{{{{{{{JZ{{Ƅ{ք{ƄƌތΔޔƔƭΌ甜))ƜƜ֜ޜΜ99ΥƜƭ֥省ޭֵ֥1)RRƵƭε޵Ƶε֭))JBZZkk{{ƽε޵91kc{!!skΔ99J9kZ֌֜9)B1RRZBZZބk!!R9ZBkksR))s樂11B1Z9kRsZcs)Ƶ9Jkޔ!,LP H*\ȰÇ#JHŋ3jȱǏ CrGɓ(S\ɲ˗0cʜI͛8sɳϟ@ S ѣH*]ʴӧPJZ(իXjʵׯ`IZ KٳhӪ];s,۷pʝKnKv˷ߟx LaK&X< f:؎5k̹3$!+i LU!ٳװcC[x - [S#'(rΗ@TΊx!iK/t?{DY/= IWy똴y-V?Z Wd"ud܂?Yu/~Z'Jk [xaD,R'ޅ$aDw%X%I(d]jxy8cd9ݸZkܕ蜘 Y|7y*KHe['egRi<gY2Ҕ#s駂"yE]JHҍϹ0.vcr\XJ%QI,I.!VFyQ4YeZZzg^|Z:օ {.A֩l--Ygǰ'/kpgLd`Gt ,$l(,0,4l80u@}Bm}?҃%PtTWVguWXoQu d%vh]jl-9Msۍjc Z NQ7G.WnEg~w.4瞇1袗0馧.0ꪷ/ {z{{ow{w||;||v}}}5~u~엵~{~gu:4#1 HL:'H ZKaf\c GH(L W0 gH8̡I.amH"HL&0aSb3H*ZX̢('N+ɟ g|hL6Ћs8q:#CPTs IBL"F:򑐌"3UEIZ$aNRFfP2St1 AB`009,gIZ̥.w^lF&J`4?f:p ^" i?):&tAT+Qʲ%) 4療wjrl4SM8 6̀pXҀBg`BHEAT k;BT"Sאo/. :hv8.7V6]:x6ݚy#*WyƲ& kya~!!(F-E`IA +\a:׍K.Ä13I|OQg4Gc803K&;LX$H8 C?Zwfx\V_L?#,s3ZBz N#B "TS3eS![c u([}=)0n4lI{Y4i6T[O{Ѽ N0q t S MXEW(kދw dSɌ^#< E"|zKhB:]7&PB`kho ޲-MZ0/lU'k;ypD` qD8 ?@% 9t 8Y$%<0%^Q?F?G A/jB}~G~J7B`F _ o7DO#E5KB uDj|77~GCW-GBT~@r64 @B8DX ZgJ?s$4q/cV# /@8Ђ㐀1( Bx0T%}}08~mcE\L#d 8 \5z8p}&64R!t x}l8xLB8A6Ԅ(/$4WB ȃ'H8X&x؋8XxN#F%t up+ąhؘڨE؍8{C ƈ$8KtNx܈ HG#ԏ,tXyxnFtNHc]9ǐYBxIC]Af"9$y)ԑr($(2I&96&a7 ԓ>@B9DY T6)8,Y?cIK)MEQIScY)[ٕ^`9UYrhijɖoIq)B |ٗ~uFw#"Ę!䘃yEi@YiuPYFU41aYy@ 9 [$ٛ9Ydhʙٜɜ9yؙI@}9Y/AN虞깞ٞ9Yyٟi*#(ABBB\v68ZzB%{U"0$z ]ŘT,B lk)6z8:<ڣ>@B:DZFj "Z#Z"JʤoƆozl^ovfe6lXvJthjlڦnpr:tZvzxz|ڧ~ILN"*^u֥-rzaXڥXʨX,QJک:Zzڪ*YuZ樎 iJu:ZzȚʺڬjӊ a:ʭzj,ê~p蚮꺮ڮ:Zzگ* Z'*\װ J35۱ ";5jz . *Gj)s<۳>@B;D[BkυI *a\ +:a/:*]7X)a'ѴH$qIhг2I°`[H$ sPq IbHvI%Ѷ/4DJX(m;븣q km$A]Tjmۺ;๱+% ]';Vq:y9 m {'! K;V¶[,%2,2Xk%VT$k߫ X&r& | JڤNz̋D[ + VmAN,Ӌ %4lkī -/FA!k <"ū/@|ڶKſ#<> 3\7\e|k6F,Oa`˺j8m〴Υ+̴/ܐ˔51E+`ܸ{ m }\FܾIĤ|[] `%<ʦ İLɣ|ʝ˥M˜KK% Tç "l"]P"L|ēk lͱ{{ RN]XS >^}4 ">FM*,.m'F}6~8:<>2>j۔iA.hH䠉 1!VHWN _>J 0@C5Bn:hl>=BhtNNp炞v~yn))M蒾FYjDJ肖d=i\.N0^i;0^Bݙ9CBwB >Dt^Cp>C]\B jL9F^޼pJ7B^.4Y8:ޭJd.CnBЙ번*zeƦo Z_EV4KʥYrC0%4V?#a*^ hJlD1e?BB3M&D(OBXR-//ծZZ*,AZ6Xo_WII_.O4-9k/0wVo o33n>pn@tFvo5! OET+Do1[JE#t OPۨ`OS+UzE~Z_n,c٧}l tN"t[ R>_t A# 'Lꎢ*w!X3g͌ Ӆ ӥBIiD-^ĘQF=~R$ETDO-]xiL3/ęSN=}TН%=lW(L>N/_ Q]-rK09^BVگmݾWܟF;^Ô^buHў=n>\פ˱e\YfΝ=٥]΄x4/Qla)Ln޽}cBPL5b0햕s]vqw)V]h!Ck?|SOiY0:RՔ;/= h2z%;iB 7зc`@o 0# )p䋏;“.wG2H!$H#D2I%dI'2J)B<^`Tţ]2Ǥѻɪ C7߄3N9N;3O=O2 2/2e4lT7RKkPP&এ43B̼t5T_5֍2(L . $RU֯ q?aERZ92F]#㚐-tU [0 [qlY "C$jaQB4 N5,d_2w#teG5xv#a9cZc;uƸdgET >7ceO8/㞇~8gv&ڳ'=+iyh>4g Z&sjNcZO[(/B:iΖvk榻/ 8yqݳ(kM{*\kSΩm5۳SKf=^֬Y$[[l21J>?v '|7dsG޽jy__|uoާH7>εknw;|^t^eς{4T@ъ^-iiLgc9ԴHMk"/L[Vę*lhI%Cj919/H*S8AN̩:K,˨#9+3ѓUưvWkˬwgSjU庰6 TT5=f&2!ֲQuj.:d$ 2]fF搹:84< iBv]loC͌h" 'Ƚ^RI1+4)%WByv54>9qȓwm2cT|f&w5Ҽi R銭֋WWFz# sE)x$hJЈ/hƼs: IžI[x,N}+p[AjHū~A8^0@`<@nvFhT>HAGwG^qF,e,9:Fs3e0hg1#PFZW^ cp1r@-t`I?'HR)ԓ|bj"21J ۶(;YüZIu lesuwlv>XBZ[ YSov}}ntm[u{d7}Z*x>ptߗkHp7xJv <5;ߙ~DpV$7yʏ{>8ڗ;81xwYT<l 1G,CVئ;]EG8契GվEr1W^=ӖRٽ QvMxB2׬%iY[sεvu0FIirWt{4=Iw|()y>o<<;$m3We;ioY~еRb庚J|8I\b Z͝nd'jVŴ[$ks[Wo :>BR ##"$5B9R>gx=c*?'CA?Uʾw 2O;@L"ˢޑ (A91ҋ d,4.͓[@%$x,LAXA6.΂A$T1 >+>R?ÿB!B > @ A(/|&"CK/2C- |=cڴN󴨱s̲5JBXSsT#UD)[M@ lu4߄+=b aZɭ\uGM_m<r,:m#CÝD/:ܽVq] \Xaۧ+KV+NQu+==D>$\q\]`_ϵ併m $_C,3[1=)=ݝ[YEz3=4ؤP m\AñݽHm'cpbDT%N}=NMB;-]@A^;Bc'9A*.hUqd}a9xG&x??^A$q0dLd<,f㽫slS%pq)gXgU~BkguOgZV)W)X)}:aB% W RF`fbnUh^\hٺb)f)niKG陦G>gGVHpiTg&]Jzi $BBjRg׊ꐬەfhބHHj֥I긪ۯ:ϥ`hٶd%Ka,.~aZsHڿ>ڝDlqƣ|ld lkb3KƫlVl¹ESmc,`#]>톎 v_[mL>nmDPEV@6]T@%T^lD:R}?N&!S̻څ?'ܦ[WkL\̜D&M3UoFoD`gv)c-P5_ nQD[3+F3 _A"nnɴN\mJ:O' dEXЬا*q%^,cx c708f"r@=qΌ@+T$MI|qJ1|=\v$w KlN˰DV44lL>7L?l<M I~ 5 op6teBo{LtLGLmptI7D׺1N{`UgVgRO; `P*V rJtR~Kg_@XuXXe#Q6j^L{vU'xHv?\ZHr2moh9_L崽|}t mp_v=m{HfwwSwOluxTgqUy~%#6gt,~Iϖ9M}n5sKtbmc'nُ^FC?U?#4`wn֯G]}yf49fNo?~T,h „ 2l!Ĉ'R< տ #ȍ /5+idKW@D/ɤ9N2sDX͠:ItgšC-%ӧKyNe*'у0>2Ej,ڴjZcȸ"DiW%ۼG)\jfפufSNnxec7Ē1mkݻ|v.m4C•+wزgƛkgnkR}8x?cjd˅ u؂w;fW:.lmYQȳƧso|N%sg_rrTӂeGvO{j@}y %)"-v^Hڋ5[G##7xEքmG:YȣF>XbOj%]8%*FєT3%me9'98M"}' :(jJgf&gS'JZZ暗z)U*(j*&>):_MB;了C%a9 Y|u= YNEğ43K?}Y{Z-8~Y)`sF8~X=BS6r υr #K%*$AȜG2Qΰ^|񻎃3Ͱ}C:NmGpo;/׿Pf u4Ks]%br399_cr+&L~n۠܆' AnԃƀChAIU6%(HA0o{4LavEā0lN6ݤ!k!5!7fDF@V@o@E7Ƚ҃]ѠaxF:$  G /!b$!1VҒ/j8r[5ěnXAds7<qd ϩCmn a(@d@ox{eUWPV.W25c;YIZ &2!bzrd @ARIxW/;yFT/gE-B~~'=G##)PSyc>-5e@PYS6=aQꍆZT_1ES_Q 0XT͂N)=U)aS 5s_DfT4kE2֡-&"+RmlBҊfE_Ѷ(ahbl}-lc+پִij٥򶷾-p+\*[̭\^.4m.t]Q!W^ӽ.<]Vw_tjֺ]w ynBwmofK0h{k"tS _ h/Vm-l`6lhsm!<fmr&b'y"z4JB~rvkgЉ@Ĩ-P ql7D|ӑů c8ckW!X>j((u}\K8z?;)ūƀ)qaEuceF7'2άD f#;ڑivZu`*m H#VqԈbiNdGqD{#H-{Z1.vLɓҼɢQ\A=E'HAPKԭ&,ʨqhHq\*+^׿t옭PQŬ/sFEJ0w"0 7mhbM+v vƍ;_ɣjA*4.1Kט10`TȈ8l1shư7ZyJ8q@;v~;79S~ LZǑ/dzص 7[Y(,]xaFlC"G',xNzO}z5@cxU.0.kh$w׈8~Qr=)N3~ /7~-ŝ!"1\^#Ȇ91]8D!@Cz;U}[``)TD#ذ9z>ԡv '哶 `9X G3L Zo cW1@k\ ^EI 3 `=AA͝kT=XbXq] D!re` NWyA$D H  F :{M0 H_P fn!v{0$B%D£Ypš!֡ޡkWE0LB+$DWN!"&"."#!B F3`6&n"'v' &5A  Xs'"++*"-֢-"}"./*"|"01# ㇕263>" Yd"4^#6f568j#7Fw|5:8v\ #;#=֢;Z?Ic=?r;2?Aa9 :A6Cz4 C|!EV$m C>Fn$"*y$GHGW:$J乔fJ$L KIƤMd\d$N$N$&OO!$Q&H2R>eQ> L%UVUV*HBWa@@@Z&:R~%]c8T%,d5d\%b]^e U^`efbff8I4^&l1,Pjj*fXΆgB@\*lvIaj&2efpg!,@n^fj&s^c\*D*^V\'vqxսXI=Ytes'>lkY%Yv.ħ.t'ME y'jsZէىI`ݛ}f>h0>M%瀦Y+ GۭBnsZ(zi]A-aѾY~agHh$N`Nhք&)BJ4DXt>i_@eir*6s^J5P3DЁN@piiI)s訩IF(*ϟ}?M TaBIFOĬAH~6h^Wi3)˞Chꉾ5xFGꯢS&<?kZb+Ȳv+6kZZðƆA>kpejJƹ뺒koejvkd'ʑ,$ *jj:,Y*z+S"VfVan,~Kǚ`N*Ş쥎\,ˆ4Ŭ&lr~,regި C'$"t1$.mX4AD"A,"Zm+4A)PY81'4LmSr+ly-B,t' l.&..6>.FN.V^.fn.vnAq|A\C/'p"(B3`v.֮..Nnq5ގC8ꦮ" Ta 臾>~0\G\!B Ws(^n\8>+r(B 3zu{t=x6 #kAR Kn|s׿?)wN3.S 4ZO&º>8aG"i10Ml O߄I iq yGD1@2Ì) ;)GR- r'V $2 p *l3+R9˝   KS,P Q!*:mR2p^T1:OyQI-HD)xplPiu%QMU]!Bk^GT!ckŕeeWdDZk}YiJjO6qR6oM"emUW^O}{w}۬\~.߀n80y'NbvX㍣8yX 3䓏8wg䗗+i>H[CiVdy..Nc'6黐VZjE,xo2F뭹[.N[uNܩXߧގ[o[lu0's}%\smsqI/ύμշ<uUg]Qq]_6فv0!ޥ=ݙ裟zO>t,~; _1'?hjGCDŽ~m @vxc%p|X.@gp#F<݄-R yBQЂ-J?x q<03p8Q^Bc ?h>pp10BZOK( dm!݄HD12v$` 5bR\Ƀ2! M=c\x0)3bEx@Pc7F7n8q (8hAɪ4p"G'9X5&S)!YHD5K0H Dod+SU,e̫"kyC{$"{h;jst+?Le&fĝYMkqo K8Gbr4^tg!'qƲT%P 1s! 'c88Қ= jP7S|-JԢŨF?ю BJq2&Mkz(洅 ITC 4Qԃ*U%CCQV@Un1 XղVhEZJT̕u]W}_Xv*aX.uc!YNe1YngAZюl@;PK8sHHPK6(AOEBPS/img/menu.gif"(GIF89auxc)Rs1119RZ9RcBBBBZkJcsJk{JkRkRsRsZ{ZZckkss{{Ɯƥƥέέεֵֽ!1!,uxKH*\ȰÇ#JHŋ3jȱǏ Cɓ(S\ɲ˗0cʜI͛8sɳϟ@ JPF*]ʴӧPJJTVjʵׯ`Ê=ZbٳhӪ]˶VnʝKݻR˷߿ LÈǐ#e,˘3郎Ϡ!sMi/N0qװc˞Zgմs͛ѧ rXμУ?qɥkνw+O4oXϾϠϿg_J"A1h]dpwnGASVxa$Xփ9X8ؓ, ;@)Di$@-ݘ=xTViIF$J2&%x.kcih %|B矀*蠄8Ld'9ɧVj饘bzh6ZRta曧Y*: ` dAf 0 JZBkÂ*+] y4*Ji-N xxl' @ Twp¿˺[+9gڶZmJs.HܨF J*.XȽpl;0%|2*rim K_;gtLm> +7 u[@"T{Y w^{mc3P91@*lnL*?oZP9FK Ck v5}\vǍެ̀ nl&c҃*}ӓk ‰o\;yўWkr: 1ob#vsIK}n ^ O -rm G=EΫ%c` ^o ^4Qt@ȿϊLȦE. {C WyH>6$ph3!L &/ؾ*Ғ_"DEJ>?^B(8U{[߆wP`TXY)˗+LPX-C9s\4IM VC+B웝b&m&:+qN 6 :W6dф =O1?k΄S.|hcb@;?r$FG* hW"R Ԣ%ǁLw:_1r)mVX*PԢ⩯ HRGZ24E Q U꠰hZFXE*V*Wչ$>Zī^}U(u]RⅢ@R ˷Ed);Ҿ]hGKҚMjWֺlgkZͭnw p[Mrk:ЍtKָͮvr xK^bM/s}yKֻͯ~ LN; [ΰ7{ 1,(NW0gL8^1r@L"Hq&;E1L*[Xβa-{`L2hN1բ[q]4-n~|VإlhgvE;׸=;)wnr=]yGz7͎ײ#O[%<'{UO}YIx{4/7e`?JXx 4 Xx؁ x$~#X(x~",؂.0284X6x8:<؃>@B8DXFxHJ5KR8TXVZW؅^`ٕ*![X,abl؆nE)Ņpxxzrt[v8XՇ'`U(h%航E8X&xňHZHZZX艴xX8(hȉ8xRX9pޘ8ZX؎(xٌX踐 I_Ȏ8ZHx8㨑 ɍ؏ȋ҈ )8 0^Yy(th-ْ<َȒ>8BEy1R9Iٓ=ɍv?و`9_ٕJ9NYV9DhSp9]3yt8&jٔ!79P~ɒBq٘y\sɘuȅ(69niH 7I[uh8x)ٖiiy9[钒Iň9ԙ_[_Xٝu%Y ^[yٞ0eeY/ )y[+Uz *dZ$BKA9|w":&Q(Z|"  7$ ''J8{6Ѣ? ]!BJCʣ(s8G*SzJJL:N@Z%^ZW䱥<ѥ۵V`jJZ }ئʵbPI[zjاʥpzfPTzZy[xF ʜZډ ؔeZhʩa[ږxڪzZZꨯ*X ]19Qyz:9ʩʊEXyy5z$ّiլt b *f)yb zڜIeAyI yjʊWYZںѯ6c jڨ!˖J* kgɲK}:K[:;˰JɏKZ [@Brc)ⲽ+^w8J931q&7n=$)4JOɢ +`t,Pt25\*\ѣp(CN]C5-Mi^,.]Ꞽqdӳ~#~̩^3)tnxn߼:~31.( ]>n͗꼎ʕ.1~.+F=һ@~N|@\=AbNMWNgW>ʊG[>a@M4..h=')gৱh0>>Ǟu.n%Q/?< ^AL,=_]OA hjKNB_otXMO/ OilO|~=J[?vx?Ni?>_kɊ^/On奯EGNDkZo^//4qO=2gQD-^ĘQF=~"H#MPJKrA4ج9&N= yODyhҠJi ͧ-^ŚUV]~)L˘ *-t\u2+\G=`… FX1EDz<{-D{KF̀J]Zj֭]/vlZ-'?7!楥9[{,r͝?NVsw]ӚIۻoxoV]zgMv7ܾ9<ܩo@ɿB 0B ϱOpB~]xk}t`W>18פMUe5e&B1nX㝏vbݚ]yԜOY\Xzҫߧ=YhM0n7/kv;=~y2m[oٔe?{m[K.I1= Me<`s 4|I8nNX@/p{%H\2 >|+"D4f3Xb%Q@9a!?YI"T|M pPؠ_/I}KRKF}!B18 p r$lNއ΍(.^N%IRΦdԧBzS- jQz&$K*ǚFժAzU+.!hWźdcEkʚխZk[:Q5tūȼR{B֒z-^EdXK!w}nmMy[Җ5xkZӻJ-śC1&DEʠ{8V.gj eY,e; B |̲/YyBN" gx2Ұ0bH6-]9ZqrW-2'18kuȪ{OcsFLHDld 'Y/dmgv"m~ucif'{[Q>< 9GLw&B7ZJ%DthJ{(+iQv^9=jN4U !r]usTDֲj[So0Skb.vr:+مa=D;tk_mnwwlkOr-EwսnvVKG]tr7B0ߛw6'W:JWpJ|=5f> bMR\pzĄHLiĹxޥ0<Euc7D%yɍl5+DŽ7A^|稜9ypR73՝OA^9'Y2y|n]ЛMpEWk;.{/^]Sm6D ͷ~󜨙̶֦[v2ܔÝ처W}#>{.BKrBb}:{@gFNl|o0T.uL%%mStg=cd}[)ۗo>ZcoVq/^ooՏ U')<82["H ā̠1 @(&LaP.!`B \>L &0Hb4D7 b}DB5q'HLݣhx!F[vC=ъ"hĝFTx)ա"eب NA_XE:ڑd,#N>)l#R9NBlh:/ :#%Jmg&!~!E]"l"$G OrW`\\1+X[&GIb#&X"Ьmq m#&(MuU(+^s#5 92vb#(yMU t8ˉ!\P7w1|\6VjJDg>9τ&l4g3O0~YORK/9H[M e<ŠӤ73PC3](NU")M*J8,/bc6JNCa8anM%h¥zUk;jVYLjNZU.\uASaEϹFS xQ> L $,Ħq:=HtW`D uDe3Ӭvl^YrԯIjdvrJ-` U^ATħ>y8P6j!mK.qUЏ TWVyۉ&d\# *)mJ+7'VdҲ%_]׹ [Q{# $O.l #208j؉6,BbB-NOEl3f @L"HN&;PL)B)>.{`|J6pL:xs<πMB:E{~ʙF;ѐm>KҘδ7hJ#м洨GMRgD3 &Vծ5g-Zֶ5w^׾6-bN6g謀ͦM:z(}n{MrNvDjjxNʢ;\J'`[q8+m[RиGNvFđ03Ѽꏇ|8F 4^qf'ЇNt'\җt5'*0W9g! Eճr )iQbl3:nv+ i;ֵ^NӍ0|O-׀yXuq_|RA^Jdǹ3Qw/{*ڽOK\ݮőῃUHd'`}wHrG~~:uzv}|S|W7W '}(G~{~2XhWygzv?g >}@eׁRN63xXxg5xzwa7u{fhڶZu΀ %wc7wPXvrR |؇m7ow8X▇"t~/hg8wȂ o8XxJWȉ'(x~h;xKȸG/)b 1$f/rf 3P ux(ATȅX{3""ðGhg؎x8aFpX OupSp#  rp#W"X8Y9 ~ȏ7*&8D: 4i'8I΀71>Y<ɑC@ P() XȒ6T&% yN*R$<ّh䨕UY~gz qhuI8Gٖ;wb u9G)I{9x~Y&G ɘəhIjɐሐ V9 X)gٙ`4ə?ɔ.i 2 ⸙{ǹkgTT""iiɖ]ɓ 0W9y y0ΐ<0)YZNג'0 {6t@Z.hgY0 ڠ`g6p+*{F!Y'pgI1Z-j~zA " z') 0j9ig<tРg/Eg8`pi ݹ 2nslʜ\ 00 p'f/6EYh ʑƹ7@JǹgA`{` @ `pY Tɐ J ƀ#ګpL{v@tp<|4YٓjL)ʛሮz GisA֪vh6`t0*Y@T0~mPɓaIi)«i9> b o`Ih'Tp pPٕxۛ9 )!˳˲vm' EJ[֭: @ 5+z ~ B{d+:҆jM<@R˶i@з~{_*9YZ"jjio * ۲?1gy9Z˓ٹkj 6;TۗvKg u(7a ʣ`еۻϋλ՛з)ےؽ{90 ˣz "ꢁјhYYpYʿ0 {כHj˸g |,Ljj lY܏mʖkkYj +#;47+ A2ܙ?\ WYM8qJ[I|K 空 ƪY'!yz1hʻ=\t PXw)'4YKɮ}̗-zɲi !L`ȉyO)iBKYŹʜZF>,km7y[Y ͋h˾˗Zʁ YL=(KxV蜱 v`uH,α< i?J|оx'\ϛ7rm#癞iΰkЄ ǚ|&}6 `3]l/=ҙٻUh@ӳpܦDԫa-Mv|KƛU=^]_bmL]ȹv[+ty}Iǃx [g }羒mxrMŮٕxMw ,]נt6P7ԧr6< 8š]m@;Y@]Bۡ-S=M:ܼ;Hlٶ ʽ wmZ̠`,]v 9mڽlem]<<ކ߶NK >ߙ~4-=ᣆ@mF=mkp ӭ 'nMn)l*g:;!.C^:6I~H崬3n墶o\x叆jY^\NWgcRP UFxi0 |-­o'و^8Q ,I-⋞n~g{*=´ZnhN2n?ږ듦A +>gɍ.hvԿ8.)~ k2@ ؎~qksngƞxvnpqan絎f^nNliώoi p / 9^_Lwi>$t_GdOitJ(}_f܏q[_s6˾O A;qnSo;A쳠~&]~NӮnϯ>y\? o81O,b/ğp?.8p~#/L@ DPB >QD-^\k,  =lD9 -]SL5jLSΝT|RPEEj$t:NTV]]S؟@wfVZk *c+˶}X)Xbƍ0``hmcΝ=s\᳉?FfpͦUƝ;h(Iܬ[pܬEt=;ĝ?wܻ͡_xQ^|{D<^6{[7:xS\ʵ/A /?+mA '(@K> 7TAgٯ6G:p>WCCԐE @c1\FT1H 2x4G1"J1J+=cR:'˶3'$,8.ds+064CҬnM:i; E3kKA%σQG-:7C$(N9+RBySQ%O@GEաHE 5UWT@Y]U[ Zu4z&9|:|?ry_( Ѐm| 8A JG XAOa5BpV a AІ7au6u.XD" eD&6щObĶWlEqC8F2ьgDaE.qrZtcG :юwc=я|9HB2k4d"HF6d$%R’d&5Mtғe(7I:D%EJRPyfd,eKR0@.uK^җ&/! Y f2aoe4iHR|X#<cZ6&79MrӏbC,T'Q~AӜħ Ga>O2E(IOc|'CP3 vԣk Ԥ'5i1LpN6jd (EJYjR´ydF:93cG=-`}"@jT:ըLEKcNIUjUJU?}V"SpT_ EHpW] +0z!`Rzը5R+վUM,S=*PVҖuo*Y .y}0nԺuClg{ "umJP{ԾxAlcdncw#4mv۵"5),U{AC䂱-/c3^` =/f\խ񦗩Eo/p@ե.]7E%abkP 5s¶E+<^py13q!#8)N0vG{ӑ%B$8<.Xp.bĉ26qaUX03,π-;PK!qH C PK6(A%OEBPS/img/ir_edit_srch_col_filter.gif`4GIF89a%&ck9skkJ{R9!R!k9!s9!!)c9)B1R99999cB9s99B9RBBBBcJBsBBBJBRJJJJcRJcJJJJRJRRRRRZZRsRRsZR{RRRcRcRcZRcZZZZkZccccscckccccckkkkkkckkkkkkkkkkkkkkkkkkkksssksssssssss{skssss{s{{{{{{{{{{΄{ތΌƌkkkkkk֔ޔ֜ƔΜΜΥkkkkkkkssέƽƽƽƽε޽ֵƔkƭkƭޭ޽ΔΜ{ΥΥֽ֭sޭcޭ޵{޽Ɣޭ罌sƔޭΜsssss޵޽!,%& H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳh[pʝKݻx˷߿ LÈM_IL˘3k̹ϠCMӨS^2/ܺ۸sͻ^æ(ȓ+_μs‡KdK:5jkν念K`D* o9c; @Ww9C1forJd\k etQ 0SV'sF 'esM//#G&4Kf,^&AK۬,:(--\JtuR.9(ج.Iv! +row"q]hޛe[Gsv83x:3n9fJ9ܡs,@mzݎ;r*׆*!zX |]&(W6q;h@ { 0 n%i&eae *TIzԃ8șCG0r>9ajvmyY&azbJ55Mg8]v#91HVBLP@0Bg4-P2p/GXOk=!94r6^cp$*UD# ?(Jsԁn Ģ'X,A֨EJP7 "P $ABK<*9 JY04MpO2Ad&` 4b z&uriD:9Iq *xq c:rv9PD Ĥ0`v3 O>, `F0HBJ&l3=Fn7.Y1A)N0D*)cE.Y%X+jL0$l@*(I'a_\@"L+ dP E;g;(wT7Xʓu0qstFQkS&e (3v0'p 9Q`cE!P9 Tp$j"tY=l|$6טʯHF)C vLg!aXѵ.=[2YU:V`A*!J0ZUxC&F!%Rm 6>7ӭ.`zluf@ `P U GIdH>ta]t7 6ǃ/ >0? $`wLb_|h4E}) Tx&jjc87lȍcJXȳg=;Y >%PK+gy]2GS`vkGO6͸tE2Z&6qK& 8fMkZOC n@O1N/8G ]\rx(Y{ʺfOԷOEBǭL 0  qto gH+{٤-e|Ԣb T+SeGk9ْ́;O"̔ 1et3DP%c05iԄB*q_4ޗ1Naݷы } ¨RD8hh0؊0 x[>CW4=؏8XhSbPhal=f`C3Cy1Pcp塚s;Vْ.] 9Ig9Dk Ȓ;f\.ٔ!O`'B&*mՕ+38No @,W9 MH BY Wn4;jYUȖR9{3t)Uŕ=I|)bisST(8@$֕ }YC;虥 43=I)ƉIAIR\=`Cy9˙ْ)ٜ㙞Yqᩞ yyٟJ_ *9 zg٠z:ʌz$!j#Z*چ.')4-Z8:7t^44INWأ><8?MLچPHfPNaȥn褶M)>ERDg @NIW:@!(aWUi@䤧z3|m,68aoe9ԚB[pxI*33dRg=8pM8@0`Osnj>#>h3 ISHH*N=:ZHIAdDUjc'IH3,) mVeXt \4WDﺭYʮz>=ڬڣAڦAMZ >ouC@[vwyT[ vࣥ)˭; sIᨍHFZ,k8R8=I x'>`C ףIٰڵO =*V*NDW[Uh4 zE[Mą1۲]{C꣒AtEi}+;;吰JCiipH*?$u>\y ؄N,=ˀ}9ج9lŷL2Eڿ| y<ά^( NDE8ـ4M=cMW3՚}ٌr M}rOmQ{ ɘLc=`9pMtaSق}]Hٸ]׋E ,$=PnՊЍG;\%\=z%}C׊,S -ѳmK +!X7UXnၝ^ J} iMI2N1 ,B= rsqlmۢ&m 1'%,"J+\jjѵj62LjNhj 藂~. ޿;~^NDQ);𛧾;g ?m)@'|a„C:34xc#Hq9[7@y[xjD"={ETҢC>UTU^ŚUV]~V,Ֆ.Axt8`{s{OoVG?}׷uUg?~?,݄~i_8@ `@NI`%8A o`5A]5`E8xp)EAa UBЅ/a e8CІ7auCЇ?b8D"ф2bD&6щOb8E*P|WbE.vы_c8F2ьgDcոF6эoc8G:юwcG>яd 9HBҐDd"HF6ґd$%9IJVҒd&5INvғ D9QҔDe*hհRe,eEW*e.u["f0IV6@0Lf"2tS61 TLb]Bnj&5MmV(7gf'ƙMsX#O~yg@kfeXm_ێglG<6Mlz rSe+RZYtdz5j} w]kRU#,R2=G֑VԤ6.[ a'u0? ~pph7G.}}4zuuݎNp$Gx W2\xQEꎛֻ-qNHwγpEԵKmgarkڹFsUj\ȍ ܩ#.o]+XWn~dCiĀٛ|qsٝ|yW!7k., ;uGh4|%?yWy|5y[>}YhsO|2rz2Dd=0>W}?wU u?S'~H^ˇ~ؠW~z_?Ր?G^"*H44DTdt@ @ $ԣ_@Tdt !$"4#DA=*%d&,@t()*+B="-./01$243DC3?H6t789:;@]؆V]eًXb}}u6WXYUX\FeqUZeZ rYMZvmAVV-Zd#E۴U۵e۶u[mnłu)۹5ٺ[v-ܺ-ܴEܸuuA \ƥ~؛Ցe5UX[[=ݾm\]M\\Eܻu\ȕ\}%]\m]ÅU]u~ݼ5^ȵ\EǍ]^u۳^]H\ܣ=Eɝmq[% ]̎`I . ]_M`a=Em5`vݼ^``ma]-ܸ^`5>%^eߣav_ _%./ލ 44R%(]09:;Q&R6SFeDVdE.D&c5fάx ]T\]^_`Fe=b6cFdVeffvghVfUV^WWY~opq&r6sFtVgr&uvwgcc `1nFGf `o&6胆f=fv臆舖艦芶hg&6FVf>,iLIÂV ri>B8l颦=*j{TfjA6lIx,xI fɆ_ IfRB` V.S&慸 ^B0SkʶV; ~B>6#m8F9׆l.m0r0N Gix r`6 n n솊rX ިGphVoNm솺>nnpnr8 'nvofp o!ȗEn /q ކBwoqnpm0GoPoQh>4!7fnq(r? nQ0jq/rr"7r$Wr0wr( ArQ8"@Z؁V,q&Ox1?.)OrpQP9:rAp@rEr;opIrFD17p6htX.qNa/s@O&(GsP`qu q8Fpdpnhhdvj. icOefsjwlGvgvjsEho+7 vegt vFVbwsdsnr(xohONYwwgxsoXHv#uxpOw9 qwigwJvm?yvu(vp nsw}#nAwngGtoV|zUVn ?!g'{Wv羚nYn7n{^vzzpgO{m7qA|zU.knǁ|OrGw gހqwz~}s~ yt8w v/|wާ}¿ mV?pgy ~7~Lys, „ lС8 ̅*b5mQ܎!ɝ$.%&CuDg :;&Μ:#j+Q#Љ>R%V-_JsH;-Jfn $Prk(hp3Reҥ^96ϰ%)VdP: FhH9FR+ܢwSiE̝.3OM"EROiZ`زgӮm6ܲTfESķ9PnkM`58fU[e֡NsswnQקCwV!t6]EjPuɝg^Y8`'gՔe&cx"Eu7g'zu:6$E)I*d$QJ9eКGWR%]za9eLmftgpyM'}6t&K'*(:JZ$oXz)B)z)N:nP**D*:+zk+B{,J:,2,Z{-j-z-f+-{n.9 /hi/ۙ/nV)+0,p[|MCS!xDžs| g:(1ʴ9LnͳݼoxV:\V34tF~Z@ M=(qMiepZ3gs6i15IIWJ5A5I68YM#m@R*ٱF K {Mgtzs1ޝMr:[eMsy>{ ҁEAKHÞi HuL(N;JN}3F$6BPGѾM~{8O?5*ˑ(m c=/2T$+[9H F (2 & nɱLrT-q{KVJɚ@$Db#(fIzzX.|D:6%搠8f03~0#, Sv02 s0C,&>1S.~1c,Ӹ61s>1,!F>2%8 ;PK#Ee4`4PK6(AOEBPS/img/hlp_item.gif4 GIF89a;BBBcccckcs{sssss{{{{{{{{{{{{{ƭƵƽƽƽενν!,;H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjq`ÊKٳhӪ]˶۷pʝKݻxщ$SLÈ+^̸ǐ#KL˘3k̹sg! 카ӨS^ͺ׮Ag۸sͻ1r<ʼn)+_μσ["$c'0*$HB OgK8 (d QĆ 8/ܠ(h&^&mV(a^v6bQT{| 2 ,PA '<@)DidGLG6dITa!xXiqcNp` 1 70 .Tu托HW.K\rR!n(zIb0 =|D,Xhs^Է-,k1(4PlW3yA.yF ;`{!0A.3+z#7:s\%MxW ^Њw/yYc-l ^WS^=rߋ! LI#ܷ>-w8bh".gҩoL `DnVI_"!`0X .f -%$K W(G:3!|hÊ)<,>ψ T"黆ĭJI'@0,GZܐH0{{4aA@`/c2Gᰇ4ixE&FUJ-~)t٥-rhDg7UP ph vܥsq%)L>2? 3Nh0SA*׿di*[N2ƱC[E[hfYԠ S l1jZ3Vٮ^qNIܵk080B4 "']xܵ}Eߺfmi`~+ j k~ë/d|&9Oa8>Z/" & 5LE!p5@l{Z"rjL* aPЁ 󢦑|2cT" nl! hRM +M1MB JCB0E@p P6J67N+fJ EHiOհCQZ5`c^<[Wf;;7NAaPn{Mr*nv MzDE~CNG;'N[ϸ7{ GN(OW0;PKZ+l9 4 PK6(AOEBPS/img/d_toolbar_149.gifGGIF87a,ڋ޼扦ʶ L L*Lc JԪijح 'oYK>Mb9n;h>57 HX'IGYfgٗj&DzjZ*9;v{YJ&*K\LKL{4L5=-Ue=m ͍$f=>>'d-E֎޼~A;K3}  0!51㴝wB[;.6zc8+E¯$PjxeYv8 mNKm#\mnm~ n;PKgjbLGPK6(A OEBPS/img/sec_attribute_tabs.gif GIF87a̤tvt䜚̤|~|伺Ƽ̔̄|$V>tN|ldLrĴLnļ̴tT~̤μČ܌ʼdd\\ttԬllll||촲,˸'*\ȎÇ#J( ŋ3j1` ̈Iɓ(S$9Wȕ0c˙8sTYϟ@}}/H*]ʴӧP-CXjʵׯSJٳe]˶mP`ݻx˷o^\%W,+^̸Ǐq"\3k޼peCwkS ,Z ˞M{._Fo߭E >4 ^[/ǮMz+ϣ'gν;_ЉX3{Ʒ2y taʺlT^Uzͷ`_rwyV؏y8^ >ygE@)`_ՅQ"+"6h@ʃ,[8!*}E$}LW_P>WTRd*XbMH|OJaEdMI{a䟀3$aN#S %w*_8Fcb"+r`z&h2䢐: )5i͠ Qo 豒:Lid*me*k;+*Jë+5(Ǝ.}݊ʉ_R-kJFZx2pkżJl*皋wskX^K,6h8h-4//A~;,;+1ɨ ᅳϪ/0H'cp2tglmKѩp^=HhK'z~/µ-o=gܚQwV6kJY;wnwGE"٤ةlmuX)˻/g;c T$/}]m)cܧ| #اv>.ܤ_U?doV# 0:'H Z̠7z GH(L WJ %T! w@ H"HL&:PH*ZX̢E.2 SE0R]L6pH:ڱ_*'@ጀ IBL"H"i6̤&7NzH|d¬%T2L*WJUR@2Ȁ,gIZd.w^L%,e`I%2L2fЌ4IM^ ԡ(-bS 8YG$$(:vk`6O[Ͼ|C{O *X ZO08A ~8X~~'~Ve~{ #Nuh' DX"8$HPȁ`W v؂e4X6x86a TK2DXFxH<@8oE0~.xXw@Iͦb8dXG|0`epXth0@%|؇~H `/t؈8؈H@ XH4{u0X>x<X ʸ، Pxؘڸ؍H8X昍x긎؎֘8XXh1 9Yy9А9YyԈّ $Y&y)(ْ.0*ɒ1Y6y2i<ٓ>i 89&9DyiH5LPNTY?\ iQ9`yb9f_yjYenٔ:]9t4dxْmTٗ~RY tiv d А T9999ّDyْ4S'雠I9鑪 iyY YYY9٘阖I ΙۉbyIIyTڟɟ yj 9)߉ɘ A)቞)*ٞ雳ʜ/yٛ2IBDj:;ڣ 9PR: 9W*A.ʤi[J_gjbʠ E zJ*qmZ)# 阍 j* Тjtɩ:ښs |Jکڥꪥ *jyj^Rzʫijکʫ:x:IګJ@Z)ِi*ꘓ:銢, j:Ϻ9ʩЊ`JMګ׊tqz ۬}ZaʪEzcZYʪʯ*Kۭڪ h:bʦ/[Y)z곌4Iڤ5J I[4 Q8zIG :]ڪ:˴ Z k^K;Jڲk;κk+|*荒ˮɨDn˴u;Yq 뵁˯:JYKj[G+&Kڶ JF˵ɻ[kKhkzZ;9~3!{!ۺK*j:{*k~9Kt ʾK[HK뛿*' m 1{|:ٮZɗ±9$y*(:Fm|*?Ԛx)K..>2@D*~ &+B)n D?>Lޫ0D7";;,>ZE1f.ݭ DQa]=^^>_>V.rgҭA9n~ynWNw<^o^W^n vx=~tNGe>$+爾.cNn~..TNx[>Ǝol`~~FM-^nG~l~E^M4M?m  ?_;PKŰPK6(AOEBPS/img/ir_compute.gif47GIF89aXvckscckkss!!!999JJ!JJJJcR!Z)ZZZccccc1cccccccccccckkkkkkkkkkkkkkkkksssssB!scRssssssss{{{{{ք֌cZ!ccccskcތkkkkkkƔޔޔƔs1ssΜΜ֜֜9{֭cccckkkkk֭ƭֽ֭֭B޵޵Bssss{Rcc޽޽ֽ֭罽ֽƔƔkƥRƭkƔƭޭJcενs֜֜s֭cֽ֭sֽ֭֜ބޭkޭR罌֭ssƔޥZc֜c!,XvH*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗05›I͛8sɳϟ@ JѣH*]ʴӧPJ իXjʵׯ`Ê *ٳhӪ]˶۷pKݻx[,߿ LO+^̸cKLe/k̹站sMiҟS^zph@'/^sqͬ/ N@Wn٫F0b kν{63w]:u&dξkyկO Z|4G}' 6FLݖn/(wMHܨ/.N`cS4LE^6?̀Uj2<`981;r5YVM[ZAU eW+vյDkDHXrFkXQ}rW&V\Nia4Kև6iJ~u*H;1 J%eRѩNܪvmj9]M]Ao]o} h4e~%,s\4Q]^\N3L(V6 _;ڞֽol[;߭limI[/8`H;B0 Hʔ֕M!ګVG ;'*'3I ƸRCOSaݢbVcAʙ!,dR طFV$Id uxaF250{Er=fR|\Oo;B:jJMM (zPݟ!HAhZB>!h5)Ndsn=#W[D^Jo;!B ^ڒ asG(݂iw^ECXt8<0'ā Cd  7\@L'Nr+ _09C\;5˝w tx~协< FvY7E(?fBdN)iؤw>inGz~L}hJm\gR۾H|ӻF}z5Vo _R|>WSB g=N' k9R.y$_6*R}L)3,(MWj7~iZS Kz Vg.ń(0FPzGWxuW4H3W-%RR62P}%=},`r1*E2$P0VvQ=&$uS۠5g Nr `aV&]`xFR/xWXx06Hw6xhvu&{?ef80V3XU\ 8ideq(0{(h# (ixXE*P 1xjW7W(Xxڠ ut|8|X]6jF@80L].@(ņ/U{v(aQV-{*` | [XK؅2`wh| xw긎 VK \6c(1QaXHvHeua p+Տkd ،98 u 4dNj8%րeHe1Nȋ 6x4e>86Yϴe4ՐhɏäiTibυNK+XLXq X}蔅x9Wxٙ٘|g)gWzqn陰 {!q9yowwwiw$C~uIAyC̙ WWy#uɝƙxG4wYZB晞8ٞ< Y﹇pٟ0YZqPࠠɠXZ IT * :7%' )Eq 1zԷ6džFQ7z /ʣ=jDZg};(`LMzהruفT)uLDeMRWJp Y^Nw;m2R[8e_֋bXX]6=xv ` Х;ʧ`Jd8(v&IaƩ8dP{jFxv\tZڧ:\h )]Z:Iڪ*Oj 0BeveZL[Ɔʫ6Lz:[ iשfi`i◟4 q :{JqmU 3ڰ;ѝ{s ѩ+*+${0P`@';)>K$kgD[ٰwPx$CkG L˟=^S[EX [Nja+@pٵk{rضD |KrKx;WHP|1+G7kqs۸۹&WK빨+y{0[pK4[vkvH[_7pK5˻7[6ًf9As &'+q`ʰ ; p+n @͈ۿLE@[ D @ |@?|[ܻ:<$% 0?3|ZFLH?JL M:TL${-l"ܲ/39bA[b{I' mLS 0j,a| cн <„Lpkȋоȯ+;l۷۷lÒn{۷[=|ʨ,;+ʱǗv4aĪ˒˼0ɝl̔LĻLİ ɋflЛګ+K̄ n勿nKḻru<[Я\Р Lq=Zh =e$}6( ".]*,41]Gw8=t:?>s@77D=sF}JoLPdR=UVQXmY6sz7wH Ϛqտ6e( jy[=8SQw-2Xv"{֪dxF}(a"2sS Be}[&Me戗]/ )7i3!0}-KW \^=]M"nh} V,t͐GIr2iA3+ Œ-[F/{ ~լݑHP>0vb9bc') h2ڿ(`Lx[*'XQ&,=בn-HM(=:D+IӨ~=4@0ɽĺHqBAAÎI!%>PN>~؞ھ~ʎ14 pqA&^5XNN>~ =1^/ -CHdC8 $_&> TCLH!? !6%DdDlL #5CEAJL?:_D-D?l 3OWZDOdHC 4oX@\n3tHL41+h|ʎJY'ljھOQv2Zi%CopkPiGk%LTw $ m.A|kz.ͿrÈ `%rX9p+8j7j18.IJ TL~ $|dC#V4 ahF:xBH!'pC xù"(?\"8DQ#9I 1[b,c!ypr$?I4i==_d5 ^җf09LbӘDf2Lf'L#yyJ4Ӛ&3CMnvӛg8 Lf)tS'5>v g<9OzӞħDM ̧;*Ё3@P6ԡ'ksRS=D%a}"RRyTmSFUrʣXR+Y?7E5jf)Z1eFW 4)IchRPUw)e*%Q3"hVQ6񨷱**A62Xk+vicg:ոB4kTOʰO}aOOyU)b׏ncOyrX5t]Du}oj&t\y">f&ًW6q0%2VLSe0nr粓ar9dnb)Ů|Z+Q5Ú~*.\jo{a[-rGCミK0­?B+͊,ڬJ[@yY@ A  "@I<ƻ kJA*3*tA3 T@z4lY[Aw394ZA)3=‰Q.6A'/B:6*#+|<,,Cy²5D6tC dqAڀC<;CD:=" mIJDlBB.\#CKpOQ$oC4<-5)|2rWXtL,D jEVE\LY_`GTHkĮECK9@:dS4,&F*i*F$"DTmbD!B2GyQz;@q@ ;lG9kLl| wo\pz$ǂH-bi\ n'yC{!CAG!4rlŽT Ĝȇ{ƌLH2$Ilt Iɗ")tIKy;9 -dMS _˓I{2vKk :[N^0baie8n(NU.- be.M 7s֮;PL>b7^f,UAS$fhT)8oF` # h{ 3<+LFyEers'6ů7=r֗5„&=V)F5et\zfg取`&[VP% QE5f\iU550ޫW'{U:a6nizph4efMgiujVVh=`^CDYF2zHl>}MxZfFJggSkX'. <}j k^ek 즵`j}CZ\>Ԏnm}.paӞ_umݦa F\~a흞N.m>nl܎eސVn:mYmzV.nHƒmonXpqp۝opE GA0 'z \''"fpҀ `o _gFr?qF5rn!mmr~r!dEo`nr>!?oHqrW7pFsTO"`:(NSү6COD6jUF 5AQh:b>gCej$:r6kgDddd+F ɀu%_(vg2DڼgtvN mH36EaS$m.rhmuM5g EBUg`B/wSrPGQ4Xdr!N9 ~VhՓ力n/ +ɫ]7cvUWP?vgtr'kŰ+նƓOAb,A.SO^GyYfz=wz0uʛתN|?T(6 ybib7V6N3GsfSvȩc0xWzJyf>Xg9bZYdZc_zt&}5ڠGut37o~''/Z_t1}pr/ ܯ~@߷':w6\l_~Cg}{gw2l!&Rh"ƌ)c ?hǑ*Wl%̘2+z'p`A P4>KR̤J2mjM{u$ӨӕHcnY*ʬbǒ-ͩT  1P{ѭk.޼z/Zrn!Sl2P\VB&.ԪWn5ج7#NܺSut‡/n8mޖ,xQXRn=crGNߣ{/ou6_8ӯƷrQ*~ܽ7t: Giǜ7|Z! !hAi(ևAW!x8c)R݂2^H#cވ=>bzA y$z?V+6$gE5!NF9,(Wz9 Zuea*fYjU&q.?#)EPl4$P rjNkvunC $(@SNQFj)5e:f\ɧU8#!Ht0©| 0 @b! Bz lN+Ę,̪{*iJK؂-ނ$,MFC儳nFD+ $Zïz0k}#BF,Joz6N7DC-0BK(K@ P10 Yl\09s@)T +r2l3`>˨QJ Qz04lʉ+&sˁu; ^(t ^BJ|gt3Z|ۅ?3G>rTgl{*x3?bjHct+) A);;I.,.w xo pj^6W|ըO`.~jA?4b}Ol/YKFyVP~<;۞Lg4!u TD^MVh\̼'B+hʁ WUm_P4:`3 ȃ @i1$ƾs W(ĠxLBA pE0BakWل_0724QmTK1*Ca #hFZ>Mh-p[a;?b3D'h39nܧ<'-"$&hTEQ{?O2rwó UJ( -iaby䡬 N"(õBmO&p#hq.w/,>0*~0#, S\ s0C,C$>1S6c,Ӹ60o>Ir !F>r%3N~U )SVֱ-sβ,1`.3Ӭ5l~3tv3=~3-AІ>4E3ю~4#-ISҖs@;PKRM44PK6(AOEBPS/img/bldr_hm_pglist.gif*GIF87a|~|ܼ䤦Ԭ̄Ԍ||||ttʴļμƴ̼ҼƬ씮ʼ<tN|l􄞴t~tdLrLnlĴ¬tzt̴ƼĬ||´ttμttdnd||||LbܜܬԔ䤶܄̼Ĵ܌|T~섚¼d|,H*\ȰÇ#JHŋ3jȱǏ C0ɓ(S\ɲ˗0cʜI͛8sɳϟ@ Jѣ0"]ʴӧPJJիUbʵׯ`ÊKֲhӪ]˶۷_Kݻxn߿ wÈ+^0ǐ#K1˘3kL2ϠCyӨS-װM>g4p Nȓ+_μУKNسk ШQӫ_Ͼ˟OϿAad  6F(Vha|XY.($h(m6Ç-p 3԰@8<(,UZ67zRH!x>F)TV ġ\r̗` $T>ɚlp)t)ǝx|~I>Tڋeg0B"0` . f馜v駠*ꨤb`*$*-/Fa뭸+H ÉQ&6F{UDKYK/J= $`)C|6ĩz;b\ɋ^LOK EdJa(+`Í0 -@+Ԣ-܂ ˙KV.`bvd ]ļ.@&, 4۬^F.F'0Sd}JH/ܒ!G 6#K,d"+= &pcmp!KͶqM7?`>;?፳-Ј 4+ Y&hvsqmdrź}>{7xo#o'+.G/WogGG *8p3`H2;e7W$?ōP78%8% BdCֳ0΂ a'HA!$a QԠXB9D 4:jR(3"~g+@ c%t*ԉL2ŞpD'*ы)|HŸ\YT`38:14`>tHH@rtc F:ҍxad <"}"(F 02*M*R%O0 R`bD՘J'r>|BK[RbzXE:GgRӎ֬f"yCnv$d|` lrHFiR6KsJ>H %leLLmp"˂R@IJ'4(D1!Qph|l7UjOp" RN@T"ID Oq͞15KU= |7R)"-KGkV&RK{S&ejJ*D*FvtPD,ذu^$+c%؋lU(Bu\o…~uEY\1*[ƟtW x(jPiAop_+Xf0"`03K /eƧXA gDP@ȺQ瞵Lk\%xvy4B.׉ #Z7Zwc.v{d\2Y2anfcJ 09|f3g4#d9) 0Lu@@JS:#s8JGno,EMݹޤ |Huʲ'wnemɧVj񾚁Gp#a8ojv^T'?3{>[vzS#{  "(!DD@ _WJk+'Wkqc- [62CqT`\ W[B\ ~kc;if#ӣ0pU폻~9\mDSb(HyTfHOע2nPk7·>< lFku{wQy"vioa;˹؃<`F3<~ '11TH@g#}=]LYյK u}K({wG }'wVff 88߷v%s `<ih!#(kpvpn{[wr6+p.x8rQrFр8ܷxD`=x&~Q"fphj o8oAPlKmwo1X\`((l'q>X@Xӆvxxz|pa&@"pX0&AOZ\P32^ h[zWH`؊b0H` dp؋˜(-)%@ M0!∁a_OQ XxXSTP(MRaU Xx؏(HIX?A  i'*9*RX2!D`,Ҳ+H!Kp,#029RnSx 0=VRFyH"Uu#=Q4t 794^`I9Q1U5`L'pr9"Bei10O%MG9re 4 B`9i2"۱ٙ9YQcqٚ⚰9yi䔛ٛ99YșHל9Yyؙٝ9Yy虞깞ԙ̩A'A-ٟ:Zz ڠ:Zz̙ ":$Z&z(*zi2:4Z6z8:Z-J@B:DZFzڣ'HR:TZVjJ*?Wڥ^`Ca%1blڦnJ`avjjD-pj|*j:ZZwZ"3ڨڠ*rLꤐڠ0z}J:jŠzکJtw: PʠZ*ꥲ⊭ڬzʮ:ꚮZzڮ:  : *˚گڧK/j {*˱ K [1{J{8벥?[럂Z@AL˳=.+ ZXU7D{g;f juʲz+c[2{mڨ3ˮ޺C*s+ʵ&(۴Dt!ʹ1 깠˯|N{{9۰{SUK 붢TmK; K+ëĻkk˼Nk;[ٻf+JϫekokjW i{ [J{bKxk黸,Ѹ #|%̨ B<˶E|jvK=ŠˡR\c]e=h*]MOm`&=Ϻ$^ԁ  ؉؉mS"c[]ID٘me]ٗMԕ~ِMٗ}=ǜڪ&M)P4-gm؋]غ؃_=R2ڦٞ=}}kƭܠmէ- -y](q}}؍MؿӾ;1}*dg]}GMڝh =W]Y۹#}$>ّ}i-'0ٝե=%p8:`z}l!3.ܼ !MЭ^]ZnMH<q%P'Mۇ|"-.-x_{O]d. ݛ\^}߈n2-Β.gq&@$`}VSnl ]ꕾq-$ CEnGn%|n@~ʾ0R=pE뤾>&, |>Nq' C~P͟L@˵ l(NBa*0,.6<@>@B?D_Fȡ?NJT_=QV\}]b/XZ?h"˸|˵˼0t_P.LD.Mj/L!\|Z:Tϩb=Q;qo !x=rШ_/m q/Mp.>t?MJ~ u^!ϟ^d.?vS汏o}}1m In!Fsi !i>u Q@@ @PB > ^ĘQF xq%,iʑ+O,r ˓+[ʴ2Λ*S dǁCA @Z4GDjѧAN-ujTT2jU؂CreUYmۢE6[=T ^}ha"RH#>Ċ-C eM7mrzfh]ԉ4h֢ݚ[Mmcu Vڸ=u&(֍9 +LPD! XXx);8.[0n{IG}}_,B6.h .4P=`K7 *C{: @2r<_T輆P, R '@*&rk-G0 p8ۖ{3&$*}p(o1# l0KtK//3DSH,JcF;_!H̍QG5SׄJ&07$RIӂ(3.eT);T*0UW_U8(JHhŠZW\hOU]Pgs@=s45p7oS.v%V@ Erʭ]2ߤbL ]}%x2Г7,G \'b+ c72E A;SOnXت^9fgfoewҹg &#<`JeR9!:kk &.,@xꩫF;o[#6 4H@W ;r/s 2`67  L~'ϼu_=vt) .v+8 ^]v'xu;?y矇>ƕ>{;y^O'|G?}g}߇?~秿~?`>}<3`@6Ё`%81 _AvЃ¼Є'Da]B(BЅ/! WxІ70.w]D( ,GDb7reL)R N|7ąP_# R `LCޤFq"+F:фw_M;*@RЋvDd"W{oWڶAn1#,IN6ldH Dlp#%ra,)q\y$@q.KPI@YYai 9R Tz80AsBe) U̗ &BI̴`&0A9uJUbpl~KX.%Q=).,l%R \-UOy,PmIOwq"0 %/LtaAb jQg)I)TVF%Z!n0Jm b r$1yl;xdAi|S4T3eX#-rjRLVCP)tu8 EO3%HgdTvj햜[cqIi *ه[rkԡM=R&7IN!bT ˧*HbXjr6/5\mh L;QtmYQuWUʬjud4.-h%B΋5J+m:߀JI\?0-4^J.ߥP1^dkկV# x;)n)4ݠ|,d#spF A g'FqJx/^B+Z9-iOmܢO?[6sďjcb=r5e:hD8:فPrlus]yohq,^ng>g s=y&t9C+put%=iJWҗt5iNC DE=jRԧF5?m@D/կ۪jXX5h}k^zbVޮ}=lbsd=Eaud^%(JVĢcf?I#xFUpUܸ!v!G/Yk%Jw8LRu3e)pYOjtY}jzC2DŽc\r]n'<9лM+%4sYʪ&k-=}/v[ J]IrU9Կ` ۮʽFK2~13'l? TrsIլRUT6;]NQ5v>7EWkW?%ǹ~7$ɮ[I{[PWWYP]\6dX_Zq|8ǑU[xY{lp9;WG}f[ƳEn.:ڕ6M n_Yاi>ۂb}s;)-咮@Rk?`rt5ۙbe999(zpt rۯ@*CS0~?b8S" 0#);ӛCC!N#.cA* !9,#[y12>d0һk, -K,2EFD^+AQ3vc!3R9:޹3LSRXE>E[1ŹNa$b4cDdTFLE ThijfD]m2lTRp,6oEs5rpDvTcÝd[58ncGw؉6j*blG)?sǃp{q,3sc#u)|Eˑ7=,7|($Cԓ$a9A䈂S0ԫG~ǒI9I/8S9LD Aױ;L{k{czԳGl*y: J<rj:uR&TLd.k| (b;;J;,K˼ GL0 C&ső9<I<ʹӯJ[I:;umܾ+M#+9b =sB )>T.j>@Ɂ@r^M`Chɮ͵*"M,L&2?3N`-\lR/ MdNLLiSP4J0ZlɨJ3,j,}&\ABK!S¥DY'ɘ$P?BI00,R43LCD%7 ҂DK$ESIJBL%[L3ӊL:G SID.EP;3P6t E-TTd>5?eJ}!MmLMPOXSETUUeVu!UUQUZUU]V`5VVceI(fևy_YiQ5*nuj5Eqm sMph%M]``tVMj|m xh@{8}EXHP aQW`ׄM @ EWS؇XUR$񭈑;ɪ T8Y(X9oBO0`ؐ` Y*W .N- +XZ=`哒3<*Q?PqL϶h٥}XMkm[DJ+uۚUJ9u+ʠmܺ-9u 8[~ \XX=K:\KPLC]PXXMݨd$]j"<XަE]%e7Z1[=Hڂڃ _W+1@H(^y._%, `V`8`L`٩ nY ` ` ` &6K`fa4a1# !&"6#F$V%f&v'()*+Yk./0263F4Vc`\6v78Fc2>5;.5X&j+Ej~Nj)꧆j5jRꨶVꮆG뱾a6kFfV붆븮淖뺶kJ8&66VjDv.ɦʶ&6FVfv׆ؖ;PKoN`**PK6(AOEBPS/img/products_top.gif GIF89ac)RsZ{!,PI8ͻ`([`hlp,tm߬|K',Ȥl:P3JZĂvuQ[# ״*;6§.wzp]~&\q~d_yhwpzP|nr)*uamOybзE`ŵܿpH׺뇳伱?Ӟߨ~dgXbn"m:ۨa:6yI"KDwRFʕ0If6sĩ'I  JѣH*]ʴӧPJ=*իXjʵׯ`ÊKٳ\]˶۷pvU+ݻx󆥫߿ La+^X$"KLeZ7yΠC,iO^m65װ> ƚWܶ:,vU[+>':rٴg~/~wasߓյx{#Wk5v?}Zvc C;5pG4&MGRV*P_ 6phAg6iJ=-- -cbwvyib`(=Nqʄصyvkܜ[߭Zvg u >"E2V|䫂G .a8zUN1zj/Ό4 8ى|a'.e1*z8FdKψu6TtZIe-K(7Lޝ=(Lxy"}Mh$f5MMy*{Xa NMn+!6|bI?e,?%D(HY#ґ&5ҖuLiP*S±Ԣ)Nwuӝmow6&qi4cF1P6fh6Cv㤗/Tly %F鸖 #BaXՖ`ZVUWiVu*>fAvMN*UX'q9Npp@dAg}b5Qc@%IVmZg,%zkS81Vg+'l*mhp5zY]ѕ3ǽNS5wt}a+YͮK[ݟvx=n+^z)2uݭy5QeaCU6slm'QT9RT(UZ;g޹f}3ʯBݗsQVFE-l7֪ ~x4p`Qx6jVX?S;xpH) zxc>#K,-A6Kwl.(ݒ`]jr`Wȏ{՚AZ͙wE/bg'vMqГ3oEъl4y$*5O⬱Vu0ߛ&uҐ-i p.djjhmvؾ=]LQ;6j$c{3yFm!]ӅNSx-2W:d>vJt7PF59roچQD$]n\e'^l8QJtGN8 񕋥.xW#k'Uӝ6 lyAӔ?k;|z6{^oqk~\Ҏ@nBa6fhmnq ޚ׃uUgvf{{VI|fJg{ǧ;*{qz'RwH烕ӃLDh{QzSzUzW8sI\;PKYH PK6(AOEBPS/img/ir_search_bar.gif 'GIF89a#ks9skksJ{!R1R91c99R99k99s99{999B9JBBBBBJBRBBBBBJBJJBRJJJJJRJRJJZRJcJJcJkJJkJJJRJJJRRJRRJZRZZRcZRkRRsRRsZR{RRRRZJcZRZZcZZkZZkcZ{ZcRccZcccccckckccccckkkkkckkkkkkkskkkkkkkksssssss{s{s{{{{{{{{{{{{{{{ƄƌkƌƔƜΔƜΜΥ֜kkkƥ֥֭kƭƵsssƽƵνν޽ֵֵ޽ƔƔkνޭ޽֜ޭksƔޭΔޭ!,# xoY*\ȰÇ#JHŋ3jȱǏ Cp iuSDz˗0cʜI͛8sɳϟ@ Jј"SyӧPJJի[ׯ`ÊKfR>M۷pʝ Wֶ9ijE 6BÈ+^̸ǐ#KLٱʘ%ƭB x]5x1Rt,5ͻ NȍS919OYP (a.MdZՄksOR1eԦTzϿAU~3'4Ƀ@r ?.b2.Lqp/D1$U`zyH#B,4R }@WU<L88$34-BL,q,`PltFU,I) 0p&$,1ME|9dUy(50-*1qS@rpOM^642${!sTi$B(R9K笴*$s{ޢM~ʯJ'K"wO ]::f 793@fˏ?*N$ tr5ZoKdCD8ST|0aR ?CET V ؗ .qD2W؇8xL?~tұ$994I=MՏ+jɁ0@@Du;$3|l;xm.BEh% P(B˾MXdkI#`@,λ&/M B(A"dCH7A %nGT>:ֹ9 \`! k[A5oT&$N2#A -IA>)N> $'ynt,^A%/͕7 ԒCAe,U{C<P#Ű=t.GtI.7Ԁ3_4EdkBzIJ3T4u$.Qŗ/TxO$ Q\P,=5 Җ- yqM0 B!qZ`^6[ NX#&?+68I9gtb.,<@sK=Y/չX(vNe @-B pF0DP ^XP2-A`aHYK'~`?Y.;)+5E@OUЂ> HPu gKy /eEfK0GAZexAHADMY R-:PG5N5`Pjv"SZOJuЎ-Kז-_8!e.pDٳA B D)} 8k" ]([l֓^>nTHm 񶄼 =kVr(C@Mʵ2)Y`w0> K8nBQxP( &+Lv B"j:.{؆l[lB$ L셠/yc 295FDJLH*N5:ѠFAĄ bδ7 iD X/L1sLӅ0 ZXpo0s\<äHG28/tɅDI&qf;&DQ`3]B!#z= Hrczη#s}{&NvnT7"0AwpߘY(F*QT ILk(O9K)p 8AԁK{&] [8RPïg"닫HOwb&D*Q+b2!yΗ{뤺t0!8IJ7ϢXI9 pIT3R;񐗋4>ϼIu$GOқO};PK\/k PK6(AOEBPS/img/pg_def_icons.gif fGIF87a~Ԍ||||μttʴĄƴ|ƴμʼԄҼ¬¬´ܬƬĔԜ䔪lľԜԌ|~|ܬ̔̔tnd,~ĩʹӗJ֜ؕեܮJfm^x%D~XË;pa:`'cɌPL$(<},+sA4m;/F7s ɳi>_JA:}泪իVbݚsԯмL,ٳ̢]K-۷J.ݻJ/߿,aRN/xC+y2ʖbΌv3gj\MӨS^ͺuDM4lMb " NLaI7oУW!$+Q&?()r3\-Ls,Ǖ'}:m#n"JR Wuևp [c _veCv"DTmi}l+ BHCГOv-xX#yW·CfW#vKK@Dn騧ꬷ:JN:>;-!/o'|J,|WOw/oC=>/%o_}tGn)>'H Z̠7z (L W0 gH ȡw@ H"HL1&:PH*ZX̢.J^ H2 6pH:x̣ IBL"F:r$'IJZd6Nz (GIRL*W JM򕰌,gIKY2p< b-K,`(p@4` f( i4@:@sb`}V z: "Jtmg'O~ A&hJsˬ,ЀJl@% OON`ŒPPjݤ8a@NԝD@&J`z Hcy`T j5LvR &}Zӱ`XMy5N<Z6 (^SOF`8^O" ldJ։f7VRqRY) ] 𵯜<^x@ p-}d[^֬e-%nvvP`Xx"xI4ԨNsI4͝BL$g[ Y6Z^p%] $ 0ď ]öA_RsxuąMLO.؅S`dT(Sх[hWȅMl(Іfq U .L؆~bXGcX|hWjhH8vX:h C؇J8D(Fx%HyЊ 7Ȁxȁ؋< 8PƈȸЌX&8 ڸ ؍;PKHI( PK6(AOEBPS/img/orders.gifasGIF89aC9kBkBsJ{JRRZZcccckkkss{JsJ{JRZcs{*;Z!(Uw))1c19RZ9Rc999@@@BBBBZkBBJcsJk{JkJJMMMRRRRkRsRsRsRuRRZ{Z{ZZZZ[jv]~`bbbcccc{cceeehhhhijjjkkkklossstt{{{{{{{||||||}ބ煅Ɣ᜜Ɯ¢¢ĥΥƥΧħ婩ɪȪɫǭέέ﮵Ͳ̵ƵϵеֵֵѸĽսֽԾ־!,Ci H*\ȰÇ#JHŋ3jȱǏ CIɓ(![ɲ˗0cʜI͛8sɳϟ@ JQ8=rӧPJJU)u:6eZׯ`^ͪ)װhvs&>ʝKݻxK^Nf ^+^̸ǐ#K6{2k̹ϝɅeˠS^ͺѤo>mаo:cC߽WNȓH6gcMsn'kνC&f\]),X\$o}.>祷~F՟|49S *FmhA Vhf&l6}7`h-0(9`Ə@)D)HL6#>)TVY%K(9N_X)SbLtfjv tix dPIE$K裐F*9<+a 駠*ꨤAd)hj뭸zjҫni[ꮪ1*P,R H0fv  K쎊lHkpF3,2K+0: C /+ Gj'J1/S }3aL@0,4  0XL71 qlL7t: hO.D5b]B "Tl֤ͮ[C1|=c[uWlڷo{ KP. 4xet4eh3¡PaiIpXI/v<. ($ Eh,j2b FREq`AX;DuAڭx#tM BV2̥.YG0dWGDb*$^r%<_I/ӉL 5+/I.捘qo^+AP s 8@@<ܢ&aY(.-yY]e)fYֹγ_ TPa.'u<{J->9Ђ1w]IW9P t/t9ifZƛvE@dt9Ϯ EBPDMN$`W 0QtӾetYjfnH=ōpbnRҜ`mr1極zn1vuݶu79qa C~wX:#Hc/ &?aX$| e@ MпU۝İ@]LN HO:cPኦ3saPaLw:ԣuWϺM`BNWp_%[!:Qs *2 X8v;$T~)vɷL빻o @}oU>~}=uWG~r|0qE[U Xq؛uw;?G~?| /-wzUVuJuohyXr*@~WW@ɶl~ǀ(@x$X>}O/)#|*5.xz0h|3H>/vveDweP{~)ׂg&8T4T|`p|InKuKAY}0Wv{ c脙7UX4 1C^}؆EwuX+|W7qAXw8lx~{Hh}Rx0B|!uQHMhNjꦋCHX@pP;H8xؘڸ؍8Xx蘎긎x8Xx9Yy ِ9YH ّ 1$Y&y(*,ْ.0294Y6y8:<ٓ>@B9DYFyHJ NPR9TYVyXZ\ٕ^`b9dYfyhjlٖnpr9t! xz|ٗ~9Yy٘9Yyٙ9 9Yyٚ9Yyٛ9Yyٜٚ9Yyؙ˹9Yy虞ٝ i; Yyٟɞ@)i ڠ*);:;ڞY:z(*,ڢ9l6*6 %ڡ;J!Z^~ ">$~(*,.^m4^3^87<;@^?DC^HGLKPnOTηS^XNW\[`N_dc^h.glkpNot޲s^xNw|ޱ{n^舎萮>^ή^~^>ꬎ갞x봞t^븾g^,Ǯ4ɾ^~؞ھ>^~. >pnn-+Vp o?_ /$O_(ꮸ>+2_6?0<*B?VDFJ+Ϸ7NR/9_X9.L?_(b_ Ofh$j2rt_xok?go_~x?[/]/ Q_ptsO#_?///.>;?iMȏoG._ ﷟L X ‚gX؃hD&0!F ^DM&3L}JI!MH{>ܲ"-~{kU>Qt*7N7XkXa],wCm%5Y],Г]pRk+4^y祷NA5STb-1l/ahuֹ͕Q y[u}۩b`E"Dd;mT}tZ? ݖMewUn㕟7hƱ#B}$_ ciTG|J'a EeI,1@D=%5cdFY5gT;gm]vXF7'@t[uw"r/kUWz7=C'tn_e [g\]=?{YPsG^"Cs_`觧uT6S3 (MЂ\ܒ@*{`B;~ps` Ux .~` e?h-%< Oȸg>YjGD]ΰD&6щOb+MъW E.^JҭFH1 Qd, _1ocKX0G:юwcXLjяc9HBt![DHF6ґd$%9IJVҒd&5INvғe(E9JRҍqDe*UJ$%,S(KVr.ZҗL+Ys}%2/y1Shf49͠ %#䑽7B3|1NjӜ紎5OBΈP67MtB}ӟIib@hBq { b׸2F?zֳ2πvԣch"pä'5)Z0bLFyKq6P iNƇ,&nV,RjFd!N=ISzBi-=Upu(j]ږV*ZէřmeT ծi^z΁F$EB!buH\VձqVjKJej`ٸpc-ت6v"KRU;ȊvWoWֶr}OM" j`a'ذmbM+u*5UVں~}\+ݻJ_ qZӖ5vZwo|7[{0 a0b w [>wmne ]u pruhѲV3YŒ#fXs [8 m{B([V8pg=3Y?Yɮeˢ^wk0S7kGZuHb BDȈ(O=ݖA ׸ŷ!"n|.Ӫgv хkl̳UK0O=nynꮦW61Jp`'<"X7 ЀgCټ%. "h8!'qŊOۈɺ!aɆh8E{HՖMy/P:KƄ^X8MԟD"(F#v ˈIHnw2]ッ)}"yz3R͏zxFRd>?y,'Z^=KXVhs ~Ȗ>sjc \E!4t$ #ts8@#Bx8&􋥊Bc.;>%t) 2 (F2C8:)?6<>CY@~;%h@Y?:+#Rj31|HD8 +@ի@>x#= 6-7D l@W =tkD"\@ZEEA;;F EL ESbftghijtTƲûEk$q% |$*8kGwLyz{|G~ȀG~Ȃ4ȃD|$ȄdȆHH\ȈHCs<P<$I^AFx3 xTȀȜIɟYɠɡ$ʄ4ʣtȋƦ'ylTJLʪJʜʭJlHtʱ,'lHwJȮdKt˷JIDH$˼&GrAYp(KK|T{dL|KLV|$)B)bkp)l̰ M,MM``tׄؔ٤ڴMD G ,"M|{\zyN(ǤNς |tHLLzN|O,ODJ΃NOz%5EPeu] P P P  \,btNND}QONуJOQ}Q N5{pXe_} Pm^({U_.!N =^aU,߯G;58]݅bZbJɅ`p!._nzxa=_ o!楆$7c-a eeVBCs6bQ_8>OMnashPU_a)VGܛ;1VH]c^N]4ah#e{mamxae`aGNenf ~vdgevb{_tpGi5~fs(cXSPV.fm~fSve}\ Le`.eh fPKcu>6fLa$o&iMV_eiD]fmfi|@{~i"n棶i RtV_)^LApT(Me]nK/hXŅ;_6jrNekf e:JNF_n6b6 cQ6-жok6_4lJ^Aff.ߕi.i}kl=m{PvdРfjE~똦^m=X]mnnʵ^~v.>M#kmvfd-`Xf^^~d~evo̖FnginnRɭn쥴赶ӫ zN.Vz8.ozP\q<i'Vq6zhn>ԖpU&YUpq/.展 +,-.I\s-G*7Lxss۔1O<ps!\627'Ess3 ssʺ5װʞԶ묺w󎺕Wĝ)[lэyDVf<𥱃/gNpݣWyt|.q1% m: Z[5I\-rc8r8} m"z%^R}vE4ZaguwbIҋ%G&6I 4:]\zpYGtѧQyskyf0 u>f'}42֧p!*xywdNQg)⦩m6%U"j]Rdt5ԡ 筹)K<ʫzAKiMlkЪT"T[vjK .-.!]śՋKԿNQe+J-V܂m+b/1<2#3 ˮPMu 3lAIQ@ rњԊL|ӑF- A]dͫes[{]s_;WV{ulW--Ţ\džwz67_Evݪ&F~+] ؕ 8bs;9ʤ7(n:wgzޚ{,UQ; ?<<+<; >?~?( ?*cb!IȢ OfO!ꃓ%!0sުGyKS.p&2v xo ~'he3X[A„:$e~qRym 3!5qy9t|-A ;=f%Sա^tI8OU7ўu}0:qn\#v]k/ɇ?<3<#/S<3sZB/ѓ?=Sѣw`KK%><[~opYtEϫ-^:ai}e_,9NCD7/ĩ"3mNw?Wh棟j۴t q_!Ӂ!\"24h  v _1_~*+R,:L }Mf 6 >AD4U ܉LGla ʢ|Č,ʙhƐ P`ːGJ@^!̨`kL "4!bLOJL$nBD4MTE%yay,ělFEI:_,G,Ң'0N5b16b"2&12c3&c"# :4.5x0RbG`dQU]L''I(H)`t|F<*^Eabac`@Jӈ{\abL=#?Ȕc5^=#2FcFfc1r56GG!H$0z79"8N2T2_c<d4 z(A$GI/HAB t~Q#T!J,$@"C ȠdE>#HƝFNcXΝFO $ZJHbdpe7z7eᢌ܅He;HUJMH{T܇CSZ!0)dR&&TTc"V2E6 EVIbc6vd[BcZh.ZX$in W"$%K HD]"X[FDbZ%`;feDp_e`hr dBS_U:$Cn'gfJRjrdY"Y%kkek&|fz> \v^!r\s&+sFNBqz. s rbsG`udgrnᠢVexR(Dngn0'l'F֧]Hg{f5gymGم$ъdn,(I&dwex"Hru!s_)p%j荚!$"&3gZ)#J#6v䛖6MT"nnI| .ʉf)"8:fu҉HZd&Vf~6C$*#?~*DbtQ5K$Lm(\KJZb[Df`x驎.ľA j!ĵU߭rgB``L,)x /DLv ~~VjBԜA(MΰV_(R,+*2lfe>ګg&kBk+nvF+,V/\\/̄4c J V`¬Vk͊(%bЪmk !&ڦڮ-۶۾@,UB46bֆ-"|.ɭUl0D X-4^.-1ωn ]9^-40#Ʈ~mn]"n >@.ojZôQ#.\k#4m>/rnOJD%"]`"n}orI,DՊ- "\f.oƒ  ʒ5n]JP+," -ѦlFF0ʏ8&4QSkp9[˓^۬0#G1 WI۸!۲ժM1ocpQԄ' ; . #@P& yٞYq1hS^Z1qYRankI9U١]Y-٭IY5PmviXzMϊq=:\.C3 ##e tQrqiu%[ڡ u23U4U**د9*2&W2Wy+.m"_ O0f13 0m3Z3 r?r 9U= v{%YE8ϲ4W 2CE[/MpYf܇}26K>PItB+9)Kנ)37Yk0J%OZ-WF,F0:FGl#; H#su=tPAt>:ŴW`4iA/7k38V?[E+Erɵ0Jhm=q[CoIhq5Z4`1b?Z71'X3YKe P-]oQ,ntI_36_rv\o2lpng5m6J-v9ug_s_/+/쪷+nM6+[R\6shK7G[L+Tiyw?xQy7"8;uqfwMͷrsys atR I;s/JxjQgqpzkt r7G8x^881u n9 !f?.:{"hwtjo6y>ył9N97-9988"w mxl6>-ͦ΄;Kyy`9ԎR:&uWy_myz:Nzd `]/gÂ/N;著ࡳzo`GįR`6!]9o:ߺ{9yFﺿ98T+#{6;2sSzbk:kB( {ga6U~zBgG<$+H< RZ9ꦚꠊHBJGr2@pk XT'": N<ȸܨ<{ pJ:<˳ϵ;+m8"TMT9>ࣘ2b?z@vO_=afAևc'wƃBh:3ڼs*K0%co=|`s:O=#$~g^(fhB*z n>=}/]Ł=bM gޏj+fΗo=Ç*%e.(f;|j lOoxSLJAEoRbNi#g>b/z.|Rj;Jb> ?}Enf!#=g;@(P8p-v 5tF(QD"Шq"Ƌ]ao _7]`~1u?L[A\3Ǭ7l,q_ 7lf1\1A]-QO]M_K]v[vХ~.rwwz?lj]ɋ}ڕow硏~wW{s/+}|7hmQמ_yϿ׻G|A3 y(n@˞1 f\S,p,Z@x1A7 Vx ,Qta7уD'Seܒ68Q)lF9EdQxDmtcЂA\ء<ψ{#B$>ƌb)(H'rc!Ŷhы|$YI:1c4c"hO%Mܠ2XjClɲr. bΗeWYܲ1]w=^Z%5l>C$!P.ҒF7eEG3S ;?N1S!A)QPt-l&6iiKjn\AKSz4(DL>2&B!%S iCCR8aH} <%-iEI攋8Ϟӓ4dBʁ  5ذEYшv2˰#J[zLVs;COjRjt e+] ׭U{K)C:O;5OĦscyXV1"#I,RZĔ[@0b#JOjԂsjFW⵬{kVq+[vvmBە)Z:״u`,LYƙd#{fRlv:YJDRT IiQgm]awGMpڌݵlo6TB$%1IP7?n{f- ;؎&G ]@[9޼@p\ݯ地1/tb!B5}noWoS:N#3mixax{e *_̣->zhp~KX?__p𵏞#A8X!."c /g^ I̠̋,)L^@0K"Av@`,v/ @-1 (P$0p2PEpp 0 p PmD b ,@p+/Hjp |!/BZdnQjzfnJ &r O,xĂ x @:MZ,ܐE*-OGn`qL^cfQ%D H K(8ͺ+CW UX~vgq\fY%Q +1q  P|!Z4E  9 Hq]!QO ,vO #|1Ol%-Z.,O%a\ fRێe&dUp"p!%\RD&)a&Wvp," {Q,OPO2 -(0P'&(樎)E.oe)mq($O+]',m&JXɕ.$D1o1mD8K@\C+8Kn1QC@CC4=.b4 DE@d`x+66M U' 3"*n` CR@bAd86!#9yBR"9A:3?34M9W9+b9?C;2p$EM7M77S S\8a2Ks?1s1 D?4>C%L5:MD&8BdA"C?B,@'25A?O8-3aAs9s?C+b@6B?FA;@"bH)7B'dcAlA{B#GsA&SJH;t'1O;@bM_s<4MKQD4L4!5Q#JbM:%dOM 4NA3A3U4@{AAuBkT8?oOBBK5WtUa<1QXRRRs" 4!L50F?S7R*F2U4U?Fy'hz'lٲ zO cU)7t:ܔڦչYnnK:_Kc۷z^EmNtTVdw̬9YrE: O*JY5̩ތ?xG{z?kd{įyئ<{ss}nqL}|xS ϭ s^[8E {ZnZsLwͯͭȱd=}!=ƺW[/k GG (ge5]m{3YEv%niƯ/][=bz{IL}ٙٝ7ػ Oh%Qvjv|zks_݋8xd|%ۿW}|c\MQ{ݗ]zÝ=<߯<|Fu>}l=6Ӻ|,n}*،,5~哪1Wݽ=жr} l}0mj{>SlR_eV"!r#x]>_+ A A# a"vA 4bA"ΞjI I蕜yG=L,+ ;"BiVi~E^a  a>"va~`4a`VF{]L.Q!+?P m!_ŞN^tl@B>r6Q/w$`8A5@M/y^B <!60ĉ("cDZƎ$},ʂD|R̘3kڼY<{Iϡ?E '+v`eN1`#jR> 6رD=6Zf׺}ܳmw:N\:@ONmH=nM\6e, 38O2I?"‘6ͺc˞}S3MμoDtmݽ9 pmH+ytç[޳:ڷ>/cDS\\hdo.Ҭ?&01m(֑(l `7VpjUחccL{WW~*Ƶbpu1x];&qg^܈b$,ea Fh:QRBQVVF i%"y-eXMrYbq:F}Aw$g'YQ[XOxh Us~#)dLajaN *Gx*jzFrPURM=5"^8u:ݠ(CKpNT0c0NO%شƀ{Yh.^n0I֛h(Ss(j\&'ó:ODP.xHAvX{%OK駒U0'{ _y+ wB\"@ JD$a\ӺD5| JqTD0 8;D [Ti,aV^We2|^'81U,_,,<2gkdJHir;fTv׊7r\vL3WeF@σth3+~ftfEoo?{.xnPЍ޳ iRzըuOHKUqu|e#s||dWzN-jByĆuI5W^'}f=g9ܬUDFgengNhcvv w'rt<{[ߍUz71n*; 4]k۲wC4 hz mᔳX[+}vJ~7N3:Ek}NQxV:pofϳvC 蝅=]x/Eތ:EW> /k~?ЃVc򰕼lY~o~Ǽ \UO]c#݊ߣ~Kԯk/q'??+VWw='< B_%wrxY5A!(#H%h')+Ȃ-/1(3H5h79;ȃ=?A(C;PKgzaaPK6(AOEBPS/img/run_ico_sm.gif.GIF89azY?S?A@DMLHfMIEQ[YRRUKXLYT[fe]U]S^Q^\cadjIdondieLLhp[hhkalwvxyyQQQT­Ų³ɶ˸̺̻ͼ;ϿпJMM~~ـQjjfs!,zY (Y*\ȰÇ#J|X+V-jGcɓ(S\ɲ˗0[13G͛4g`bǁVlRH*]ʴӧPJZJ M6<"b$Vp`ÊKٳhӪ]65I9,i˷߿ L\7%^1"C \#dڷ˘3k̹ϠC bŇ^Zq)@۸sͻ߷ZȺVƼУKNͻ 'nOLFӫwW{B<0pxb}{w߿M[ S%Ew'K& `D (`|I wT72bc(+~A)O<`(@D(@ihSdS6|Fx\#TViW~OpAf D(!XCcdpƹIH ȩ|e5_pb8}6'p2“&2ͥf馜r( Yf8vꪬiM4 묲*靬H뮼믿~!8_ *$7V8&F+m4½͵f8)Є+kŠDz &㌃J8o4E̵ GSʈ 7C,;aD25` "H`/IJJ^$7Nz!&:L%(Z2"$vAZe.X,BF.Ib4t/\yeF\HЈ\X̦6*Lg8THpL/̋4ӝ\E$j̧>O~*6n`І:x;)QJD$`<7юzto@@і¹H["JY@ɩCǃ@H:Tp:MjCbZPTPEͦVծz_@vcX*6@&1p+S#ZUYW `;%@:qִa"d'Kٹ"+T V$+FKҚEaSGH9ۼl8.ˊjvyeEoZ Mr6װRJu̖tv]v+ MzЁVt8FEhI/x%);0|TtxU/#{hZ ᖸ杅0e /p5A!@ބpN̊RbG.dV"'L*[XƲaMaF,h.76[͛xs' ȳ>KDAKF;aJ[O&pN{ӠEj ЇnQհr8(MiKָuUl\vIZf4įm9@ȶn{&Nlvݖέkz["$~H{ H-!$-KD/nmM! GN|_X h%B8yÁE\%a Hҗ;<2pX'`'s]gO;%|pNם 48@Ze0 av/o[ϼ5B< 8߳3W'>oۙ Ͻw3;;Ph;y>;b5Ͼ} S~:@ @"0DoC"8X}w7~ ~'Xxx h$!`p(*,Ȃ{W| 7-:h?>8W\%(HJL؄MO@n 2X| `\؅^C(d(#8 !@@l؆np0pz Xɷ&p gc؈K`hPPu|ua8ᰆy@\-}8H  P r0'xu`RXƸ،Ȍ$|Pxؘڨjhp Z#`蘎ꈌy]؏Ivnv!6 ِ 8H`ّ  np&,s`-vP6y8:llh i#;9DY)wsKwДNyxtPVyXZKK^=b9dJ9O sЖnWr9tYv閠ғzz wmjiR)V ٘9Yy9ᖆyYs)mN )qٚ9Yɚl 9ɛgp(@ PJЛșʹٜ))gyA )j0Yy虞깞ٞ99کYLa4@h:Zz g zPA  HG@b0 ":$Z&zR(01 .PQ08:<ڣ>@B*RPRPFE C# a 0JNp,Z\ڥ^`b:d-h,kl7z   |ڧ~:ZJ ʨ𨩰 PvZzک:Zzjʩ ڪک ʫ:zɚ:ꬶ ꬾZӪʫ:ҊZ ъȪ麬ʪʭ*Ѯ j㺮캯گڬ* + ֚; {ڪ k;"kz#(;"{j z*3{K;PK 3.PK6(AOEBPS/img/pg_def_regions.gif GIF89a666bnacmbfffgofjjlls{ruuuy~x}|~}~}͙Qݲ³ԦôĴõŵƵŶƷǷǸȹȺɻɻǼʼ˼c̽ĽǾʾ˾˿̿˿̿ڴ̱v׿؂:ĊːAЖ֛HۡLPTX!,eH*\ȰÇ#JHŋiȱǏ CIɓ(S\ɲ˗œI͛8s)sϟ@  'ѣH*](ӧPJtիXׯHKβeiM۬bѶ)̹& 5.G5^9a~7M,^Uرg'k\yrg͛-M3qЌ1 eԋnhյq&{e܍Q>Mm!'sl᪅M麛\8щw/^r[t[y"|̑RfGeyTvaz[j)wm7~߄$rTqu]d梈ea Xb\5#H!{.c>\PdTVєVfY%O`)@jifen̚l馛)̜xSGygs 蛂ڦ\JGr&裐ɑ™杕Jڑ3v駞&Sh*襘f**n::= hzin ꮟ&%fƺfBjkqķ+& Azl,oҚKk}f{+*JS7lFlj;NLKeo,rRf* _;G&8|s za*m++njé2kTWmJɓVt3^fK3bKۓK. #0;?E1{0L #T8| VpX4R3H!A>٣ SB}-fH 5ߩU?u"`2&:\^4H*RqϨY"Dtы`,шFKRP#*lG9p/kS.>^`+ IBBo["EFmLj$')I,,id 4@qz Qt#ʼnVҕGEҖ $^r, Ib2eZl  MiR󚟤 0p&7U&x=Dgf1d5*̥.zo&~̒@JЁ>`eHcBSW!A ъJ%4zXĿV-ALJW4 Le Э=vӞoPJTjTXW°T $ՆQI[!ڃ XͪVRzuTU9*p6Tb]_TqN*YXȫ^}5k Ѳ^Mbi,JS5U` 8+^y6W9(2cZF>KfS1ж,dQkۮTlr,R+. rnUu.Ex7]Hu={ Za/lN`a﫤 [pE`pGL(N 40g4αwxL?L"8`BkQ2qL*[iC.{2,e13 5i'L9j3z2yЄ\:l 1&C'ыZJ[Ҙ, -]p QԦë6 C @s&}gָεw^ϛ @spAX;lfCAl# 773|щ^4Y] p)N8 &q Fwm[~VC vB(3&—X&W>4r<9Dn1S@u5`:p(6#How8 \\0 SўvtKOσ>t{<1QG@Sxų go#_R,_>_:%nїݾz c{w{c BGR0 Ά^sS'dWםiWkO_?n QxOkcGv& ʧy%Xrzgzt}qvw}g֧zo'&~gk~{~ 7p ?` '7*yyW :X :r; }hgzwzه&~}F'%8kW{L3{tQ7uUg%| n =@oEgGL}K}O(&'~$\V~(X`40;`FF ȀЃ8(w(z{}~؊}ׄ%8xq_ހ 'JW<j|CHP +7 {}ԷH~wSX%'؋ @V]݀'uhP Ϙ|(sIٍw'{&t]wސ%W E0(`pB0app PvAɐ &1B玲X8Og  0P %0uRpp Phuy@j 6`/=w?_MpI0"g/ppY yw z z82z3iy9 O[j00abhD0DiUivڨehSssdzIX}_֚ٚy9©q9Ʃgyfɹifҩe9Ydycٹ9cb9Yby`鹞`_9`yHٟ&Jcp6`cj ^2%Z@CcB &aá#*`#dcbТ. %j0Fk %&Z?`z`)j dڦ_¡ʤ?Zu1ikZskڦ~!+j W/ڢ]zb_P*`ʦzl:Hʩ;cEZKzf={=(60ֱ!wVzV{Zk\۵`b;Ybjlfh&l۶vku[q{g@@c_e*_g}c`bCl+U^B˺%۸{ {3ƹ빾[HE%ow K˻k[ bK{⻽eYd ; &+['ƻ;;k6c+ૻlҫ{Knַ6۶ {+ ;K{h6`;Zi#p_@B1L(xQ!&J84|ცY>rsW>b&'DA1SB|-&&L(^͏!FPAGniqA2J8 >l 1҂E$B8$ ,XP6;PK@fPK6(AOEBPS/img/css_finder.gifS&GIF87a?:ļ̼Ĕ|ܜƴ|||~|μԼʴtt||$V>tN|lԔt~tdLrĴLnl̴¬tzt̴ƼĬ||´tt쬺μdfdʼttdnd||||LbܜܬԔ䤶܄̼Ĵ܌|T~섚¼d|Ԭdd\\llll,?:H*\ȰÇ#JHŋ3jȱǏ C>@ɓ(S*˗0cd ͒+gɳM9y OA*iɤKuTթT^Śׯ`z(%_]˶۷pզulڸx[޿nKnÀ_N ;Q2k̹̓ˊM4Y zźװcv]f UͻwڷsMnnyoK']gWZ]O|x]b/;{E J&qT/~/oel.J%A, 0馺Kl 31IR+^G鑫3K\0;'1sE7/KK2 !m@Nsll^6W߫(\6IkLtN RSL\7cΈQ_zGn6qs7B>޽Uo|w>uI䢛nRuY=ܧFw7ȾV9/J8R7/?1{}Fo-a>u홣o9~o}T>q͵K=A<,e9]PJ:lq^@A+VA{-aAt F,;pz) b׵ BfP(ASW:;nt b@E+nd"a.zcB2V7c{b8r_$bԂ1h6[(5fr"'i i$>HgPHp|EO|$Ae(Զe[% %RLCtV,)i˙ނf)I͔X$x`"{AZ7qj':y45u <"I8fI>NXs@M!B꺅6(AI& 1(B*R㨈%JS:Ҏ7'gEgbcJUӗ^)z*łEm PZĉM3*Ŭ*N3M*^5Vծ25HS:UV$@xͫ^׾ `KMb:dVk@@z hGKҚMjWֺlgKͭn@ʞ$>8PMr:Ѝg{NU5(tz x;4nkP@ |K%-uK4@ 9l~;-@ [ΰvv%Kz="nfQZ. fL8αw@1yL"Htwy` P@*[TN-q$BE'lRAK/C3:SV`E+\W$oB7(Dlb):Q S}M,^?=D!&.B N 5uRV:ֳ;k",8h]YF;ZaA':4@xOΧ'p% Bg0Pk f-ozaP/٠6-dBH%ꪉl^9{e)'wǻ ] Qo~D"'O (w F'PD%*q80 9 dǽe7 T.|{weg1Awϩx;p{mExjV H$눈d6%[ʇV^''ovG N2>l;.r  |,x p  p# z^l3)R[>OK2ӛ$5 B|~دe{gWz sG|Ƿw}Wp|Eltӷ0E}Gv`uZY){}ǂ~%*؂+0<؂'(~qnxnfS',HygyHXEnGXIgGl|8'&|FZ p- |tY#qS/}Q釃3"57H@~YXvx^(LȈN؈8Xk(bXvHfHd |v|   @Zpv>(}(xR舑؍HYqz'F]S N臒(({~ba\Ȏ|`@`0sB`P|7UxZ d?GrptzȍMxWZ؃ 28x68ք,-- 4y6ُ븓 8y ZY:aqu("Ws8x(Hb"z72 wY]Cp j99掴7Av8`y{{Ry)I؆9Zl!r0tPv0wdBɖ,9fk񧗘e9xjS71)yyPlXn?`pzx j93GI!I)i^AyhS韓Y XX`Z99&*ʢ|sِ7ik6^,_i[xZ7~\r^_@Z8ZGJzc~[*L꤁ RJ)fzWCbpa b0deЌy&v~$i_*a^0UZWZ6POJZg:ypmJZY:byxz nP M\@S0ArX)ڪ *j `1jYJKMOdYj)qjP''JU0z\zٺwz蚮jFpD:P;=?`Jr@BP+kD@ů]1{ [o E`۱{H)@kh fsZ+p,/@bwj*Zd1 3@B;D[4P6p8@8 W4Y! #:Mֵ^I6d`;dKVL%`Sen[e)%lRDUp a[{[u8>׸>NKB 0 ۹+[2QaZ ;4"pt6ۻ\[MTR ʻۼ5tY%Q5Y{؛ڻ۽v:[{蛾۾);[8{ۿ;|̛ <L| A <"<$E%|(֥,.2\0<6|[8<\:@B\FLGJ\DNPm؅ ڶiM"))ow ר=mׯ-=]λMہۣM֢- I8mݥ7mؕ=Ӗ̝޴נԛMՍ }]~_̘\~ {^ n,(Y->0^2N:6~S;c BM=DF~]KޠMO,-UWYцMH!Xͥ.=3*֚թmܞ }ߵM誾ꮾIܗܜ=ߍN⻮_nb~6.2L׎.۞,L"~ NN) nn.$n/"L/:ܣ, S~Υΐ9 6q!o^Y4/2яR4 =O>(Ԥ 33_DOBO8GeF_]]onZOIJBmՍ漭1M=mVOmn{q<~uݩp>MO|/w?Osv?EcN~l~Ջ_|Yܛn܍TY؁׫m#O&>/뱞n>0/xm=D%n1@taA^$pQ`ƍ= rǏ9mfJTfѥGu+JXM:TXe͒ @mݾW\uޅ޶' X`NZϭ7V:qQq&E:fBJƜرŤ.2㰙EMYYڵͦ]Wn޽}LXx`⃋\yG3h̓K%;~:FS\qiճg~{ۆ"n[ۋ gH0b%TmAcΩ.bS (.A2Ԋ3J˪<_ĭRDEB/Dz˯G2ȷ "Dһd&(*QH-K+S1k3L5\4(kS,N;{38ܳ4P763QEEPG4RI'TC4S/SO?5TQǢ/SOE5UUWeUW_5VYgV[o5W]wW_6Xa%W/4Ye{tTg6ZisYkūi[oA[q[sE7=%]lU7^yW#v7Yx_7_/S/ 7Z,8biK ^`pXbG⊵ΔTb&f4 SL! ~/跀θ"Ff4g$xBi =R{;(޺Ǖ[8 ;gÏk<G\pW4rR\7rxGhǁ`H|J:{2&NV;)7KJR"HwA+h 5ܣMضMC ӊ"OGQ0A2#Z#x;x=j+fd%3τV48M2~?^.3Hl0 ;f*oEqiʴ$xB=IKsxtD9p1F_HERB%Jeڙʌڨ'dCPGx'#FK:L%ϚKTS b*ԑ"S/>SŪͪjUEE5_Vz'լ3]պVխok\*BծwY]WK}l`Wְ"aN%YVvLlf5$nֳMgA;ZDEgOZVv-c_[v-_o[ޞu.V\tE."+8W6׹υnt;Xt+kr +) ,wۥk޽7BZ/{^NOYyR NdʗyOb'0y C??o#&0 SI _u8lVuP[IsuN(e 7pv[Nh ^qjEOR_ K׎,p-|m= /)K@Yd1fmGW]N8j6a\d#3r{A(nco~P5m&5%Qrv0Y}=Kjb1o?lDL+הx쳋rZnzkD;w6X*6φv=UIRb}m$;R6mÆ[p6hsKvf ~oylOo}Lr&Y ߻ <iY҇$QsEic.B1/Yy9#.=IԩIZ\濳y܍sVLoӟNѡwq 17]OטNk>Q)g0P07Y$j훢;Xtv;w܃' /n'˥v%?yW|x욇j発xns^#MWe=3/KOTNMT~H`&+'xs641kI |q*%B OK:)11C"[-3KDK(~ #@4@rAEA:($DB:}B+㱝ˌ#2L39jDẵ2* fR;3B+p4%DBB A&\?i57*t4?Lo3#&fF+A|DY>4l`,Guv$Er|:9Gty<\7wG=ȁ},HasȇȈH:H|542HH\ɺH|DɫQI-Y>BȖD ݋,C?B0* \l779JS0)/ܙ;Gb@8Ȟi 38;8kƵd%,1##)@C$[|+KJqb7K4C4$ 0CӲVRK> ;sZ4 GΌyBG1BcE,ͦad|0,ĕ攻lٴ驨$Yé۽hTOڿogNGnKONiO(z|q ϚbyiȉDUeP_ΒD %PuE E PsP1I IQ3>~>4x%jc{Q#!7JDI}J\; tN|lԔt~tdLrĴLnl̴¬tzt̴ƼĬ||´ttR쬺μʼtt$$dnd||||LbܜܬԔ䤶܄̼Ĵ܌|T~섚¼d|Ԭdd\\llll,:^H*\ȰÇ#JHŋ3jȱǏ CIɓ(Xɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧP(իXjʵׯ`Ê*ٳhӪ]˶۷pʝ x˷_vK:^̘0✊K.gɘ YsΔM4]úװcfԫgͻmռ ƶMܸ+_μ}>u5q[.;M܉7MfN f ˟O0}6|g_ݗ~h L0F(Vh ˀ *H $(b߉M"Ä06xc;)(\LV1:)$TgdLkm/0Z /Qq̃zɸۯ:pǯKBL0(<:E2l~AK. r3 A缳K=L|: Z0K*\wZsV*|`Hk,vl-%iK\*n8[,4.kзu/+B h3y.|82k-^>`.^8遗sG5|ߔW:.gX4B1=J=K߇uќ/vƧ_zCJ#X;n9MxwmB筼=۞GXcs[@yaT뽰?G%Zl%LaH= P|!2fP&~0$ b™H@nSL l1a8)7xǚ!HGkBҀN#1 jϫOވ }1$8<5z҆c (RƘaL.IMdVY  w5"ҐSq9ET!3LY0Ph~2 8{RJ Xi>)Y7okNe1tDB`H<; O :ЍtKZͮvz xKM/yޣk(@$0ͯ~LN;\Zx( L GL(N!\ 'g0<8αw@6qWxx$0;PLe8X@g V4bUN6؂Lg:xs'@c^9ˀF鐋gC.5S@J[Ҙδ7N{ӠLRWԨN;?̂-gMZx@ک+X"B Y;tSض/bnaPlAYuӳ 498*P"*F V*vS킻YKi& 10&^W"X Mnw ;(>A wHQ L9MB%AEa W0ehx=ru ,`OlsAaP+I3GYHY(0} cto`Oxo@Rz}}uxCb^L N@@Cb GOѻ"Q2/zw6=i~fB+ſ&D́ HH2% {_Ջ '0] "} _~?ᇢj_Es4pE{'{|~M؁*8|gƷnnX_g@~0 @ `}% `?}~%~rF~~~~ۇ=WWXxׅDžTR`kb` z0q-@"H|&8uė|0 `_4|cHB8JDX_FetL؄V~8G(dx^NJ(xhhPl<ED7{~vy8{B'_'EY2 "ЁX_p vHʘXRԉ ~x~t0#P i ؊x،ȏɋ^ȋ )H"مcȑHpm(Ը~ {9t(h@d_"p08}`s/0I8_a@~tIِ YY+8% (X8xgؒȆ3I=a՘cГXhi"b)* nM+hr&1 xXIxPЂ،I $i) xtyGɘ_ًIHՉ_09`ɗ,y4iY9qshؙٓXtYI:uZO_^? #0gy꩝Źyyc֖9+!Y5-١)Xع#bx_? vY8Zi1GP =pywh_MZ饫Ki z| uvpwy{ Ez`9$*Fɖ)(i]j>j苄)ɧJ LQ'Uzt9 ]j* j_ Z%n2r0 ;`_ٗ~z~J*J/ ȭi}ɞZ)BZè& xCg(ؤk {Tk_hj0k>$Hj)_mN!46:˪?;A Zx]Ԫ_`RW0*7KXE`hmxpK\G;NOQ S@c+B9aU`uxiYˍ\pJ @kRG?@B0o׷!9AE`؛GqEf+.J0[{L.;#PҖ_01 04Ppn=Fs[ 76p8:<Z2\<@%`' P,.j4i*fk<.$V2_ `!2R<WwX,xnCC9pTll,],Jb_@|~ppDVЂpȌkȂF,PȘɚ\e#=Pd5ʤ\ʦ|ʨʪʬʮl^T˴\˶,˄|˺˼\R\&<|<Ŝ <#\؜Ѽgr\|<\|=_,ܔ=| =]} "}&} =*,.02= ]'}P4<>@m8]KBJLN-D 0T1a.50kԴO Phj Q4R}t-/;s-ַLk-g׀؂]oSׇZMq}׎׎]הIz|=; ٞmp؊զ؍xͤ ٮMٕ-ȗP۶ѵй]ѻ.}@m۾@۸=-̭ҡnMݨ}ݪ^ڑ۱<]ϭ]l ӽ-} m"]ډ]ݦ]բݐ .M}½о]~= =཭ɍ '#'.~5n9mݩ}M2ړ-<4>"з]T~Z.ʝ [Q~cM\~*N3Nk^ ^t-d]~.FבK ,-<0~z9ޜ^+h摾.>.n{^آmէBNݶ\=XC^[^c~aSn⥮ˎnon.!N85}>]]Ns>ь}mڞ˾K6nn!$/՞n'_3!:ԟ%?6/)FHJHLFP?T_V~QBb?dMel;}hjt_vqos|~O.ς?_L?_΁'MEa_ɬ%?dɰOֶ?ȟoOƯ?ԏ21ϟlͯ/_:/~;>3?/#m/q@@,xP<1 16vQ5hȔ*AT˒ ?rDSN=}H@P(ЉRM<4ƨS0 HWeZ ê]ܶuҵP-޺oxnڿ%\֯X|jŝ0S朖IlyejL6} lڭc#;!?z׽Ǣ-xr WWyȑe.}lwo\ۯ}ßߖyuά"* 3B¬3T%R[ -C 3 mFD0T0n<.QK}LOH!1S"rH)%2(bϹ K/L-#P2!H'mb0$4=C&ZŠs1U(DDPjd31&3 F͑G-Q5SSCM2Lȓ=TzXUS]TT0t33 GRm=0 ֧AҍC[A *}T;%9vK1v,IyU-]toS*Ԅ\2_!!^"f+Ye"CԤP[ YOx_'>s^SXya*Xר-XMʚ 9cߞvmDvnuG D[EGCgݞʹV#X`]T<2XhϟV͓V<)vOl8h)z;QSx6[o9;gO^pzƪ*߂|G?\?t߇?~_xMbM=πD @R`%4nMsK4AvЃaExp5 LNЅ/a e8C~: uCЇja 8D"шGt 6щObD*VъWbxEы_c5,ьgDcͷэoc/eюwcG>яd 9HBҐDd"HF6ґ$+x?. d&5INvғe(E9JRҔDe*UJVҕd&9KZҖe.uK^җf09LbӘdVLf6әτf49Qf6dvlg8W#qӜDtӝ99OzS=O8ʓh@O& Ԡ?P6)uhD%!NԢ=(D1QfŚWPD)>K'RQ-#L'SB̄pMe#3Y}*64E7ghIm=jo_ VD=*.pGxp x%>qW❔%55qwyȡIP'GyʩnvyYho\0y Hs8yЁs@7zMt7HwzԋrWPzQCÿŴr,e:zmu"Yg&*:3qN'|"K]TϜkloag~zUss+U3vZts9Yѐj#ɍ4;sߠMvr6;zZf״[Q SvP~c {1T M論anvtR0}m[lZ7y&y'mQ<z,/֣z4K;/,B1z@/+??}.AςCls?2+,[gK4ț-Gs@mr,{ڃ4ߊ<3ClʶnIRD'@R4:4^$Ec?;h;0ʞEX+9kERJA-4{-2A4T=D=$\<%G)C:|;B#s|ŵڼ ˘ٴVL졺ľHܡ*Bx뽴@(@-$ 1L 31<>B?ق-c/ILHBL$þ?ڀ? 3.:c.c<9@F>dAF%B~Dv^dF^C~J6ӹsYΗa`71(2[ٿ /³W tRfRZ0e-Z>XFU4ӼeM>ehY\`1>-]a8 d&g]]El0|Fe^k9 OO+U-&su=h`k>j1]!t-0۪^Pc75h^^ fh+tuf$K6Q4Seeߏԕ+%Me\V8 -/{F0͞1SjF`@iһO)>iO}*S!TG!ZJNH(뼮HLr((&솥kIf^"[Zvl;lU_jZll'&Fmhlާmцӆٖmfb1msxm۞m6JRnAlm>nfm{bm~?NVm&%>om&цoZ~'pl$8?ptpp>\&MdɝELe4)ZaĦEMCebn-eZg `c iČeDL fM<=hc'?b'tFh冖Y ?G$ @ _h[ Nsۦn\۾ӆrq*\ij5޽^lAq\sVf9O:_rL(si&ߧ_Cw\sDG~tI']LۅhsR41ߦ>맾&6upFDgudwudNDp ҡtr[4DmV϶ĩ.vF7ҖsUoocorfpޥSnfo>HoGkW7Nl]Hd_IGG!VzGudw7uF>Oxwpzh:xcOoZyhjyooyF`zGzl"zmoq5Wxgw6xdzG'yHt.yxaF{GG{A#w{m|'cpSki_(~alWV7wf{)/jgx6i+TңE0oRG|﷏{:^gU-n`W_}bo|vv0gH|-/6F 0z2Ɠ{Wz}~ChVg*5DkO~hq\ ( DRh"ƌ7r#Ȑ"G,i$ʔ*S@Q2eY7u93&N?yjgѡJ2m)ԨQ HmJUT^3kLZ [,گ3#v][,T+RDH.޼z/`-_2 3aIc>Rl2Xb ,,跞j%-2j͂5#ʮm6ܺw&ci r '׹r穧SΖny-aW/=ӯve g * GXpI8!Zx!! UDHفx")o7"18#5W9#=zbA/8$Eyd8vDCU$QJ9%'Hj%]z919eY%i)Y~&qʹ_C '}f :(z(*(:(J:)Zz)ZFwU:|mz*+rz.*ʺRsz+:*F ;Fz,zE'J+Z{-02kљv+jٚ{.m$[:Y׻;o{/F/k |0XXs%'TUֱ쉖^fU0!\AbA'Kuů[F#sLR*'aVqxe!0O 5 |Q-6Ewռ6wkX5Vut{]_Cq\vb)xJ 4!nDu~[=z~7+>U qwl36㐟-9xOWSa/o(=Tꫳ~jmz}=<έ y#lz޼5bmjfV]ܖ&Ow_θ93-tV@-Q}%R2ew | Ѝ|  aH.W{ rxpZ~{!p!E!ԫ2чt(1Lu(5(ƪTsV|JX%z(v4=~# )A Jkw7-p+-oⶹpBrK:I.vC]r?.xwH /z-@}l}|_t޷~0 [ ~0]?pr)\ad5vc-҅1[ oxfuZbϖ%і2h,^_ ΎK6hsc9u<4яY!Nkd%CM*e*s9#Vrvx0Ӭ`3j~ټS7q3H\g?Ё mMCڤV40x>ҸYiKә9JOz5($Uծ~5c-YӺֶ5s]׾5-a,.-iԾ6dlsۥ-l{>ѭu~7AҒyӻ7}7.?838#.S8;PK%%ZUx5s5PK6(A!OEBPS/img/breadcrum_creage_pg.gif=GIF89a]@@@ffff!,]I8ͻ`(dih&lp,tmx|pȤrl:P1JZجxzx\z3\ `K1}s8u0;v{ =/ .},~-~y{hɒȎͲԾ׶КXɼఴݶ똄T#LpnV] BΉݽH:Gaɇ(Wbh_gwU 6gN= Y&W`Ҕt7rjÉkJg+)0Ϊav۷Kƺx󮑫'* LÈ+ְǐ#KL˘3k̹ϠCM:ҨS^ͺװcG>-۸sm N2ȓ+_μУK9سkw{[Oϫ_Ϟu>|Ͽ(h&^D(Vhfv (* q~,0(4h8<&6z+hH&L$CWdTViXp)z7e`)Gn)\暔ڗdiu^i} hti衈"'ph.0ɦj:&(iZZin訤㢿5hF髐)֊jꮼ*ojr Y~fku|) (,zіk.2 ~KdΞk:ۺa컰;؎{"N&Rgjm˂@ w5*ڣq|Ƞ\2(ǜʶ|2l*͵@-DmF;L#ʳl6StTtlQOW\w`-dmhlv 0yUސe߀Kw'>7xk?.QnE;y[y;>z~zz:q nƽg{(o{xus)lj>leSm˿奥m&f_/>ٻğrs_qRZp_6+pBV3]Kҧ1]ǒ+E4UA&uz@I_L4 vdd#Ɇ9 ߿HB Eܠ$%ȉ<"4R2?t. с*R[D4q/4#gD5"maF41uF6э~?q {|0S H/#3:̣>IO"2d*QFPv$WI*Efv%MG9򔰤(IMD,iLbRoJgP<31As<2Hp2F&/Ip澬l/yL}:|jR:EJV򲔚h4OgH:LiNo7H8R̔7_9VLGAԕ%!JTRZ("PGŞVn-KZĝ-rf-rsV7nuK[6rgέoW߭-h ;N7Eot%tr `7͍}`#o{akXbW:$,u [祰U|%5¸1oo[\'89~L{ \B/d$ǮEoe °=qtYyM_Ŭ6Sgns,:'v->πMh Ј̡h,ѐṇ#IS:іt3@s~4,Q۹Ԧ3SUZͮ~bc-kҺa=z4{p b ?≠16%DPR9վiOڱ6#md_C^$Mht_kS@aO  ښ`5>;^F"QwЗ7[ߕs<֟Nrb@wl/޻Wg102n=Kρ[gDk]:PzDSsV沮q:%'f{pNxϻ=kO;;<?[ϼ)/{<#қ=dnF;8ԟrk{+~m=8ݾ7=f}^aGC}h??˯#՟7ȗ~x}'~ ~'Ww7 { }G}y"#},z2x8w6<;؃@?D8~ HJv22E8'Txח\zV؅`xy_dxcXhxxgv Іuxpsl7 qLJt't|:gw~s膋{m׆(yGphz((8y!vv(wHHwȆxhȋx}wˆ至(X7،ȇhX8Ԩ؊mljxI8y7ۈD)Yx,G) (uOJdّ94N(&iQPX*9x#G{'wȗ  (yQ)3YgNJN:{6L@GPIɓDiw0uGqDlVv_)wavKZ׍PI|UvV` 0_I:dgj9lIwc9sYq `8yY{g=nIt wJ) 9}2ق*ٙ)HywgtvcIuI|v(Ix8Yyגكٜ9Y9dXڹٝN%iYمyٞTȞ|99q钢IqəriZwmYy ʗ y7vI%s::,jw&ʟp9ɠ zW颭)X٤N Hw˩TVzΨHb:d*uSbhʒjUئn*/ڗqjpZYȥ߈vɧ5xZ~Zʦz);PKϟ'B=PK6(AOEBPS/img/ir_action_menu.gifedGIF89a; k9skssBJ{{!k99!R!B)!))9)kB){)9)J1Z91c1s911R19999R9s999B9BBsB{BBBBZJJRJRJJcJJcJkRJRJJJRJcRsRR{RRcRRZRZZkZZ{ZZZ{ZZZsZZcccccckkkkkZkkckkkkkkkkkskkkkkkkksssskkskssksss{{s{{{{{{{{{ބJZ{{{ƌΌ֔kkkkkkΔƌޔ))Ɯ֜Μ99kΥ֭省kkkk֭1)JJZZssֵƭ֭))B9RJsƽֽƽ޽޽ƽcZsk{{ƄƔƔkƥƔ!!1)ΔsΔΥ))91B9J9kZ֌֭k֭֭֭RRZBބs޵{Ɣޭ)!J1R9kksRss罄)){{clƽΜ֭B1R9cJsZsΔ޽s9!,;  8ݳg)\ȰÇ#JHŋ3jȱǏ CI!(S\ɲ˗0cʜgɳϟ@ JѣH*]ʴӧPJJ0Xjʵ+A8KٳhӪ]˖Upʝ lۻx˷_o LxA˸ǐ#; \.>3| {ԋӨS^ͺװc˞Mmxo4Ti1+_.0Ra|z>6¼-RO^& XϾ .y'-[MNh4'&(Aq߃e^[V&N4ðᆙt +3aOx*2AÈAH8BH k᎗ g~i'\>2FtB#5坈eZ6 Zn!+]~yX3qBX@" a't&WyBj*g䪸(Z bRʰ3)Qs 'GJ8[UgܮjQ@24zЂvwc ,TNtNKӯnI^@{JOl4 <+$L)tfmՙbp0. Lh:k \lOӎ:Gdr"R(-)/J*LN8EC&J1s[P͇t8+=p\3;:j K8w윃2I''N' DB&F,Rӄ8sVl&\/ 3Péek NStdcN7l/=/#E*NV!+Z྆y`nNOS8U{O& h &hN>ݥ`+VG%e4N Q+CQ[i׻ⅳс^q G D kT2ͽO~ߥ:H#E< 'ZqOv06@!a'g<_3@(j19,ED9+a0Rr/gXD>}h$N0-g0̄oZדv\ D$V85&Uq78F=*]eJǎe˄(;lч"Ѕ=q#Xȩo&!D*O:NfĿo $@@?a4@q.tpLgsMzgħ R+C,ȯhb`$8̂Y3/[/J\{D2G=QrP*OrϿX_x05wG3~CT5>AU})؁ "O x s'LKTw70(V0V5IU8|C3n>8yTe:/TuPR8TXVxXZ\؅^`H~)&ȂʣUPSPC8$R<8?7/58nI|H/hB>QD xA؇@Du8X(`،xz4xؘ׈xL 8PȍH~)a~~4xt~/seȊ1TxG#G(9YlKcɑp @ y(*y+Y294Y8-bxehO;3Wl#hM1 i^S^`b9_yfyqLf0gU >uLvy@&_ɑ @3OgC"ٍ!mјd9g0n)p)ty{ٍ~镃镉َ 闩99fٖ)iy r3JCQe(jG3X98m<7tkDCPBz3DdYYP[ ]Y9fgɑv鞖y) 4v 4jp@ zyɑPz) ٠癞jf)*Oi P) z ?ɂd~lԃJ꧜8T:a 3FD'tKLk^G\ڥ^`b:\x\* Ef] ]e*h*I`_ {Zzʧx*@3jdʦg'mq:Fw~x:]JJ$J:jzd؅ط[*:\ @]Zʦҩt꬟j J^ :ɊɊj8:zOiک:Zzʭ᪯ڮsj^ (! K^;[{+J^4[![ְ-۱-;0[( @в ۳;D[F+ʱA[#*۳O˲.;KBKU۳?kဳR۳W{b;C۴X'M;:=?jd{kf{L&x1+0k5۱񔴉5}[z+R+|K+a[[˸ᐴ`G{I+m{og8t y;[{țʻ{@sۻ5؛ڻ۽ދ;[NF曾K\ѫ\Hmu;[{ۿxm^| <\|@BfB}8LڙLSqW?h Cma:@ς,Ӻ I]Hƭs X`ڵ= ]Im܂ﲏF2=+_=йRڄ<چ\|ڸձ6mP-۸߾- E ?S֝\҄8CC]} M}ݭI28׀3YmvpG-CO~I~\Dt( j8Dl7+MaKHP5M"(M?:H]h Q)2`]EڀN(mSGA}ά:M8. , Ԏnц!Olⱬޒ|$..(Ў .m7S̎qΎi.>N`ߎ͓xTqG^Qm\n/^ ooϺ, H ' a\tz' yҡ 1 w#_? +^2_6(0![B^B?xrc ,ТI`8*/V ΂ n&Z do0'}m!n RqpyO{Op?-è  C@@AqDykOɖ\S`|`R/FOƫ/ʊHʯOaxo~ɇQL i/`^l3` 8O3̹FpR=ڮQ#?qG; DPB d"C)\'p2dXaAQal#UIQA ӧ`I)(@)̎DDK]ԩR;jO]~Kp?e^lNZj*qKG`I.5 I+ W2I&ERjSήA4JjF~L=Yl ǚōn޽w7P]Q@N]ڪѩOIGPQ%6ꇶG9&pJ]:'BKTJ0GZ0L$Z.$kc+3/ʬr4DbEj2OB>%ʊ$XLҟ%Ŏp%8F TC1BuMKc2CO}ڑۦ`6p ʲҁl7]}[,k\(ͬW_t%R~]nl2WVaFQX֮ΈD΀IHրũ?7f6MrYf Nޚε%bGbnx\k.fYᢅ&S4Z1>so> Fij{l} j#M8wYlXJo"d\e&"i΍Faqw'nz᢫ Lix &nB=yʑ2'us=|BNJrBSZM;Q KK*Al׬Q!{z"ɻy{ dG_2Rq@ r"{z`Qwp^KIa=xZ*KOE!xҘ& {AY*뎽57ո6 e滠NH "GY>',~qF9ׇ,a2x??U5'2W@@@аt@/ʾ-2,S|h (} TI틃L<*-&w !$"4#$#Aܿ'P„,¯.<(1*$C^CrH3$/tCLC](74;d9l(b;C.@T3)@AB4Ğ$Sd;T3hI1C˴dq;L46l6;p;q<婷j7в| Y(;Yh11q/ECR5$.۬ Rj>18k`#cS0ŪCE@OBE>}O%}º:J͉R})QڊxƎD-X,mBŽ؏ِّ5'?Mj)ԁ]ĂmPu,\Yӂәك@Yej5Ԝ$UQUYE$(@]ERDtڢYYY}Ğ򇟪4ZϭJZ .Dڵ}YzrPj:Xd-XX \,JI3ךݡ'E\NE^d k1DST, d<eQeǝi\5caC3=沈Biv/  HW XHyEE5xytBa||=G H]0µޅݤ=[]JW 2jݠђvX:4]d2ɝf`q|"Km 2$ ̲NN,PJ͑1qY]fmmƃ(˪++ID '8j*'(^m5qѣUZQ#i\jl#Ur&kJTکjufkjIJkjsk]RHlG l6.lϿNڋp-ɖȦɶG`lu얅lk#nԄS IԎ'lDG%NN|T@s)}mjE>nfHan/SkX&Nnn~n)e -*TT oInfrf=,p^o6VUa1UnUUn?& kpW `odo Ǭٞm V`eqbS%m_o.p6Wq)耍r qڔW?ho(<gT-!.S[&5Z')crDCDD3ϰض;p3@\sR[:W?Cζ[]DB/t(O?nEo*FWlźj%98\.c\¥ڼHr6g+ʵ\ۅ0J7&} O\g%ugcWwHvft_ 490ߥ3o yӘjk#@^olj_*PGvi,EUH p65`?b'4\K\ JKWK4iL>4yjgJTCvq*06ͧoIMˌK& MLM `,YNZ6O lœ\My91OR!S{pN1Of=i{zٯ9U|~yFzKg~NI }wQh}ǘ|XƓf  -i⻔;?喆昦PޚVPeb k!Ĉ;٭S I"ʔ*Wl%̘2gҔhΜ:Y6B'Pj-j(Ҥ0)JyT)ԨRj*֬Ho3(XTC-k6j8Ev-\Uҭk%׮9:.:0PdzȒ#+l2f3sޣ<.mӪ 5تS$c6ܷe^zg‡ץL102ĉ;:[OD]g>9sf +BDλ:Nӷ%rɛG>7'x * : J8!Zx!2h\Jȅ7^y祷@H7 j"- !J$xX=Hǜ8A70㏖$Q"dDd(&BpIƒ-Q4P[V,R:JM6q9Ye4d@'JfFeJu&jR#4'v_KVM;z^iɤDPCiԄF2PAYj. ?.R N4x[*FdkD4uN[O2٢y+,խ[>R#ʹN{,q&됞FBdJ*H BCG̑ i压(J*ӻMc!g _z%_ NY<õ>< O/R6t ŮM(2!@z*(D!;vn-nJ~o ,"81 'Zm'A-rP (G4%#RZjh$:Zo}ݘT?3Jv8A$̫ B!pC )2nYGbȐ8vPg!hC1lxVcH(GXQԣ[F;F u_S舐3) \ L< )y5DrT%GYJVn ~2rD5&*In'k@X*nfMfQ/W,3ge!ce79v~ \(C3|@!4Dnj~i i8zҖƌ/-JkӅɴ# Ԧ>5SUzՠQ8 Yմokz1ɵA z ]WeˤNx6-iSVvԼm3K9چOŎlo6yxϛ޵ FH G޺?;[ qk|7ıԆ6-#E.2ObϜ3|aB5/ը&&硢 أNzspXq 2`Pvω.tw}|~o1zDF{}>NWI@QBb0{I9>!gL7dFGAF҂=w`|+8.Q=FVC)+,Wa(C~O̡ɖ:/"Ts9.s^ ؊{חΏ#kHi!$Q[o]m.v.=V|L 6,Q-15p 0E-R|1W-ڐ^ t`@/>u*1U+, )R1!,.5W,`0)D &2\C]?ޙ_W  x`H$Ymm $VбmERD.`Jq!S@@EUя:$0 HeBXFE r"6! !;ܴ>N<D0?YaEb <)M}|a!JaR! ՗HXD40LEBM8UMePW$ra5.TYQ"M=ڼURXQb5D^ !aMceD ,AI%Cae)J`?V@iaAŒi) akICla]m{ N)CF%H$3n#tua՝j:N-ݟ_舄EMeQԀX> V?UW{URW\ U`u qW6AރD!WeYG1؇eX)zZ:FMN$O_L]8TB G qf6L0RScY̷ܱ8kjb5cB\fHBTٶbLyabݦyJl@+\\&'ɅZ9cWcNDN8!YIvl2]ك'wg'ȭ~Kgd%(}Dr*85^gX"Fmh~jֵ(Zg(v(hę'' K)ri^ Rˑ>EiMiTdlB'ȅ^Ĝۙtt!]&Kf۱MKݬd]PDzʝYױ*[)*] I5 $4pj,”vӂ=Uz=Dj5jL~Ҭ^B*G ]Tq^>q&QԞS8BSef+Ъh0n R& `Rf /#^C4J2Kj1Ja%}R %O+M`f d 6A.P bl)IZT,֬,lTZVӻ$<)E Y.Cb5^^ !.m| #AB%`#%@UA bE=X]l6M7$t] 4+P&ƥ-벵5 -Yџ8/]Z#.. \6N q9.Y&c QK.U=#Wn^$5YJ2"1fQ0.m-Ϻ n=M@>.ؚdڜ$2,.F,SAkGOdVn`.-z3\BL@dG殰ALN_XVRЍ^f~F@ "pq%YQeAOefe5_0"D/ -6ےQl Ƥ&pbq%0)0^Wyggzh:V1=e1;o(1E1nK''Z_11k?'L$ q[ !o)"'r._!&J2w;>=CCX2&BΔ MS Osr?(C)rhALxKr+OS,c-?<92*krx}"*tVW. v&r.7r/OA2,d b1k ~+J1 u337r;;<3̢!cί? 424{7LC)SB@)ϳ0ˣ*Rt+ ̵,kJٲAOH;A@IT,MMcT8Dz}0ߪS*]q\BĞ]BMz~-{4NC)t ' 5J =ʿ*(ꢪN.Er!rPDuᨒΦu1npaC`jTO-41uOu)t\JXqbFf Y Yt,̑:FBS\B&T seXa_4 EI 5=kqGLkUqQZU0렎k+w:rZ/rhrPۀ6ʞC˖ J *6oAUb,e!0bс~ʒ :8Y ~lG *Q5~bxz/'w6{B)5|'XF2-ޞkzB܂+8Dp#⑳SYoaSd3ن"I"pmr#z#-,UٲgB/2}&l VBfP& 89G.pÕTu2:W٦j4N`>:zƹCǂ2/@)׷<yW/e:/O1o- ;Z-IWjr {m Ė/[{o.Yį/-9Ǻ?H8@ߺ}9ؽ0e8FюjV] %ea `B4?uP0^GߚpEP{Y(ᮌ/i,3gr|հ[Sv1bg0M _NqҗZ?(WE=ڰw;h=_q<+3Zۿ=}}}}'@̨}3p, ~M=0% 2+R0B:p3C8h])KJՂ2C:C5$C)p0qSi3MA3=>ƲF,?P:>̂,$C9C9W>SF]?ޫn{I?D܁* xLmZ P(,e6q8l8)M**#L;гF5Rט%+AbE"QM;.䚋XZT #He&iP)EKN35b5 /5ʪ8=5aaoL%VXeq²g#9#4wF g##,ZѴ)j6uɍ4+,Vޕt8dnλ$J #cDpMŵ_lލ_7>HQ>aR d%u!B_8+N#Q"dqX͆WnXO1"CHmqN6z2Q4 E^BMҙ"2";{Xu|d`X$ /}-;pKu %ij<p[iQfG=d>>ihU׵mHwIuAw@yGO:Dv,OƅD2 |O}sFI_w%ArbVE2 @Jz-ķkoe_,oat >Ya;U5+Cv0.2K!Zgi(*C&8 [84Q;M8h@Q ]QRzq%tjQO)D@1n9(  0bp`N~ W^q;KF?RWlOC HvnQ# BS 2># u%;Ll8&HdÉ@'r(_XTt,N<+ lГ#J`d7B2|5i5FS#i a͘9'Kx!jS!l 8蜦҈l۬AH1ќj hA|c@RBa W4'Xl%5IQJȤ=A;ʗ<-)a>z5=iOoT]H;~TT,H=0ܰQNU%9KMUnuMF]HeVA88Pm=UWU^^j"nHE*V5a[Օp`'(z7ja-Y&֮N"HuSliQZvVͩEa[Ζmq[o\ֶ%q&wesFΥu f״%Y~Srv{Sgz]H{TЗ̝o6pێoi_N!a>Xܔ0;Hv]lQ߷+aRpf\CA lKڒդ%Ftl/XV*8Ip( ٣;A|,31`O|&nÛ2L$`ʒ(YxfQ.CHE uALpcDYmlwic,ՐFnQfٌ|rVjg&*U2XrϙS2rszʙ^RAjXڔ CcCJ-6SBy]W?ð :GD`5ip7ξy{ˮm"LExͭ ŐLi$2t#5q,P0 =Z]NˠlԴ8*Sm)! Jde-77< @mѽ|]R岛grAt]\=wt 1(?)Ѭuہ5bnLA]%zWHOCiM| re ~~VWoiX̼`5m@ F K j6QuްVo+3l% UoKŌolO )۟MGn:DQv DO^ G^,_IoC'3Qr\;eyB*)!Ih̴jʰ KN$/C ;Jy $\&DY&1ëaq+>l"FlH0NMjV` @R  gM#,"*  ځ   հΰ  C,Π 0 װK" "𵂫!1%q)'q90'\D`Q1 'gmɀ9-*qQQ 61`}+15 +t@X v#b1kJj~pq ^0- q b{`"IQ ɽl wa!!!ZJB*lJ܋ ױ%yJ% |#+L(Fd62Ye'1C$( J*AX QR* 2+ *h r&* 7,b̲~R.<)Mg)̧f)S1* d+1%C1sk.Bf.Y1TRۑ 4 ),a9`39 |'L({2&\F 2$.qR,_$L"%18YG`B#Ϡ:/k*D1N PQ*=|SG*|c/3QpRt(6)37, -L.h03R9B0Re@@yC.B;c; 04C:’55zE$6D#c73 ֘_:#VG :j8i:Lmh<GIE >C<D@@^-7,B2Mr6m4JIdBECPĕ҂_VF\i:GR>/744#}<C3nbs撪fEm,WΦܖed&8TEVg *$uReEUFUڰmYSD-V0U-W؍W VMo ߖ%pe ^9G 4BK+QlQMR7blxqnf,fiH7Z[IM/tF]Nd\.Ԯ#d.fl^l h`oOUY%NTA&VZZ[KB.%5dP52+'EAeIIfMve[e[V9oH&Nf$st^gN.aneObU!5}RRA`lcհd> PP6MISioPֵ_vfV V0 vV$4nMO(H oWX`Mԃp(kmWTMh?NdlHqnO`u@kGIXuq(mqԎL;GxF`.:@qFM_!WIsHWx!Ez7)yW _-wrqJ$揔V肌vYcwvv,/Pm/bHXw1,Tp/s%x4-!>BCX$aP[?&}qхՑ"i mxqx18o8!!k-8xkx/8rQ18 T"%uxw@! a8? RyB@`jk"h؎',%WRp L ^D!"! h@2c.!:ٓoT! bÔQ >ؕ –hyDY#ᗁ 3[X3AX9~9 KM/\*|ނQ%F"nf7Ĭ ŸI}60$";f!˚G9"A^!> ~$+-ޙTl?3)€ChC5fz"4fd&h 4OcBibnYhi@(?`)ޥ-aarl$G<6_V;"S7z?T?#Z` 6DL:T8 tM9RL4纮l "KdҬ{`|HOMMN/!BhN]E#[@"!(`z>(*=g夹+SyhkW5uljx-%Su0 UduۘJUT`5U[]r[NuXEs~ǂUYXK{"vA V?zi[U g-[6#PK#1mD2ƕ6GBzs~/'bIoz8Ṟ+oqOH2(nxr!3-h.n?}uqJFV/n @whgr;(ssi62"]#tٗ$x9Wۣ(`S z=T=eE-`Z m ڐ(S ,#~.8Af!wHH)"78D2H/}7FMUlwN-SPigH=2 ;R63,YTF,P|!Ql8aYM}$ZЋ=앾S ^qk3ZyiP^kT? h@%_ 8Z~}‘?5> N3.ATa}ce?i po' ?l Q2TrA v<0… :|1ĉ+Z1ƍ;>ɣȑ$Kҟʕ,!6j3&F4i;3Ν<{$СDzL2K:} 5ԨBZiҕK6N`k"-:m 2h@ڵg69ZH.߃~).8@& 6vbUg-e`ITWUG?mm5լUxN>fl;!݇Q!  c-JX~\}3EZګ4(B8e#[]nؘ].h۩%HXd;*-J.KBsTDSԡ BRM"j/%6#Dp! c1rA-~ɡT#JIZb'"0FWY28&qb8 +$:x!%߱ #Ӝf|%sdQZrR*)KGXl+_RrIWj\b쥚d`*Ėi0L3$&3 ͫ-3t&5ML!&0 QfS49 m2^&i4x$M9|D YVюD }fPC шJtE/ьj^<(h0 C< %%C' Әt4MoӜtox΅t?zҟ3'2+-Wﺖupd1.}>;Qt;T>[v{ىoto?Hlh |88(ǀ 8iL!(#hA~)ׁ.%x+H5hׁ:2(gxA(Ch{ GGIKȄJDHUHYY[]\'heh*؁#kc8gq8IPur{ta`5x-O&6vLdȇ(燅hd5%(L8WAd`(@2>B!(ˠCn)㕑;yוK<2:hͻw^-iۆ{Ňݾ+W Fhػ6{c8xUe_^v Jz <\'cvy  (!vV`dTKR}'˃ 7ኽ ҅ѤJ\Ƀ>!@AX>ڈ"&䓢X`m1Tߒ %ᤓP[f4MY['hn(^B$_)有UHS@a,`}ޘc9 6J'ĥc8"M)&]X/t秬VmgqmjszJW뭹{ِ0& ۮ,@|F+2YJVwۆ;@ߢk궋kK=蘖/2)L)9 N #>t)?W'JqRrO0ţ5*a}%7݊U)aK9t]_;_\<_\tXX@YwHՎ1)l[0o ëDz w*}z}w_9 q5hM_pҎS),G1i,3j9CGNݬ܎7鹯d? JJ] `δv7#aE;^ߵG{5s}se1,U 1 >QπG.4 ~G nv< _ft'b`.(@kD 0 L :Mg˘- oyZ6A:Kx<!y, Nm?T%D>r{,AǷe1" wvsc HFNM'9*n DYSzbaqR,] mb .D#ܤxǬ ꁤ$S3Α9蹮yePJY2_$bH ^"qifŗΌ&T)jNfMЕnz 8IrL:u7)zKy~ @JЂMBsN:@HͨFJQP%ݨHGQR@|2t X1:*5)JUR: 0)MmӢ:MJ[Ҙtu QJգBVQ}ZѪWVհugkQӪUHpի`+Y=LLUh!8v`^XlElֆ6%aۚBߋ_1KZAl%bZϖ7=IֲnMZڮ+1ePc @ C=sOa1 s{V٦qJ%tI]ֵ)!u B"]m˒p)_?[c"A%| `0n@)|T;ܕ &{; 5jzx/waox҅.;""~/WRL( >pFo8o?[_(7 ((4A|P:x]m^wpShyr 33 d9n* !g:Xe@Ϸ4e +St!&]:v0əZtr pw| E`a~v%m ՞*B]oi\ Ƕ ?7f!Mmkզs)]]qCMoF(0|bYn=loLhnzNrQӮwp;cכ^quݍɉ8q唯+w-O 2dTYN⇃eH@ץ n>{1zYf0þiM '=fq{mv/кB>:sC'w;\%xA5OpS1~e7DRyuݧ]eUZ2Wf7u.{]=/l?wYz2<ԃ/Yۡ ijN~~nDw!ll{߼yo{7Pc |+w~gGtfc6nk5 w {suէ}3Vcwf_b my'ؗ~~\Ex'r>ige4qإa^|5r~OX`hhZ [ԕ^[&eA}(XPUxY[؅osLjL ՄOtE{0‡Zȅ6O0[(Y(rmvPX8׈HSVk71kxVXPVR*fcЉPP؊HHZ8YHU-HUX`iZhP8bHx﵍r cS=S@5Ѝ8P討LRhVH8wu3xYXu[y)9DOyiYOM $iT(鐦,ԑ0褑2Y3YQ6:9A )W eBYZ YEySISTKT>TBEI9RQT>yEWkWn )vYe`QhYy5d80mPm`jYw"d \dQcŗW٘\f[r+<:TbFm]iivcS(sE5rQ)dil&Pl9xv4"rC5PaVibQƜiV>d0'b 8U/$]&؜ɚSj bySY_hp;RrŎb^逺 j՛YPƉ|鿔隞K >O褞.Uͼ~[PG7\ĸé~V)mESlq߲`|s~nŒ-YɰYy:vEED7E<[x PǼ݈1 ~ʙoJa8 aߙDʆ,ڲd, VeSW,' _|Xl*ڌ̈́˥:ѫ6E'Jlh.zɕȵ}iJ Mvl =s:t R]eߥ`~ MvoߞHs?ǂ Apd9xP1ͦ5ݧ*<.l\MDzMԛԯڂu@}wyahT-ݨղo]y0=xuo &*vfց٭(\PMÊ_zȚf׬oUtmd-ڝj. ͳ~٭}\6!L%-PhF&))YӠT9^ŚUN='VXYO>!vՈ@d^}ZLa>6\OCX/DžJ@ .}dI'I$0S,' $4qHC2L1'!Q$7T2I0DŽ3N@(:ьǨrI9{TE*sY5w%rnq,NNLн~gvi!;nVA<>EpsB_wXz%V~S>V;UlvĩN POĉ.k"]. NhE6S`!pjcC ◕$$c![Jad†'TN x$LN bN$:X8$U21ώs02o1h!X&/3Xy&#<[,PYS:$_Bx'liF2mx1FLy EcX>шMPRSF =0C5DEBl"^@Y݀B54}Y bW`F!Mc8,ɤp ëd'1O>ɣ$200 _6\mdrs/V)lj~J(_:& 6O S"ی7d?N "!g\s0'O2Za5Pܥb1Jb>58tcLGz H5ƪn\%O }I%.9Gd)9(3]$c M4Vʔ ) RpOՃ55ՒSxI zР*J(:Gt%`X؄>u;Q%CDT2Ud=Vv71 ò+nF+q fDY@a!zV U$*ЖUz;J EjpwH`XH)>'%ؚW8 O\b4jZ𕟱;Չ3Ůp6&Y G]B7b L-1OEGyG=Goj:(iJi* D9"RP9h4Ģ*0 c%leșa˒ucw%-HB8Qd~'GAPZAQ:^%9΀Fl/::ZխBCUqU}%KJҋX7mE[tJoU+vҪ6-pqV^k׋6lbiFlf3;yZ=mjWbvmn w=n}FwmL5>oyhϖc;} p&n:o6p~}M8 `J.`^]& b P_$V.bQQ9*+,-b,քL `).63/c=`(V F:;<=cF @ c9B6Fc@fuc-Hd@>6yId dm$ETMPޔE~OFlTf\Vet{XpZem\i^f`&9cFdVeffvghijklmnopq&r6sFm;PKQ((PK6(AOEBPS/img/int_rprt_nav.gifb#GIF89a/>B>@@@TZT__``aaccdkdddeefffhhjjkkooppqqryrrrtttvvvvwwwwwzz|}|}}¶ȷ¸ĸźŻƻɽɾʾʿ!,/ H*\ȰÇ#JHŋ3jȱǏ CIɓ$\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧIBJիXjʵׯ`~*ٳhӪ]˶۷p]KݻxWܾ Lk"^̸ǐ#ULtZ-Y3k̹ϠC zI^ͺkͦQ_~M6ؒs P]DbNȓ+_μs.p,VSא*kνO ӫξǣMd(h& qQ̴_`fv b E2߂,6 h9S/3H@)$qpL0L6Pvhz XfbG`#Oh9d/2?`tig.Rg駚l栄6Nt.㣎&iґiB"KvaKa煀+J@ªJvfK.* 6j`Z6cTH q { ۢy/2Vk5ɜjvR)[ۡt>DZ-Jir[0>ƒE{S*0qpVZ lośVz|#H .҂k+,*o's!,TcRTL5:Ӫ+Ϩ:oC@!Ѯv -G4;\kB @nVb(F2_mH Ah xG;hJAt_ŒTA£Md*?f b@ROUsWNKfhcbNä/.u\%\N]dO);l7;dt# |䓐 )GʑG0fEHQPDS8ȧDdқQ0Gm`GAEGFKzS _ywWx~'Yo˛ A#s>̊MG/{ `{x{h 7JJPdzXd'zy h}$(}~wvov"}WxϷo}CvE7~0~Ff~vyv`dTpy: ЃI@G{  EEyFEց d2$` 0wqd^ {e{jZ8e60(p ؇xRV})x}o}xpxxX舛舌8GZqk\x~  Awy(y{ Gy ~RhHƨ~x8XdȗЇe87IBdžhd׍wd{~@Zf}'Xr&'0H ُ| Y"~xЊ&yGG~"~h~GA~`I )YP*G|R{ 7=(jw8 D[F{HJk./JR;JggpXZ\۵^Z;g`;d[f{hgxf T;tqvxzgoW `GkW[llE0o[mzָ0pn`{ƹۺf+P %ۻ;;:vțʻۼ۷қ7V{ӻ۽ދ;[21Z曾껾 [{Aۿ=B\A<7\Fl<#HpNPR&~ 5⯝T>FB&Yu,]Ulԭh^V⺰GU` #Kn`a. Uᓽ A.ݐ~4.]>&ѓ=[L~^)=(ڪ0` ^>ݛ~6I~э|^~޹̾O~* M  g pp Q }> Ȟ.  ݟ- -]\U`/n^ _ ]Ӻ@ZoӞ%Ӟ. ".Y꽍>/ !~~^`O-7ǀ ~In^a_WCO\dYቀof// O1.tʼnE ?|o[MMѺ/2O.鈯;?5⬏++X/Z|0 P   +A_ =@nN*2ĩĕ%c9-oF:9QA{ ;AñUЭG5<+êo(T6&7jU2T_7uDtf\+T[~ ѣEALPfLRm /ٱQ#PvSz1o6nWXQ>+,]'_HݺQX02sGݶg ~ٖ/ӫ3g 4bD/j\q.4,?&+rN8N>30&jNQ8Na \"802k?=l4%mP{TPdZl Q:Ze:jEjAͶ0as-5[I*M8pC  CD°@u|iυ[A*n9<9D J/Ga RI{ QB7URTNa<Փ {XY8i}ظ4*; 9#5lYLA,ktׁqqYH =7$UeWluR3=M5h9YLm s0✳N{?WY])ہ x7S1]ywROv]D)ug-ϖ,I%<1Y+c˲.Qlk5\/t"Wtq3|uzkFc\c2WުF9{w&%Kݪ{Ћ4ֶOS%7ƭ [ +|g􊳻Ťr=;`$_=[ݐ" ~%cr}.qk+@wtiė ey_]_F7Ԯ@YH34Ё`%7.`5AvЃ @iP#Da y tqWXp/T khC~p=D"EXB,Yix6A*+8D$vы>{ӟ?Pԝ5hBɉP6 u?!QN34hFQvԣiHE:RԤ'EiJURԥ/iLe:S֔It7hSԧ?jP:TըGEjR=ѕz;UjT:UVժWjV՛ԩ|*W:VլgEkZպTNZ:Wծwk^EV^ёoh\:XְElbְ櫊ld%;YVVL5i\XvֳmhE KEmjU5֭Szr:WQ{ٵ-2Zp|%?ywWZ֦)J`W9?s~_fc=vCNyH|3 9nvMG~W|םA_~<{1_ 4ͷv8o qǚ'|OxG ߶CsHX;Ze.Pr; k?r绺9#ATd; .,Ak9?d$/ỻK=KBd()5<TA7M{7ٵ ڨRP!eƎ `p. -#;<] (QZDFZ1JɞcR Cc]태SiN|E㠓+ߊ!@STPRz%֯ [jʐ~Ѻ"#f7饘R&vzJ稡ډg)**1%2,b%Uzvhc1R)U`7웩Te*IIԮ:f$/H@Sa" Yf"&l JlIתj-> uIA`da"*_bq!Z,o_|oVKjі\jS8r,E -,0= 㵛-ȻAo,'2}"-W%lG | \dxkh1 ȶ~$2ɦzZ'"I2Z7Wa#j4f2ZxBw߱B-wQ\ҙvV]R 2FR1~㼘S9]]1(1^igo]qV)过 BDѾ)'~of$t66Y3 'pdzG rvhn pσqn0@XHC2d wà谇@ "F~("!D<2KL"D)R1"@-r"h513#(5r#9񎞱#=g#  H"HF"r iA yGR"$&5INV $B(HER"$'"ʅ,\e*^)K"e'UKWB2<%DR_19FҲϴ2gN*%L&S̼f7bB,9wiJa"499ySg8uS̴&;yOz6yyP}r謥;}3h>M^򓟓((Qu.M95JΌt-B'xti?wRԤ(#*S~H]gHSt4u!ӆ6eNoТZK%hFT>&U՚V<5ǙUOsNm%]]5])KJNuDg["ȟFRN!Ptɔ\nQm,eeDiL+X:JcSZkcK[Tl'B pK׸n r:=tK7LZnA.R\ xI%z:tO12%)37Hy _׸ox;Zm xuo{`bt,/qCa WT!NoBr8 &E,HrWɩp<u ɱwaD6qfxeK6GVjeW$&oS$À>.L3E̐ !]2M<̀&żi4wkrb+zscWV}aN"q[=&wvώk:/[#څ{=nv)־omCōmr6n;+ {yl}7u.G 7.+\EѲ1'ƍ)__w9q3z)!pI~r%Wy=qļĵxͅ;#$;s.6}-qt|(6̡\ۛUwysDBXv|-??;Ӟ<Ӂ.VvWS̽ϝT. wgM|v3{wS{{ALol?Ͻw^=?̣O;uO[د SXG6ķ9O7_~=^i>b_!MC>^~P ||E x؀aĂWUX\UJ$3hF};(8GM!8d<|:eo xL:xO$:H1[8Xle\ lx|ɛ٩quF{yٞ!i)i =Aٟ韵IpiI Y@aɜxSgi y: j"JfGe੟Y8*:*9ṟ ڣᙝڢ5\-äIי29TZVzXz?\ʟFYZk4dzFfzcjElڦ[pzEr:8z|ڧ~vZ E;PKHL#PK6(AOEBPS/img/pg_att_nav.giftN|ldLrĴLnļ̴dfdtT~̤μČ܌ʼ,rn1),ruslv94',rst4,oYG*\ȰÇ#Rc:$jȱǏ CE 6 \ɲˎ4HA͛8slóϟ@)SJe1g\ʔЧP< ,iӫXj ׯ`J5ZUfΞcZ3.)R|Iݻ1C߿ LFL/Ð#KF/}'k̹ϑ/h~Wec˞L3hͻOskcq _μ9pƇ%سkg{}\i_^"e^Hf/}a'(ބVEndPDe~(#b% ͵(h^krYYMST"$RwR.KZÔDQOHРv@SUG XzѲNhi*Gzɶ3XIVH\)Vuujo ҼkEeb DJΨrTA1 aH`JzвiWDԞ*7 [.Ҷ~07Uhlgŭr=עl`sZSu k]Nw-=z׻vwMmy V%;.׾s;?nv.M!,8'L [Y\Ot{pLW(NWl .&/E^/8Ƈ0*@L"UPd&KSβ.{9I^r_e# *3\cvpG&4xγ>}vp(4cu@@MJ[ҘδMhCBҀ4y?vsWo@C hf# @hƫcM^ָƮebv1lzٻhjȪζ5zMr[q:7\ n{7 -u~xn7 8/Mz;.bviϸ‚QGN@ j00g^r /A d0@:m.@)җ;PԧN[X'V{`NhOpNxϻOO;񐏼'O[ϼ7{GOқOWֻgO vO;ЏO[Ͼ{OO׏|A`OOXx G X8xX؁ Ȁ 8$&x*)-X+4X6h/9<(;؃@?:HFx ,8.Ȅ<(HP3xZ8؃Vx@`b8XfIhhmjox!8G\\hiȇ~h8FX>8HH+XȃxwȊ H聲('xxȈx¸xh؊،ȊBhX鸆ԸXW(x h8hGxx؉87'4x8H8(H*px(Y$&yY'I(,9 =>KD>Y4)!Ǐh3JH(Ȑ 99؏ AIp(Fxr)s}XXYؘY{)yzy/ix}i|I􈂊sɗ 8ɎyyyМ ʙ霼ęٜٙYZɉ`II it))hYy:ع Vʍ əy:ziYj!J j7I89*ʟ/ڠ rE*;*H=:0#jSJJLO*P9Yiꩦ]h :3D:,*O _Z^{ZH۹ɡKjʣ]ʥ%Z'JYKyʡ-*:bjʣM*I٣j ꡯz*YzzIJʪZ*`fyى陞Zٕ\h Jک"ydy} :꥟*ﺙ7٭Yꪛz:zوʪZڮYXʫ4z)" zڱʧz*ڧ*ᙕjZyrcgyJ۩y k ˳%[{I |>Z ;EKG;Y?j;+k bKt]K*Otk*B[Q~*7[Wa7﹭+$qYjڡTʷW:sj^뗪{h:ں)v+nK&ZƻPk9ᙝ[ʪj鷷; ) +Y8˦趞J>ۿ <\,{  ̿ C{_ z8+K,+4\;68l0øIÑD<2:4l (aD NY,I\`̡c|[\FÐ 6HQVl\v@5D]F ;= =LC}PR ;}`ʰ/M+O=b=d]X}g `'B4 maMt]DmX}և)}}=\r `m׈w {~ ב rl]؁]qҙևؠm֏֐ؒ;'ٜםڰs-ڶ}GV֍}ھ10կmخ-ؚ-rʽG~׏X=ڕ--ԞbBݬܽ-ݨ]ުմ-M`ܧ=ީ }Z߄[=0 Nص ;"@"> (!M,a.2~q0>6~9<>@B>D^F~H:LNPR>T^VK~Z\^`bY>f~hjl\nr>t^v~Rx|~螪^~舞n䄾>~阞难mn>B\5'N禾z뺾U>|)nN>D,pĮnIة> ~^>Nܾ^>>_~ N? * n..0/$&683_>@/;D_FCJLIPRS_VZ~,\^`b?d_fhjlnpr?t_vX_Zp~wDvy_džOw>lo7Ƙv6$%(1Σ?QCO%,?ao%`Lԯ!?%ܿN5ѿ ǎ\TL_ɿo(׾9߸T00 8Xp8H)9IYiy *::(p +;K[k{ <KRR|Z|̼܌ XȘhM:N^n~~i /?O_o<9k›;xԫ[=-+>aNHa:hana~H Hb&s"b.cԁ6ވc:؞>dy4.exFzdJ.ڐJyddV^IIA)ePeb HqeIfnGfgz6LTiggI\HFW.J#.i,6JBٟ[^Si\iziFSW2sQWLj l6:@ު@ RNk^ɼtLa-;n+vlHދ/cʪd+ȢJo؛o o5ZjA\0 o1iZKq&$Gr2Z.:lKm tA{ws9tҬiEwR'4JN?\So=s'vb 6f hvvr}tߍw%=~mނ2hWc}(/O͈g"xAl`03z-#΁k`  ! K A lP;+;ˏck \|ozۂ ;uIDs$k>#Kz_ߏ#8r "P/ Mɕ4bBS+71@pÀ밇<~l(2 !`_bX`BxU+@a@IPhD ЅT `` s&b| Ɉc% P&J PaǶ]q]Ң( 6j%/)VژAzP'L(00sb ڱ0u/`\M 3~/z1_8XHG/L"q RQ&N gBYzc3HȉHt$O ]re0 Θb\AeeT%5(Mtc5HH@0s, m-Drj5xшZb 6/0R5IOP@U/ EK7Q"%7OSttSKAIr,fB:7ͩS?I;b:Z0 $dNӂh[5 e+ʿDcv  va3*vbc;BvEd+̢䲚gϊv#iO;PKn PK6(AOEBPS/img/app_group.gifGIF89aBBBJRsJR{JRRR{RZ{RZRZZZ{ZZZc{ZcZcZcccccc{ccckcck{ckckckckkk{kkkkkkkskskskssssssss{ss{s{s{s{ssss{{{{{{{{{{{{{{{{{{{{{{{ƔƜƜΜƥΥƥΥƭέ֭ƭέ֭Ƶεֵ޵εֵ޵ƭƵƽνֽ޽ƽƽνֽ޽ενƽν!,W H*\ȰÇ#JHŋ3jȱGBIɓ(S\ɲ˗0cʜI͛8sɳM> JѣH*]$ЦPJJիXC>ʵׯ`Ê͹uٳhӪ]۳,۷pʝ-ݻx.߿ VwÈ+-ǐ]2yM.O3k̹ϠC}qdap-ƺװc˞M۸sͻ NWVn.ȣKNسk~yJqqOӫ__˽ lϿ'*& K0 KF(jwS-W|"DIk<8)@,7c?Y6@@A>۳ky챷4u3y&? pkT >@9uH /'D<|4<@˜6[n}D;)YEkY\ї/}*Gyk]\JRܮQ'cZѢeh{1=|[Mn$\T0I1cҸj)mn6C/A^5ˈ )F!VPiSQ Uh@$ y)*_6EYq{^-PIC8:н-#H20PIkҔV?eM{B^hH"$1˟G)ɏ0[R yn{Ir0\F6jhX 8b4Ai$haxQ$$Lu]T :(|ncЏr&MGJQ݌]SpyK{쳭Nn"&sKѓ{\^a/fF#[]1'N hfFKc/%A,Q zU\عm~r6(oV2I&d9v΍^h(.LqКܤRmBt HL .1"Y PH*s; Rh!6.AFqgZɗn3)M ;7>Y`qu {¤l'9Iէ 4@m 1H`K\p385`|hD*I,Z N++gL=VH\ўV%N˭]MzInzGɴ">Cɦ~f C ͕ZڈFKs<Iw'tsU)80lL4X%m`,Cp TQ5wi$ձ5>olStWՔ[SZ8 Jk|(ЏO/[&Ͽ/JsO|O>{w?z?y48x%xc 8!xaxq 8}$xg(y!8 pip `ł8}*נ `j=pF' JPoph(9=1 p>` ` ppR%=bbXtX@ U `mID` jȆ *a0chtH p,`0PP&>_}@ 0 )_`P@ ~@ @ ̸   0h(! >`˨H( PP'1 &؏8X  ' H&! ȏx X Y I{H=a(xP Б4 j Ð 0 "y i i* x/1Y pxQ1=Tj!7%0- Jɒ @ \G'2U~p 0 fy$^ \>{ɗYXk rȋH 0 К i9nѸ X[XxɌ0  -PH뇖$ 1xxr؝ x8 t 9ѰM 2`ٝdhwxH ?p~I01 &sXh) p j+Z~ : 4IYY̘, `e!*0 IT,ڢHn؎1َ2 R ڣ:@ɑ'P&z QZZ@Z7"Q^ ɰ ;PڑAJzZ ̀p R "e)G! > xGj0 iiZ _ z*` W*G<> yy pJ:qpĚ 'o Z * YZ0 TڤÚz ЯĐ t:ъ%@ Q /ɭJ گӐŠ @`[} P {Ҩ)K:p [0 8!}#n@zjZZ`` 0 P9[0 }ХK˯Z6{S۶m{ V7O&JjRnJِJٰ 0t 0 Ұ}3k 7[n S+D+}#  {iK˶J%! `з% T JJ+R{t À ^p 6pKk мm j$N``Ek}^; { F P  fu|  6K{Sx" /d0 Pw׷@pSۼ x&PP +uP7l:Vq ` `TPDs0ppʰ<@0>?3~G; L:'H Z  6z GH(L WAA40 gH8̡w3H"HL&:PxD!RX̢, B` H2hL6p$ (@:x̣> IH< L"F.R$'IJZ̤&7Nz e%!)RL*OIUr `Z $7`KbNl1I0*x8 e$@`  ؤ-# 4y!,@*Q D I 0R /Hg&wpBA 6p Hxg$ϖROT4. Tbxj6 QLrস́@PK؇H v|kXoxB؇yxsX iLj~舐Nhj8 h{ȈxX芠qH8Ȇ(pTn،Pxؘڸ;PKFҲ PK6(AOEBPS/img/pg_def_buttons.gifKGIF89a*666bnacmbfffgofjjlls{ruuuy~x}|~}~}͙Qݲ³ԦôĴõŵƵŶƷǷǸȹȺɻɻǼʼ˼c̽ĽǾʾ˾˿̿˿̿ڴ̱v׿؂:ĊːAЖ֛HۡLPTX!,*cH*\ȰÇ#JHŋiȱǏ CIɓ(S\ɲ˗,œI͛8s9R&ϟ@ JϢH*]tѦPJ )իXjuiuׯ`Z%@,f$mطp7Mv'ݲ6{|*^, Vpb-CvV0Ώ7vۙ/ˌSÜdjaow{ cG_P8v')H!шEOY8q`CF fJEAthhL¹ p "8:P#4>&#B/x$#hB ⑧#!YE+va &7i /~q{(G3nOL*SF␯D,;:#ȥ.wK@}09La&Lf^+$jVӓn8IqhxҙuӖy|p*@! Mܠ- w[@7}} OoNYS̻o{0Ϸ 99>'nv/C@'D! BGH= R@/A{m sAw{N?,+O:ᙧG7_DC xEQ .w>uOӸ=yr??eGp'H}h  @ 9p aqW{gxD {C 8t|yɷuo+ׂiG'p"&}Uv9;ȃh`@zPtt~g{P8JW RXuw[aW÷|a<8X(}p؆y_ ] 7i0wuww8t~P@x`ȅ|d`rq؉6HH^ -0 r}?%PX)@rR8$X X Thx舐hWgx|hgln膚Ȍo؃ep &lG;i~$gZPЁ!I xHyH,xj،4h  Py_ g@rȈ  9Puc_hw:,h=(}CG D0'P`A`@r ؋PpxXّ`wfh7W kw@  @u$w8Fj@wv MYfO d'V /x" @HL$ǖpy{ְE&fr)vtYf,fii'68eYmY'jfIJȘu9x›Ĺ,j¹)eٜ@Y)cyم9ᙝyi蹞M9&yf|:f&z^fTI:`'ʠ ycZΩip(!J'Z"d)kcf5s4b >> PP 1jh9d ZL3bOʣPV*'Ic3ggƤ`e a`agkڦFƦiYqZ'@uXZ@ \ڥ<67`OjcYVSajranVJ,!VZWADFڨchZ6zD&BjKʨh izqz:ft*n7oz';aJ{f|wZhgbJ暮9ڮ Zfb욯 b'b[g媫szEFʟ\V[iP֫ cz>Kz'[K#;'K'dӪȊds `MIb"[+$+#[UiƩ!k'-˲F;YGQڦP$<_['W+l;ZKn;.PkR{hj(tR\{)R6cKg/KaΊSK*;[+˝ĺ][z:k[:f&  KkK,-{ e;Tka klʰJ ڳjnt_x۫:˱p+N Jcct;fAkq[лًf:+p ˹5 Õ~ڻ,6*{@L=컟FHL|NRT\E*i{KIU˶'k5: +۬, {%k ³j5v*u[ik/\ʴOLVL˵k!\KiƇK Pi[<[V\|ljܸʺʩ웹 zX\>A\ǜܮҬ\Ϳ{<Լ,9̜|™ܞS\,\)̻I: fj5yڧ`fZ}΀ ;c=AFzl\ Qvc`Րެa-lz9mvS$]эȡ*a v:'*ӗ:Ϛ?M.M-[$>ޚ,}s)N݀ˏL>mN{}dKl~,P^gmv;~~.}c^y;^ڈ>ae]6ne~:g;PKK|PKPK6(AOEBPS/img/edit_icon.gifSBQHH 9&yGc  cn$#$c"bxBfz% FE cE" #D !ֿG sB C  X" @ 2jH(X@d;PKYLPK6(AOEBPS/img/hlp_ico.gifDGIF89awXhhhhiillllmmnnppppqqrrssuuvvvvwwyyyyzzzz{{||ưʷо!,wXH*\ȰÇ#JHŋ3jةǏ CIɓ(S\ɲ˗0cʜIfL6sɳϟ@ sѣH*]hѦPJJjΧVjʵP^ÊN$vTIdʝ{Lm;.ݿ˴{Gh '>8ƝJѯ˘3VZk#V1ѓCkn;-vIFMpg1OIwLq'Nb0,43dI"-DmH'L7="~3>XgQO]R?o-PKsEl`FIx筷։@v-L7IuM؆nH۔W(L2Rh,c@t郋Hmc˷[D!U0bY߈L%|gM!/<Ѧa_ Kw=Eا|ϯϑ.\w )?8"E\  Z +A rpԠpJL!'Bz0 GXBF0 eE>HA@"vĈ GDHLbXD& $` .r(0b,ca/QkcHG3юp#ըG/v0x;ѐ,$ӈ9.Rit9& yH3|#%hK;@V#%,_ Z#e.^%I%RPCǼ!i4̌39MfRҬf6mfބ&2i?#,&99NkVs&7)OvF&<)Lbӝ|g@JPӜV`:"AGh NThF3Jюz&`B'@JMR-)Jg*SBԦ/)JӚ9)JNBMbVӠT8*TUR2UUjRMJԏuV*L*Vu%`N0n[*Wеqū]ீ ,z bMlbŃ ,c% YJV1d)V6g5kZVy aOZnufe;FmgEkZ֦#=ll-–mkZHt;ݎTnvr݀xK^T(C ^ D|m/}_׾o_8`;7E0^F PTϺַ{`zhOԱ7j{F`ȻOx-p;񐏼'O[o<{=7xŋ<\tgOϽP|AOOwO;OV /~O;%XCOϿgrg8x 8r(h grx؁ "8$X&x(*,؂.284X6x8:<؃>@B8DXFxHJhANPR8TXVxXZ\؅^`b8dXf(jl؆npr8tXvxxz|؇~i8x؈|(g0Xx؉8Xx([8Xx؋8XxX/،8ԈA ؘڸ؍8Xx蘎긎؎ȎXx؏89Yy  ِ Yyɏّ 9$Y&ُ"y*,ْᘒ.29!4y8 :ٓ>ȓ@9DY(FJYHN7ٔP9TyRYX){ҕ^`b9dYfyhjlٖ\+rYAvzٗ~qY^c 9Yy;PKƑPK6(AOEBPS/img/sampl_app_plain.gifR_GIF89a29kBsJRRZccccsJsJRc)1s{)Z!!9!11Z1R91c91c199999J99k9R99RZ9s99999B9BBB{BZkBBBBJBJJBJJJRJJkJJJRJJcJJcsJk{JsJJJJJJJRRRZZRcZRkRRk{RsRRsR{RRRRRRRZJcZRZZZZcZZkZZksZ{Z{cRcccccckcccccckZkkckkkkkk{kskk{kkkkkkkkkskssks{ssssss{s{{{{{{{{{{{ބ{焄ք{猌甌֔ƔƌƔ祭ƥΥΜ筥ƭƭ֭Υ֭ﵭƵֵέオƽνεֵ޵ƽ9Rks{!,2 H*\ȰÇ#JHŋ3jȱǏ CIɓ'\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧLBJիXjʵׯ`Ê*ٳhӪ]˶۷pcKݻx˷ܾ Ln"^̸ǐ#VܳRTOs7 txW̺װRVXĦisјKzwȓ+_toojf{μt9?vY-_y6/E}̻Ҝ3fWJcgx.>TJ:鬷[/:R3>Tt.?{꾟<7AC,zwwO /Ȥ/??2_oRBX'H ZidU GH(L WH[|& !YHP.I A8p9C"0ImX'@8*ZXOEBl%xH2hLרF<6 #H:эpG>&{ $2}4p#A;&IJZ$%5I /y ƒFL*Kx/5%)MU|e,GYF%,i"^0 f'$j!Ȧ6nzۜ8%P8*v"gI~:2A:NxMI4l';ީЊ@#ZPz(̒'Ѐ fH LgJӚ8] @PI8х>HMRԦ:P='" %*T5` XZիf%? ?Z.`%Uӭ_^*WԤe <ĠI0cހ:d%$ p'^ TㄌBQr|:_rla-[9o 1 ~p|fd氞jYsqqsx3NtmcB:.!m P2/iaD(7\d?@t-VR$L ;˼`@xUWk<:^j|l l֠ٴJT]SrӍnn/?rSؼow;6Ftm,hE |хf -c264.H,E5L'y 0 S#F> ##(Rd˾ xhn8={y}mk;F7ұT5O +ρzJOzёNt:}PWU<[\zڗ篇cGٛjf_=jgRN < _K'|x;O0jTH~IoFkjX7^ 3WlvsFzgdwNm(Vr[XT{=N7O}UدT7K?7zgƧ&Pjb '2Q7G p {gzٶnwuVkgw[+`_ |Zu{ l^ȁ?&fwfB6Ȃ t/2OU7~~GxbxׄP~g2@i Xfdy!y\ dݕP AڰP.xv]|$uXmF+p(W7=ȃIo@Ї8;}ϗw}Gň|xyWVq~p' p0q iS.p`z G@Zq\1grWDir`@j @'ܸux@~Uhؘk؍uw%+@0|xht\fᄷ8:bzpxB\jŨj˨dui(NP ȐN`nn+Ƀ&T(gp #Ygpٗ&{*k@)lֈ4i@&|- ֔T3i5yIvK}|Hb x7fydcbЖdr9j͈ B 6y>xp[Z}H_ }Y))yȘEiy>9Ij9:atotdpy{y  PPItJśY)zEibEIYly(ٚɌ J霺 ٛ)IaeD TYw_0aGRpʑШ|Aɟ9_  *ExʼnA}j"t$*IR7QX ZBvٝɗyI`6 >J@kF)?{G_CjEHʞBJ 0zy6uAPݖIkʈnJps9WJv*y*㙢[ʥڐaj8x頾p Fڧkڞ!桫0zlZ_ʩ()!ʖy:24ڨ5]P FzZfUګ\y|&ڣ 6*AZzؚںڭ:Zz:Ӛڮ:Zz뚯گ;[+dz ۰[ ;{۱*";$[&{(*,.02;4[6{8:<۳>@B;D[F; JL۴NPR;T[V{XZ\۵^`b;d[f{hjl۶nl+0t[v{xz|۷~;[{۸;[{[a۹;[{ۺ;[{ۻ[{țʻۼ;K{؛ڻ۽+ k㛾껾۾[+{ۿK)ƹ xlb [hK\l   \l",.0$l&%8:|HJ;6PT\V|X̻֛\^`,[d\f|W&0m5Q" $+ mM0 MC= mA5Q*4;=$ O`FK`m'<]0֜'8ŰbmN`beg`] ,Q lf``Pӏ،M]L$ W+I,,Q׈ y%ةMp+Aڞ`u88]ܟD$ڜ` ]~հ\ +ܭ5\<}9=!+=`E}=M=$-MM0E-=0C-f0NЭC]0M۵f` $~+=k0 A#O :{FH>JMNR^ފ<]a. -]#W(ObQԐm q>Cv}>N}wN^O=֪v@HІcb`5kSNֽVuNؓM-<~q2N,M^:nNz 펍0Q-m澎0} nV}Nrm'J驰н\02]ْMِ&ߛmO3ʳ*=|mN .˞vی:_<>B_MFL.UNPR?T_VXZ\^`/,d_fhjlnpr?UJLx%|j?#cvM?#b?V"!bߡ_?_ǟ2/_ןo_o<ӟo=_O@ DPB >QD-^ĘQcFb6~RH%MDRJ-]Sʎ3mބ8ON=}ThwECTRMUTU^JfV)~VѣO͞}UZmݾqk\lQ}*X`… sxXp^ƍybʕ-_Ƭ5qf=N辜MFZuù~64ih3f3޽}\pōG\r͝?]tխwu\[YߞY3Nzݿ_|ǟ_~0@$нgcm3[Af/´* 0C 7C?1D\PJkdY/5dMt\:,PuT]vO&5 TPb:"Ɩ]jY^ZSE$xdgn;I \\D.?YH.Y2Ǟhj[xd&ƓL/2DCJ6ilV=viqQ\0DdYgq ;!2>Oz&l}mbqnn+喇h 6If`<,蠃1:H3?Kt˶>sT0q'-|f~Ýlg/w toh߂ǞCdmPHAU`Ar6p(z(a-!ZD0G SX,BsOw=6䇿Oi0!oRYC<⑉qLp8A^= ]DAgCJG=(4Gp-5z?=1~r? "_-H ZE"ybB5amB P#`/ņ 0F!cFZ>[bG|$78mBt%Sgcx *&E@)O-h=#O>D<]×[0b.~(D L u#Y8 6W' x p(`Pl8tNsœ27K,uU |A K JF&aЃ. }jCL=V^SbX㓅W=(zh"(*iFE{u_u`E4 sԂ}dX4թ}d*HB`gְvwu9VHD I 0 kMY[لm~y;q¨Ca ?Yc[>uL;Ve>ңB0x: bRЅ.J0=x^g嶸oʐ`8~ACB3z /8*r3anw)!@A  -hA JЂ2 4 *η}Ϣc:Ǭ08:BJ*܏(sHr8++:˹dB$/FXok ]a ,21=a YH mU"ȮmyPnW:z {jar$k@*=hzC!F4>X 09A3R:իfk8Esuagb戆*ܰ!+1=bYΎO<.KA:sp=Fj+.h΍tәg7{ t\wCro/ye0z 3y7hn- t3px{-;0NNG%_Jq\=шQ5b 5MU*7JH?-u+%>ғ#$40@@ œ:>L:$s@|<P @4"s@Bbp;()$D$AAC2: LK!B!B)9@ <*=>T;<-A5PACkqFCI?LBXB$4C|8۸ 7lC8D%YĈ;<\]̑N4ONQ>0iG{ǓƇCt|A iS6,JiqDiFNj@ziǐɑ}\\@TlpY;Ȃ,h{!(]CP(CHiІYE|Ȥ$ɥdʦBԉC(6Rk0˜K|]6Ȃ(h>8JZJʸI˺$6,J̺<ʱ) (H](Nrx˱ʴLKKф=p4R"s8m8SS>JS8p`Mx%BL5JEɔTd漛}LI H%;Mv|SO$O`%^h߬(vl=U<}WxWZGSIJE6]g@(Ʉ(hcC?@A&B6CFDVEfFvGHIJKC`+ .Ƈ1Q&e1>YGw-X87eUuT%5Xox==a&b6cFdVeffvghijklm=N-|1sFgSVIeІ,Rc6zc5(Y(^._&`FFVfv臆he{s&fuvT1i礰,(,(PX^Pk(K ,(L&i>&6j?,<6FhЄ,VzF>%,( CFkj@iiAGhn^s=b6k~kEDs6Ǟ;ɎN,njDÊ>0흖t5P21mڜ8(5`mWFnoavnnogonXv6n5@oonn^~onopև[oxpnf m(CJ>Fcj-ah hL *Y(; %&vEa!.nnFo9v]p`$7%MfXir7r"wr Go#,7W^sVr or&/rJ1s6o)GUw2,=N&Bwk9 6s#oInr>wrNs,gO·xpzVNGr2pbTsJΕ ף'tFoxVXqgّIN՘^iWnk\ I mxPso un !PwqonwrEf.{x|K w*w}r~sqHwyt{olZOLxxrdxxxPR7rYxowtZ&wxHxu).EKEv߄%KHjzhޯSX^/X'R(+'{W{E{uk8{{w$w{_w|gw ‡|'}ɏ'/grz}zzYa7,O!Z0 7 iP)ݖSeX^;Dj~R/_}/S"G?|}?1WjL7pLC!N| ^8ѣČ+b,Y )ZE,EYpȇgPzBe5yfΘw}+s:ƬZ#ybǒ%,Zwjײm-\wX߱>z/®Ċ3n]bY*lreo7s3О֚4ԪWnWsYJ05^mM?vo6l׮5v.(6o쨥>{O}~_>z+o{Tsw/~pqx)x ֧}Q}ĵ!~} { Vfpaמ~gy҅א58Zi[cVe VZmp$[Gj5ZŴA7sJaYj%Yca13kPYf)ٛnhudi&'j8\v ajd|槡e?fIn IJ5I~"zjv[&!(i(VᧇZj)x ƊN'j(}{i~`aP e*m%] <0%@&c*s9fͩ{S1۹h~!<2%|2)2-21<35|393<7ԲǺ]ּ@idIξp2pU[-0 ),5cE!f1ksV=6x7u]w7Xy7n 8mx;n4KJ4[/<\9\XgvJhqh6hTcw~;;; ?<<+<;:d2m {gO?(< W+{o4JM2x)` [Ttjxf~^;n3x! c(Ұ6!s>!(!F<"%2 ${!i{N;*! Cs2R|p}̱! udSX(խv#=~# '+ MW2A=.rЂeo)-tWUnU mي H 5⏷mBL W}/|+߷2+]Kt cƃzQC )ad>5q̼,$ Sx©G{ svh}t96U2)>wa6F/B3Q W6U1,X+O%1oCY<~gleM2,1YQ'=ԅu#9)S24=Z;;EL UE mvG'G(F7ӎtA=-jPtԔ~1jJ/I5F4{pn)KgJ^Y31ɚ>vuiڠhmT;Zmcƍt5mqs[&#zmV~Իz־][/Gor :]06 jVWܛq8IQkyMjK*O?Ps|6˳mo[1yQaݐջCoy6 84 \ /@{V 8m/7wYN%yϮr;;-rraN3GQ(夶ty@I:ϴ>TW'h&!ѓ^\tEO]n?{iܭ{;rD捞_>x=_QS`GƓMI)XznM?5Nͧwǽuw]y=__)_yTM_Te#mUy%U!pU34 T&t f5Aa}e\ȵ `F]\!.[ ^śSVa&&2c3>cIBlQ<(]A%6c8DdE:ҍdPNGQ%qd~#4c?cT)CXUKO͙LR]d-X9+cO-6e!Z%[RFSI$@!15YUKvPVbNNd3%YfYYc>&d.[nu"'\6D^(5EjE0D8abk.f6fd֦m&GMX*D?|fvfU\ʦr&;s>'tbnftJ$p%19dw/^4]rOTtƧ|gBM'uF90Cԅgf^1CZ[;<``VZjv{Nݤ^(fn(v~((((}eAgh`jK)FN)V^W[i'^ 9lA 0@hd1Ù2\LQdTM1)&})e~~C)X@)蚮)1dB"A0)iv"Y^FoVI(j;8L ZS䈤I)qjrYFרb(faUԵjà@ɬn>e*6gz dvW簲I]IU*km]h*iX{^$X׷+WkgCf EYIWl%3rkpCn,\(kJ^A,¶j 1h<ɂl*JeG^-RJcja;mhNT.mbX7f.E~Y-f2r-n6 XPڒN|j:-%r 6aZ9b#Jb}޵#nN. %ζ r/A.ߪ38kƃmA+0n:E"󚃲A``BD%!ѣZާ]*!Z!ζ,)hZ֩)n`'0.EFb=mĽ! .H1Z$֝ *!_o[ofn.rBU5N^8m3)᪭W#l7j! bɠ]^ y_ 'rqq\Up0N!0YlNzZ2bk_-q\-Bb1pN^f;rBkrq^n 3!-ωtpZfq119V.21_$""3*Wp]2rn>aM0+s/4˞77Ϟ$kP),k'-3ܫZ;]D3?2Pچ&s0pqpBWv3*gq3$)'>8:Z3./&l3N_d@Kns#et`81FbPy"n!np(s7S3Ck5qИ9X <4Ý?-BY4]3|VF@&DPctX_F%T;1KJNk7n]EF~j_uZm= `W1Z[OQn//1be׶]GV;b6rEr~D2GDiG[gqH3oWkj?@ 8?&T]Cf6bʼn fԸcG qȆ!My@ʖG)2L7qK'i\)4(PUuxNOKT1Х<|TR]BpaĈ]m[oƍ[n]wջf?(z}gqw߽O?|y~d}{97kmXi9J-+ 7kJ[+6[AЋ=@kIQμYlq<Ro* @ 3+@ 5)zr5&3R גɇ`PC,Q1J3sQ5F{F9-BYRJ~RJUW~Y(zTQbE'8>JWEviZ`=o Wq-sMWum]r[EH=譗^Yͷ>}_'s߁7wNXnᇿy_149XGAOQNY +iqY>Kf\Z]a%:snX9%i:gs]Lku[.fgMo7n~{Ն1O\ж,rm;1i/\?jFY<ܬ]i]+sܼU׼}OwՏ{OtY=[~l՚^\'^-Ǽh+xjNص_ϗ{.x3G@MNyGyA nP_Y,@=w]&9=t(<^89r.;]B=Dp}p!B4#+kMtE)NUE-n]< ҶD1qј Q!dtugF5ΑuG=Qerț!|4!nj|k#!ɝ[%եHd, $AJQℐycŷ0Tjk^ mKU͕=C8|r(KiSkmK"g/͜_S[:$5xxйB$& WGA3eְͯiCO"T@WP P|^CWON3"q?1-aZ2Ӝ f4%LFT'GfFM lRRp/d=*<>d3L{JL=0YjjLPzj}5+O:Ԡڱ,5j8T[ OD3efY6}1tci˗n$3HL1VfZ$X(UK6քŬHK?r]W6Q}aIB> 2,&ɲb(;:ًI{mM|bGmmE$H \KW '+p?6[jϚwځve4LXm@يJzܿuG"oB봾KR/L?+0.$Kjd^OA,4`˨ P,%"l 6: Q⯦0qz,"J@Khu1fLd4dHp$ѴҺl\mPȐn96o \YZ>m̬|OD0dƌj*lPjSp[pV +jSKp0. ȈB,1ϸ"pUщ-fQꪛqu-bQ٭mQq1xqi1cxlE119ٮn׺.ƑQnqq1q1溰ձҗ an 2 Q.!!AN"i'"%N!< #A2#q# 3:IB2%G#I2㶎iTr&Æ%[^2&yRgl&'f~(N(acKtRg 3j2(/XOq -$&j2F=Qhl2`\R(R֏/ qJ/̴ `+*dP+ /g o$ 1) D QWΐ4pKPP@s++4m*0W3*PF/FTpp8o9kwL8G80/S5:'e;L4%ps=GSr>s>c64%E>P5E c93 ss84< 3,+,)4,N-, 82JӤ/BX/ \+I1,et[2 sF'0eFRirEgB^B 5;b*4MUr -v4N9NױږktP3fN4ڦP_ PenQ!lQ-R-&RR9pPSYSEd&TiQ5UUuUTMUa5VFeuSGV.Sku"qWUw|uXX(,XvtX5##ZS!vZ$5[,'d[ѕ,U\-\i'5^!\춆5]^f92B GSC7 +o.Tr?J&6ו_ CVDp. LV/ȦKSd%4c505:m/hM! N/ 3v-w>}𥳐;Yy7oGr=x= h^Rw *HR"'zbkaJ"&wf݈^/Ir ߁&wc}}PR(g(W^΁8]z<u`&唼%eXuvgi_k H#i%FJ[B*MQjv*QXcꩨi)0! \ S4ȯ¼! R1i( MxЫI!OG%cXɬJ;b+R.]SkoBSI!4?&%ݫ0&3]J:G$NzjȨj R'\Ë*쫆JwȬ/OkM/ɿBr *Fּ4t  A<0]9}^BƋ&Ѕx'npCm!kxþ_G K( k+H<41iD#!=xU ?t6l|7=j=.$.hf3 O)L a0_ MyX$'II ȤMA C JX6qq)XBQeb .0zcr]os[GVȽCt0 sP4Ii /D'h [a QX( ҃#Ǜ$Z<&HVE,;}STRw!s>LH4: DX8ey>UԤJ۩)Oճ0':}_'U* H*eP@h' xs=9o$K՚S<;%?HR+ԡiÀZEx6)8djԄv'8jŔRĬͬf7zⳠ (BhҦ$׈1fȂƓp@@B3mnzQ!ȡh.~vMbX l9⫎ȫv `ڍ5k+A 4@@IW-E74bP.tc"_sm!:Ѐl{g]h@ Wvj/tk p`N'@ .C 83aNHL]&ҫo/I2@v@p`." ES(" ,d \H(APa VR yt@>YЈ6=bD;EJ'0)mN;Ӛ=ML$ԚFVVհgݐeFwm^MbNlQϪ uMj[ζ*hC[d涸Mr6vmyη!BUN| w;Hp['ng 7k{\(OʙM{0yñ ;$C؈hnpVeNk@?PNzԝ&M{`;Ӱ SRԞvTlvW*xGC?>g'!]dVSUw[^ȼ7{GAL*{;s;\U[7 =釯kXAv`*VEX`d?{5?v*O~B\>+[ nN4='|7|Wvmvn}*{UgH"pɠ,|gxx M1x*W#3:c꧂z!}Vg*M@g*8}U<Z|`y_@(fog7+@vˇ L|OM@._QRw^d:X[88~g_@ XX{_Qwz7w[8`xa Ȉn U vv2؉؇YyXXH؊8nx :pt'8@MS8ȈXϸ,p> HȍX¦]xh(ǨXƂ`q~,_q"}uy(؃ip9WP&vPxyYЋ2?ק66)lph=*- 73Y7y88{LJAPR9THy拽}Xٕɕ^bYHfAxplٖnptYvyxz|ٗ~D'9Y k2٘甎ǘYFsls=s*HtLtPS Uwu*uY* xv x*qי(6ȖwHI rw*xvWW; i˹vyމ tYztzJדI}XlI݉qƇ|(|0g}NYwG>WؠWJv~ ~uW z~hyǠ,٠۹/*6jm 8 t 3y4*UJKڣV'8+؂(Bi*y6ʣhʤlZ.ZJmY hK؞焽HܙSIʜkڢYWwmi pnɀyhV*8fjp:x:hh$x ብJ ڦJzmXxPyx)JZ*zf,*庤:ZHP5袆z躨<Hlx9M#@~j ɐwӍZ+y )$i*,.i![9ғA91;JًL ;{ZikFGSJL۴PR;ZV{X=\^bKd[yhjٶnp9tv{zۗ|۷{y;[ ۸f;[`;r۹[Aș7lˊuIu*X'dgvGh" mvJmۺi*IYw7lɋsz'ٔJȻ˽ӟɷ||{&0KʨZS tz{zWR5:z,ܸ?'ɛFJꚣM݊,+-,˥(Xs_*E (՛/̦*˚FHsPH Z̪Y\ɪںʆ:jzXF< ,q눐()h#ɠml^ rlwr|ĐHPD:vLŢ<ʬ'ɤ1a:;?:Bw`zǠ ;+˺{[.&+l| !9%9'̲+벬μ8fcP]ٳPLXK;l\iI͊ Ћmkyݕ}]~ Mz"=҃W&-"v(`,]t.ҋi2=4]m:<;PK;94PK6(AOEBPS/img/customer.gif`GGIF89ai9kBkBsJ{RRZZcccckkks{JsJ{J{Z!)Rs)1R91c91c19R99RB9RZ9k99s99{99999B9JBBBBBJBZkB{BBBBJBJJBRJJJJJRJRJJcJJcRJcsJkJJkJsJJJJRJJJJRJRRZZRkRRkRsRRsRsRsR{RRRRRZJZZRcZZZZcZZkcZ{ZZ{Z{ZZcRccZccccckcc{ccckZkkkkkskkkkkkksksssss{ssss{s{{{{{{{{{{{{{{{{{{{{{ތތƌƔƌƔ眔ƜƜΜƥΜΥ筥έƭέΥ֥֭ﵥƵƵֵέֵオνֵֽ޽ν޽!,i H*\ȰÇ#JHŋ3jȱǏ CIɓ(S2˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJ0Ujʵׯ`ÊKٳh^M˶۷pʝKݻE˷߿ LXˆ+^̸NJCL˘3k~)yϠCMZiҨS^ͺ5Ӯc˞MccV3tU{N8[&zo巣KNqn U*{w{O櫫_Ͼ=-mmjC}(Rp#tT#qv|`)@ o$p.]6Wao~xn[}xυ7pO"0LD< MiSԥ@M*BPҞPe )}`*ծz` kW@)HChjLq 41 "xͫ^׾x`!$&S>U0djV5&*V*ze=kZjMc)+˺Q-Y|l`Tۯ7A']2l68tKZͮv,@ @4!ڶ%moכw.1msKSwnyk;_w>`+{e`1Jo^j*9fK^2$}pFLbFWb0e8(@Z`3TZ Kȑ3ǻ#d*ְ>zDj+g&_60g:y&rvIg/(>X< eQ%b %=}C:&NӠGi8lhZʩ-tXe 'ڵև_`Z.Aرlfz9}ǚ;[[9sm?gtIJh19AM" :m v$>O+s@:*&%oKFAA`bG5=%uj\.w'U$2Ok0YN\ܼsabyC[ 6ﴍ9~ L` y;N 2 ~#?Ý d= ">]0#a0 y0 Mvp8:<>@B>D^F~@ L>JBm n'>. ` ` !6hjlnpr>t^v~xnyrݭP~舞~. ] mPW1 ` +  ~<*ꅮ>뇾mpX  rn. ` ϮP}}L7ڞ݄Nnޝǡ )  4N~?_V1] 0l JN >n 0 1 N? ?ޟ`p ` P ? I!^m  3 ]`#j<`_vxz`<BFd@ O 0d0~9X/)~m(\_n=f#/ٍ0 v |`\`=!`=??_ꗯ/i?~ 0ď PܝZvToRkp _1 %萙>-^Ę"5=~RH%MDRJjvThyQ5męSN=}TPE*Sذ)[-tڍ[XV.tTXe͞EVڍ"pw!sʕ'.^a+/[j8Eeሆ;0].!⥏h~}YQ".xPI ^_]V#KڵmƝ;_3\pŁ& ѡbxOˑLR<Mlyf VLb|0]dA{5h9B-yȆ<2O}cԍB? nl Q\ 0 G8B @CP:X6%A q< "f!:ɱD%̸ū0FM~VXD AD$6 C .p J N `,V~Mħ$,#43-mc|m\ :Q\yTh8$pcMr~D= 鸀SW$IR1Cԡ u|/QRhF7fZhj^,o(Z $a/4QBA?B LXv0MkHb4龑mDSۇM?r ۟M*/zE_(* GOIAԮ9)> :812цPuE,bG%vld%YY6'e5 +!NRiz.>? PjT!Y mt5Z>5mmrG"8"q=+b9Upgs-FHVĞwnMW!S3PKMlzQXFgQA|;_V6hltfOw08B%*+IkndNmc6حZ76 v$'IA⻍^bA^8{_,?.ShTF-1rp=jZoW(6 7Oz.d#'GyUr3>L[7 -U ]" !pGGzґrhOzԥ>uWWsw}N :Å}kƭtotmw{w]ߒB?xG|x7|%?y)z׾So2~?|퉿,83?}W~}w?~Gտ~[?h;vd64DT@@t@" Ѐ $4DTdA@̿|Ԟ "$T%dB$B#¯@&*+Կ'-|3,014-3B2T5d63؋ Q:9CX@ ?4SEdFtGHIJKDуC;VCīi{=DUaN-SDEeFuT;uSySES}xKTSJSKT3SIT2@HTOSN]U3C LϋX 8[\]^U^ݔjUUbUaUr \UP =mVhm{]V}U?bmQiupUg_Uuevu\-JW&VcWgUdmQe=w%؂5؃`n%MQVVE UfWjX@@WWlnUՍzsu=ҷkYiUي=Y]5֛^؏X}E~j ZVfUibUVڠ-ڞ=Zn٫ZZ@M=ٮ qUZEZ-ۜEZU۵Ucٓ58E@(aeuMPyXՇۚ%؃%)Y ۷ [[c ܴՕ=%N\L\;\-]5݋X]M Uň܍@;ZE]Mյ:^Uѕm]eީi];]%܉M݋L^5˝^Iڵ_-%]!;_}\g޽^,]^`_7 :P`̕^ƴ M`V_WeN45H]؀M5և[5%&#}&"vS'"-b01&2a0^8bZfc b7b)b!c3=>aa&5?F5b:,b'~/=fAaa4Nb}@9nHfv4SFTVUfeBNYa!NcXp{8YNOGFbk=cH#.d'K68[ZjSne\^ؔandhi^e^VP\uf0e\b`av&cpn_\\fA>ƈbvgc~zea#$N{芶莎銆A4Vfv闆i˜隶i3@^ij.N/.i~@v꧆ꨖꩦꪶꮾVj$N/ 6FVfv뷆븖빦뺶.kkkVfvdžȖɦʖliCnAl'MҤTbR. N,`v׆ؖ٦ڶ&6FVnm͜OnHƟIVltVӴ`&6FVfovS G9KsdzOL=nuta74GO>͞OϢ|~MnOَon|eJ87GqZR}Tqn pMR4D* .nXV!'(|oRoOqVK8 mn(./#ܬΛ2 oޔ| pN<=/81M܌q?gOisl,psaJK2?rTƥ\&Vs%+DTS%R)|`JZ[ N96YM:w LcGvLuuW ;I-Kk_l/:`  vj9uܺqk-7‡/nʉn|gԝ2(zyf)"0x{v~{7ةo=|ӯo98_2[E']i]g_Z]ET^s硧zj!z!7bmY_w>wfh%tAbIM A dEy$I*IM^fu`QWR;ԣfIݳ$i&mR$A a F`.Ye3eQy9*(':A"Sr%z^ʡvYiZT(Nb(*E~sj""9y{, k|JӶоCFdeʚ{.>l '>F// <0|0 +0 ;0K<춋fZ1!<2%|2)nV25|p,c2\A =4d\lM;tGGU[}5Yk5]{5a=6eDKόѐC 5qˍ@<7j&=a2 ށ >puCGzɷ8Kn==y#={y<9K^妣>;p#z|O o;ݽqvZ BO@~P晧bJƚGȯ|//oʷW7>/7KPUvL|`1u} {ҝb,A# M5p7QԿ }O g$C'dz "By*1"^|F{ S׶@n0Ndb(Ek2b]Ċ`BByq0_[s3^',#%B_ʅagRB0V(|#a\M񇈡 GJHƶ'rQtg4H+:ЎV "KyqT+EPpAˑepYJڊ{נH&7V% Vr`d:ՏwQJ5)q'?nE0T#eVɥ0&0i3AE~REJOԗN=KLu?kJ-]O]&ucnwlv- DhQ[Pe!1YamZOi{ԪkOR Y[ԉn7]{n>=nf0}Aktٗ5h8p imcޯ&vq9.I;Ӝv>Y:T-Xm?C1Wnl)&6ϥC&2 B9%:| !A;=yH3ϢxG>`INוdwP8[tN((tX(>K&bZjȫ]n:͇Ϳ<,_҄[xyTDjmK넕,U=Ծ~@lByi>~p ʲ~a^s_m>Yٗoi.i-5 Oᑸ_ԭ F5eEMb}gje)I]ϕb 2V p J\Q؍ `$݄x-YUxZ [#y5ױ B~PRe EZN  _!M VDQc1٠M`J,Iuax bQQX`!!1C}fϟ'&$a\"o >]'|"U"ӑ"~,++Rĭ,܈zEe0j2HO-D3/!|P![ 3~D#AƖv_)ne%A,#8##6)ҦS\]p;n6><ңA8-Å;7*$F"!Wm慕}T?&S=YdmKK$LƤL$M=.\$TIddn~&hh m\p&k" c_\k&&4b a"!] Y>]#W]vFqV2*m~_&rrdsB!Pp5u!^qseawyVe5Q&! "%HDΞYޟZaw~gpAi^|^qխ'}v}ާ'"SIa:[! Z]y&hN](کWwQkg !Z5hS ~$Meb<c_V8'@Ζ@!ZVrєqzNVG|ޓLE6\ ֛nz6baRW1 1x:UYaƱj#5~(NߵaӪ'ƨh©"3QfZYeFTj]vfSB%?bPka㝮 :J_2i5wR 9%- HV@R'>N_+oVo%'R+mUؽ!*с p.i0EFb4~$PN[h@E\jUVe")jcfhkT,p6d*e) rd%lii: B˾,\0,欥Ŭn@£2*b-jZN+B="֦]mCRO7&-""#49Ρ߮֩i-+K[>"ɭz#Q4cNrt/LmQ&J㈹疮}..|..vn)ZM..g/ 2./6>Πa+rmɮ^/:vݚ/Dҙcߴ/Yꄺ/nNeff\0}//7$/NLl:p/&\.lJ߁rg"^]0b(pe69"R'Saip㠊0*ֲN +g6*r&v>ާ`$Zpg ~pa8Eqn`㱫.q-*(?YoZb;)\-H#VN#+%*%"q0(έ**4# k&kۊɧ"##h .(Պ0".^颲b/+! ç2P9*3*)0ss_23b>$ky!ՕybLQIcm'ew*5.fsq)5t&,3}Gm5>qQxnBsuHP-?4%"&ّ8+> 7Ϭb8ÙW/[H/J1K Vgqi.y#q?Jy;WM9R3_.%ulVL_cOR3rBUs.s`w糦n C7O0,*.i9:_03B#֤j(0f@{bztp8Ly{Md)9 NphM"{!u^fs=9Yvar J' ֹ<NS|%n4>ra#$W*+E/{ -(j!44m~ٽ<;]U/:v{ɷʘZԭ<˻͗ ̓WO޼ϋLZW|[L=mӿJ3^?=7IK}V֏c}go=;G{hgFگ=۷ۿœGEϽ=vݏ߿6Ͻ>~wu }-=K>{!f/df>nw flٛp;s&뇽WpG}&1u{&WZCg;a7 ] >՛>G#3S8|pRow6S)J37;?hs Kϟ>~4GKO=<@'P^A 8p!F8bE1Z$CLpH?Dh2eFyqɓOƜS>?:hQG&UiSOF:aP3bⶕk׭xFd1M9֬rYgEβ+㖔Qޜq;޸ &V,! {3aau]-XQVmV1e W\UgiumwWqިM*+L~ X .wMXᅃ9X)EcXu(AYIQfcJnaYДiYƕYyglZp&磑NZinӊJΩ꫱Z뭹[.N[n\ />\oSN)19A\I/QWxYoagmikyu]/>O^yXʷ'詯Uzϧ]l^{O_}OGީW\_(@ n4`ǐ}+`!h>e-AU'Ԡ0Aσ(B- ]CΰM0 qCP=C EԇD%Kt?D(Nb]Q]E1wa$:3m G9VsWG<{cȧQ4$yHE.^VA#!IIN%1IMn'AJQ4)QJUt+aiJa;PK*:QeG`GPK6(AOEBPS/img/pg_def_tabs.gif6GIF89a!!!)))1)1111911999BBBJBJRJJRRRZZcZckcccckckZJkcckkckkkkkskk{ks{kksZ9ssssss{ss{{s{{cB{kR{kZ{{{{{{{{ckBsZ{kkkssJ{c{{Rck{RccΌRkΔZZsΜJRcck{{Ƶ֥֭ޭ1Bckkƽƽνƽ֭Ɣ!ƥkƭkƭƵƵƵƽƭƽ޵޽έkέsέ{έεkεsε{ν{νννֵsֽƽތ9޵s޽s޽{{B!{{Ɣ{΄ΌΜJ{Ƅ֭ޭ޵JR΄ք!!1199BBRRZZkkss{{9Bc{ք֌ތ!,H*\ȰÇ#JHE.2jȱǏ CIɓ(S\r0cʜI͛(_ɳϟ@G JѣH;Mʴӧ)BJ*SVjZ4`n ǰft(Va597#ܸmOSjZ{qo†me;X~ekVnjdǕ)lW\˘-m9qŃ^Y5ڭ'{Y6`޽%yjٮgڳ͡KGg=;m[GܤW֟κ3kV^#vy}V ~'~58`ͷ{KǠQ ^Qh" >|](lV}杆6X#u#58^.adx$s98l9!sJfaFU%a★Aٞ%"DrIRrbщ^qY~tgmJ衈fdI4ϣF*餏rh'1]ibMOKG~z0R'RrǬ QQĨ]JLdMGNz3#GQHA̵RĔ: Lɪ4n覫n@Ɣ?FJ%!/%qAL`1,jD1lKN+SQu^)<һ54Ɯ #{xToOү;<10QtB)%[,:4GTҬѹ?z1Lu!$QƢ2.՚6xo 0H0;w#NF1CLKCLO<찳:@}9syNQKzq]ÞA5aScv~xyoF?" .I(7;s:C8.]~zŴ/׶oOۃ ٹh6kL`0(zcW6.T H"a;P Ip.@˚GPc{ g8arYah!]W ehB@#y0nXX _BІ6 ] z\J2oN`BZi1=#S fA*,`GHf2e/_H8ÁANz>a0͐DDdYF 8q a)vˋr| @ X<1A7M6yTdpk!<8Iq<(P] E+G EW]h@)-n1@{,m^JW`S$ pR~ 9 4,`L-fCe8\)F]+hQ΢&Wz6T&)dqE! G8G%z^^=At*t`EٴU?ͫ^*Ta⯀ *)DSeЀFah`HA@Z<Ⲙ,ffdh+\! "nW\S H<nC0!|&@G= oZM=[FJd){d$PEd` &7x.gaJ3p-le[& !. ns[]La1qfۢ+MIp0 ᧔ yV QB0[G sN((^E0`("~aI3` Ҋ"C 0n]>[Bc[V pܓNd<@J `Z&dYQ[fIAG9bƬzPP`vc3O .D =H,@ PD_ #ǡK}N!S!0d1RPD'd!꾰:*I5b= ̎Pa֨kvpmk:̾E;춻`Gq;4(GD ]k6ڀ JmOӇgO{{]H ՇOl~8c N^yA[!v߇!Ն,bl7~=?{_҈ ڰ}|8~"zœy# )(~Зz|F'gr0A`?kk7,(zw|GGo(wǁrېc)G~ӄxX3XXh:X}?H@)G +0`?m\C|m:BoP)x32({춃_V}`u3p mX :X|ax"1"4HH9ȇ\ȁGXX{yW?0H Hu(hSH5~8Xr0_f(v*H~Ћhè8Hx\؇};X}(uۀ @ G mķ(8x(8Ɏq{ +w‡7W?yxw8r(ȃ9W lKvЈ) I)B A(}3I @`#Ā L20MLIqfKm|`}@@ s G ^8YG y1kvPtX(y~x,|YwwY9(yg`P98 )ɚ`蚯9L`Л uRw)y7w5p+urwmtiPÝuu8]qV?wt>Y yuym϶Ys!$prEڹٚ)rznNנɛ2N;yIWpɠtI&z(z*tjn *Fwo١١6z9FqEzJ*qINpMR:pQ:VoUzZv[ڥP^bڥeȘjoʦazi(!wozr:gpj:h}t*j zڨ*u |jI짧Zz`[ j:ZyYꫢ5q*jꨚꬅک*Ě)JZZY㚭 {ujqݺ*)꺮zʬκʧjẪ;y {ˮ۰Z)رnK)>&k(J-t *:7/zگ?tʺ< ǺGrI2+FN(X^[tZX7d+uf{Pj{m"+ Jtkwy][Zk} :L[ s{+˸[Y:Jw'Ƕkr^;ۺnKA(kqg)˻C׸tˤJqۼKǷڹ)˼ҫp۳{٫:Kkpk 뾬 9q[SGw;Lٴ% K|ʻTzK;+5K3֮,3D;$x{싰.,-<léä[:<@\X|D|.sΊrӘ~ЮdĘԞ1ԿePVGJ@v`lZҶ贴ϡfo:424Ba/ѕ&5<׈ؾbt|RdƬr|~ڪTdχYt.LԢznंRLtwophh\fSXJPDJx4>tW`;D{dbTVtŭyuw|||$V>tN|y}ZlnT~RLũnpdT˻w|yuԞlsĴ\LJP䛜\`d24n|Юr̶yl괺,H*\ȰÇ#JHŋ3jȱǏ C1ɓ(S\ɲ˗0cʜI͛8sɳϟ@ Jѣ<"]ʴӧPJJիX[*ʵׯ`ÊKҭfӪ]˶۷pŢKݻx:w߿ I 0ǐ#KL˘3k̹ϠCMә i8M۸sͻ Nȓ+_μsVKkνO^y]ε!{˟OO970 g&߃hA1 6dM1 ("rh((,mBe#68<>6*_p`< wTiXf\v`Yvbih_l4̜tiu>/S4Ɖ砄j衈&袌Ω'p҄Hbc |itSṽ.-C&) ߨ\jlAO"lLٔΊ*R2S@o h>|P6Pz`m 5քkM4[ ZFu͹ٌ=en2e.&k-oh,cళh&QI6_  ׀M.!( P8Ccn.UHi@2p 7KLܱj3_"/,n.U.u\>hn96DMpA1abb1WsM5- քgP{;2[SlgD4k<9=lض{m=R]O|W=ps~95?po>O>7Q5/Ss `@77B&‘ Lw;E6,REG Zoza,Bd"\Ɨ> ulvCٰal(D Ј#F x` yw 6  12m$Kb:` b\2Lgڋ Mĥ1;?겏,›lD$iqCJeDJ$8{ eAWJ7Le[ cHgQD9Alj(-f9i"i04UjZӦ/M_ 8rܔ#9B`@2 lh\V$0kcƴi4)XtuI|Q"W5fgdezdU\?8[֠ 4eU@r=F djYF\v/XRW=NؼNM:6ȀNI/Y$K~<(w.t Yd>U_f.yje S}2WrfP@)4nJ:m͔@v|^G[[&հƔfjTٳnLBr'6m+z]b[]ޯŷVaL@(:?uN@%qƨF ħ,v.z0'r^'Xqd"%g>~Mlkyx^p{qwwG.:W=-i^{$; \W>MD76uSi)rG BYHFJٔȔNRYHVЈZٕȕ^bYHfjٖȖnrYHvzٗcȗ!yW4Y4ϒ-]!0)")2 @{Q"iș" 2P/9 # "I@!0$@* @P%P ` = Û $$`ǙٜI։ɝu509P牞Yיp 0 *@@ D@܄ @9)$ɜʞ𚂡P)Y  Ea%! :jɟ霶Jz*p`M9>ʢ@ڞ xa&0"YR:@zi0 p_ѥu:xzZh 5;JQS B`K~!0djZZP\! eJgJxa@j*ª: n/1jpz 0ʣzTj)jJ b: mڤ:Q z p*ɧZj*ʨz 纯t+0zڜz ۣ*JY .;}Z0{"_ &j+H:٨抮~pLN:Sk{wX ;Z [f*| ac eκ?Z$Kzu)1y֥v;7۸`4 >R;ʸyFC  j~pw;Yy֡! ^[iA'az3pv;KK$[ zЛuK˼Tm` pڬ jk,{$h®Kj\ PW1[6x1 QŻ *ڼ;L Rܠi+ !#LKBk ,|'D@g]|ƽ IUlp̵[ J/Đ` 0P)`|8=py[&)RBʥ|)7.|/n<iil lJny!P(9F,i׉<\PΞj9 dQ,KOl)V˳t0j#u [s&4mP pta| Pt#mS1rc w&`b M$=t0  E_maMq*Vj)'A vu\aF-  3rNQy&N/=Ҧ-?l`av!ב=(Lٸ!{M}]' mm{]̐)&ڣ}໅}&l$PՍܴaܝ @ -KT-3&EsMC qQ)[ב,]޵Aʝ|ػ@ⵌ?=M$04.`02^7;U/b]RNp uNʩ<mW^Y+p,Qm? 㓁*sq 烙7|d>qr4"'sβ%ּQr={ف ~s,N1. >1?Խs.t*@įn껾꒾g\-?vNMT~rنmK.nA>.@0 i1Bnݎq֭ﱎu.n5>.>0 NVV=- 0XQ oCv>Cm50WP0 pVq]W?mؚr 0T@NҞp>WIoD5`_Dn5v.oDNo ^ a/)o 4K`H]6wp "PV#QD-JtPF 5TG-i6m"N=}:Ў vtA*F)1h<#HP nTO]UŠDn,Vm6زuQ ś!BF`j7o@՛+ߍDXA`!+>ZtF.XBmsx&L!IDr#G.aJb.N${I#SAw\-55ynz v`0LJ+o?8jHf ̻πmKHDQ.@LJI8{ Mq%r#b)41FCoI\3 k>'kP! R0KlBHJ,]lKL#S17[ \h?f]pwx9vK [x󱓝]Y=(=z%p1aBEw8De3!!y)x$u"34COa`|8b9jy+fc4~ڴؒ9dF.JfAH9oZ|fj4 B2ygZq% %5[li$<zs0L(5T]nֶueUVAvuo7N_Un޾طop ßH8?5#9gí@O'0t DpT:ie`E D0;aGW kQv9$H( Fmr4€8!K?a <}!Zg@95q?' 1v{2>|&4j"E @}ZnMbChB80 T(]KkQL{UӢ4ط4 0BJ Uȼ8RF0`0IJVRԈ̉V m# Ih/_d (ri 0>HpxN`h1@)L჏1? `Ĺ9eXB0u3{Y#B%ؠk_vgP`a'? {b xhnhDPtF`P ؕ3&X-8-Bv44c`B%7nD$0?@T& ܅"T;2;e\@2b j4{|D0sfeɀ|πL+h^{>k@;8\1@ l^7RJ`&(oka'9_2~iA0Ko.u*k"h%Oaa;fK\M:#5H P Zw4-/AOKS^|%4y7$=3?4kK>>:sC b 1ː< A'k3ۑK+B#0J?p!y 7x` ;38˂/T1 pT'x uc#.东Ӣ[U{ H:p @ |=pD=ID;X'#"AAQZ&S ;!$ Ѐ!^N :Yr5(7kbxbkJ0&3xi?fhQctML eMtOP<ʣ p'S;U-1S%@ ̀r5DaN3LQ?E͛F4M"q PLHpMPE#xRʌ?Á-q/ hIC5TipA:STN$x p?TZ!+lLXR/FZ*6 =MZm_W8C;Z|[ M5 K x;U(ƍ)( ɝ!MZUW7vT4u[\@ XZlvN HRp7݂Q E@x8[?M,N^M/[ZУ(g5߅@_m__!0!_% x^ % 7ՅN^W-Zws7"8"80 `#("@6P]/5 ( $PP%`&h9teˣ9|׽EZ`m-M!5;RPM4bߞ$y3Ic֬RbāЁb+VvSe~snoeY2@*5v)mVg_.9kePhC XhC舆 Ѐq<`FqsLxMggU3X>GzX^vU2SуfYVZ\ \]^`iVcz&؀qL`vj0hi^N&i}Uiu.vw 6i%{fFig.]4W`9x†X6l1Ώkk{2`쮞Qk`kkkjfk&ԖeexLHÆصuFsmngaljVVYku͖nV6Fo Pofo>yh&8 hk\m1H6PfyFzfmlVn5akfpVn10GWgOq8&Wq ЀH7,L[ &w ()r* r-` 8C$_r&456r ^ώ$W45r7r,r- *0CGDWE> eIG  ؀ņpX9#bhSGTWUgV_ui/0uWZu r)u[_Gݨ§ 2c9Ujfwvq^{8u-n] ow:qGwRu@>lHvv{us} y'x6GWg }wg'~GW߃b)P>P>G -*/GNjg׌y y1zOzuwyG?{{O!{/_iz0h{_w/{/ 'z/G{/7|W|{`|Gz?{/Ư_z?|{_'zG|?}pzw}w?Yg}ͯW|7}|z}o~5ߗg~7}7w7?}ww{{?}~~CX 0jӓY~t)Njv},JK nRTҵקп]*%oG+7mX{k] 2֛*żV3Z[VsJ|nquᕇvm[`=fޜWuU)*2q{$ZzYCV9:LѼc|iN :zfK>~>-G`m͗_L =ބ9kbxFS 8"%x")bW""18#5s7#=#A $Ey$IږM:$QȤUZy%YG]z%azĥey&@&m&B9'uy'y'}' :(z(*(:(Jh@;PKECog/b/PK6(AOEBPS/img/reorder_tabs.gifGIF89a!!!)))1)1111911BBBJBJRJJRRRZZcZckccckZJkcckkckkkkkskk{ks{kksZ9ssssss{ss{{s{{cB{kR{kZ{{{{{{{{ckBsZ{kkksJ{c{{Rck{RccΌRkΔZZsΜJRcck{{Ƶ֥֭ޭ1Bkskƽƽνƽ֭Ɣ!ƥkƭkƭƵƵƵƭƽ޵έkέsέ{έεkεsε{ν{ννν޽ֵsֽ{ֽƽތ9޵s޽s޽{{B!{{Ɣ{΄ΌΜJ{Ƅ{֭ޭ޵JR΄քބ!!1199BBRRZZkkss{{9Bc{ք֌ތ!,H*\ȰÇ#JH+2jȱǏ CIɓ(S\r0cʜI͛(_ɳϟ@G JѣH;Mʴӧ)BJ*SVjZk`n ǰfl(Va597#ܸmOSjZ{qo†me;X~ekVnjdǕ)lW\˘-m9qŃ^Y5ڭ'{Y6`޽%yjٮgڳ͡KGg=;m[GܤW֟κ3kV^#vy}V ~'~58`ͷ{KǠQ ^Qh" >|](lV}杆6X#u#58^.adx$s98l9!sJfaFU%a★Aٞ%"DrIRrbщ^qY~tgmJ衈fdI4S<(LJi7-i^XiH~ UZ4`F F cFf`02]pAE?:3FQ4!̱2t:yZVk&wDS?HO=V['Ăt:x \]0<ٺ1<1ܺ4Ĕ!wdQ$O;(d rN`r(%k+:2Gn4؊d0 \m )09=1`p+c1(ul#6r.<|rr7lv^oK0s48au<;먣S8qGsѽ-4g4^_`Ԣ>zD 9#O;_z#R jD!nt<nx:$^9HGo?ToW?=-w}Xôߊ>@+> G?0ĂD(!19ADhH 7pu_F Z$vA& 㶭n}` !v!F7vu/zzd׸.;-%7G ,E-rQݵfd`e<̈ ub210(A3g?, )He4" BPI0yXGx J(&PNOIdaUqբ!Gmk#,vK3SGB3G"F"}B@0I_|&7.RR`8u4@E-guӝSr^nhh.AzK&6(q,#pEpǠ&=b dюꯜDhQ#De."C(0RSrȩNwSvPPH.pA U@N(::юZX-'*ծBVpۖ84li9A׺ڵ22Z@X"5t! QXJՅ&f7nhG b%c4&V9n͎,,\nwUAH`0lN6QHjT$h?"=xZc"˫֖\! р` BGd3r+TZ(i؃Mh(ٚHu (!6K_ju`+\O0op%A˕QU@08` &@8@"$x`Pu%aB0za` N`BN H@'`B!h;[vPD<a#(0QB`"l˛LhHЈʡ,ѐ&ʣ#MiAWU7N{ӠBPIRԨNWVհgMZָεw^MbNkQ;Ўf[@n{[M腻Nwϭv{\ڈED w Gw4!p'|\>߽a+B,xō<914/ H1!0G1N]&m?׆aE|*'XatPuB@!y\3^=>jF{h8AiHE,bxݻ+?6fv^17_>ы z0XtFPr{儷8OW!z^i Ceq˽@_vj?SԷHA:Q4DzӀ9X} _z7k 0ASAils|'zF"+tD>黟zwz~'~(O)|iyy^wwh h߇x7xy` Cr iCw{x}+hwxxwQ ;7 Gss?'rhtsѳ17sf|'kGc 0s Ha8x|Xkڐz 2+ ƀwvH0x(oz}K؇jG`ix`yuhx} z& u8=bos+yJ8frHHlܷkҨk8Xk՘m4؍H׈m٨V8VV-؂+xȎfv80JH04+=p } 9.)+I0{ 8m,ُ)"C% ِ)il Yi"+9{=k?0HITT`^*Y2i[jɖn kCiFi1)A sy֗ty' lxqyǒɸvsIu)k pٙjn )4+ \y kכ@֖jɛ IЙmi˩j9Yjי֜)ٝ܉mYJɞm YqŹZ㙜jnH3*ܖ jn Zȡ=yꦡ":$Z&z#* zТ.02:4Z6u+7ڣ>?P@zHBZsDJnF4PR*ZsOZSڢUZ*_*Wڟ?m[]:`747vڞ)^(k襃F:Uzꨏ*rqt Yiy* * nlʨeڠz)ԙfʦʥnι:.ijJʫ3JZ꧴* uZykz*jںz ꨍ:\T:[]@:פ㦰 ;6&1jj";${(z*ײ.vh凞j6n8;{ʧY=[n3J+Gnt*L{JO+nQɺz䖵xʛjak^m0{۶ޖp 97(vu7|˲~/+XjY+iۧ@kK{Z봗Ib۹۴JlWb[庺+hvn붴˺[_{ȋʻq{{lZߪ<{iC 뽻ڴJN;]K+Dn{oۼl6|̘ <\l˿2 FLkĥL,H+,KVlԶ\^;PKbPK6(AOEBPS/img/dev_comment_icon.gifGIF87aμ||ƴttԄԬ¬´ĜĄll,e di(lˎn_m6 )Fgl& t*Eiج45"(2W)r ,H!V E  ~!;PKX]EPK6(AOEBPS/img/ir_aggreg_rpt.gif.1GIF89a :kkkkkBBBZZZccckkkkkkkkkkkkkkkkkkkssss{{{{{{{{{ބ΄ބ猌Ό֌kkkkkkƔ֔ޔƔޔ{{籠kkkkkƭޭ{{ƔƔkƔƭkƭƔޭΜ{ΥΥ֭֭ޭkޭ޵s޵{޽Ɣޭ罄罌ƔƔΜΥޭΥν֭19BJRZks޵޽{!, :H*\ȰÇ#JHŋ3jȱǏIɓ(S\ɲ˗0cʜI͛8sɳϟ;A JѣH*]ʴi,PJJիXjʵׯ`ÊKٳhӪ]˶m*pʝKݻx˷߿ LÈ+^̸q'#KL˘3k̹ϠCMӨS挡V˞ y۸sͻ Nȓ+_μЃc/]p٪E+Aӫ_Ͼ˟OϿUw]vu+44F(:hC# 6(tH aF"JXCcG 4v,4b<(n(($4D!< c@.9$=ᖛT:Hbw Sa`8["9%%|矀B#م/XZ (*u< yD QSzbZ((+xZꪬ9&jj誢B0竆:k)lXgfi*$i:+–kg (!&6%@ǖ"9n +o% 캢,0)1% H%tZ0p.-0"ܮ0œ w܈&`#o+q, ʣL3ŎzT@|[6o%\píJ*Z]&Mz.<1 1/S'7&XK! ^zlx {nw:t(ˋ䔓~;/N"0$l.<ŷ/s:sN硣|̛̱h1'>ˑ/uط9NzCuz0`-g`zx }{H6&qt,d?DHGF!F|#$Oٸj#(GWF熊SАB0^Z re!,!jZ̦6jzjf. p&zA @'6ϙNln [Mg9is*vsf89Qy^|,!O4 i8InJT4':ՉPRt+&== +C5 PwTOZkt*gN[җ^4~_ϸ[ R)Uؚ@WzT IM%/)kW6V(--y*=n L:xγ>πMBЂ6\ RѐsHCzδ7-ӠGMR/ѦNWi>հk 6~AMMbNf;ЎMj[Vn{MrNvMzη~NO;'N[w6{ GN(OW0gN8w@ЇNH%;PԧN[XϺַ{`NhOpNxϻoBO!hzd`'O[tw|`cGo!?Cyһnԣ>7wϞT7Oz8z$"@{B+q)LSc}JX#@E["t7gt ug }z iWxC xuu^%xZ}gu)(}~w3vzg?i@0zF;`=7 .׃C؂WhLi[w`t` 7r8q|u38ׂLG}Iȇ x}Ht)}}i@G}hw應X}(2}M7tzPyh RHX1(Hct0 5]8Ktxvx9xuH}d؋8gPht|G~B(r}߷XH،hh=tx8 yw}G( H  t |b0`~I,ꇑ IXG70=ɏXىGpg~8NCO 307yL= Z Ɋ=R5ْ~7/xH7O@h]H?}Ap@FyIMהoIwǘW8C ~PXdhUtj)z(EYucvh8}7 h`ȆZ-Ix5R2ؘDvxVIٞة-Hi`臠(r'\Iuc8}P  ɊǙ(8~7 h,Ȉ "J5|#:~Xxs׀);yS#;t% }ȣ < zNȀGMڤs|ǢxzVxGjlJy|n.Yt u(urzpmڦoʧhW P Zlʨ::|Qz:Zzڪ×tZzګ&:ZzȚw:xڬ{iZKygڭW{ Zz{ڮjwj #ZZuwuRiP7 1pM7$Z橣6x|dygB=D]F}HJLN uR=T]V}XiO\^`֡ʬb]Ê3fֲ[l׮ 7r}שJש{xף3ׂ-y=y >+|䊗xJM>^ܳSYgr,tv\x쎪Y~Á ǎÙhyG vgOנhh|(]'kHˡν\< ̷ly2˽N̰-,hH|,+ݽ{٤ų.璇ޅj ~,F:KYLЗ@ #[ѣњHڲlJwz:WPJp*ҟ(:":&O@}*,.02?4yY}8:<5@B?D꽑EJP_՘ g\X]uH/fxj2 vtouq=v S-\j}w([ڥ _ vsw}b>xܾݵ^y}=md چMux7,Xˡޮ~l8{i鯗ވ^tUɺ߅\闕Πx>^_۾Ct( \&) 4% >QD #-a,鹠pR) -q$THɎ\$xAJFz@t^za E-v48#O|63Myu)G1SY@"% };\uWoC U`r%Ī xх/SĈ{=X,CBE ٰf5{n8֭V(Ynn,%%I$l;)iCC[]xgiv$ ԝ{u\Tu0?-,Ni;#dˏvТNꨭܲ.Lʑ "&+•@lP@#-yühFo;kdo&a9XSBP<(T@ b(G4hw Hf*$4p&L؛ Nx2 . Щ3DEaJҲJ0LF/ՑzDʰx@"'1,nc(#rCU֊uVM߂OO )Yd!UcR*Q3 _iXb%qEU3h] QCÕv[ #_}7S{H0``paė_}^T5(*ð8dG+bdWfe_!fc9gwgJC9h&hF:ifi:jj:k:`;l&lF;mfm߆;n离n;oJBB@"ؾ{Ecmi-$ޞ2b7lJP,?$c״@!,€D}Dzh&RS$I!O|`&2ٞUF7 tԤ ؁M•-*,[$E=a$%!ˆGD72N&B^$ 8@#0P%2t$Ttꈲ|uF"DZDe@=6kX(bH?'. wcr|ȏLyI"3!)*'G@Ih=/y(;V$r!Qy0%&KQ5(:ZR^rd / r% PSj-ǴPҕ0)H\,"И=GHy,8c >ZK+r묥Nw`&05IL Zg4|2Ȑ/Tg=1D轄೟ !1ODɧk((0r^)||& )JljXF tNsaۉ']NY1$ϞH~t3 QˏJ?L=X CAVУ:3IŸ4Ԡ]/(If2*bDʇYR7کԥ)}_ 0 Nbj$`TAV ƊIHaҙ0O5/nRSI99hړdk:eo*T%ڕQ{b̃9rY2ͣX%`T,}yTiTgAԼY] (UYzW!\q}3އ1Ov#vKT~[ܓ+#lڵFd &Ã%1},xð4axhCMb r-qeX*{%& 4G;j4Mt5CͦX0sLj.*ŢȡwF')mlư !kVg|ʤh'F4uPVG*sG, ӷ(TPXoul3oTw Hm` "I^+퓾c Su&;WCNUR,tj3ZFFw:xqz%WjIҁ^̙L!9PRrmJޤ Kߺ$s.Ŷӕ iN qMQ|讆/ׂQΰ$ ȝSg,C 9ZtfEMJK[(s]djP >R)-AfDP el2hcGaȻ? %7W_A[Vg ?s|xm'.JTT)Ԙ 8A@=mVYJ2b>hMÆf$j][:hpt\ nyF%qxCeڒ.횕oyns@y;+nsɕ rHJG A4rs k0˚)0ݑ0٘B3Y'\1-(B*,-./01'33D4T5d6tü!89:+=3 1@?4Ct:S7CFTEG3TLԙ?K.:DZ9瑈pӞEP)T̎GCAIcR|t4ьQkQ:5TCٵS b xscd bD^a8kt>!defR8$ BM7ct29z<7*j 4{(G+y(70@|#{#p7HBBa$ QJBٓ#7qZ#jGJz a2 8D:{e'&iT{ 9[In qs;9c[RCxbI`;H ܸ# FH’9J;HwK;r X,5EF NB:#!->o\-89ό-[,N^En  .\ D] u;jweq P ^d@f u9MzLy }P/aմU#R50evŝ +8u+n!,.01&263-U5f6v7R49:b-b;~R7US=R>8.:A&=3DR=cFBep Um̽P_ NILY ENˈaTPeޓUUde^QeJEe fGh)i5XYV?r s< B%@0b_x[q@uBr/Ű4ZE]X>jzeHAδȊFkd)^cXILq%k]= )r9c ٛY&^w3IPZdڏK `Ϭ=̪YZQʩ{Dֿ[քW Wɠ Cf$^Ɠ)%j a@ܥɻXKx\~Z~LL\]g] = ]i\"+ݍ׫N\tˉg+OΎCl% 3b]q`8GuhD/\?nl>?COev?lN4n%7F"" k)S`1  Vg G=Z ` MeR,2>AVe ~!.YͰA@$.labѩΚ#4(X^vlHC-gGFgwpJ q!D>dwD@>q?Bv3;]qC_dDGqAy怱T0EgOT M՞STU4*w^SEe[qKZfgM$ afmbjcdafughmqjݸl5f:#z$LސfFZ07xgWxY|+$^mM V쒄:@kkI$$meITWu5٠Խh֚kriJ-LDt'`$(L˷bKtWK$=((=̩jZjjwxMksve$I:όKkl*+TG+ay߭hX/.n& ŚN{N̎ ꜞ|픐g-?T}:ѳmܮmm&KOoκ-PC9PKP $^ .n eu oQnD+b!V.bU1jooʙb?}q|"U7G7gwׇؗc}/ݨ4Rv!P0ЃZOp I\3ьaB~E~̠~`%w WKb5bM\_5ET9qiKX0Œ\Pπ8|hВ+zfᅎV,i$ʔ*Wl%̘2gҬi&Μ:w{XZ(FDn<T4tE!ɤ a%j#H -k,ڴjײm C.8ZE)U`QU =bT~+[Ho'Sl2̚{e8VR\2P=6 8e뺭u_7‡O9QK+:AӖ*AN:r#DSwAC^8׳oߓ_o>F? 8 x * : J8!Za@;PK<"D_..PK6(AOEBPS/img/list.gif GIF89a_f(UwZ{)Jkޔ!,_PI8ͻ`([`hlp,tm߬|K',Ȥl:P3JZ@cּװ+HuxeO`86~zrug^xg|m~Z*wqcsyQNtd,Bj@̟|kVOH HA.*\ȰÇ$HŋMȱǏ6I$D&S\%˗0Sm:ԩA[ +u U (V)o}{.XNjUo֬xo^~˞9S-н{u2S+Gv[rfˠCk;ڗow.]2x?g~}{%f_~g`^t%GLԍ܆v ($nx"*^.Ƹ"[Є8OP)ǖC)T9U?C@ ZEEch5VvX%bg ߓCBW} gQ.6ei)pc~Yqʙ GyXien֜%d;netz(gw{J4u~>h)"xɢ>[&g h'jhj~#[jf5ꃏ>xQ9eVkB+-:mm 4SM+=h*.`VL #6i7f &q_9t;+͹^b _UxXh ju:<#g F&82|.ӹɲǵeIrϨ8.|dEa{9X5}tW-K|OW.Jôw}8S.xH侱SD[.liɯ؜-+V_ 'Wˆ,[tkZq {g;o&*8-+A }wEΘWoPW^}ZGj{Y/vͳfr_Lk`/kNWy.*FI sU(GAOp X7 NNqVC8' S8@~0 gHڐ;PK2% PK6(AOEBPS/img/rpt_att.gifIRGIF87a\ĬDBDdbdĜ|z|ԌttTRTLJL ,*,DFDdfd  \Z\䌊tvtTVTԼ464<:<̴ĜļʼƼ̬¼|~|ܔ̄trlľD><~|´djd$ [u` JLUۙE$B^OT Nzd8LrH;Y$!9Vf_<,OlIJA5 \IbF2R\: eeZ31Q1ͨ gIrvR: 8'Tu^̧>Ag0@1(JЂMBІ:D'JъZͨF7юz HGJҒ(MiGג5@t@Ӛ8ͩNwӞ@ PJԢHMRԦ:PTJժZXͪVi)fղhMZֶp\Jןvb@0Vn `KMbz0@bb'KZͬf7ٞdmg0:|8qFV Z> ʣGV̔n#<:C..FPܯ\@ 6,wKAq:oRaA}ЃsZ :</N/ϮVs@ {Z{!jߗMm|k]{@_s~zW>Ö1|-O;̖e nvlill\fx75oy 'ypGoWyHj'HSh{.{Z'\h`a|[<&\;ds|)^fruI~I(|Awvk8(~d5x9=d[t<&^RVTa*vXwnnmxvn]lAwoHy%yaop)H g)wH0W~Få|[{US{Ʊ5sEtt8E~ETx؉<UwٕU&fylXSqmƀypiSFq};!8#x5458gg'ЃŎ:|^)+Ȅr7}uex\T@k‡fhl8f~wq7wxwywh4Us?w89ijjvy@yWf@PzHSzgij0)BiUs~xcV`gq{>|%D^\vrڧ|gk^ LZ`6 iGR_`VzXZ\ڥ^Xj}dZfzhjV* @Sr]Pvzxz|ڧ~<:ZzwR*:::E#e7ZکjqUO P`["D dŪz ^ .P#*:ZzȚʺڬQZZzZӚڭ Zz4躮ڮ0:Zگ;{j ۰ߺ#0[{#  ";$[&{(*",02;4K.[8k< 7۳@ ?D[);FJ볹$GPR;T[Vk\۵^`b;d[f{\@h۶nprl+vt{zy~x;{}[oWTk{i+K۹k;[bۺp˸ѴK0[뺺빹˹^;{I{{[뼽{ڻ K߻c [Lћ!Ip0U۾LP[]K0Pa;P ,d<,\<f{ @H HH @P+[[kP~pE9 E+̷4,_v{|—;ļ۴KO;'I- S[A~b_O[]%I 1DM3 iM}_r]\A8-pMV X\ͬ߾=(~Pܑ. @$,o.QLЎ>mܜ頞B޻.M=諞mL>E<ωONѷӉ^5^Lä"2]Nɾ,:|鶎nׁ֭~ɼ^쭮qԎ> ú~٫0Q{Ɍ_|.Q'^KŶ>^п=-n;+?'0,ìε ޵;O~Ǩ̚͞܀ > K?-_n^]IOΞMzRQ)N?Tht$| *E!Uj%Vh xuі`-lT+I&H;1< ʦ RXl1NDR+Ͼx**8N!-** cPf.\sdO]zjSKӊrh~]wXYCzok=Ըy>˃Vۻ? 7ݓZKvހw!~ǔU߄n!}*Hb.H w*bUy2H;Tb:'b|c$\хؠ(YMʇ!U⇤Z%`)Ҵev Z-fucnލ`IY։gwng'砄Lj.ʨl#('&:奚JY ^*ꧢʪ6/B:BJkފkk lKl&l> mFK-Vmfmv n~+n:jV oKoދoooLpp /̰7 qOLq_q>q r"Lrplr*r. 3(Ls6ߌs:9> tBqDtJ/tuROMuV_uZou^ vbMvfvjvn wrMwvzw~ xNxx/x?yONy_yoy:z馟zꪯz뮿{N@{|O|ߞ/|?}O8_}o}]O~柏~?A| C+ao vp} lb~:.?%ps=6A p! Oz(!1zfP gE~A  T~ D0@PjQrOd 8qkgA&!L 3C1l !$cHE"ёHIL!"Pr+|W½YPN%'9I a19@?!}F)0EA] @2G$(CRJsԬf!8To @F3E$bPd~3ޔ!-_0REğ|sk_8P||;Np"{mNLJ47#!G? Ґ~w$1c8CCV0:heBD*3|$3i@HLWƿRD-Q8Ҥ:+eDOKXD0Ml*$TIp\)FIFzjG ׸J&S[ʿMikxN V ni/EKւ>,T!PRhƹve]zҪvmN 8 vmW׾o:w-q*wp Jϝuj"Uw w-ykwm{ wzw 7.+x0 Kxl kxx$.Ox,n_ax4o^x<$yD.,#+yLn(KyT0,ky2 0YK^ό4ǧ6 7Ùr.o{g5kY&XO?;.sf(nH꡴FGt<-PIҢ=RwZ>V;iZ@fݓXԩ^OMMZ=kg? b6 h6bj:͐{,]IzKv4cof-vR7|mwzq#B# @gK 8{>q; 8׾6]nN]rTc64Dn}N9l++tx.[>8'z3NJ/cv|[Fo|ɇy兏uGJ_<Ͻ+.5oS=i/vg~ozfu?nG=a>Zϸ|=| |㋝O~쟼/ڗ>m"幯s~p~7p4/uv^~V'~؀ȷa}6qw}gqq}w}7~g~u~u+k08k)j~W0ǀ.k t;h|k@XyWWmGHzaWWy(zƃGsxrG}lw}'aKwȂ2n'7{w؅~Hx8gG+z|Xxz|}~y\oȄ'X'Awmqh7}j8x|'W}*y-85)8=tt}:7{9~Xq(shcxq"hXq̇}&a r_'DWlA66A`x+{{1WHj(Jˣ@깄['}Kۮ.`ꭇ!j*;FjrI1 3꺤&׻.dZ^N  `mۥ `]ʸvka:[]`[5̚kWj櫿@̦Z[ܥ:1 +Zzmt QzZ*;!)lu.Lt{$+\ҊK' {ʨھר&1{㚵o Z̬jvw, sx* :ǜvjsL~I+Ǒ,ɅlZǁL,)kY,k4 澶'i\Ɍ{ˬp &ʩFʸ|ȝ<˼˾,vl|qjvkl̟Ø̭͞ZcV,&T< ^ P`lJsǺqI\ξ`l3̪N'BCn  fV@^34?nI(I  GdZאNnP @u P`f!)e~4\fK.o> &"a_e b~݆Ni鑞Qh>2j0  `bVg^׈0>rK~{> NNk>^(Cp/B-lDzU5`p<^X ~.ڐ<z+;+/"? ,όr:qq;=9O *-g2Ո\ 0^_3߾" 57 `id/2op?.#3N7~r`:o _B_DOBqU(t ِS?-&0P&( 1P&?ukݎ #Op((9e-3"zyvl1Y~oAGoooϒv^$+0& /!ɪíŌ܈ݮߢސξ6PAyH J+Q@GC&I) ,(yۧX@) kϟ@FNVΝH{Y4x+Π 6-j0$t̾B[+ؠp65DzrH`P EJ.rȏ#[$g =8!bC&F Z:V36Zժ2庵W׮a δu"rľK͛M5?PF|Ȃ[#\X *0d A@AYFYHDgYfk B %KfX1('ٹ5[K S8svɓ5ދ15 xƝ$=B\ޱE)7x9d`D"|WL@P d]KEc:Xfehr uv"!r8Q!*ۑ2gn(椔|֘qA.2'5yJR5dum鉁2i09Zc>SRYX1 Tp P x뮆kR m6ӧ&ՒMmrh𶣟q*̒]rcZ,si V5 e* 'i h)p[S۬"'q* C {LfLnW<,λnM Doj<ukSd4M2ϮJ ,@ ]\.,Hl$Ncx=z4ۄ 7߅uG.Kmr+6w猟9s]y~zΏ.쨓r.2O ;W-N̘Ľ*և>觯}~o: H.L:W!@ Z̠7z GH(L W0 gH8̡Yh@ H"HL8JPH*NV̢.zXH2~a<6QzO|G:x̣G) dޢA+=&eiT$ѺJZ̤&7J (_W4Q @yVf250c">.tꥈt[rĄ%d 0`2frKm@TlS\6O10:iր15? 3)kVT۲X7Y̑}uRՓA"8xC#ZKi-XtQFqSaRj]J Ԓ^ǓN]=1Ҩ48HK@~&)S<"5@ZrFmoM'YF䩊k쪊ZbK ,X.4d,qZl1Vj 4 rMlJf4τ)]-jŨ9`ןɨUjO!ScܔN6= =Z5z`" .!@X'B IMdi [يi_-ck!X>OV4Y+Xm%G`% <=O 2\ڰsy`$kx/Ѯ"+0$[K3jZA#f|K\xF.r#]q,_q+xMpscw`Mkչ^Fq>&-VL#㶶if:Ƃ_CC^,eIc sN7i9LPM,YJR6YYΝ0//'&1B|g' Q cQypfAgZbM8YO-HۜT ߊ8gi[L$tyaN͉L3@bG̼O~/ ݠf=tXmiѐurK{E4V ,byŎs)̭9 vI", %0%YR9u:d6qzDH3ʙzʁ YYԔ^qۦ2+b9ξ˱BUOLXͪV).QtSL6 { lp[Jϳ\"]YG8ye13_ W"+ L&hgGL?N_k&Kl6=p >e(G&kR˫>hۏ,&AMh>y\SVXv+G'y7:n IwFR?<؁(<"`#FXxx? xDۓDC/d>v<؃>洃@8DXFh.xJLI؄PR{ӳCVxXZ\؅^`b8dXDB1l؆npr8V2xzH}O~hE}XH@x>؈' ȳWaQ1S{~;;|1335c3P֊ՐƘ|1IP mKojY6c$I{&V;1;G+*+;ȷ kR`4K{ ;;˸ʥ+8<4SBfσj!.3D5HC볯ۻ'Ế;{XȻKUh;[{؛ڻgw;[kDvؼ껾[[8 Nx|HXĺr4ѿk8JXnȑvЋW{j@x©M%ܡ'L)|r8P@褎 H >XۃNU >{PAG %7|Y g˴&~hU.#mT,x9 .S2Mxә)+ fT9ysz HȐ㓒^VUVVTI&ϦVyA"LG S b٬Jx"wyrLqtIvi ZZ̧֟̃Gy~\o xH̲Ѭi<׌N5] *>nl8Z ʽƯ~[ FlWU*։b_v * {aYXb#YI+. c9Zcm?Xm+Ϥ̠C:a*hIGv1$XӱW&cz7΃Тzg|u3N'i:jVjOZf'Ko.]6{;}^Z;ғ iNbGŇlJl1G)Wkjҝo- sI}ӕӲ"%5?EGu]ĉ C ^OwMWrlW'%ͬi\ϊh-, *o` ɭs6l֎ >> {'`;,EtHƜ- k*NU/n51,wǵ}_ M&>(5k R ;t;~y >~@;G42^b\a~E"|/1͒ 0nݗY{hz./!#|~=3q12JDv~^c薞.@>꤮>˽ꪾ~븞뺾@^=9ƞN=þ^uDHȑdH~sIƸtnJ K>> #l1ZPԸǼ.~CQp9)KH,"#z (K4kVe,ÜWٮ?ǐEJfX1,hxu.LE5X[k\сֵr̗_~=zakxQ w2pox<⯧j|P6g;←wI岋R .L"ͶLm4 oiEX$ q#Jb(v藀2Ψ6๗_wI&d)ӎxE~YѨ!iZne<S0PAT(@&fnhr">qeGev9ُw@f`oS8ONK)6ygV)zV|m4U憠~ت攛J*|Ƥzz<湫-i[dfZVh,Z<DU~ nhl&뫹XѯTe;8ZBjnŲ+'z @@ /̰' 1wqg 4әt>ON opi˚ hVKDWE1`NUFa1ۢAycG26lHm56Ɋ#7G:cwWFKE4>{xƂ4x#;HJYv,&(˺򅘩 /a_:̗%90B h>\4{l'Wlϊu}dcˏ 'RkBC`S{ɇCV[־6sQ|jS]xQ[l6Tbsفnv)Tˆ+L=QEY G{+Wwmb O10R?xr_OtKkڻ%դ}ɂ_xj1XJVҠF"::F,bv⻎m>ЀUI1K[vgG0I+Qv? NHVIV&7UN](]vLfBSY9HVLJ&l5NIy|v6d\QLi&YAvy󹅹ZPnojm-lvmm;lY"; #Tn9](gֳ.Wl8EGg!~ ȄսUƻnK *ޓ;ywh^(*;z㌒rb~+ן>!ckjp5ﯝ@|@'v/ђ'˿Ӟ(H;#! Ȁ'~ (~hCJ$FgSf k hk Tkk"X@Q/n c|tj31ȂȐj$H0H!" 4 IX2Suǃ%kTE\xk[bpF^dxYebWuU_؅Uk*"f>*$B4nzȆ!c fY%6pX[* uHi8Ub}eoW8~f8P؂抸bfuUO؂g$ҋHk(l8khPx}ȍ8rhxXY1ȋHhY֏8ȉѨHo8}jg 9Yogn8^؎"YPYt]xhh/f%b؇'Y"I󸂭$ّEɐ}ȌS I+iUF:^Yɒ0ٔH5+ƐZf)DxȔHcIl NY~cz}y)a9 wYɄ)IY)^(IfX5u^ɘV٘m)Wtk&9QD 'f_ 蘏H9Q%Qȗ鍦 A9bXbPv@nY9!ǩfbV2T *Ԟr b^7ҲӟPX xJj1 ʠ될 *jZY(&SMO$:%j2%:g)*Jɫ1IkirUUjڭZ fyɮzyؐ몫\ɄiXu7]9j ʜvꝮ "꒮: ۫ kz+w9oIoʝ*™ng lq3(y Ņx4[4/J5}d``}c+c)hZuy@w}ķ+;?Kc˸9븑+C`˹빟 +Kk˺뺯 +Kk˻ +KkNjɫ˼ +Kk׋٫˽ +K ;PK5NRIRPK6(AOEBPS/img/shared_comp_icon.gif LGIF87a~Ԍ||||μttʴĄƴ|ƴμʼԄҼ¬´ܬƬĴ¬Ԝ䔪lľԜԌ|~|ܬ̔ܔtnd,~ĩʹӗK֜ؕեܮKfm^x%D~XË;pa:`'cɌPL$(<},+sA4m;/F7s ɳi>_JA:}泪իVbݚsԯмL,ٳ̢]K-۷J.ݻJ/߿,aRN/xC+y2ʖbΌv3gj`MӨS^ͺukDM4lMb 2 NǁPaI7oУW;-%D/o'|K,W__w/oC=>/5o_}BtGn)?'H Z̠7z !(L W0 gH ȡw@ H"HLA&:PH*ZX̢.J^ H2 6pH:x̣Ȍ IBL"F:r$'IJZdF6Nz (GIRL*W JM򕰌,gIKY4 D b-K0(xȁ8 f(I  y25H:PsbAb}V% |; $Jtmg'O~@A&jJsˬ,Jp@% OOR`”APPjݤ8c@ԝL@&J`z HcDT j6LvR &}Zӱ`XM5N<Z6 0^SOJA*<`O& ldJ։ f7VRqRY) ]𵯜D^ t-}dk^֬e-epvvP`Xx+Ax8ԨNs4͝BLk$g[ Y6Z^p%](@1ď ]úAaRsuą4x 8CXG؃,<*hF #ȃDCVTh 6XThA^8\xGhh S(f>oXrHebXxO[ kȇwf1؅y؆3Ġ脊A8xW((؉8e^q hxrX 8x~XsX ʸ"x8Q͘#mX"1 긎؎H;PK{ PK6(AOEBPS/img/reorder_items.gifmGIF87a"Ĭ|~|伾줦dfdܬttllμʼļμԔƴƼtztdnd´||ܴ̄Ԝ||Čtvt464TΜd܂<֤̲tDڴԾLƌLʔTҔT֜\ڤll,"K*& > #Jxu)jȑŋ2&9Hw$I9nd4c[0b)I4Sg/jf|7!wK!HpUF)TL F0L"N HcQ!eVilǖ=rdܶo&KDБxfmܫjuX܃S60u*眣 oNaINհ=?lUd\sV> ==]Nu`v 9 8zރU|WͧUeGq F(iBMrBY"8a‡aG!w{ƍLTlh݀3jrA7F[HIX [% 5}DVl#PhQmXF9ִc1@ZqwuDHRjZY(bWK0wN'HIc&wTų hjL^j4aJҬy6F@I:̯N+D:6L-B;fe-8`m9ރϰFS.Fļۛ5λμzޅqeB̈ .J@L'Euaq{?}e] ZF05XA:*W0ER:pv@ `Qh/;;c/Gb-<0,bt]8KǶ7qqf; 7`Gb.qW}(Gv2.fΑ%ANr<>tq1 0t^C ^I@k6+rsnԥ^{ٹ MY.i,=.p${5)S;H-pzv\?\ !T ׺KNi[zu x}@ᷮu@.` ./ .؀7w}/=QrF>24u4"@0+]Lj4=ukW>Wv\t=4U_ |\f%@"(&Hk7zn r6c&eBmӷj/5>@1a?wW.8Æ  -pxˇ&pk8:yJ'T8a ~`^GEx"P0204P6e(7k]hU8~SR;lw`b^/pf>} iAxj8svf}wl[on׃ ؊6RÊX5A؋X(Ș̨(Xxبڸ؍ި]'s8dp ؎ZH#0X8P}f} G8 G(m&YPy@p0Z+A(( -@$(ϑ $iВB5X G YX)m! [4i&В#f fe!pIC 藻Pn% [[#-r,jgS S p _rYŁBC9ɚyb3 - ЛЙ`֚ttR)!+=~E)nfm ]I4M4)4 Ù9@  _ٟ\*_y,Mq b6u. j#*: 9)|yk f&`I9%͉#H )fa12JJɡ 0~1)'J-aDJp@jɖ/ZpJɝ6Z8ڑ&pA9 oihbvtIʥZjz Pg Ra әz@k.) " *Yv@#_iΊ9(+B oʩ*J:ZvْaAa JZ1(蘎혯_ꜧY;i9NJ ΁ )(#1G'Z_g.鰍Ip99 ֍ _ 6Սɲ!@B;D[F{H 8_yʴ*մT;VX;^Zе_^a+Jd╶j ^`S!g۲x n {]xQ {;;ٰ +K۸k ۹eK] +˺++ U˷{e˻[;ۼ뺶^[eڛŊg Kۻ ;m[[+{Kk{ۿ kW+΅{ۻ⛾ l_ ۽SK̹;œ+%z[ػ\~v5>@Bk$= ֤k=P~%nB &l\~+ NL 첁:X95AI}< B]޼.<>3l2[Uh>C&n^.#}oWLWKo޲.g̨}+lmI˶3^+ Tj~ĝꪾ d^dmݵ>뷮ݹnG`>V>`o<@mڔؖ¢@^近 -e& ~س"Ю%]١jf˽ܫ qڬs_}~np>>n"- 4ڞ;.M O{ Op~)6 _ώ?DMמ^\,<5~F?b ^_fj] pdso/z/V?/Lt-fM9 '7>+ Nu+Ew*\2~;>o):d\^o?%lFvn5Ͽ?U_"oo:>R^yO$|Io} 8@(h8`8x(H8XiyI`)@):iZ* * ; <˪|Y{; -=M]m}Mk[ ,^n~~N/?Oo ^~o/33… ,ĉ{=ƍ ]ܖȑ ?j *ѷHX6QKgy%M@u3JO=љD)td$3QJN#ATZ*浨J)%ҩͧRAT5۹\.%J*%)Ru4XRNcfJK0g̚P{noe̘R/^Yն骞'ʳg˶L_sUzՐw$wW{;]عݾBeHrcJ:e ~ ;{i^ּ џo/G`ˀ.Ƞ``.Ndra,~HF!2b*6t+)#A-PW}YNpMRe\K ^m,hߨEk1yb;j%Y]u:edT@]SM~y_wЌH+8'QZxT.wNOmF(t&&֥\qv"VkF柕ʇ (=^%HpyZ| m|juibk."G焙^Ck%/,?Ɏ'3MKm4vl"^˭<me㞫Ϸn&/ދK˯6pLpp /p? qOKYS]@([9ծ{ݖiw-ν(L8d^~E,f#≮ۏ~'XgvpӋQ \ZkMkYo͕E۷4mٛ/ L/^s9nñSsUs{sOg[gW_ݺm|iG]}ty8iVBGc fӂfpҙwۄ~x,"'#=w]9.,qtA_k66_(`)Jb$}WN%Z/4]_n)a]zy>&GUx?tix)'|?)rҞ!袌hYJy3£,U 顓Z*ҥ%1jꩤɪ&vqZ?V*X97 l#;iIz& %U>NKӧ.!ʑ+n&N覫n~I̖쩥VgUAϾKˎO4 7p4zT*losO",2"Q˶M*ܱlpǒ0>L7t*+NcT_0ku3m's'3>xwQ38 u:+.s10є{?d0=0TgNu cw=4NϾ57s0;U:Ġ7i;,樣Np9w}}'LN>o^_|i{,,kEG -  ]+5M9ホ36%Qx  Uخ!0DbHCV,@q2PbH!mD%"Qe8ř[(l`Qm_|ǘCjg!x(p#vKx먲*⏀ d)vE,oRɸE122$'III`STNzғ}D&4%QVA+ 4e\?*IKIU_O2٨h٪ ~/c e1$+{UKJzpBMiJfT+1Y9I \3'鳰ڜ1?syd:9ɁOȉ!DH?Z6!$Bb{~\DσD7: F9JU$'FYҖT@5BӚ8ͩNwi2PJԢHMRԦ:SiTJժZXͪVTެ\ XJֲ`YֶWMkPJ׺Z\ `SNūbI Uc'KʺSb-z)JeҚMf?ֶ5?T+[ͭnwպ-7*Mr[нS=RT"v+JܣRǍ*sK:7 n$AzTwt3gSm[^vMYkT)Ÿ{K? mK;6m<[6>(n(^Q w p`;/~7lbG0ɘwEWtwo~aNa w;βk7.(Y=\/NJq~, Tvs:{l2l^ WWrolho|@ Ud: zɄ^4|hCִ0WJX]2J|5YOӠQ3:ΦN4YMlV"(B!lZzӸL7 FSU]nӕ0 ^aiG5[vv+q  ӽn^܎ pnE.p;f ;zgj%l7T %onG(Oy3n(TL4[ž㹸 i<ܩ}.(gf/6vu/źء鲗=&!=muh ֋w>X@xkմF }RM|x YUY׸Xr%TI8}7i |ewX7Hȋ6Xz5)HIxzxfَhjYui?28Y鸗Wh)H7Ui95}'(Ii+Y Bn鍥ٚ,9)oy[XU8BՖaUѧ9AiXYy=) W/yw8IP&يiyX%ب舘ɑYp}9)ɗYUp jiXșW 1w衡k'Hق ,v.c2ʆ+ZH8tZu^~أ IʔH_~IL:N tw إȖTzNJwأ١iW9ȃgzkJj:ئuz٘tyy!T* ~nڨIOʠ՗vz؏V g~jz7Z|z~kxi;aZjHxSZJ:׫*p6mʺڬ;PKoBPK6(AOEBPS/img/pg_def_create_ico.gifGIF89aW>(((bnacmbgofs{ry~x}|~}~}ݲ³ôĴõŵƵŶƷǷǸȹȺɻɻǼʼ˼̽ĽǾʾ˾˿̿˿̿!,W>H*\P!#JHŋ3RǏ /r Iɉ#O\1%Lob9B-lbXO]TdJ(&Z„٢T)Ӧd*RhUU+ BMK:}XTl!Z ֭]QpnbBEaISNSȓ#n#ANCؘc$DO;8UbMzڌ۲[[.ԁ"x $]qY>#Գkd]掠<N4tXb-<(H-?lqA]GA@ՁfeZQg[nTH~YЀh L2I*~mi`i#( o&=Ba2g"!> ekP0>~dI4у($؅-܍qx p R%XRg]Fp /tá9@ٔ<ǣThBQ'|xphR\ޡ6#kǥ_D,r1(O0$UPxҡ,bDDhB 5eQkFwY:l'Qq! AٲMxR&Ur A@C<0 ƲZ#K JHe,QM7yO{W+59Wq  HGRGTW-u\?QQdd6Fh"6Kp%*խx^}Kс#=΅5߉kv,A '39)y{~S䥧>?n7F>:~{~6ߵo{ 6޺7o|ܴ3|+}γ~Η?kx=ێ x$<`Hͯ*a 6AIà.Au0j GH†;PKAmPK6(AOEBPS/img/pg_def_view_list.gif?!GIF87a|~|ĔƴԼ¼̤ttČĄԜʼƼ䤪||܌줢´lzl􌎄윚ܴμtvt464TΜd܂<֤̲tDڴԾLƌLʔTҔT֜\ڤlldfd̖<4j̼|||Լʴtt||$V>tN|lt~tdLrLnl¬tzt̴||DBDμttdnd||Lb\^\TVTTRTܬ\Z\̼􌚔|T~섚d|f424¬ʴҼ,H*\ȰÇ#JHŋ3jȱ# CIɓ(S\ɲ˗0cʜI͛8sO@ JѣH*]ʴӧPJJիXj'ׯ`ÊKٳhӪ]˶۷pʝKݻx"誷߿ Le[̸ǐ#KL˘3k̹ϠCM~o^ͺװc˞M۸sͻ N- +_μУKNسkνO>;ӫ_Ͼ˟OϿ!X x^ 6F(gV!z n (bh$>a,0:x1`q8hߎ;c?H${@x_?wNJYFַϖ\2%3X7*9w%}g&K$sƗ&|k&ui%y}u`_q)hNzdN hC^娡z: jq*kZjd\ޗ** 2AZ+z"IԮ:+q궼ꭵ߾zv e᪪++{k{zW~k>,֛.şZO17lmwvh8'(O|u=|2mGq rX/KudsPCF}nh#i[K2\w$4*G*6;_^e7~~CIWU}Dcny՘*9VOMs/:7NGO ɷ~LSЮjL/;v߱⋁was!c~}. mL:'H Z̠7z (L W0 gH8̡w@ H"HL&:C|H*ZX .z` 1hL׈2pC7x̣h= $(B򐈄!!F:ҏ,@v`;X̤&7Nz (GIRL*WV\bu; 2ȥ.w^ 0IbL2f:Ќ4{iY@Ciz 8Irͬݘ:tmy+9a\.ѱl m95o==;Ž>s[f*XL{={;5q\BX m@u2(<< :P102ew[.cz=܁'_Bt.;}ZO ? b5?1$ws[sOyk ژ; aS' `z7xЧcG}qVp 8@ {th'q7z4z  w) 7z/z ؀WW}8~9};}ǃ3 g~~ym6t&)8x@O!Ȃ}KCWLA P `l7104adtU {u@؁O(HƧi!"HUg8n=؈@ȃ7~(3 ? E~w (R*8%KWCYHLu@ P P%wpyh^u؋${_dv0dA y˰ ((+H(׌MȇS(.K sXl@9(X ꨎ^ {M|HKXGyM'L} %  '`Ȁ2qx v`ˈ8ð&)Y|hx h)HXBH a&Y(.2Џ<P  8c{x(vt]$T-i(p)dK:ɓؓIC B dq RCTKwp  PAhL2Ljyvi`ٚtIvL+ Tn;4 fBi )c!X0KCKX0  `ӄhg]>vi2 s9FGi눜ɜHYiiKo pDmq tRG Y ɞjg:@P F \Օu]2 >@ *Az?:Yq A $IXIJʏ+ʠ`` @HC 0tZs PrjzʧG _ ~ :u*{oMfK-vZĦ Mw :0 8@ @ԪJjHVʫȚ 0IU@0XPzխ޺Wp~Xq$jg*U:ZVKZꮊTZK}~@rXS Lre]*ukN"Kkd[9FAc)w`z0;а04s 5{68:۳<>@;B[P"Cv'xP'+T[46;Z\۵^`b;d+GPIEjBt`t0 5V;tL4[xze+gPikC;`TӄZBdkBa^+|[d5HO;Jw;۸bkK~[Tpĸ۵y\Ĺ[at%ۼ ~kkܫE;+[[⋾+H۽[E˻諼替{[DK{[H<D˵H\$LD , ڻ%LBzo_>FjlLnKyBBtչtT$ q.L{d^~FO~pG@^S.FLKdLL.NFnKtn.rLmK>^코ln.L>L2tmm?&ґ.깴no C/d@~4@D0&?%?/G./DܾnD0 VB?VNLiLLN[@N!/D@<^^?d?e -<|=^=̎DFne?BDgpD/b2뙯3)9>΂)^KBW0_WRnaoWDPWb Db??׏P\D|̧oө\\y?I]poO\@.F@P !x!Ĉ Y_Anj%MDr-Yt倗jޔ&L=}EET XZRU`\xPj)]~e+e͞5+dC,mݾu!R(J d!jw uWy׳UUa>{ߏOz'p |V7}߇?~G?Wπ e42{`5HgQx+_4 @@@pЀ?aǹn=k!(@Ol!& cD2nsV |%~f1^휘F*`hO^^l yF@v\[D Jg7Ab T 6 @D"^R71cIbgD&!(Ȼg2ZYt,@6 p,J %8ua,f:4rƆ (8g,34I~%~Np 3dANaLD;ӌ z3hBPӏ E %!.x4Դ7rDiJ꼕6 H V07fN?*\% 'VЉ c LpL@AZq3?8t~-@D0 A^3V4AEJWbڵC`=p` V̪aI9kncuij`bNUdکhGJ>bXXx@4@ۨն=-Pwޮmv(>%]P{W'M< -JO o~4&@͛^Gvdf̣,8 ua5$t1)Ո]m&7bc&h ~XøcYcrFltFA":qգ1A&$3]!9;.|N&G5rye%ʁ2P/)o~B#ЙΟW <>sPܱ4$^h 1p4P"-i|v3ܒIBv E ;+x4|4 7ϫ4-E՜Ƶ_Mk8z1LZ=lbFvkZת5>3{ef ٶLʭyR\;ց^t}u܃>1=s'fw=nw5taܶapy_7VG<϶x=Az;q˦FU3.q\5M~1{ y-hK|խ|o8i$'z9f|aL XӁ  (\Vs͍8nh#7nϏ@\:8`:)S8-9Te!7!hO@Y\! dq$Lm'pX埀ju%^r%?)I)Ś)> PJ觠>e_~ )LHa ˪$k ˡJ楳Lʸ Bl:jꚹ=Y_"#j)B,Fɪb.k 斄{l- lzj⻯AˣhvypZJwn kێZBܲ(njC,7Sn, zӸX"ͣ9 0; DW]@c8گ`Ԡs])lʤ-8Fx/ew|~.aFnut;kKNU[3+akڊ.ꬷ.nNTgD/o'T;Wog;}lk/ow/???ßb$'R:}ԛ%?0IY7/_a8 #]0P!P* 0 v8AHX!1]PZxڲ -Qh6̡hP(>ai0&¬B2xbE*ŸP8" gx>"0pZ:BNQsIr4aRIڄdH,-_%AT ZkV'ݲJeHp:@p)N3+?X2qX0Lxjм4CMkz{̦Lfٙn~ 8aBNΘ<:̧>~n&@z1(BZ2Q(D'*Rm(eOJyQT2"IK*F&[)KR3UMsSS;-/TȸP?nO?NPŸ*Chbq:ДTb FU@MU(_$"@d+ e@~dk \ HG?ԣ&u|P-kt ͉IDPUk*3"L"+ ɉp[ SхM\SUbPWTI,L)G4ֲ4oXZ vMlk_ )ɖ(4Y"k%s ҨMj:סe񆧂ʹ궷 pIla[^>, zZ*"SJmȡzUa+sK!xQ+0Z2ou/%i3l0 nSZ/8.(zcz@ht#S/J tF٤CNwf8g1+S>Ӭ油͊}3*缄9wsNeA9ϑ]mD&,hD8|? ..6QN E*Rq KLĹ\m h@ӡ3QSZ8 QP֗v)} }- q$2&i#ׇ5mjb0IM D5-\{Zeֲ&o&8/ :b@ʉX/*C@61,Xpk9dPc#mk{ }f3-(pf\tgP?.r6Pm==|$:%ňn$#)!G!6ډl"Jcԓ55;v(zd7E=ݢ_I lw? =W4Ń4y|XJ,^Sr47ͱ~X }@ϟ~wh!4.1~EWzwqv Ph hh h Q;T|XQ(=wv;#H%],8:.294U'(f57fe;=?!hfi1]Qii6jC焆\!jvFk[vq"h^SUylUdE|(U?>{LJ{˳ږe!v8ney{|vhnh}ݐsoYtgu1DbQq"W͖@A4W@WwWDU\g\EcU`Vsvg ǷhՈr2Z%E8aްDyYYPwN fs݀aVV st?7vȌ|!vXD_ؕiE0weIwGu\\ ^ u(vWvMHw!xD2 rdwE_li$]ԏ55xwHu ^0 = qّsXGLIʀ$un0EXImgZ'@zXyw({rR-$rq-WUJ(Q`x%mbT[Wi9|ɖqᖫbr}s)u$vp['0w拇%\!G~iI ~qR]>H #^;$HIb-כ8YxZ8o ؀qx)MYӞ)A G9 𹟙C P239ytZOÇ2ڡ hJ OJPp@ P+8:` ʠOp)-1 C*1<:9 sS1t(,0QФ*`VRJSzmRtG/m0Nj$pi;ʦj=V@:L1u'~X;t^`xZ$ |< @Hِ 0 H1᩠  ʪ0᪡J: j _ xt(D~{7tH0wJz* ;a*ڪZګ =%V o2d "Y[1P"}e#f}vso7p;Dĭ୽@C*!z8>1*e Hꮤ;۳Ɛ*ap;C @uC0q?[jzrH ?Z Mk;U[`G˵t< `kV˳X+<ڷT!Φ^fDpY,H@5rMuI\E [+B\pߐwz,; 2K=1K hk Ӡ ŋˮF`ڻ ;ڶˮKj+ +`0f‡{6u{* l@-p]^PwJ#y ctsL1yܺ{;1* %^[M50 |7:<^ Yl řšȝ|~k ^볧<{Û+Q_̿;jyPyAxbYʬ#B |xRDʺZzZ||2;G1ӐRlĤ\f3̶XLMθZI,{[SQ,ACLG1a}\ʉ mUy`0 FlYfK${Wn3*(Lj,| ~J:1H{ԋ +H`_˽[AMMC=q`j; >̶ZЙ f-;C]0|tW^kǰxb)WYnI('"W [ t}0,`#P@:<C+˷?-[CkLwkڜM DkNjh@mNQGE!H6A=@~=h̍؍=T711~^ U=yL&p5p՝]fF#EڡZmO(niM8#1sd>+@2DT=~dJ'L:޲~n2᫢<nLP |9Qǝ 2 du?F :]=ʇ =~ֽwJru(¹_B"AJ&*. ~n6[:+߼+Lڶ]K~[d(? r{8M{&o |[ܼ`zrEpQI,tdU@̺Q~,~D}{J mӛֿ{{[[-tO؛˾ k;luL-PX2!sOF[aOcB['U0HLGĿЧƭ}PϚE]FIk\ym<{o,`m[ʈsɓ\ɌʠLģa,Oĉ..$H;(02!$RܓtKjlؑEw SL5C9N=}  CcrB ]ѐdi *:U1VXe͞EVZd(+Q-Gt0A<\@&y Fy4c2s꬞];P X*4hovM HK L姣/kȯm0@z+뮼 *X,$M4qO$5a"pl$`Z1AF%<!sNe##mn| &tR0Ӊ")۱>,Fp:ß2L/+G ) Rț3xO2x3s?0PA @HF`/*B+P̉p;ӇZPQĔS$.9UWTOo !ZlhVTESuTTDb:UU7[s5XTe%# Ln7%\sDm  (R0 qCẀ][nߘUa%]'Pe/ޅ4^I'0{ۨdOF9eCReSfeKyfgf)')& aN`p8yC9h:kkbxkh6tN>{06k߆;nq[onGtڃ'xyxgyy駧y>{S~{'|~ ѓ}j:P &:?PD"DX1?Sdbם䧉\,blo"!c(8OO|d=#?oD$XqyL ȿARHp%IQ~2DIFtew6蝧p~%,rIj1$5Y0R(+ԩXwcn/M ( IBRnꟜGԟS=ɔf>7>@:ѣ>:P&w3}PԡuA!:QNhF3JvԣGE:Ҭ]'EvLRzsiLeҐԦ7NMu2RTO`tQe}1( hLjA*ܚ**LbM.|=B iXƩ>@kX*эYa;CnuL >MGыY=2qŊP[«՚j" IE1(wH^W?*cNW5mZeIm`ЙrfaJt9_LL؜|Uճ>]-G)vlt )z*~ [m{oϽa{76!wXܱ9 `b[aw`c{Nw}P^wOG=|yot_aۇ/KǖO椷S|_SG~O|==M &|ƙi3ę ?-_^bh9 `F(=d94@K7@): @ ̾9ۿ=nBԽśȅŃA۽DAn x9F@rY ;<"cޫț{CC;4(B*4 C@BFD,FLsg8IHD0 ۳A#Cp<?4T[ӿ#ۣCOlCtA;DTDFBBtϛũ\d]ccDFL M|;<?n?jFi^![DATB&$ơǗ;qTrdttBcTFSeLLM\E4El <rYGv̄[|GsGTHx I IpFh?˅2d?[śFہ쿛|&>㣺[@HɱJ;DJ\y\=SʫJLIUZIFblJHF8ʤ©ĺ4,KDK,I˹K {˱KsGElx˚˿L̏,ԋ˺̻T+L>@S?0K]lL:8f\;҄D8{$Mk؜M¬ͼ7 BNߤps6팜qdD:$OD9dOYyOݙڹOP%EP9uk PK P   kPQ -QPMk"Q Ht Q5#ER R"Q$uUReNMk 8  !,u-R+RS)K*EkJhJy 6uSySyӱKS5M$k(Ӛ|Ty8ԱIT>S`@e8yxBSI7J%HeJ-TGQL% }prTtԚR/XV-UVMWTRu)ղOU>U5Tsu [hdHmpkVgmV{XEVhVmklnuV_u@xWreWoWG]SW؋B׋BHs= JWy3}X*6An٭`16מ-7OqmMu߭7LyJ}-8URn8M׉FG.WngsNx4褗n騧lydn0o]zI%7|r #+~Glzχ/q%cop=s<cGcL l)A)8q~G.AXA Zy?u/#L)x'2P& A֮EeXA!}}bJh v&YaJh  FBCy`c0#q(x džh(2H*`/  p BGD ,!  pHb@pAGd#zI h؀ \BQ(sPrYNLJq$[ʀR`9KǬHX R5W<uNbb4Ar3ԠAL IGJ?T?S $l0;dI \!D7 01ZцF,!HzZ&! gp#38SFІ(iq!G mX~*OhPPLC.WK{U 0AU` U?o r{hyA#ɹ~e` ?ǜv[οhO;ؓ=NbJ.RT p$QSюR4e H!e (COPtCc3#, YBd:qMׅiolEBYIs/DK1P9xi.Ԙ|YE FvX {kfNL9NeС <<jdI^ UvYb }(VJ cEQ]]I!Bגyd$#35@ )G%xrqM(`Gc6T9JRe`a< h6TvH[eɛy Ψ㫝329kn+wQqDO#ؓ:od2a5X:HSzOh{;4 jނ;L8zϨTI K! 0HSַ~k6Ox[Ĩg]jȶVltЎMǵyq>bmn{ٟ6iݖjN7ߚd[swnwWelwUO+KC׾κhqSBo IDm}vQ0Oѻ{Ls!Sh@g%XM/Y!?tWKsyϩU?swiOdHR8yd~ngM+,yYgDMPOtR[n5MU{)OwT{Ֆ~bgyH~r|SgO;}))7I5~()t+)QTRaDpu`|z_weuYJD(Ey|kQ6XG hDvzI)]ɇ9ea.ȅ)+s'𕗱L7| 撓AFWNI聽Pst9zЄ{5]i:[َ94 s *dHu@nHiphQ`|9H^Vy *#ix YykH>JhLPʉ(2XX:jj^ A9b:SkꘋU]ijnu:hwjl9#٧6`ZqѨ1 ک 0Zzک ~ `ګ:: (JڬjȊw 2vq2z*v  'AC誮M:8` %1{fj7@ p*D  p % 6@#ۯ|zp8{@pB;D+=+"K$aC <E[GC2Kj5N+`dP? @P X e "q!=[W;_+:k۶@*L 5°13`ôp`HlÒ'P:7? `0 6 ] *| 1K2P,&Qŷ +< odlǒ]kLk(n\ [< .Vlr. 0 \Ŷp;Bßh"V7®ʰ , d˯ $P ,Ȝ<̗|̰˼ ͮ @\S,7 < 50j \|\ `<\ =\z pH=]}mY`#` =$ ^ȱ2.:M )0}:69['v|D}F}cJL;P-R=ՕZV\^`b=d];PK8;upPK6(AOEBPS/img/reorder_regions.gif QGIF89aShbnacmbfffgofjjs{ry~x}|~}~}ݲ³ôĴõŵƵŶƷǷǸȹȺɻɻǼʼ˼̽ĽǾʾ˾˿̿˿̿!,Sh_ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲc0cʜI͛8sɳϟ@ Jfˇ-*]ʴiɤNBJիbՊׯ'Z ٳRU[dq̅xgun޿{u:ᶓ`Y%3`?,9 :ʜPԯ #RQN⒪jש f,*H۶oVu +ȏ_T>yG KfN9]Ϟe߼{]c$| Ǘ'H\-2wNcL%!CIJ_T YAR_w4F w{!W߆-5r42ȉ""Hp-ʌ3^y4#(6fZ4+$sC7rJ "mD\%(^*-əp@3i9-aHPD6y.|7$gG\ɇ}lI#Vbi%jw馜b*@tA:Yj{Z*:~V! ƕxI'\+ݱ<(Ilx sxF*NmzX&1P`W$[ ™#>  -r*^ ޖCbl-& `*"jlo+dj[0+< /0@P? 쳇}ȼEl#*O궯W !#4 b6xm~.k`܃ tQS FMmޭ5ktB tT!ůha!{mz p/mZ'gh@+e`=L{=޻wA|Atq!sTŠIcieuQV[ BO _T&(},n ^>IRS`A҃0!HB|/ !B1Bx+ W!lP,=4IHD􍰈HtI$:=1|)ZxUג-z8]M1Qe<CDqpaHG$w=q#yH ArĐT#"5D6%$'T2%#vI$8RR tH*Ui$dqAZ)ˋв%At9V6)QyL(RI7aO!0y`.$֬&5_mJ$&8w9Mm^ӕf1v$IxQD49LnӟYe79PZ3A˃R e? ЅF 'Ak)ьj,%FJRxV2Ǵ' Pj|>Arh:eӊҴ7)OmZN:A)DuP B&};wT,uiC:S┡%*WJN[Q*ԯuk[кթH W=dVUը4X{Y~5e*R٪洱Mc}TO³-__Іv$X\ R6Ume5RM72цEaF'ڟշ=r:NWMW*\z70/R\LQ!pWY%|zR\y/p֐׽|(FKZT{O&؇ +iوˊ|7U[} >;CиEHa+X Y1 +L 81ubdx!2f$'E.rSd4Y-*8" e,7DW3B2gAERff&HLWy)d5QvȔbee@hF7z sgE/ґtJ,<{ΎC-S8MsB| DugMiYoӶe[˹u\뉠iW}BÚ!pMjaػu,Nzu+dd'UImbg[톷T:v e0MpCCD6]mI[ OCp^[ܣ$L~(OWH#}h8Ϲw'ЇtHOҗ;Pԙnn.Gַ;ɽNaث/nǵ//Sv;ܡw}tAoX|ᩚt >|5tK~<9oWWW򘿼azط>Q/7gqwz^߽IT?yn{T_=|7z ߻4^w_W{}bAi n^!qF'~Wzg}Wz~yǁ7{w6bT~Wf (qq hW Gqf3xȃfeN̦J(lkvqftT8oVp؃&(hC%DŽքfoF+qoe؆~(e0Wxsхf`c6oFq Wז4mv87HxpV͡v1shsFtHt]CW8طG~HHH2a%˘l(EͨQRQڸ؍hXxI;PKp?U PK6(AOEBPS/img/rpt_ir.gif=!GIF89aq9sJ{!R1R91c99R99k99s99{999B9JBBBBBJBRBB{BBBBJBBJBJJBRJJJJJRJRJJZRJcJJcRJcJkJJkJsJJsJJJRJJJRJJRJRRJZRZZRcZRkRRsRRsZR{RR{RRRRZJcZRZZRcZZZZcZZccZkZZkcZ{ZcRccZcccccckckcckkcccckZkkckkkkkskk{kkkkkksksssss{sss{s{{{{{{{{{{{{{{{{{{{{ƄƌƔΌƜΔΜƜΜΥ֜ƭΥ֥֭ƭƵέ֭ƽƽνεν޽ֵֽ޵޽ν޽޽!,q H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴSmFիXjʵׯ`ÊKٳhӪ]˶۷pʝ+w7um;/߿ LÈ+^̸ǐ#KL˘3k̹}mW5yS^ͺװc˞MvgyM<ζ N醨УKN:kνaӫ_Ͼp mwO6(W^C 6c8VhE viЄ h(&B$0ƈ؊ X>@0<@)DiH&L6PF)TVi2FcB6*0М#Ϙdihlp)tix|0Yڶ%B]4a袌6裐F*餔 h zP M*ꨤjo^l)a9)^j뭸檫 [*<È7EfIpZ!Vkfv+.kjcκ춫ͻksj,Akц{<#}́ mZpVK\hKd &49HQ B)(b,!@͠xI0-Fq@5K-4t)PBI8 m9TKcմ@X@b#E3\Q¤,پW>1@ .|*!i6mVOjg֬5Cb,T9, 9aT#!iۇs@rC7j* s 1 ߈2ZñזwL8#Mׂhdc8H)܁'~;85 0x0-S>`Tx]i#sNYUCgm.`fPڳU"l Ŕzԓ)s[u^ nxsMD"qɒ)K}$@2,T}1i0|!-aao*-ޒ`Ȍ/[& @.\"TudP&,( tp;ɬ yLKB`-V0kVZ22-S," rrɤST$\ |T #x0D|sLBpЉTtmAm >j͕?d}hyxcjCA5! (`iZ+˃1tx#g*RH:ۆ=JBϼ`-| zMpcL`$D PbT.:A=A K J:1$thDoxFލ9iIYAE79=hР9Pd_0MG6S?610$Ia DŽcN;G1 p\@+AF6@!) `"|i&w:9SIӈ4D1qUw03v& H`B@7SA!@)jFyHJLٔNPR9TYVyXZ\ٕ^`b C9"hjlٖnpr9tYvyxz|ٗ~9YrY,4٘9Yyٙ9Yy5zК9ٚ1  z9)Y)yҙ9Y٩i"iYy虞깞ɞ m9y)鉟zZy jZ9 z\cС ":$ڡaࡨ:7СаآzX!:7ᓢۀ!&8ڡ+*%zHJ'4ʢ@cs Oj(J:RLI^`b ߑ8n` NH)(Fp2/NPQN*6V\YnG3M$dA9>_4.*SUčcu1Vۜ]+"g^.އg^h݊rZ}ۚMn܉'f 7V(jꏭ>y~븰0=BV"XjRFʾrHib줞'~=ھ^^K8վ׾ﷂ Y~.?'_<ٮ/B]7=aB y"(Ϙ)2/o3^^o֜W~+EA&qM'O&K_)I/>M'V}ML~L.B'^QO_&`=͉QOMjhB]OzozS'?ln nߪoᙾG^ӭ_ܭkX%['}c1Y h xof*Foeֵ??~=n隽_ޏ+_|/< DP >QD-^HF;RpaABLDiH Adά`Ν,}liLyEjT)ͤ2oTT`Q<, *UTNeITZL^M6m׶>CśW/Dny'a .ѯjϢuuѺ%oTM7my.嗝44+Y͘1TtiQ׎{ahȞ/խpp1pS6-WK5:+FV3o=[9A_GS>Y;O= d#h9åB /07CG$DMD1EdŇ /C5T1GwOx2H| QH#=t1apFjBJ+2K-STLɊ#L34sK5dM7 K9/1)-8O?sNACӯ;'4QEe5BQK/4SMuӈ&MG%TS4Ն@PS_5VYT5UV9]wW_6Xa%XcE6YeeYg6Zi[etuVm[NC%\sE pÍ1T҅7^yG]RqUM4_A}w$B&"f `X:Xv8c7 9%|F&ycWc9AQIFoƹ_I7gv.{g#,RG"i4+jKMMDO!l&$hk j#z7~[65{zӺ:ɰx'\)ךN|d\'!30;|+<; ["+!m#'7Do&7?;9N?7KxÍC;x>ypj.+9GRwyhއ&?o'>hI^=iV9}@DƧU={ݏV"]*BJ?(q8~ 6f{RI *hC0x0tx]ik2N A" C6C$ ^XL0Ch?ϋyOa'=,&DLlq|JU `xF:3.so{ a7ԥ?a':8*3@Ɠ̒ZF.wx4(ehZL^9Y&#B%`Ȕ$-qb%29ME)8 Mjvӛopِ<}ӜR82Nӝ:L|Ӟܒ3ƺW/gMZZOቾp$ˢDQKn}\f5iL3X@5aUY{Bq 8x,WBLrSJy՚.-es\kXXL_hBp+{z5QKԳ-Hmx_|cz8Fz/HE/eT^Q# F;@8%(J05ug؜~;#q(XAFh]fۄ%D#q]]SY7+,|a&垊Y,c*]z#uXù i1}Jɟ_ F9A1IdfЀ҇xDX.XIM^5/Z,s"1M:`teIC^2zlhsnHrЬtE=M4M4jVo1:59scV_nR=mY:Lusk;[V eld7aʦ].:mjWvm@]+uv[BKZnAnt[g4 jȺ7-E$axԽGvJ xoS;m^=>q8 \gWQ3w q? 樆Zb QWAϺ"fKKhL=cV:l]EL 'Ĭͫlz:Oع 5 ]Űv6.%=Z`qGPkArWl'}yrw.~eojXFZ#?ͧݛ^vľ)Yr71ʦw^쮓*!W!37HnLj/[r |e6"8߇x/k?wmd|3;q1 :.e\u[|˟.1Ϩ,ik?~3 '#@# |*7O;4J{S>x[^5R=YKC啕P@1DÅǫ?#)z+@DDZu#ʠDB0J̧E$FML8MP(O:Q4,CUdVtWXTSE#E] R7^Ÿ*mz`DFJg\_lÃj\e$-Ҹn4l/m8nGC+GhC@c{c~Ա5Է64:A:s7r9CHFYiG03ܓ:yD:&Ȕ'쒡IZ$P+ G«,s)l6mCL22C=+cJ6ӏ<0N=zII=3 c¤d/D5*?D=t!33ڎ Kɋۭ <{LI믥L!>t+J䷵# |3<#H@KпpN?I %},M D 6A>;=!M-42!@یK*HTAL,M,+1^aKAlM Bݓ ;ބ*ԭTI *dB+2a<;*CdE[^MCP[=(iLy[P}ƋL|1CdPYcSP %EUUUE]QY(QRo b=HLңkJ|RRQҌ8,-հm$G0uR%|QG3ED1{,CGT=HLACSf̗,=,@S,>ɟ{?N>U7%Nt{c=|O%-,IIRIJ&?;Ua lḶ;ğ ©iJ%;b<VSABeE"@%R3 LU骫ϝ L.?) /L0kMA͔@>dV ʳdqlt-O9l0? ˻;M¤"MJ W<3td=V9N>qL>Ai5XE YYys)LT;:In+$ZGJKy3UeT-ږϩρ0ILPP=lĒ]C1]MP%íO$;^ |[6mSEG PʅĦ &\][$5EPQuׅؕ]Uڵ]*\w]`\z޽uF%9/5^{m|!S3!Qu]S^P^SG=L:q\Zj9-_ZؔUD%BEŹFعMXUPµ'{lg^cdְev p5M5`Cu^nDovDlyNzgk~hh|f^R&h݅R<3MhS5u^hVC^Sވhgk.>*i^^)i6hbiJm6ߪ9_5ثfQ8i&*ǂh[_4,HޑWH4Wn fbNVg`V;WUX ).k|M `>E>=vac֭G5SzcETcN5bKdG˜ eIW{5/C-~Kb0Վ2~P"XϮ.WLl&Yc n׍]m/c͆a1kcaMn&[]NoL=KVN7m$Z̆c9jNϖ4f5>=¸VʵYP]n-JfOq\fIL^\UlN]p5gvf&7L]&(rn,rt#$%gr6䀖)*h's,#7R.o7F0r/?p~+^2g+~V78/:swaY`)Zii2G-װ6Tc2DG:5㔍:LG4tH I:^ "U.`~ME>Z;#lߢIkSϟ_kO5syTUWA/-#[1y?La.Ko}eE$^Sk$/2ئW-bvAl NvuAu{FO1o;b}mn'Gn>nj ZxԌ_F3]jxrnX}/oo?NHȶv76t3.pfDaUfZo'Z't; qq:!kɮw|x m0q_*gwf.V>7r{=',|"wG|R/}ȗɧ|nk|/(1_Ro)6w}"p|~^(;2}swinxt<{&u=xE@q}JGt~T.V~Fn7I4"pXZ{޾n' uwh9VK:y8@ <0!RTh"ƌ7f4NJ+6,(I'ICDIeH8orȜ%[(Ҥ2TҨ>Qj*֬Zr5+zbǒ%KkUm-!%FŚ&6E)oOz!ut`79&;R2\LKܐ榅s.ͱ$bMF5WÖ-kowC+gI_5h<0'ƹηKG3ʋ{/4%w̆#=mōV9xu}dHM=jѵtRL)\M݁@EQ!`-7!Iŷ"_GX}5LYw ]H=^,XzhAiUdqQj>%)``f"iZ"Z9'rh&rܞ ' :&ovgyhRzjizziv(1J\A)*:+V*j[[E {,*Kb͢kmjeZ>Z{-jKrm}m;.{.ުf.;/S{?n/{0 +0[81[|1k1{1!<2%|2) Y1<35|=9wsn@}4 ,4&=5UtMVb5aֹj 'YmFezOs7wO>l7a]*ݪڝ78=8ZR;~9 CRyrwZ䎞d} +Bfv.;byTKV iGŮY2 @7n 2» O"bAG@$)J2_3$='BL/̕P>MZYô<͇?4!]y*c@8(JGC##",ISPå:RedҸ5RFb# &;8HPJ c2$`HG 5ioV5dp(PrqO&Y':$@,f8a9H>!>i^Sd-u1bfQ<92yv6hZUF/0\|,{z( > j(HC,ʆHSRXTW5@W*әf1)Msc58)PО>PT]+dT*թRV*Vխj.2j̰Ա^O˪ֵh+*׹έ[I+F<,ҵA]Լvo~=N^doja+ٕ*,u;8Evheu٭eVPgS{fh{gT+vMlA3t?4 ny yO!;m QS]q]w$8]AA$sXc.>KIQpGqD`Ę/Do0EГfz0VnpJ'U9FVH1(E \srqX|)IJ8<CcⲀ-qhLLw YG=&+LoFF1rl2hFFLfY -ix'BqQ2yrK<ٸyfd;D-~ȏ, >g'W d Yt2 u=j@} LB@1~ Et&+mH\%dbgi*juq QL_Hɩ_VbN5)w`Δ(g?9ð*tB7 }n8c͗|6jܽsj;ۣE nЅ+Zp6\8'pi5zVSi, _U.󤱼Q%93WsT<>gymAЋt*ԣ.SV:1vp v^ۉٯMxˮ=cɯӫ0}{FѽQNv]jvo};tnE{rru{'~O pcʌ6E]s̢)7h:B}on pp"ƟÓ )G x_}Yi<yqQς6Ew8yt4j`!PS4N|+Y ٮi IG ^cEI_U] >4aюx`ʢ ! ) *[x Aڣ!$),IqY  6 ! {X"["k(HHw5 ,,$Rђ!ؑ@1i6[ .TD)#i])~-~ >-Bʖ‰"}c8Bc9rU:=~!<ܣ?9:EA6L@@$CK .dCFUAޤOrM@O%ddu d%S Rig5%UZDP@E%U%S^<qQz%YFc'i%x!^K YBt _ԥZz ^&B5^a Mп0% T:  ]5߰#2me[%_l* 3bNRn6#>"`H"')(E !P!bu*IhsS*`o"-'BaRq}:#viaaJ~'¥YatX'噴'D|c-}etg6g.Q7EZMgTZ a|ኞJhz!jfY[ikHyvmaIrv"2~b:(⚏ɨ\f2pv{-֢,Y'rXiz&ғJg1*yb(_kzf5gaۊbz)"^zIX(ZX gmu#AQHjpneI.@c%V$#jQ*Oª*P*n٪Z%*ꯎI+&Bݨz>+FT/M^+fFN+v+L+֫M+++Ϋ,UHM>L+.,8 Ț,Dlr9ARm.РʢZf.<hV6+~-*Bmni?BjA\#8k͆kW<-:Pڮq"+ᢉzJbھ?V.nօV$?iAѮ-.m'k.~nv.V b.UCnRr-.9<l'l.*mnVlU$oKF/ogn4t<zNol6B't.,Ȫ./^/Y/0@ 20GpOmQ}CJ0gp7:/9QCǎ  0 C Ӱ{| 9P0Q9X61ݜ6ȃ:|6Pw11111DZ1ױ1o7 2!!2"'"/2#7#?2$G$O2%W%_2&g&o2'w'2((2))2**2++2,Dz,2-ײ-2..2/rY;PKLE==PK6(AOEBPS/img/comment_ico.gif.GIF87av쬪̄DBDԌ||||̤μttʴĬ¬Čllƴttll|ƴμʼԄҼܬƬ¬´Ԝ||䔪lllldd̄Ԝ|~|̔,v™ϛǫɽٲө`% &<Ig݁ :@x9KNo0DZfLMɳ= sL*6dSӑ|nf*iJ!ԠK!hȏ"!F JQ]Bt=OQ˅ڛߍ@+^fQLreÇ35Ϙ5NѨI 82O*ֵs;}xg xp|_ 4̣L련Cνvãu߉_?tuק_>y룿_8~Ih& 6` Vh!b'TQ ($h(X!(~4}K:tadi a'ayG憚0Epd`'v⹧}>@g&Ya$JD*4$GB*ARZphJ*j60jz\(꣓ZꫤRK flªkɫ4 4`<-RkmF;䬶6зJ뭸b[eh,r-~{βX\A F\ #l ?,qAKL_;L0X/\qw2cq(^ mlrܰ?b| 2)3m3QaXg [cuYs=[}\bMvcF[Rpw|lm5t&"`8ĸ xC>H[^S}W y稃9"#Bxa޻n<~<箅ѳ=7/>>?%[;~»`A8 Z'H Z̠7A BA'a-0 gH8!r-< HLVH&:PH*HE#2Y H2Ї\(D/V@H:nPX(G~q&U IBL"F:򑐌d!JZ̤&7Nz (GIRf2@H*WV򕰌,gIZe+Ԃ^ 0IbL2fΌ4IjZs6nz 8IrL: ~S@JЂ І:D'JъZͨF7Pr HGJҐz(}f` X-@(PpLs3PʂV =QQ`@/14](`tXG}BUPFtB\:KZVCQyMi:` @:8%jPZ@D(dZ'* f}BJA $l/`BX^ K|X `KP 6+WX 0Sw:֡IEҊ-H\Xq)>0R wա;L(|IJl&u و @#|@ 8AGNwY'av8T_8phMx @ <JB*`Zw)`@h@rXhSt#R,h^DL`P\p`@/C]zf'cNv'WKky!iPӜ4mzlVjM1hužlР=8E+ߏ2Np3[~K /[ۡ8'nMp~`.@u;k<4V8PWl`,XAz6F{ǶĹp:eƑLl&c<2M! ؼ;};}/ԣܦP:&@l~j!Pr`@C-A|@6t(;gW&Oپ4cY9 ػ'L6tK@,?30BˬL?p!g(Wika[\D3mmT65Zb<0A9nVk&XA})@$`}Aoz}~QwpYQ^Y6Q'|gQ<çg&'0 U>p'vgStT6zFzP)8%~^"mEQVt#X9Pf9-X|g|:T(evfoy$0V60sEhv MP(my[--wZ !&#}]t87p8PhQ[H{< Tu Kq]TciH*.P02u3UaTP'#m{{P"YPWPUw`(##@ P&p(z5vf5EpAGpOP#p-ixiS TVR9S5PЁNp(*,ْ.0"1iN8<97M ! 1C K9 &PДP HW\`_y ay g^YᐖiGɖpo9 gr t "~9Yyi\y֘y~ qUYYy* @ }59Y 9Yyșy i ٛYyؙ) IYyɝy YX $QWIکY %,ɠ ڟY 穡JJ:)hYX 𗘰.I5:!ڜ#*ٚ КDj 1 3zM0!PSUڛYW:Y UjO4ʣ=  ɦ%Z3Zyڤ{|JV*wjgi,R `* z QU*^*ʨ}J ?j m @*ڧʧʪwȺz*{j zڭ;ڝz9[ڥXz ڥ*::ڣ79*J+˯ ;Pp[{{ [˱$[&{(*Fڕ02;4˱-F :<۳>@{;PKfo3.PK6(AOEBPS/img/products.gifR+GIF89ajBkBsJRRZcccckkkss{!!JsJRZcs{!)!1Z))!)11)J1)Rs)1BJ1R91Z91c19B19JZ9R99Rc9k99s99s9999B9BBBJBJ1BRBBZkB{BBBJBJJBRJJ1JRJJRRJcJJcsJkJJkJJJJJJRJRRcZRkRRsRsR{RRRRZJcZRZZRcZkZZkcZ{ZZ{Z{ZcRcccccckc{ccckckkskkkkkkksksssss{ssssss{{{{{{{{{{ބ{{ތތƄBƔƌ眔ƜƜΔΜΥΜƭέ֥֭ﵥֵ޵έオƽνֵֽ޽ƥν޽1BRs!,jy H*\ȰÇ#JHŋ3jȱǏ CIɓ(OZɲK^bʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXuꂙׯ`ÊKٳhӪ]˖ֶpʝKݻxݫ-߿ LÈM̸ǐ#Kx1˘3k̹g?MӨNͺװc'^MS2Qˊ[Qqw'8veͼAsَWӫ.jwvƷ].>_sۮ}ḕWϿ|OorDp֎{얠(0Hmؠo2c]:!n n^[m8hτ oٖ:3a)D%`w(S}ŷawA\qa\@]NfIaUnI%VifLZR mHr ^͕dNYx橧N'WShc6n8)Ө6z 21:cxXg|Bjz N΄NWjm6X+M %W+6JJjilngr v3hN,Xnt{ٚ.zKtʛ黢 o (˩ ؑƄo ʶN8,Y n-@kqǡdlH%ܧ@oߦroSc*(p9jQ'p{%kt<-/J:L>Yjuw-gm^mO{oEk 5Yk/nsHͷ0\y:"Siۙ/Z}UP<7ZOSgVRMTk/;}T3~P/gRK-(U)mt\8HLhueA $~ eaOx GH~ M/DO+8̡w=pHL S#*&!N0*:Ȣ.z` ?L&Xb6p\DXl\A1> EIFq>YI1B&T& s7,E3 I'?Q)Qla10 + 0Ib2Gp&d(cIYr'l%5hMLqLL:S#9v<ɅzV 9g9ϙu @ZO.3'T8t ՀD'JъZͨF' xEMiNtChJWZЃℤXѺI%i׎1Ȇ6 pKMp %lβؕiY~wt%f Z+lol`@z=ul|[%o*d0bhw`&LaΰcO8C~k7Z0l \4,v1e,c84Feby&FNrL@&/YM2odT9)W6<4-?& \Z \欶YK%iJ"~Ƃس>І>K\b T\Qf6ǘr63M&͋J҅}|,"/59O)z'YQda2imRf屯+(ۍɭkןv|w,mKx}b۴G pl 8trĈ 1Lv|(to~3ARCĎ@J!ezF6v~@G~Ɔ:Se'9g2[me)M}w{޿cg;RT1}?>XOUЇFq{6g»g?v}{P4hƟph6|.tt}NTW_}z Hw}}c}Uz{'{{j7s"r&ȁ|ē85W2uyu7,F}FuƗ5h:pp p~Fo7Zhpo2wp h 0 Ѓ@HyBh|ZWr@v9nVrwkxHsj8{ r'Ȉ*< hXXglK7p pq}X}?fmr7@Wp alwm~3ׅwVbP ȉX2HTh؂hrH'&Fd;ws's?sX{Hf< ؇3Xب8HՏV9HTy F~grGw`wx ro}7wn@p X$f@h?ɐ'XTy#J bYqCTx*p\^fvhyq`YIr舃g cwih|V6oEsgoVpnb1pph֌[ jٕ@87r fɖ9t^_qmzYPzY{ٛXjW:DIfz zYgxAjj`jC1P|jb :IirUtjיpJTez*^*:Z jzdc`yUا*(!ʩ9ꩠ:d5BA_ɩqĊ6$ɌЙ!jZ:ǪȭfZIQ BZlգΉ ꢙꮥЗҺiSjl˨ˮcJڰDar:mJ@X:\E9Zʯ"h$V +-*z̹z#{8:<۳>@B;D[F{H=kJ۴NPR;T[V{XG˴Z۵^`b;d[f{Ƶhl۶npr;?t{xz|۷~ ;[{۸;[{۹;[{zк;[{ۻ;[{țʻۼ;; ؛ڻ۽;[{蛾껾۾;[{ۿ޻z0\| <\| "<$\&|(*.02<4\6|8:<>B@X"[F6D}JLP*NT]A2VZmX^կ`=d=b]h뱫jngr=׀t}xMv|hA^ ]؆}؈؊~-<:  ]ٖ}ٜ٘ٚٞ٠ڢ=ڤ]ڦ}ڨڪڬڮپؘCE "ٯ}۸ۺۼ۾ܱ-ۖAȝʽܦ= 7 `` ޮ-61 0s qP}>^m m F1M4cݣ @  0 P!=&~(*,.02>4^6sqp<9 B>D^F Pٜk ]q?ʐ0 ອ ݞMPaj.3`kC Y ΀ ipM*^~舞芾>^^Y> 0 A p bh3]Kqm^乾ّ0 ve&DQ:<>;hQ?- ;F 橮B/<]0Ck.@nI'ل0 0 p `0@D`q8?@?YoD_|{ k/ `R Ҁp} /?rN^0k ` _wC0D/ȟd == |c _IF/ٯ ϛs_DFFiO٫0 Ogl}AR$94!BɎY,^ĘQƌ}RH DRJ-]SL4(SN;E @PPE Ǐv}:*2QT?V V]~x.ǍH]l7Ep⢱%śhX`…G@;ĺ9M2nn\#5fИtQ "MLٱfp<&YSr͝??yt?k@dtC=_^zTɊ4Wm񋬶ŏ")=ȊK.@$@J(. 2"{L#?B*3Dm5: Wk6*m9HhPQ5k% "{DiB<ʤv2q2ol!{#8*JJ~>@B-!Bp@/D?RK/5)ĨlA&լ$ PDHDT"QUf20Pv%/f)dɱX D\)Hf_zhSS*LDbs$6J'I2imCbΐu2͐pE?Z'P}jP PaŒ{jg9ORk8ZeSN%S"DGS/,ėX5UV@M|$z(1XI1|HgYhRiZR% [rҲ/Nk~.7^xΏ(-A8NK@lgo}`..:QqXa#^rj'Ê/,5u$ +T]"y#NuUH/tmđ4(h( ,ro{VQ瓋wCo6h檥$ݴHOL/$;ꏮ[쯎_zf=|'‡ۆt-cD* =DA"=@X#*50T,ft-)`弡%u9,; Z,D>;OZ2PGlxZn#հW&~/ ·>%Kԛ8\)[i_d~lq : 7bX*fH娈Fcw@ȹ K2)D!D#0A! 9ȁ \ PtЫ>ӱaFCLuʨA#?Hm ]S6..-Lۢ6rnTғ311*Oc4Sj-)Ʊ _!؆8)@;2DGI0\ 1RȚ2##0̨4# O9Keu-fya*CtqPeq $9i؆ҏuҩ#`fPBja8 KRtgI:u8Q%kUv<_i AX "!YhCщRY(J *RnPҷt)NRL%.#n ;WL $T9*[9eq da:[kUժ{m`f[ַ`-Ys쩑vMJa\!*>V ˴vPм I2g)ֽ}i9_D`E8pu/P`9Ih\:yt;hBv`q*r?Uܘ-yqWxɽ1MH'GyU^{/ye>s7-Ws_d;!sGGytW OρNGCWzw"j~ȈFǾv\zܛve : |?xG|x7|%?yW{52E?zҗGO>>}e?{cAu{~?|G~χ~۳i}w|aGO?ןo1??4Dd|@, a d ؘq@l@ *TTd`@Q  @,  @P l Oja$T%d&t'()*+¾B A"CQ)Aʐ5 ‹1BÍ(m<=>?@ēBq /L68t"$DDDDHL#,PQ$R4SDTTUDB$LD"DC.F!tK /D9`$?(*edftghijklmnopq$r4sDtTudet T C/C9Ea\bEFEClzGM:?@R4M+@CDUT}+ ߢy2XJKLMNOPQ%UD%BC-U~UFߒIm t|vXU[W8X}U~7b*dMTU#SJ%g*bLEifuVcT\]jUEWִ"+WLmq*Tyz{|5؀؁%؂5؃-؏؆5u؃-Y4y2xX-5v8؆؏Yف؄=ْ ؆= eYؕEXـm wYY؍ٔ١YYّYZ5Xuڞ=UTuګeXZMشPXtP؈9Sy؊%ڦ@hړ-[t؊%ۏu 5Pڏ 5@ ۯZ}ܬlܾ5ۣ͍]U[ػۭܲ EEՠ\րmo݋[M][]H[ܬ\u Z] ^بݨ5[%\%\[MܐZe;ZۑZ5]d_ wL2H'x`Z[X^B۬]\M݇\~5_Z>`关H\XZ ^ߑMߎa_= .ܒ-6\~a nZaaڅ`_~beᏘ`~ށ a-~%\!/.a)bav`eaE .dߵ+=>=nղJQEʏ8d~HD tHe[xJ.DcB6KVdFEdPdL>v(2q8e~lBNdMeQeHeNNUe]ʑ\c6VNh|MFVeRJcv]ffc]flfNJ\qfg.mofroetf_f^;<NeD䜥gd6g=V`Jhe=&]Jl炖J\]T_p2Ucirc>bfp&i^iiH.`iSVi~ViiN6ti6鐖ߪFjg5-̞&6k/֯nմk~jUH . /xYl/kF^al໽`kNl/د.*^llþmvlP>[l/hUHmܶvvkӾm&U^m^&^mvnݶm^n.Vֶ@l>U_4CKcQ=NctN (@6pIpU^۾^]puUhpEm؆Vp~.lvqvVvku kO>he%up Oqޞ>Wr qȦ(*?r(r'?rnr.ˎ/q/hrs.d5ĿK(,HIJKLMNOoOmPGTWUgVwWXYZuMuRw?II0ŗ)BGFEtDuPjtts%tokvm_uk w`?vɻlwAI owJwvή ('7GWgwx^{ݬgʀtvK4Dh? '7Gz7tg y}3L!Cw> '7GWgwGlzKCzyBhGFwyѿM|?|gy ·wDKƗ|~/ '7/vNLCC1zco@|Tê,C?AogA;.VvK܋gChc=st,h „ k!D~"Rh"ƌ7rQDD]"$ʔ*Wl%̘2gҬi&ΜK'Р'ABɓФJ2m)ԨR)-.ݺZ#&԰b?شjײmm۳ XdOZNîg a0Ċ3n1Ȓ'SlA3ТGF'n=xCc7bp95;\[7‡/^4ݻ֥VƷ-j7Ǔ//yzFu:#<>? Y ^9UAA ~Մj!aZlDJl<vZסq^!5x#)y ٥^4Բ ?Kx` EP"$%AT&@V%ueMetUifdn@bR$w8'uڹV:^ ^ܴUXՋYVYmzIRjcV(KRf`z首:) ?w*zž܂N;JX_ E"&K椣*nnYj+ Y;p[q끪\{NGzT.;*J/o;Km* ;1'&2U;,I 0 crf"0 3+[E,A =R[e1:Xk^yr̜l.|2YTpYD63iun.7+4xӆzfcʘz=_N<~ aR<&89ivn 8@%Ou~*+فCs;B^$+|;(2e>=^wٞ|oSNfrK~^? }-{6 MR$x)%lѵibҺnC6Rb<%$:<ù}T SxԢ*ғzd$ SClovy%2&Zꂠ=,AٓkbC51(=B& .F]פ.yb; uQ5?F|)a9F_{<$"-Ǻe][{70FIKMvDfbS?#;܈⠢krLlWZ~ehJ%j屴֑E"tl{jA&Y0y&4)iR $If7) %2L=sf2X!ҩΆqM;*ߙARlp9B)9DZB$L2䆗I&ImP(I|mwGUBNtW%W= .ZK:G2na@iУR^@ńg~:r%}62~N+lŢM Gm5L3)Ly'ӓJ%=mNe糩(gR鈅.PPd~ciR$|9,b+UQժX'U kZIͶԐ'=[hOĻJQ]ۃ$"0@`bscqZδXv>;>~Rk XB`ҀhL_!ScnjȖI2v% LWs{լ+LF܁uI抵~/~K$~ot?֔?"/~ׯ_4Y&. 6ƳY_v^_M ]X a荮xxu}``} Ÿ,A-:pMA  YKD VNR ~ J!!u]<زIѡm!m`[FFȓ!OFb!%M=aͤYD#z="I"+!Rֻ-bi]Zб)""ʩiČ "0+i)R4ى*f^0V# IY(!Qtx)#/bߊ:#;;#<ƣ<#=֣=#>>#??#@@$A0ӭ31X,ٗ)*>U"FfFn$GvG~$HH$II$JJL-b aKbV"E:~YOKP(R0یIn#R64B$Uf_PJL9V%WU~leW%;C%Yed(bc[卌d \d %^&d|@ (>ۣy35dN&eVcX$!anfd\@\: Jir&kfH@M |@_v^ fkfy|dfh@ЦmZbnb&sGf hf\rcs'qth&@l^&?0&%&s"x'h>@ gp&gƤ@7gwF]STVS xڧNF^glfLm@C;4]b|Fڙ1fMN$%#J%$^(G~h^l'z@*Y ο-B,YA%A)YTMVhvi\`$b^Nglb 7%*b9",zdEfuZH*\`d jh vf hcia\ 9F$<9'nHh8&%u~vhv(fmfʼn§%"cs!ޯXi~).+B&)]iU+Ѫ:'%~f.*Bj l(NBc+()+ݟΈ ED(VRᵲ"fzZg@'i~\Lr.l,EFA+DP *+`tvp~n++lF,d"RfڄRQ%R&PZG9i*w , b+`CP'ڬzq*z%j.ޗVBm"JA삲;Ynm *u~(zlqb*pn8+ E!Tlglpz~\6'|N㽢é)E 6c!"M0n.',Vש# /UEvgAbnhlk~'*n8MUY~eqqNLo N"Vaj\&jh:_SAExؿG5D~sck!Ϙ\YA#tWl,vnli*zZ&[ff?\=]YΌ0 U8+V䧬'kj%`jVbAx Z[ŕf奭\f^o?K 1&yqUfqz$fq-1bqxб- 7 O)*o11[%@FTtBr($(*pj #(2)K)'qKp}I1g%n-Qlnp2 Kaj"Ķ&3ضT\[@O^5U1uRhq/r"9ġF*ʁ2;s`&<ڴY3+X'o! VIz6*/K/,l荪m<+dX>$>hnZ)1mDIJaDhNgg yt:(olr}8BuT!"g^B7,jrG UZO[,cWuT1\\m275FH-^gC~"2( 'l6&4b^g*3m_pdG1nol*h1h8,*lArnl64Y"/Lu>7ہlf5Ny(z&?w:Ϧ{GwNj\Y+)8w6v;VmGRѨn756,2HJxs];6ԅo ye2kieG8DŽWѠ'h )Rtʁ8HS--ۼ$PCyeҔe#xK4mhzbXc$~etxT9CujV%gdEgh,lZ3:pj*N:C̴M+&,hf9%YvϺAq͚hF6zCq);_:4GD?;G;d*3_1l΂$; ;:O(7iX/n~/;Y2zt?ﴼ{#+}1GkE{;kC#${ mBRQQ ď|ѥi2~\k98xԯ{ؓwjW;W;o}6w>A0>7|T 򳻞 GNVcgk?62{1K;3?C?Sq&o>@(]A&TaC!F8bE1fԸcGA9v>Lh"/aƔ9%mԹS?ZQO]x&9iSOF:jUC}:.k;hulٱ븮SO\|¹PRWmZtѺuhdk,ڴmrܜwMDz .bL,r8o9PA@ ,G 0DGDŽ&B8l'r#@Bsoa,TdE>H"!|S?uM#s;tH~dsO!"tCJrI/M\O))KFcbLT| SQLќqP6 U !,YqUMXy*"e3ׇELUDem:o|RL(QmC3 K%SOEك̌AGuuX{5OGu^D<7_A5X3DIx٨W]>!7k)4!s KTm\κ-s JxawC۽Nv7N!]ЗB Njteq$ק4Cv1M\T8N3-`oe߶W޸Xv n'iq]wכݜ{)r`c%"ʰ?8%Pc*lVB^־oa׳vكob/pf ffg7f/o TkhI ;IS_:fqS9N9}~yߟx!-X״ՊPi Gh[Lw:ԝlmih>iyb]a}X !a`hCpӠFLuCz!+R3Uz&CpZRE5@t#-o9L&Uo"&*Ahj0Ņ+Iqm|% aԵȎ,:b(R4dT BvW{$sFFPI(Z 4D5Ʊ9ƅ[^>'R1j  iN\%+_0zroid$†1}e/FE-rԖ;u1biDO}?P5AP.h#Z5!kZʖJѪ|31U65ZnTCNZsҍМxΔs꙲{0MT5( Ɛ0Hjѥr+. !q`Mk6wrl;*a|F6ZEZ\ͻj7T_ϪFMmukIVJX!ҡL ͕LZC4^lݬ[mtF"jJkZVC4ĶZ֦3ed5gzP\4Y"30=sې6nUcu[2ۭqc/m,c VvP5.T0 w'.C: }=bə*alFCK*MJae=m .M’pvv^4y?f#۲)#w1QGJ[;1u(s폙2HeHmE+U(o9YI`u6%n-,VN/PW9n7ٲ^F3KEUƪ8ob'/%suiI['+2I? nT^_A'Oen&0U*0/>xoxځ!OVPZ0`E 0)lցu*p YnZpI!H0 ѐ>p䲰 )L|y" !6Ұp i Id7T |!q7XO)(76, #qpeQB I@ 7 qI[.u;Tx/iQqԢx0Jde׶[Q'(a)f1Y$LYl,,|BK1/q 1121 hxa^hZNfr1}pđ 1 =2`i4](".Ao&9R?'+/$fxAqQ!fTgZ2%^)_O "` #}+(hx (QҌLϖ*_ گ"/'r/, ,Q% Svg->-P.?p'a#)+23 /ń3gV!m' '@1Ȥ&F~lH}@D DS 6`|VqG6irX31<2593Šh:Rr05*1n;w$Jz43hW6dY:Ie^Cfg)&rjfcc`fv*v FG!j,b38#}{B*ۗxzYOhh~jjtj'iwvjgb&jklvʣ@*Oʡ&~&iJ68z≥v,.t?ggxdޫnzj˯ED첪K/ WWzmL.㞌[Ήg-1$9'<Fۣ,erjYp۾zl=5\9@@~c\pL*C(iqIU{7x9h/y#sk4 {LhY?2^vV<s0L{rM}n [pj2g'0ĺߜgm{L# |KKv=*8rb#=~jyWs ۟7j `o h7M Z֪jN懼ePMTv4H%l!|I W HDHLh1Pr)ZXI.z>S@2h4#6rʼncIXF7x̉B>1 SǤd"F!򑐌$'IJZ̤&7Nz (GIR<*WV򕰌,gIZRd.w˦䲗 0ua$$f:3&|4iǐ9̦6njs% 8IrnL:jӊքiPꙚu&E*Q քueŨTѳ \̗X_}<׫&k'_ױ*հlE["k_zXֱe,Q+O))e KXƎvu^MZymj^9;і¶-mI;ʶp3#Z6=-[SkUVk۲Fh+]R oeV%mp^>խfʮנcꕷxy+`7}Ybv/7^jx/G^V}ؾ~o}c'_*`,ZpOc2٥B&bdUO(Olsn2\1h^)Q5΃2pKkπ47,BψnK4F eюqI[Ҋ37TӠCMjDԨS!հcMϢhεw^MbNf;ЎMj[ζ}Z{;ѷ~MrNvMzη~NyO;'Nϸ7{ 9(OW%gN8_ys@ɽq_GGGz7]PgҥnrUg:շ'Oק.SN.u=SϺNv=a;~wm?{va yW{OyC_ė=ߑz9w隯1{+^ǯw/ݰ#ξ|cӟ{?m/~۾'{v~G}'ow F|gtxz}N Wu8z|X Xx귂*(~4hyǁW u'y7}Wv-(w8x7{w"zf!hTu[xhEH'DŽ\G.MH{gzmX|Ji(7x,~wuv',=hyPxe(v8(0x%n|y<؋ʇVHp({ȉ:8XAHCxu3Xc;*Kxv87~yG]ȃ舻؉ȊH~؊x@'N؃g2ژhᘁGXɨ&iȑ؎.Ih"وn*y$i9HhBiȇ}%txKȁQxW) uPcXZi)}#\ْR'$ؔȎ|SIg9? !И|]C٘ pmg?Yz Ǚpyr)p9yYٛ tmYyșʹٜmVkvktٝ9ٝY虞깞ٞuYyiO:Пz RYOڠZz-q 0:$Z&z(:O:O.4Z6z8+*O>p!DZFzHQ; )IR:TzKڢ/ pOU`bڟWz?z O:lڦnY/ 0.e7a*#4|Jxd{zOvʨ )YzP#w 'ʨ:Oڧzڨ*rz >zRZʫRZ 9|j4jګڬ*SrA/$ ګjJڬꮄʬگzۭ=e0*)@)Q:ʯZ{;*ZΪJ9g:ZQ [6{Ij:) k);ڱ; ʭdԤD*aw:>Kˮ'+ʱ;$Ec˱z {e+e0P@*նZ*gzz+Zl{ KZ+Ųr '0u+۹Rkk9,@[{> !K;[{ۼ䉼  ؛ڻdқ[;Q[껾kO۾O;{[fh<\| |FYD <$WJZ*S*!,2\. 3:p 2@ J@*8,HY1 JP=\*GXŕʴNO=* Ud\(AxPJ_Iz\;; ӪlmǷ;ŗw{n>d+t<Ɍ|˷ZɓkPdܭD\9 J9zZ*{^k!kZ˯,üL?i Lz4]yȨzbK%ی<圮|LaTÌkSak"\l˳l쌶[Džȳ< ώa:.O,5l]8+̠  ͎,*SLS`]<ԬG]Ҽ0]ۺ 7mԏ\[-O{/Z/›Q<\p!z|Zݠ{lȴ*TYK؁+bfZʖkƒݧ+1֓G65{}ڨ=Pѻ٦ڲ=${JڑMۺM۶Mٻܒ۷}ܓM dݞ ]eL֝Q=]}gl=`ح]'â}=7LˆA:C~Lܥ ~V" >(>Mi ڳx(⟽s,ˑ+Y&eD̪C^ǚض*Ͱ}Jn2M*̌a#m0 s亩!\5(;Kx~gL J̰V՝Znсn^{5ݳ'2>}l} `˜՟㋎dNH=?-)EǚI^F+.nb^pktk;ε:{Rn鸎{\k^KE쥝Om*ښ~R ڬ MϹ$[*o~=+2_O6{:HB?D_FH>R_OV3]|ZMb(jl mr N|o^^dز*k:ą?-,.nkm䖿9NF啬@^NE/Ϻݾ^m|ե/**ԲX}mE}{\_YM{zn[B_-˿\ڬ/-۸A@ DPB >",^8aA| ` p Q!,U3ˁ4] Ȝ-k"SϛmD0Р7ysiRUa%(֬Y:IpiOQGBjUZmaRw#Žܽ;% XMV0۱asQh.;8iᦎJܖ+YΎ~ZgLgFipb{nܒ ZJQc= r 3@{|@0A 74H+.0m$0=WdE_1Fg@$hNLF!$H#D2Il.lOI+2K-2(:ɁD.dM7߄3>&3q&)LS8O?sNؐ: E4QEeEA/S(4QK/4SMz<&5tSQG%F; TUWeUQQUYg+a5W]w/\a%XcE6YeeYg6ZiZk6[m[o7\q%wZXD7]ue]w߅7^y祷^{7_}_8`ŵWF8a Va!#bs86?9=3DF9e$y 3:Wf9lY@h9hn+gD,h)_hD:k8jF;(i j禛fU/Ѵ6;Ko0&׬̭Uo)1[l~pQ/t ;sZA+s{[ͩjgΰm7p.p ,jȑssWwFZo[о;+p˴2xԯs'ȿ7Rwg"!IP1f:89H8_߶D Ry~RՇ; X!mD N}JrAu'KIaqS&<_vItO.'0NiN8o9#7ޅq;bxQ!Q8]"Wz#H,dOG3sF͈Ll΅#GÔ GP?sFtQuChoG=2Y9i-rk@e[җ2ژRBD])τf(f64MfމJg8nRJDgșNvsKtg:R%EiJAѥc/Je:S2#1iNuz^$f8iPsZLG*K!%J-mMCjTQS]mjVITj@jX:%neêXK^$oi!WƆq|\4"&U(BrU~򫫦0KL(CΆ*T'OTOA.I{Rj \xI*=%&ҋ[v1ߕ3ȾKsψ"/ dmxYupzy! M0.py;t614I*ٴ 04Ic=7>"Rݵ 'ˎu(A7yYR5_bE8a<$<H-㋕a&xE2#\X*2= o H4ѐ;me!Ou`?Uf3f+@\EV1O\kVҘ3)}UoB:ӟe0=ӠFu*OjN*կ۪K)YY5i}k^zñ9{=lF)>:mjWvmn_{w=nrFw%lhfvwQoybSQӀaQ p1/N*%n+-_UT~ku呥{aN)6~%D˹+z4sL#e?zn@7P킻u/2%{DH .ێHBRVN!+`Z#{ 7B"rqի[YΓ0/[L}tc(G%nmHpdzCʇcaܔ# x+|74.Mv?F޴Q]MFU˅ Foi׻$_lw~34; <ڴf@@DQ#j @?Q6 $A7q6STw?iXx@qjAAEB$n3#D$T%d&tBd !)6+B\-[/#14C(3TCH5tCh7C9% ;C=È?DA4DCTĵ(ETFtDCHID?KLD;NOE7QTR4E3DTUdE/tWXE+ZBXY]^_`a$b4cDdTedftghijklmndFTQpq$r4sDtpTvtwxy Gv{|}~~Ȁȁ$Ȃd4ȄTȅdȆ HtȈȉȊ7ȌȍȎtT),y)IDɔTɕ|(dɚɛuqɗII$ʐɑɜdʦtʔɠ J,ɪʬʩʭʥ|ʰ˱\Ȩʳ$ʭTʟʮ,JlK˹K4KɵL˸KʺLuʽ<˾KJJDŽ 7DʤɮLL<ʵ|IΔl(4ӜGdtׄKԤڴuܰMq#~4DNv)ddtNބ,N 4O$TdϲH%5EUeu Ѐ;PK\'$$PK6(AOEBPS/img/int_rprt_col.gif?rGIF89a0>B>@@@BBBHHHRRRTZT__``aaaaacccccdkdddeefffhhjjkkooppqqryrrrtttuuvvvvwwwwwzz{{{|}|}}¶ȷ¸ĸźŻƻɽɾʾʿ!,0? H*\ȰÇ#JHŋ3jȱǏ CIɓ%\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧJBJիXjʵׯ`Â*ٳhӪ]˶۷p_Kݻxwܾ Ll"^̸ǐ#U,˘3k\2ϠCM)[ͺװc˞M˼L}ν[ȏ/ͼAEسkν]iPnXϾ˟O}8??=x9gA4>t F(Vhfi3 p(,0(H"Ġ@R!9"h䑅)5=PF) $QL\v` `hcW"~}b8MdxNyG4)蠄}Dy6瞉)n);k0ti~jaU8%7#۬HJ뉿lN8ꪜ^mЪJ*vkDQ:hb8wK 9XlpXh㺡mRf1WԋwXnR1* ;LZr1,1K{J:ߠx:-6߰3l3tê:  D]u.F '\<+}3w:olSul4:q} ܑO9ݔoځCK0>OKL.Wz.Ǯ(u-4{v@NĸrKjgK(:觏4E>2K>~}+Q8@0lVL^‹ A/(< BixT{_0B~.]ڰ'$)U+[]9 -$bhI`&OTsE x+AM%He#럳:e3\w>&9I3t`vͯe1Te &r{\I3lvE)03JFPbQ_ c4"PPk )-&1H<9HdI _r$!C:t?{d)s/0\D/Wn;Sj"=;e\D  Xcrvtf;ޏ| B8L " o^W>sx^4W)җ8E\-j+ֱ_I$z7ݗӣ#z6IF.m-bC# Gej~c(j|KB;؃z.qtƸu|)"!Xjֺމ\ͫἪw@IwJ]{VwmUMnSC;nɴ-vrmld7Ͻtd݃Nx;\Wp8ϸ+pR{87ZxOcG:/8!@s[ai~ Ś@D ? ԄGOzLFxJё^]@(܀#=pA񶻽%_rR\qO/ko#>鉫D9) PӼy5()y{0;uAhSuǼ&+Hu/aOF+A}6,愘p {_!p +yu 1<o  _ߗ~>&p|{yzWab. "`L{Xa`'v uh@|*f|)r+'Gww|{'}{x6H}sǃ|ur;H=5XHrfFm'ag YsX \Hs Fs*x:gl~jxcS(akyP gyzG Kaey zB'v؉C8w2xrJxFrVIxw7芰HxA0}5bssWSsE@(y뇅nj@V`~Ϙwu,t8VH{ug{W )}Bx"xAX ؐ(lk8 `}!:W~p$HahttgxagawvR8I&xhax؏Nvq*,hwfvٕ87Fh}}Rse~8aؒh#ن8-.sqya'x\zF0ztkW@8I)8aǀO9`)j8ayj ^IijՇj }   j(]"9ex%x e?s {` gTh G֙yihuMəIpɊeVvq89 5HWIk}. e~)a7}*~}hx* z8Ouyy{hlw1up h9LȊX|(ǟDJ}h)F:Il H * w8BZfi}wotǟpIj)qln 9fvgڧ~zbiiaJkjqlJJn[:Qh*xqvV:W7Z,X-wp*::qYi1W:wf)J:$pؚںڭؚ Zz蚮jj0 J:&zگ;[{kO0 , J;v ˥0QS@ok vz L  &.0i$ & &|P q>@kg35  ִNPR;T[V{XZ֋`څYb[f{Bhl۶nr;t{xyaz۷~f;[S˸ R[{[+a ;[{;ۺ[{[ۻ [Kƛۼ.QuP{؛ڻ˽ ;[{蛾껾۾;;K ỿ\\ l <|+-A$\&,\+0;6̾8 <>ۿt H!,B) NR<[V Z]*`L#TN{G,؋* ه uP P }]ΟM P䤭 >=' $;cӚ9] Eʠʟ=ը@ȍum%}Ҥ&>^[뢝$m"},~AMު.lE .^nNߗN W.Z](|>|ژң\}@ >߹.\np-rMM^/KE2p2- /þ^4ҳ.ڳm>; P ٗȰ[ }`".ێn.wMl? ̧}.,⤝ݭ< @ޝ9ﹽ}O,=~ Ol ˻͠2!\~@Nq\}}/^xh_μݜ\핿{¯!oэ_/B\[?+K,o1B[r38 |PaB5gD},ӈf )$C9VC gN ĝ'orc5FO=SN$-&IsD*UOHVTi֦VJRI*hͰܔ $6ۣ&^EھGhPuR x\n ,ֈuV,߸Z&q#Q#F8lڵ?~d;k: ޺:{3xhzכtƯW![׈QvWA,cF@ +kL2"Z/7ʲ_Š1hCt <KpAoFT¨Fc1ʰ<=FP HnP9B2G`2!Z;2.%;h&3%33LL,ScQ>+I< rB){«\so>o4Ib,O?eP7A=++JccS7[qz:x8x䚻xb{jzj(T1PJqo3AMn朆\@]s)uo/ \ײ3%Mń _v at1wR;ޞp5^a ݊c^\V8pVAnV)x]ya9bp3/dz^Hj &1|)}2w瘱ѽ+ኈ!x-RHWFH]v7 oKݺ"Uz/͗sl5[?=tGNNG=uWgu__=K[Zug=wu121s}_wލgxӛ⣧髇zQc~kÕs'lx{g]kO}avRFyoG u4`o}7s`K-v0{=X=p+% M} ta`ΐm*h jЇC_Yn8qp*$"h%~ЈIl) b %Cx6Uc8F2ьgDcmF6эoc8G:юwl#YG>ꑏd GA4 HFq$IJqL%1I.Ƌe(E9JRҔDe*UJVҕe,e9KZҖe.SI]җf09LbӘDf2L^.әτf49MjVӚĦ/Mnvӛg89NrBsDg:չNvӝ99OzӞg>)O}ӟh@*P~ԠEhBPc2hD%:QVԢhF5QvԣiHE:RԤ'EiJURԥ/iLe:SfENuSԧ?jP:TըGEjRT6թOjT:UVժWjVUvիAM7G<|լgEkZպVխok\:WV59i]Wկl`;XkaX6ֱld% ~/lf5Yvֳj(yZ]EmjUZֶqmle;2!Ё3b@WKb:5.P5nt;]MYuzv׷AmVC]7 Q[]׽YA&,tlAB7ЊEys! ]P0N(ozE,€[ S87qu\ݬ :l RXs@ENXN.(tqYr+2p9YKnu*os#K|Aʐ׻ g 3 \K`h䞎USa:yh0d>'+gRԧm*٧Gh'z 3':pMzԱ֯sX m$Plf7S-;!l 9[Bוv]X"D[cө]r!G|*VQ%?yW7[myw zҗw|VL{zַNm zq}g{ͽC8|G~|7 >?}W~}G??~O~}uϳ$4DTdt $4L?!@tTAĶ!$"4#D$T%d&='*+,-BĒ)1$243D4TC B ÊX89:;6,7D<,BD Do(D?@@T@C$@G<@HEGd\L\^@@lD$$CCn(E,DNt@W\EMFEYADBE EbPRbSĮCcVD.D! bH bjEgm,hEDS-$ά6]OT4?eSUl+׼SCeDmGMPGUSETUս$UًUXYMVսW\]"U^a%b_MŚReefughijkmVdTnokVeQc5sEtEqrUwxUve`{|QzKw؀eF~ B{-V@؄U؅e؆u؇؈؉؊XxhT؍؎؏ِّ%YXS(W5Wٜ٘ٙٚٛٝٚS١%ڢ5ڣEڤUڥeڦ%ڟUBO@FprU \ZFڭR%۲5[Z$< dUIڰӺ۽͡[#\۶5@F.@URaXeFUQՍ5#\r@E%.xL\˽Q̥܅ܲݨMY04]?(مQ^X٨b]MN^eITl߬(8^_ݱ],X-⥍Ž-LLE4D D˄CMLvT %>^4}D `VA`% ^%5n"^R^m@$X@$a= ^7^ߏ(UHƽJDH`A|f~lTbP`d``\b _&f2a45FvZaWZcm_Eе@$ ]% [a7 ,%0I`d`+4^Oed66-eP.Pd.WHcHd03a:~^RTfQ>eMeTN_5e:VDMf^^fdfa~f6fVe]&fl]c^kpV] ޅ^=`@N@ xyzg_d[ҵ_opDFdFN&*b(dI`+v^6RShSf`oYcY6Fn$ h6>\嘖eiijiVj];M<@>NN{>@ =,^haXe@).ie)Fh6ANVfFflnvjb  .ZkM•^jNf`f뼾lǖim~li&maE4u@>yԀp۞ukT,k4iV%D.KN6cN`.A>m>j&gbElvn>Vlddk_cFffooiiwlj u@ @ G ?At"oiqGdK*Nn&Aljl6m&d&&c/c.<Җ"mV$7rl͎r̶l+_r-;c?@>1Ԁ dl O@ePhqlhn6`>q@~j.&WnF>tNmMin'qEG6h^j&L)+`VpmpԀ\]u3Os5gW7?@UXi%(Tmurlp菉FX4ofnGel/vVnhiuohv'gveRO.[B 7Gvah-l].rcvlxd\xjeZBLL$F/qT zux|yxdBw~x/܏W5G&Xi @UPU՚ftytޜ%֧X]Mr%ut={ݞw%{M'7G۾?FQxtehɷ|Q`^ϯø'B7W'BgׇwAߤڷ'$Wg~rr}ه~ |~`y}&'-WXƗOUSWWu,h „ Ĉ'Rh"ƌ7rÐ"G,i$ʔ*Wliҡǘ25ri&Μ:w'Р>LܔK)ԨAj*֬Zr(Lbǒ*+ڴjײm-ܸh}ѭkeBߞ\V=z)#UR41Yr'SlU/̚;J3ТGou$On-x+ᢆmbd \Ty"l2aT/n3ʁ6<3ҧSP?|>5]c]ciֳ_d{5~ 8 igwu8y@ zT | z8d8Oe"P(r#W*~&#nٸW;Ҩht%E *̓YEӄ-IR8z2Fe#V љh)b}!XՌ?#\-fZnghY?֜z՜IV2ODydTH`jI.`X=iRT9TޢJ e9ijfcy+]~9nBJ.Z뱱kfcP%-\ihe ꓤRhpVb)%[S#-nTljb9{mqcbOlkjzdAcS*CO 3 cGL~,r CN)>n9EQou{ Ns DY"IjDwZL9O" SXŠ@lyWyFLnSA|oYu#&7)(alYNfjܝէ;g;ysEZ 1s3Ҭ8(EݩgrLYÆֹp ; HǼBD8$:IFzV,gU51,!y]7f"3N~2,ɡ=-s^pcB`>3Ӭ5y#U34E3ю~4#-ISҖtߜd(ƞ4C-Qj6ծ~5-jK5s]Z5PIu^>6k'zM6-ioy٢jv$]9r6-q6os}u~7-yӻNgżiaZK.Di83A kORclz?5;.r?X#->l$f1'vG^:29lM Tyr7 a_Eg9ӣDr%qcy=yO|ѡ/]nq:nh~zo 2KiJɾ^6hr[lMj%!Q/נGd^@4lM~&SLqKzJ8OԆ*4%|]e((n e)p2{H*nVpLH7Qz\I-Ro쳸#E%u-\^^0-Q@N !c bR"=d)F) rĎEm%$[f)()ƩB)橞iR)N[)7`&.*6>*FN*VY.M|)v~*\f۠ꮍš*r2߫*j%ڪ*"ڛ+z>]&.+6۱:ǯ$"]+"čjf~+2ĶfƴBEƽ&*,)~8X~ȹ:E1+(kԜƼzHZm]pGUkig uוG8(BN,V,"^,e,nȦ_ wh{~ZNeAJy&G_F0  HaK:`&Z (_:d>>Zgt:'/.'٠ufnm#`.s :o!Q7a#"ЄV~C Բ(ժVde>fԙ΍8  )cAI/1doSga2!V/T,"4bGzd$)6(-o&v&(U9+*.,f!FT.^0U%p1Re02"2ds6^64Vuo}/ z( Q䤯 O=$,گ3% /dEl4Q.f 6H1GH5RI$rFjr#~$"9c0Ij0F7Kdv1j00֮q--Zf$] pN"ϰT~%^RWv% }%OYS;eRD> a`Ja2/a&QcRp58e&0ov fh03r:NO2w5[,o>A[.8q /Y5 Ebu? `]Ehs` yFhJ;YB.(>%-/0g]1CDVx.stzttd N.}}25YtD\sA´USۖV Juԭs`u*5ۅ55vj,{?)I_\Y_6aa6a+uUt)dOe5qunpn6gw2g6i6i6kLkǶlvDP6nn6oo6pp7qq7r'r/7s7s?7tGtO7uWufw^r;PK v??PK6(AOEBPS/img/drag_drap_pg.gifCCGIF87aLfdĤƴʴ̴ʼ|~|tvtlntljldfdȼƴtz|lrt\bd\^d\Z\TV\TRTLJLDFDμ<>D<6<̴̼̬D>D<:<Դ嬶Μdbd424֤LNT䬺Ԍ䬾䜪¬䤲̬̤ܤ䤶ԬƬԤۼ۴ܬԤԼԔܔԜ܌ۤܜČĔܜܔ̔Ԥ̴´Ҽ4FlܼܔDb̄$*4tt|ä̜DVtDBD4Jl,>\tĺdjtlrL^|DRt4:4\n7p7݀TM6X]y 6 >K z߅fr̈́("L@,27th8 #I%T޽a-nKnd9J|#I9GR|Xڸe\'Δ?9b1MpwOjodPz)M{\ޗ`h7_9":_8x(htݓH*iN$)fizJgwҤ| ߖ&YҬ~Z+i+밽^klF+]YPxo騣ꩨ.Ω-nI7X}&;+:.l6kiko~;JpiԮ5 yd{.o% ,#Z+'jkɷoߗ<ְJjWzk<.E4y }/{0˲Uڌ؊ʷsh3JvP*4wCm4n+wEgEv4/35օL{]7iW^&w=t׽z; l\@2l3ב+o2>J%e@$睛Ij悮[@RVe]*>1olw;} ~Zuo?xʟ%~"䃠v!{`Ww0 ΋`%W=`s!_@ wO@ߋ,?R!ؔ$A@*ZX̢.z` H2hL6p(hk IBL"F:򑐌$'IJZ̤&7N21 6RzL*WV򕰌,g $C)wI^ 0Ib20%)wGc:Ќ4Ij"/"k3yinz 8)`$:v4':M z̧49O} @1OtMBZm.DPfNͨF[YQn G9Rk`!U$HSzʉ!rbF ә2~\iIUzKT4i/q#5ҨE]JHT?iSmj ZF*+;Jϝ4_EH*Ҟ.ҫfS:դJK*[aITҪo+^g W*2{Lָ ֭~ lPmzդus(tLr~Ԭ%]5{̞ԳMN{ٱv,,iSٜbvv kIXC*d*׸ֱeas\gaֶ%.pESZWa vMlt]v=dKRY:wi 旬Es_ښ5q%Z†-o|'a* >ig$^/|g5)F/[k[ީΘ-y-K*Yס%78~Ӫ`MVRq:\!V@0wQ[Z&})T),Hsj^l;wCV k]?3zÊ^%WnٮK,lJ3u([eD zŇxJzӚv `2BUovg`c2lb ;Ն]vv Pyףd>7E3zU]f>;V]ċƱaLS;s l>o҃@8DX BXHqJ؄NLR8т%XZ\؅^`b8dXfxhjl؆npr8tXvxfX |؇~8Xx؈8Xx8Xx艬8Xx芸؋¨8xȘʸ؊VH{،8XxXظ؍ @hh؎(HXȇH9Fx$鸐}Ȑ刐S9XH '*Ɏ, %4 -ٓ葛I 9GX)5 ~HR9*,ɔZىHBِ+9QYN[ /)$eIi"y9yiys9%ٗVY!ix9gmYu9RIzY~YnI7)7Bt w9)K)vɓ3 ٛiHYyƹЙɊYiؙxٝީ۩ZY㙊虞-ٞ]9y[ =ɟjMṠؠZ(`yʎ:8$ڍ!*&zʸ,zzs2Z6z8oH:ڣ>@ Qo@QF:-]H}ѤN0KzPyQVJCXsѥ^[`ZAzh@&q@[F{HI+3$R;T[V+3KW\;Y]W(Q1jl۶nh t[v{xd{@N{b^밁 [{QKP &as[{ +۹v `1:ʸ ۺjK 븸ۻ˻r;[ƫԂx̋!q;g^_L0Q)ǫ-!;+[KɻA}\'l@ ث+P qPl<*!<$\&|(£+*.0æڿ\8 L  = O|f˾{X\ V`bZ\fSRfnc_pn|ul \ |FUK\:Mܗ}p=`z~\i瀞Uu݆ 0]ۊ }MՈȁ|]}-6x`锞`~~}fPܢ S ~$ NnNȾ٠]$>'oɽ ⻎޽-Mm.#Ѓup^W? b۽t]W]pk?ՍNmֿMKhNn^.&Fޢb~?~m9-;m6/?3޺n#UC.1 0D5J @ ?OṪ~խN^ꤞN}oޙݝ?/o/ެO?/ӔrO/Oh r)Qy?^㒞o/ u` $QG@o <(B,È-*\HF=~ 1HE{RJl0aG25fؐř!}4$IEETҢ0%I@TxcG JlVg~ZBOUWu`ذ} u_Z"pTÅ;Ydʕ-_ƜYѾ}a 7L@Zj֭]Mlڵ:XI$\z}W|sՕ~yٽ^lܳ󾪕W{[|s_~o)t @D0ekNA4A PA b?6C ;1$ѿ"B#kE/aD*âD1G>ԱG+1Nd D2I%dIV2I)tJ*lZK/3L1ǬD3M5dB("K;Ҩ:2ϢJ?16E4QEݜpQG47t9!P;u@*SM(O?2ԥ % PRWeUW_AP5V[o5XgKZ%U a*cORWg6Z&gUZk6P^{W0q%\sWoE]w]]yUwKQ7_}4Q8`iW faxaUJ8b/fx*Ƹ5fYG&YX-9e?]`kcC4*gѤy6TGw^&hF:i-*襟:j^^_:k+9=;l&lFdFm߆;޺Do;o{bcxRwkxgyۍw^z>{{?|'|G?}g}>z秿~?8@Ѐ S"6Ё`,Pb vЁ<`E8B/AP *d Sp9auCЇ?ba@bD&60RD*VP%bqo$cح*E@cոF61V+8G:)rcGBяʘ<ѐ#I y<&r$d$iҒaNvғe(;9MҔQJQNwe,èIVғe.qZ(e0I?MzИ$1Leӗ$09M%rMlRGf7O͐m?Bg:Ajs)|`Kْ(xh1I|泃 ݉ԠM?xh4ԡh4QmF8 E(SbHE:RԤ'EiJxЃƯf)LObӐ1 !S1iPƴ7AjRtGyiS:U>qdVUvի_53YLf=IME =:W6mgM8h iag$DCaj6ֱmb Q@lf56u,\jSꔧ=#쀇$^# my$"ڻh5hP3$! (.ꁷtl9]V׺./=YLi]kN ׹<m[6mZVwrZVᶭB+ъW\x`W /4 Iǹƿ(1zԧFfо9 z.YG B]WsI.r\GL:Javjnw]5j$ "K_ /JiMym_w)bTExp7x?-@Ư39 hJsԠfKoF][7VeKہY3rօ 4o.svz9{sGGz'N?Z> Uށ} Z½/}ux9koަhy,8ݹA.tg?xtzu ɿ+:Ô8fDyX>8z>鯇}쓾Nj1;zr*Q>̔|߽|]}g~['^ſ~}Oqai6MLk2/dATN}3W~Γz ]z_=8[>>c ?$c@.A˓] ;xkysNC?ӻ43{4 \AAڃL"?ɕmV<])sx z hˆ ؉*B,qd 1m1#S6.$\ÑCXCJ7S۽ 7809$ ! GHlD=6DLE8FvIrPTN2OEő`E?=UE`ŦsE2)Fe<3HiFF 1BjnIF0\sD* YFrltxēud.=|,>GǃIǁ JGQtȇȣ XȍȎ]HwќDɔTɕg vI/ɜF{ɞ&ɡ DʤTʥdʦtʧʨʩʧ!ʬʭʮʯl$ʱ$K˲D˴tT˶tKa˷˹t &˼˽˾KKYJ$L XT9LXJńLiLLzȴՙKLLK@ԴvMFgMSsIh(,z!M8"*rN\)ެ""ꌢNN΀12DԣNtE*R,ܬS#bMO,15CUPOZR]J0 E0 VrP|S E9EPyOTc&SR{Q -k %P !5ۦ[pB͍55 )E5&Qjk P [PYH (V$(m&6=5+ R6}Km=+x PY0C52Z`T5(;ͶxPk `@dӅV+;3SETUUUA@*P ؄%X0%(GZSh03++8xa)`XE VT`9' 賹 3W9cѻ㓽wWjUWuQ"| Ryկb Ud-/ 1S1//`/`%:(*?cC\;sDY|@zQWWd 8諳X YWP(g#²upfxh`iݾZ=SqmkW3WYZWCv׺yٺYYDCM4~U*@cX ȭ X2dXXfHeh%xس2 R -k2B ?kS{SYsו ٙXٚYu̽-,P-*ڷ(c88`P\(Z`-EڃE8 maXEع=H۔+C?Fs;-cM٘ٓ۵]@F`],PE;Z'k ^u._=8_JYsV[abu.aa8{4 #@adAa93AtA blA##&vb'I`%Z&p_N4? dZ`sa9x:4p|4N/ OYԐֶAx,j4%Pm2ffgbݢqqDqqDqؤbgn0@:^hN*sm*oQZ c"?^.6r013.]rh~J0;OONRPtGRxa.d[6gsT8RVbYHpTbS( uR_sWTs^?7ru[|6T(ZX\o]ql۶?u`^զb֘^Q-^ZEmTq'b@w I`/%V@v$2- vYPYA3XH, Zxz%G|βNo.'+ 8@wh:mw/"ohVswtLZug~w_|*G,=,wyhy@)yv_篙{ssW/  rs{Ro߬-X7gVZxg_Yh{}fj?{-{{HY<4C4/49 YP:nc9c(|AJ㴊|t:yYy(肒?yV_dH}gYR-$cSf0ߟKcGzG C~Vfj P(~`1~HC^ϋV $@ „ .X!Ĉ'Rh"ƌ7r#Ȑ"G,A &L@+Y_)jE A  ɬJ&#VS>hP/-D5TVlh,ڴjײm-ܸQ$)Ex:UGiB"XĈ$),~k߲r7s3ТIҵe̙5o%K+F-. (ܳV‡/n8+˔ؒv:eطgh69Ǔ/p9E:@&1,a>~C~-(`Dߙ : i)R)TRh`Bz8} > )" 7+ a-dI#=J D18$ECBHNbQJ9%r(Q%N.$aB`y&AY%m&FWFÙuDty&g}> 'J(h>(KJ:衙j郉>T:*zz@*:*Ɗ)+q:A*;,{@,:;1,F+jm[:Ć$vGX+Jt.;GҚQ <0|Q+p3K,/k|\c1!ֱ|2J,0;d5L/3=3A =4E}4I+4M;4QK=5U[t5]{5{3ep 2 D`6qsr7y7߅ b܁ z r8+8:872E7~9sz5{9衋>:饛tၨ:뭻JG:~ra ?|ײJ0;;+?}oaFoFҫ` ; 0EVA x.P2H//IxJ- <8L TDhAi_"$O-p5!}VAq}Hl"(D0щPł1" JbI 0fD#/-P^B#S1S#"?B,a%0Duh# IIRR2da"CI.ZEK[*]N9Qlø#KP,CK[Ab re$%#fBmrWXuh} C,-X"t>E3ю>b;|.O4jKX @EVpM8+͆tp(~|@.C(a0'9M4b>PO"u0@l7 ؁P-m_!MGô<_0?p ڭ01d8ӉI1S=#zLmH"zŶ? /x 1xo  ?\>' '$"XtgX@@yk| Dyt9z^$Es y3~ot% y.QʧS(3 u\?:qݕV()L넀WqAЙㄧHq7{Ja:.{w>6Y5S>v ڿk5)򓿪ޗs?La:VMpO7Y'?u OOxoit+B@,N+ P^IѱMUٰU])ٵ i.MW( ZMEm`+vB\y ]훦9Y ]EVh|!n`֟^ `Р[qZ)D!!ơ!֡!!!  "!"1Go߮*_![u^!D""&bf,b [VJ"NT"(R! f" e%F("YE}؇m~@z'|XT/ 03V0X`26r5bu> I:7S;c9УB=j; BJ<)-$?)D>E&DFF>ANAwJII TJJ@Hd,C9Ե,Ĵ$ܤBN: OJLfEK9F=DEcR~QeSPLLV @teAXpW@ TNLgmU>@WF!\AX_ATLHA("A [eB؀ !dAȁ^A_`a4ADV؀d efK\ Tt'$B"tgh_`fD<&(|A d LmnKnU*@B'gpgh%rZj.ga"kKXg dtU`(Bypz_Z`faJ茲AܨwƄ𨈚'zi |2}v!A@)bIiƄ(\*h:h|F|i}h0!؁ ń$(i'di~&ii(h(V: D@& )i&'hk&A'¦rC檮*@: |Q'*zg)!p|B"d Ԫt B\%h>v)nBZ&$2NLH@L`%)s"ft.$\&dgoݫhkd l^'!3>_k4, AgFBD\~j87CJtEϛK4LǴL4M״M4Mw4He ="I?0 _-Js@S7S?5TG5TG 1I2V,o?_''./Z]A[^[^]AZ^^u_U{n.t1²rQ2YYKSu\]e7e5fK6g]`wevي+bK0?o4?vY_^u5e]mP]\efA\ul}6GX76%;4WW/D3kRdqe6 f7]]˞p6^u5zqoerYP/>eS CtCg]u]8puxy?zkeO+psuDײb7hv8xx8_88׸8Age2 [x%g>?n H7t0PŔ] ŕE[9oGP* d5Ϸ9hA9׹3D(`|3Idl@EGD'tD$@L@2q lr#z;D@P@,A:7;˺Cغ @P,A8^d Qƻ_[zD@ \d{ << ;ywH{D4 @@ , L d@<X@|@΃ @ @OXk|xB.=G8@ <˫@k@@<S| /ҋ7{DDP [go|}}}З; d'S܋|E$X@ʷc={=<ٿ $E~NgDlX4d@h=}4@ ~;dK.?7?AE~wD(07d<X?,(/O?OW"0Կ?X& g @0`A&TaC!F8bE1fԸcG8dIMTeK/aƔ0L7 ĹgO?XShQ&UiSOF:jUWfպkW_;)QgѦUm[;;n]wRo_VWpaÇ'KXqcǏ!G^Xre˗1gsgϟn=ti7EVuk]ǖ=5lڷql[wo߿>xqǑ'WysϡG>zuױg׾{ws;PK>:CCPK6(A$OEBPS/img_text/appbldr_task_list.htm] Description of the illustration appbldr_task_list.gif

This illustration shows the Tasks list on the Application Builder home page. Additional information about this illustration can be found in the surrounding text.

PKoab]PK6(A$OEBPS/img_text/shared_components.htm^ Description of the illustration shared_components.gif

This illustration shows the Shared Components section of the Page Definition. Additional information about this illustration can be found in the surrounding text.

PK 'c^PK6(A%OEBPS/img_text/sec_attribute_tabs.htmc Description of the illustration sec_attribute_tabs.gif

This illustration shows the tabs at the top of the Edit Security Attributes page. Additional information about this illustration can be found in the surrounding text.

PKjtTvhcPK6(AOEBPS/img_text/edit_icon.htm/ Description of the illustration edit_icon.gif

This illustration shows the Edit icon. Additional information about this illustration can be found in the surrounding text.

PK4/PK6(A#OEBPS/img_text/ir_highlight_rpt.htm= Description of the illustration ir_highlight_rpt.gif

This illustration shows a Highlighted report. Additional information about this illustration can be found in the surrounding text.

PK<0(B=PK6(A$OEBPS/img_text/sampl_app_myorder.htm> Description of the illustration sampl_app_myorder.gif

This illustration shows the My Orders region. Additional information about this illustration can be found in the surrounding text.

PKC>PK6(A!OEBPS/img_text/bldr_hm_pglist.htmt Description of the illustration bldr_hm_pglist.gif

This illustration shows the Details view of the Application home page. In this view each page displays as a line in a report. Additional information about this illustration can be found in the surrounding text.

PKKcPK6(AOEBPS/img_text/drag_drap_pg.htmB Description of the illustration drag_drap_pg.gif

This illustration shows the Drag and Drop Layout page. Additional information about this illustration can be found in the surrounding text.

PKOGBPK6(A"OEBPS/img_text/demo_obrws_srch.htm Description of the illustration demo_obrws_srch.gif

This illustration shows the search field in Object Browser. To search for a specific object, enter keywords in the search field. A list of objects displays beneath it. In this example, the keyword demo appears in the Search field. A list of tables with names that contain the word demo appears in the list of tables.

PK,$PK6(AOEBPS/img_text/lov_page.htm9 Description of the illustration lov_page.gif

This illustration shows the Lists of Values page. Additional information about this illustration can be found in the surrounding text.

PK!m>>9PK6(A!OEBPS/img_text/sup_object_sum.htm6 Description of the illustration sup_object_sum.gif

This illustration shows the summary section of the Supporting Objects page. This section displays the application name and indicates current selections for the following: Check for Objects, Verify System Privileges, Required Free KB, Prompt for License, Substitutions, Build Options, Validations, Installation Scripts, Upgrade Scripts, Deinstallation Script, and Include in Export.

PKj0;6PK6(AOEBPS/img_text/rpt_ir.htm Description of the illustration rpt_ir.gif

This illustration shows an interactive report. The report displays four columns of data: Person Name, Person Email, Person Role, and Username. A Search Bar displays at the top of the page. The report includes Column Heading Menu links and Link Column icons display the left of each row. See surrounding text for further details.

PKtLPK6(AOEBPS/img_text/demo_data.htm Description of the illustration demo_data.gif

This illustration shows the Data report for the DEMO_CUSTOMERS table. It contains two rows of tabs across the top of the page. The report contains these columns and the corresponding data: CUSTOMER_ID, CUST_FIRST_NAME, CUST_LAST_NAME, and CUST_STREET_ADDRESS1.

PKEPK6(AOEBPS/img_text/rpt_att.htm Description of the illustration rpt_att.gif

This illustration shows the Column Attributes section Report Attributes page. You can use these attributes to alter column heading text, change column positioning, hide a column, create a sum of a column, or select a sort sequence. Additional information about this illustration can be found in the surrounding text.

PK8PK6(A"OEBPS/img_text/pg_def_copy_ico.htmm Description of the illustration pg_def_copy_ico.gif

This illustration shows the Copy icon that displays in each section of the Page Definition. The Copy icon resembles two small overlapping pages. Click the Copy icon to make a copy of the current control or component.

PKVVPK6(A$OEBPS/img_text/pg_def_create_ico.htma Description of the illustration pg_def_create_ico.gif

This illustration shows the Create icon that displays in each subsection of the Page Definition. The Create icon resembles a plus (+) sign that overlaps a small page. Click the Create icon to create a new control or component.

PKgiPK6(A%OEBPS/img_text/pg_def_editall_ico.htmq Description of the illustration pg_def_editall_ico.gif

This illustration shows the Edit All icon that displays in each section of the Page Definition. Additional information about this illustration can be found in the surrounding text.

PKH7vqPK6(A OEBPS/img_text/ir_search_bar.htme Description of the illustration ir_search_bar.gif

This illustration shows the search bar that displays on top of every interactive report. Additional information about this illustration can be found in the surrounding text.

PKPjePK6(A OEBPS/img_text/app_bldr_home.htm Description of the illustration app_bldr_home.gif

This illustration shows the Application Builder home page. By default, each application displays as a large icon identified by the application name and ID. You can change this view by making a selection from the View list. Additional information about this illustration can be found in the surrounding text.

PKcBGPK6(A#OEBPS/img_text/pg_def_view_list.htmM Description of the illustration pg_def_view_list.gif

This illustration shows the View list on the Page Definition. Additional information about this illustration can be found in the surrounding text.

PKvrORMPK6(AOEBPS/img_text/run_ico_sm.htmh Description of the illustration run_ico_sm.gif

This illustration shows the Run Application icon on the Application home page. The Run Application icon resembles a traffic light. Clicking this icon runs the current application.

PK)-mhPK6(A OEBPS/img_text/edit_all_item.htmf Description of the illustration edit_all_item.gif

This illustration shows the Edit All icon under the Items section of the Page Definition. Additional information about this illustration can be found in the surrounding text.

PK:a͊kfPK6(A OEBPS/img_text/ir_select_col.htm? Description of the illustration ir_select_col.gif

This illustration shows the Select Columns region. Additional information about this illustration can be found in the surrounding text.

PKА Description of the illustration d_toolbar_149.gif

This illustration shows the Developer toolbar. Additional information about this illustration can be found in the surrounding text.

PK\\@;PK6(AOEBPS/img_text/menu.htm! Description of the illustration menu.gif

This illustration shows a sample breadcrumb. Breadcrumbs indicate where the current page is relative to other pages in the application. In addition, users can click a specific page to instantly view it. Oracle Application Express includes breadcrumb paths beneath the standard tabs (or second level navigation tabs) at the top of each page as shown in this illustration.

PK0k&!PK6(AOEBPS/img_text/pg_def_icons.htm3 Description of the illustration pg_def_icons.gif

This illustration shows the Action bar. Additional information about this illustration can be found in the surrounding text.

PKE]g83PK6(AOEBPS/img_text/orders.htma Description of the illustration orders.gif

The Orders page enables users to view and edit customer orders. Order by Day demonstrates the use of a monthly calendar to track when orders were placed. Users can select a calendar entry to view order details.

My Orders contains an updatable report of recent orders. To sort a column, click the column heading. A Sort icon then appears next to heading name. To edit an existing order, click the Edit icon. To add a new order, click the Enter New Order button.

PK]`7PK6(A OEBPS/img_text/drag_drap_ico.htmT Description of the illustration drag_drap_ico.gif

This illustration shows the Drag and drop icon. The Drag and drop icon resembles a green rectangle and displays to the right of the Reorder Region Items icon. Additional information about this illustration can be found in the surrounding text.

PKoO(PK6(A$OEBPS/img_text/ir_select_col_rpt.htmE Description of the illustration ir_select_col_rpt.gif

This illustration shows the report with the filter. Notice that the filter Person Role contains 'lead' appears in the Report Settings area above the report. Additional information about this illustration can be found in the surrounding text.

PKdPK6(AOEBPS/img_text/products_top.htmG Description of the illustration products_top.gif

This illustration shows the Top 10 Products region. Top 10 Products is a SQL report that outlines the top ten products based on quantities sold.

PK@eLGPK6(AOEBPS/img_text/ir_srch_col.htmV Description of the illustration ir_srch_col.gif

This illustration shows a revised interactive report with the filter Person Role contains 'manager' in the Report Settings area above the report. Additional information about this illustration can be found in the surrounding text.

PK ePK6(AOEBPS/img_text/new_menu.htm' Description of the illustration new_menu.gif

This illustration shows the drop down menu for Application Builder. This menu functions as a shortcut to the following options: Create Application, View Applications, Demonstrations, Application Administration, Import, and Export. You can use drop down menus as an alternative navigation path.

PKPK6(A OEBPS/img_text/ir_aggreg_rpt.htm8 Description of the illustration ir_aggreg_rpt.gif

This illustration shows the revised report. Additional information about this illustration can be found in the surrounding text.

PKt]=8PK6(AOEBPS/img_text/find_icon_2.htm1 Description of the illustration find_icon_2.gif

This illustration shows the Find icon. Additional information about this illustration can be found in the surrounding text.

PK]61PK6(AOEBPS/img_text/lock_ico.htmA Description of the illustration lock_ico.gif

This illustration shows the Lock icon on the Pages list. If a page is unlocked, the icon appears as an open padlock. If the page is locked, the icon appears as a locked padlock. In this example, Page Zero is locked and the other pages in the application are unlocked.

PKPK6(AOEBPS/img_text/condition.htm> Description of the illustration condition.gif

This illustration shows a sample Condition attribute. Additional information about this illustration can be found in the surrounding text.

PKǝC>PK6(A!OEBPS/img_text/page_rendering.htmX Description of the illustration page_rendering.gif

This illustration shows the Page Rendering section of the Page Definition. Additional information about this illustration can be found in the surrounding text.

PKz8]XPK6(AOEBPS/img_text/query_finder.htm< Description of the illustration query_finder.gif

This illustration shows the Query Finder report. Additional information about this illustration can be found in the surrounding text.

PK'A<PK6(A*OEBPS/img_text/ir_edit_srch_col_filter.htmO Description of the illustration ir_edit_srch_col_filter.gif

This illustration shows a editable search column filter. Additional information about this illustration can be found in the surrounding text.

PK1~TOPK6(A%OEBPS/img_text/pg_def_edit_pg_att.htmU Description of the illustration pg_def_edit_pg_att.gif

This illustration shows the Page subsection of the Page Definition. Additional information about this illustration can be found in the surrounding text.

PKAJZUPK6(A OEBPS/img_text/reorder_items.htmL Description of the illustration reorder_items.gif

This illustration shows the Reorder Region Items icon. The Reorder Region Items icon resembles a downward arrow and upward arrow and displays next to the region name. Additional information about this illustration can be found in the surrounding text.

PK$PK6(AOEBPS/img_text/list.htmv Description of the illustration list.gif

This illustration shows a list. A list is a shared collection of links. You control the appearance of a list through list templates. You add a list to a page by creating a region and specifying the region type as List.

PKGmPK6(AOEBPS/img_text/bldr_hm_ico.htm2 Description of the illustration bldr_hm_ico.gif

This illustration shows the Action bar. Additional information about this illustration can be found in the surrounding text.

PK72PK6(AOEBPS/img_text/ir_sort.htm/ Description of the illustration ir_sort.gif

This illustration shows the Sort region. Additional information about this illustration can be found in the surrounding text.

PK4/PK6(AOEBPS/img_text/bc_menu.htm~ Description of the illustration bc_menu.gif

This illustration shows an example breadcrumb trail. This breadcrumb trail contains the following options: Home, Application Builder, Application 113, and Page Definition. Each breadcrumb entry indicates where the current page is relative to other pages in the application. In addition, users can click a specific option to instantly view that page. The Workspace home page user interface includes breadcrumbs as a second level navigation at the top of each page.

PK5PK6(AOEBPS/img_text/rpt_classic.htm Description of the illustration rpt_classic.gif

This illustration shows a classic report. The customizing features that are by default generated for interactive reports are not generated for classic reports. See surrounding text for further details.

PKHǯxPK6(A#OEBPS/img_text/access_control_2.htm@ Description of the illustration access_control_2.gif

This illustration shows the Access Control list. Additional information about this illustration can be found in the surrounding text.

PK@heE@PK6(AOEBPS/img_text/css_finder.htm9 Description of the illustration css_finder.gif

This illustration shows a PL/SQL Finder report. Additional information about this illustration can be found in the surrounding text.

PK>9PK6(A OEBPS/img_text/ir_ctrl_break.htm> Description of the illustration ir_ctrl_break.gif

This illustration shows the Control Break region. Additional information about this illustration can be found in the surrounding text.

PKWC>PK6(AOEBPS/img_text/int_rprt_nav.htmV Description of the illustration int_rprt_nav.gif

This illustration shows the tabs at the top of the Report Attributes page. Additional information about this illustration can be found in the surrounding text.

PK)G<[VPK6(AOEBPS/img_text/find_icon.htm, Description of the illustration find_icon.gif

This illustration shows the Find icon on the Application home page. The Find icon resembles a flashlight and often displays next to the Run Page and Edit Page icons on many pages in Application Builder. Additional information about this illustration can be found in the surrounding text.

PK?ՕPK6(AOEBPS/img_text/d_toolbar.htmK Description of the illustration d_toolbar.gif

This illustration shows the Application Builder Developer toolbar. Additional information about this illustration can be found in the surrounding text.

PK[!RPKPK6(AOEBPS/img_text/groups.htmH Description of the illustration groups.gif

This illustration shows the page group on displayed on the Application home page. Pages not associated with a group are filed in the Unassigned folder.

PK]MHPK6(A$OEBPS/img_text/bldr_hm_type_list.htmo Description of the illustration bldr_hm_type_list.gif

This illustration shows the Page Types mode of the Application home page. In this view each pages are categorized by page type. Additional information about this illustration can be found in the surrounding text.

PK ^'PK6(AOEBPS/img_text/arch_epg.htm Description of the illustration arch_epg.gif

This illustration graphically depicts the architecture of Oracle Application Express when using the Embedded PL/SQL Gateway instead of Apache/mod_plsql. It shows arrows going in both directions between the Web browser and the Oracle database. The Application Express engine resides within the Oracle database.

PKþTPK6(AOEBPS/img_text/reorder_tabs.htmX Description of the illustration reorder_tabs.gif

This illustration shows the Reorder Tabs icon. The Reorder Tab icon resembles a light green downward and upward arrow and displays next to the region name. Additional information about this illustration can be found in the surrounding text.

PKY%PK6(AOEBPS/img_text/hlp_item.htm Description of the illustration hlp_item.gif

This illustration shows an example of Field-level Help. Most select lists, check boxes, and fields within the Application Express user interface include Field-level Help. When Field-level Help is available, the item label changes to red when you pass your cursor over it and the cursor changes to an arrow and question mark

PKt.PK6(A!OEBPS/img_text/ir_action_menu.htmf Description of the illustration ir_action_menu.gif

This illustration shows the Action menu to the right of the Go button on the Search bar. Additional information about this illustration can be found in the surrounding text.

PK69(kfPK6(A&OEBPS/img_text/breadcrum_creage_pg.htms Description of the illustration breadcrum_creage_pg.gif

This illustration shows the Create Breadcrumb Entry form. Use this form to specify a breadcrumb name and select a parent. Additional information about this illustration can be found in the surrounding text.

PKPK6(A%OEBPS/img_text/shared_comp_icon_2.htmE Description of the illustration shared_comp_icon_2.gif

This illustration shows the Shared Components icon. Additional information about this illustration can be found in the surrounding text.

PK K-QJEPK6(AOEBPS/img_text/arch.htm# Description of the illustration arch.gif

This illustration graphically depicts the architecture of Oracle Application Express when using Apache/mod_plsql. The graphic shows arrows going in both directions between the Web browser and Apache/mod_plsql. It also shows arrows going in both directions between Apache/mod_plsql and the Oracle database. The Application Express engine resides within the Oracle database.

PK Description of the illustration nav_bar_2.gif

This illustration shows two navigation bar entries. In this illustration the navigation bar entries, Print and Logout, appear in the upper left corner of the window.

A navigation bar offers an easy way to enable users to move between pages in an application. The location of a navigation bar depends upon the associated page template.

PKuL PK6(AOEBPS/img_text/pg_att_nav.htm Description of the illustration pg_att_nav.gif

This illustration shows the top of the Page Attributes page. When you select a tab at the top of the page, the selected section appears and all other section are temporarily hidden. To view all sections of the page, click Show All. Additional information about this illustration can be found in the surrounding text

PKDPK6(A#OEBPS/img_text/access_control_1.htmi Description of the illustration access_control_1.gif

This illustration shows a running Access Control Administration page. You use this page by first selecting an Application Mode and then adding users to the Access Control List. Selecting the Application Modes Restricted Access, Public Read Only, or Administrative Access displays the Access Control List appears. Additional information about this illustration can be found in the surrounding text.

PK]PK6(AOEBPS/img_text/ir_compute.htm5 Description of the illustration ir_compute.gif

This illustration shows the Compute region. Additional information about this illustration can be found in the surrounding text.

PK:I:5PK6(AOEBPS/img_text/help_window.htmN Description of the illustration help_window.gif

This illustration shows the Oracle Application Express Help window. Additional information about this illustration can be found in the surrounding text.

PK4kSNPK6(AOEBPS/img_text/bldr_hm_top.htm. Description of the illustration bldr_hm_top.gif

This illustration shows the top of the Application home page. Notice that the breadcrumb contains the application ID. The application ID and application name display directly beneath the breadcrumb. Additional information about this illustration can be found in the surrounding text.

PKGkPK6(A"OEBPS/img_text/edit_all_button.htmj Description of the illustration edit_all_button.gif

This illustration shows the Edit All icon under the Buttons section of the Page Definition. Additional information about this illustration can be found in the surrounding text.

PKw(ojPK6(A"OEBPS/img_text/reorder_regions.htm? Description of the illustration reorder_regions.gif

This illustration shows the Reorder Regions icon. The Reorder Regions icon resembles a light green downward arrow and upward arrow and displays next to the region Display Point. Additional information about this illustration can be found in the surrounding text.

PK*:PK6(AOEBPS/img_text/bldr_hm_nav.htmS Description of the illustration bldr_hm_nav.gif

This illustration shows the navigation bar on the Application home page. Additional information about this illustration can be found in the surrounding text.

PKXSPK6(A#OEBPS/img_text/shared_comp_icon.htmU Description of the illustration shared_comp_icon.gif

This illustration shows the Shared Components icon on the Action bar. Additional information about this illustration can be found in the surrounding text.

PK~ZUPK6(AOEBPS/img_text/app_group.htm Description of the illustration app_group.gif

This illustration shows applications groups on displayed on the Application Builder home page.

PKPK6(AOEBPS/img_text/comment_ico.htmt Description of the illustration comment_ico.gif

This illustration shows the Developer Comment icon. The Developer Comment icon resembles a green balloon. Additional information about this illustration can be found in the surrounding text.

PKBytPK6(AOEBPS/img_text/breadcrum.htm8 Description of the illustration breadcrum.gif

This illustration shows a breadcrumb. Breadcrumbs appear at the top of every page in the Workspace home page. Each entry indicates where the current page is relative to other pages in the user interface. You can click on a specific entry to instantly link to a previous page.

PKr!PK6(A!OEBPS/img_text/pg_def_regions.htmP Description of the illustration pg_def_regions.gif

This illustration show the Regions section on the Page Definition. Additional information about this illustration can be found in the surrounding text.

PKmjGUPPK6(AOEBPS/img_text/ir_highlight.htm9 Description of the illustration ir_highlight.gif

This illustration shows the Highlight region. Additional information about this illustration can be found in the surrounding text.

PKw>9PK6(AOEBPS/img_text/products.htm. Description of the illustration products.gif

This illustration shows the Products page. The Products page enables users to view and edit product information. The Top 10 Products region displays a summary report of top selling products by dollar amount.

Products displays an updatable report for tracking product information. To sort by product category, click the column heading, Category. A Sort icon then appears to the right of the heading. To edit a product description, click the Edit icon. Additional information about this illustration can be found in the surrounding text.

PKwPK6(AOEBPS/img_text/pg_def_top.htmL Description of the illustration pg_def_top.gif

This illustration shows the navigation bar on the Page Definition. Additional information about this illustration can be found in the surrounding text.

PKQQLPK6(AOEBPS/img_text/int_rprt_att.htm{ Description of the illustration int_rprt_att.gif

This illustration shows the two different links you can use to access the Interactive Report Attributes report. Additional information about this illustration can be found in the surrounding text.

PK]b{PK6(A"OEBPS/img_text/reorder_buttons.htm: Description of the illustration reorder_buttons.gif

This illustration shows the Reorder Region Buttons icon. The Reorder Region Buttons icon resembles a light green downward arrow and upward arrow and displays next to the region name. Additional information about this illustration can be found in the surrounding text.

PKҤVPK6(A!OEBPS/img_text/reorder_navbar.htmV Description of the illustration reorder_navbar.gif

This illustration shows the Reorder Tabs icon. The Reorder Tab icon resembles a light green downward and upward arrow and displays next to the region name. Additional information about this illustration can be found in the surrounding text.

PKRPK6(AOEBPS/img_text/search_bar.htmH Description of the illustration search_bar.gif

This illustration shows a search bar in an interactive report. Additional information about this illustration can be found in the surrounding text.

PKȹ Description of the illustration table_finder.gif

This illustration shows the Table Finder report. Additional information about this illustration can be found in the surrounding text.

PKQA<PK6(AOEBPS/img_text/int_rprt_col.html Description of the illustration int_rprt_col.gif

This illustration shows the Column Attributes section of the Interactive Report Attributes page. Additional information about this illustration can be found in the surrounding text.

PKw\qlPK6(A"OEBPS/img_text/page_processing.htmZ Description of the illustration page_processing.gif

This illustration shows the Page Processing section of the Page Definition. Additional information about this illustration can be found in the surrounding text.

PK>C_ZPK6(A OEBPS/img_text/run_ico_green.htm0 Description of the illustration run_ico_green.gif

This illustration shows the smaller, light green Run icon. The Run Page icon resembles a light green traffic light. Clicking this icon can run the current application or individual pages depending upon the context. For example, clicking the Run Page icon on the Application home page runs the entire application. Clicking the icon on the Page Definition runs the current page.

PK<50PK6(AOEBPS/img_text/ir_filter.htm3 Description of the illustration ir_filter.gif

This illustration shows the Filter region. Additional information about this illustration can be found in the surrounding text.

PKms83PK6(AOEBPS/img_text/hlp_ico.htm| Description of the illustration hlp_ico.gif

This illustration shows Help icon which appears on the Workspace home page. The icon resembles a large question mark. Additional information about this illustration can be found in the surrounding text.

PK?|PK6(A"OEBPS/img_text/sampl_app_plain.htmR Description of the illustration sampl_app_plain.gif

This illustration shows the demonstration application called Sample Application. Sample Application features an easy-to-use interface for viewing, updating, and searching order and customer information for electronic and computer products. Additional information about this illustration can be found in the surrounding text.

PKU(IWRPK6(A!OEBPS/img_text/pg_def_buttons.htmQ Description of the illustration pg_def_buttons.gif

This illustration shows the Buttons section on the Page Definition. Additional information about this illustration can be found in the surrounding text.

PKq.GVQPK6(AOEBPS/img_text/pg_def_tabs.htmJ Description of the illustration pg_def_tabs.gif

This illustration show the Tabs section on the Page Definition. Additional information about this illustration can be found in the surrounding text.

PK[/OJPK6(AOEBPS/img_text/rprt_edit.htm` Description of the illustration rprt_edit.gif

This illustration shows the two different links to access the Report Attributes report. Additional information about this illustration can be found in the surrounding text.

PKxe`PK6(AOEBPS/img_text/customer.htm Description of the illustration customer.gif

This illustration shows the Customers page. The Customers page enables users to view and edit customer information. The Top Customers region ranks customers by order amount. Customers displays an updatable report for tracking customer information. To search for a customer, type a customer name in the Search field and click Go. To sort by customer name, click the column heading. A Sort icon then appears to the right of the heading Customer Name. Users can change the appearance of the report using the Actions menu. To update existing customer information, click the Edit icon.

PK'PK6(AOEBPS/img_text/item_finder.htmo Description of the illustration item_finder.gif

This illustration shows an Item Finder report. This report displays items by item name, label, item type, and associated page number. Additional information about this illustration can be found in the surrounding text.

PKf\=PK6(AOEBPS/img_text/plsql_finder.htm4 Description of the illustration plsql_finder.gif

This illustration shows a PL/SQL Finder. Additional information about this illustration can be found in the surrounding text.

PKV94PK6(AOEBPS/img_text/ir_aggreg.htm6 Description of the illustration ir_aggreg.gif

This illustration shows the Aggregate region. Additional information about this illustration can be found in the surrounding text.

PK&M;6PK6(AOEBPS/img_text/ir_chart.htm1 Description of the illustration ir_chart.gif

This illustration shows the Chart region. Additional information about this illustration can be found in the surrounding text.

PK#h61PK6(A!OEBPS/img_text/bldr_task_list.htmR Description of the illustration bldr_task_list.gif

This illustration shows the Tasks list on the Application home page. Additional information about this illustration can be found in the surrounding text.

PK4WRPK6(AOEBPS/img_text/pg_def_items.htmL Description of the illustration pg_def_items.gif

This illustration show the Items section on the Page Definition. Additional information about this illustration can be found in the surrounding text.

PKQLPK6(AOEBPS/img_text/pages_finder.htm6 Description of the illustration pages_finder.gif

This illustration shows the Pages Finder report. This report displays the page number, page name, page alias, page title, tab set, and counts of the number of items and regions on the page. Additional information about this illustration can be found in the surrounding text.

PK%7rPK6(A%OEBPS/img_text/app_attribute_tabs.htmZ Description of the illustration app_attribute_tabs.gif

This illustration shows the tabs at the top of the Edit Definition page. Additional information about this illustration can be found in the surrounding text.

PKDFf_ZPK6(AOEBPS/img_text/download.htmH Description of the illustration download.gif

This illustration shows the Download option on the Actions menu. Additional information about this illustration can be found in the surrounding text.

PKLMHPK6(A#OEBPS/img_text/dev_comment_icon.htmC Description of the illustration dev_comment_icon.gif

This illustration shows the Developer Comment icon. Additional information about this illustration can be found in the surrounding text.

PK}T7HCPK6(AOEBPS/img_text/image_finder.htm6 Description of the illustration image_finder.gif

This illustration shows the Images Finder. Additional information about this illustration can be found in the surrounding text.

PKk:c;6PK6(A OEBPS/ui.htm Controlling Page Layout

9 Controlling Page Layout

This section describes different ways you can customize your application's page layout by customizing regions, editing item attributes, and incorporating images.

This section contains the following topics:

Understanding Page Layout in Oracle Application Express

The Application Express engine renders pages by combining templates with application components defined by the developer and data in the database.

The overall framework (or structure of a page) is determined by the page template. For example, the page template controls if a page uses tabs and a navigation bar. It can also define if a page includes a bar on the left side that serves as a placeholder for navigation or secondary content. Finally, a page template can include definitions of region positions, which enable precise control over placement of regions using HTML tables or style sheet definitions. The page template itself is composed of HTML combined with substitution strings, which are substituted with the appropriate components at run time.

As a developer, you add content to a page by creating a region. A region is an area of a page that serves as a container for content. Each region contains a different type of content such as HTML, a report, a form, a chart, a list, a breadcumb, PL/SQL, a tree, a URL, or a calendar. You position a region either relative to other regions (that is, based on its sequence number and column), or by using a region position defined in the page template. The style of the region is also controlled by the region template. Like the page template, the region template defines the structure of the area that the region takes up on a page. It defines if the region title is displayed and where it is displayed relative to the main content or the body. A region can also define absolute positions for buttons.

Displaying Components on Every Page of an Application

Page zero of your application functions as a master page. The Application Express engine renders all components you add to page zero on every page within your application. You can further control whether the Application Express engine renders a component or runs a computation, validation, or process by defining conditions.

To create a page zero:

  1. On the Workspace home page, click Application Builder.

  2. Select an application.

    The Application home page appears.

  3. Click the Create Page button.

  4. For Select a page type, select Page Zero.

    Note that the Page Zero option only appears if the application does not have a page zero.

  5. Click Finish.

Understanding Regions

A region is a area on a page that serves as a container for content. Each page can have any number of regions. You control the appearance of a region through a specific region template. The region template controls the look of the region, the size, determines whether there will be a border or a background color, and what type of fonts display. A region template also determines the standard placement for any buttons placed in region positions.

You can use regions to group page controls (such as items or buttons). You can create simple regions that do not generate additional HTML, or create elaborate regions that frame content within HTML tables or images.

Regions display in sequence within HTML table columns. You can also explicitly place regions in positions defined in the page template. You can also choose to display regions conditionally.

Topics in this section include:

About the Regions Section of the Page Definition

You create and edit regions on the Page Definition. Regions display under the Page Rendering section. See "Accessing a Page Definition".

Description of pg_def_regions.gif follows
Description of the illustration pg_def_regions.gif

You can temporarily hide other subsections by clicking the Regions icon. To restore the view, click Show All. The Show All icon resembles an inverted triangle.

The following icons display adjacent to the section title:

  • Edit All. The Edit All icon resembles a small grid with a pencil on top of it. Use this icon to edit all regions at once.

  • Copy. The Copy icon resembles two small overlapping pages. Use this icon to make a copy of an existing region.

  • Create. The Create icon resembles a plus (+) sign overlapping a small page. Click this icon to create a region.

Regions are organized by position (or Display Point). The links available for a given region depend upon the type of region.

Using the Reorder Regions Icon

You can quickly change the order that regions display, edit a region title, or change a region template by clicking the Reorder Regions icon on the Page Definition. The Reorder Regions icon displays as light green down and up arrows and displays to the right of Display Point.

Description of reorder_regions.gif follows
Description of the illustration reorder_regions.gif

To edit regions using the Reorder Regions icon:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Under Regions, click the Reorder Regions icon.

    The Reorder Regions page appears. Use this page to edit the region title or select a template.

  3. In Region, enter a title.

  4. From Template, select a template.

  5. To change the order in which regions display, click the up and down arrows in the far right column.

  6. Click Apply Changes.

Editing Region Attributes

You can alter the appearance of a page by editing attributes on the Region Definition.

Topics in this section include:

Editing a Region Definition

To edit region attributes:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Under Regions, select the region name.

    The Region Definition appears.

  3. Edit the appropriate attributes.

  4. To learn more about a specific item on a page, click the item label.

    When Help is available, the item label changes to red when you pass your cursor over it and the cursor changes to an arrow and question mark. See "About Field-Level Help".

  5. Click Apply Changes.

About Navigation Alternatives

The Region Definition page is divided into the following sections: Identification, User Interface, Source, Conditions, Cache, Header and Footer, Authorization, Customization, Configuration, and Comments.

You can access these sections by scrolling down the page, or by clicking a navigation button at the top of the page. When you select a button at the top of the page, the selected section appears and all other sections are temporarily hidden. To view all sections of the page, click Show All.

How Region Attributes Affect Page Layout

Table 9-1 describes region attributes that affect the layout of a page.

Table 9-1 Region Attributes Affecting Page Layout

AttributeDescription

User Interface, Template

Determines the look of the region. Select from the region templates defined in the application. To view template attributes, click the template name on the Page Definition.

See Also: "Customizing Templates" and "Region Templates"

User Interface, Sequence

Specifies the display order of the regions within the page.

User Interface, Display Point

Identifies where the region displays within the page. Regions are rendered in order of sequence number within a Display Point. Click the View icon to see the page layout and select a position.

The possible display points for a region are determined by the page-level template (which is a page attribute). If no page-level template is selected, the default page-level template, defined in the Application Definition, is used.

User Interface, Region HTML table cell attributes

Defines additional attributes to be used in the HTML table cells when regions display in multiple columns. The attributes control the cells in the table used to lay out a region in multiple columns.

User Interface, Column

Determines the column where the region displays. If two regions are in the same display point, you can place them next to one another by setting the second region to display in column 2. Many regions can display in each column and the display order of the regions within the region display point and column is controlled by the region display sequence number.

Header and Footer

Specifies HTML text to be displayed at the top of the region (just before the #BODY# content).

Conditional Display

Defines conditions and appropriate expressions that determine if the region displays. Conditions can reference session state, the currently logged in user, or environment preferences (such as whether a page is in Print View mode).

See Also: "Understanding Conditional Rendering and Processing" and "Optimizing a Page for Printing"

Customization

Enables end-user customization. To utilize this feature, you must include the #CUSTOMIZE# substitution string in the Header, Body, or Footer section of the page template.

See Also: "Enabling Users to Customize a Page"


Controlling Region Positioning

When you create a region, you must specify its position (or Display Point) on the page. You can choose either a default position (such as Page Template Body) or a user-defined position in the template (such as Page Template Region Position 1.)

In addition to Display Point, you can specify the column in which the region will be placed. When you place regions in multiple columns, Oracle Application Express automatically renders the necessary HTML to produce a multiple column layout.

Specifying a Region Header and Footer

In addition to the body content of a region (which can be a report, a chart, or HTML with form elements), you can specify additional HTML to be placed above and below a region or in its header and footer.

The region footer supports the following substitution strings:

  • #TIMING# shows the elapsed time in seconds used when rendering a region. You can use this substitution string for debugging purposes.

  • #ROWS_FETCHED# shows the number of rows fetched by the Oracle Application Express reporting engine (the page size). You can use these substitution strings to display customized messages to the user. For example:

    Fetched #ROWS_FETCHED# rows in #TIMING# seconds.
    
  • #TOTAL_ROWS# displays the total number of rows that satisfy a SQL query used for a report.

  • #FIRST_ROW_FETCHED# and #LAST_ROW_FETCHED# display the range of rows displayed. For example:

    Row(s) #FIRST_ROW_FETCHED# through #LAST_ROW_FETCHED# of #ROWS_FETCHED# displayed
    

Enabling Users to Customize a Page

You can use the Customization attribute to enable users to turn regions on and off in a running application.

To enable end-user customization:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Under Regions, click the region name.

    The Region Definition appears.

  3. Scroll down to Customization and select one of the following:

    • Customizable and Not Shown By Default

    • Customizable and Shown By Default

  4. In Customized Option Name, enter the label that represents this region on the page to the user.

  5. Include the #CUSTOMIZE# substitution string in the Header, Body, or Footer section of the page template.

To use this feature, you must include the #CUSTOMIZE# substitution string in the Header, Body, or Footer section of the page template.

If at least one region supports end-user customization, a link called Customize appears wherever you include the #CUSTOMIZE# substitution string in the page template. When users click this link, a window appears, enabling them to turn on and off regions on the page.

Utilizing Region Caching

Enabling region caching is an effective way improve the performance of static regions such as regions containing lists that do not use conditions or regions containing static HTML.


Tip:

Region caching is not available for interactive report regions. See "Editing Interactive Reports".

When you enable region caching, the Application Express engine renders a region from a cached (or stored) respository instead of rendering it dynamically. Keep in mind that the actual session identifiers are not cached. Instead, the Application Express engine caches a &SESSION. substitution string and the current session rendering the cached region is substituted on display. For example, if a region contains a link and the link includes a session, the exact session is not cached to ensure that the links works for all sessions.

The Application Express engine only renders a region from cache if it meets the defined condition. Additionally, regions can be cached specific to a user or cached independent of a user.


See Also:

"Cache"

Enabling Region Caching

To enable region caching:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Under Regions, click the region name.

    The Region Definition appears.

  3. Scroll down to Cache and specify the following:

    1. Caching - Select Cached to cache the region independent of the user. Select Cached by User to cache the region specific to a given user.

    2. Timeout Cache After - Identify how long the cached region remains valid.

    3. Cache Condition Type - Select a condition type from the list. If the condition returns false, the region is rendered dynamically and is not be cached. If the condition returns true, the region is cached.

    4. Expression 1 and Expression 2 - Enter values based on the specific condition type selected.

  4. Click Apply Changes.

Specifying a Static Region ID

Specifying a static region ID is useful when creating custom JavaScript or cascading stylesheets. You can use the Static ID attribute on the Edit Region page to uniquely identify a region. You can then reference the region using the #REGION_STATIC_ID# substitution string in a region templates, the header, the footer, or the body.

To specify a static region ID:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

    The Region Definition appears.

  2. Under Identification, enter a value in Static ID.

  3. Click Apply Changes.

Creating a Region

You create regions by running the Create Region Wizard.

To create a region:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Under Regions, click the Create icon.

    The Create Region Wizard appears.

  3. Select a region type. See "About Region Types".

  4. Follow the on-screen instructions.

About Region Types

When you create a region, you select a region type. The Application Express engine interprets a region differently based on the type you select. Table 9-2 describes the available region types.

Table 9-2 Region Types

Region TypeDescription

HTML

When you select HTML, the wizard prompts you to select one of the following:

  • HTML - Functions as containers for items and contains the HTML you provide. Any HTML you type may contain substitution strings.

  • HTML Text (escape special characters) - Same as HTML region, but the Application Express engine escapes special characters before they are rendered.

  • HTML Text (with shortcuts) - Same as HTML region, but with support for shortcuts.

See Also: "Using Shortcuts"

Multiple HTML

Use this option to create multiple HTML regions at once. In the fields provided, specify the Sequence, Title, Display Point, Report Template, and Column for each region.

Report

Report regions can be defined by a SQL query you write, or by using a wizard to guide you through the steps needed to write a query.

See Also: "Creating Reports"

Form

Form regions are used to contain a form.

See Also: "Creating Forms"

Chart

Chart regions contain line, bar, or pie charts based on SQL queries.

See Also:

List

List regions contain a shared collection of links called list.

See Also: "Creating Lists"

Breadcrumb

Breadcrumb regions contain a hierarchical list of links called a breadcrumb.

See Also: "Creating Breadcrumbs"

PL/SQL Dynamic Content

Regions based on PL/SQL enable you to render any HTML or text using the PL/SQL Web Toolkit.

Tree

Trees are a hierarchical navigational control based on a SQL query executed at run time. It enables the user to expand and collapse nodes.

See Also: "Creating Trees"

URL

URL based regions obtain their content by calling a Web server using a predefined URL.

See Also: "Incorporating Content from Other Web Sites"

Calendar

Calendar regions are used to contain a calendar.

See Also: "Creating Calendars"

Help Text

Help Text regions enable you to provide page-level help.

See Also: "Creating a Help Page"



See Also:


Copying a Region

You can quickly copy a region by clicking the Copy icon on the Page Definition. The Copy icon resembles two small overlapping pages.

Description of pg_def_copy_ico.gif follows
Description of the illustration pg_def_copy_ico.gif

When you copy a region, you also have the option to copy the button and items within the region.


Note:

You cannot copy a Tree region since this type of region encompasses more than one region.

To copy a region:

  1. Navigate to the Page Definition. See "Accessing a Page Definition".

  2. Under Regions, click the Copy icon.

    The Copy Region Wizard appears.

  3. For Region to Copy, select the region you want to copy.

  4. For To Page:

    1. To Page - Select the page to which you want to copy the region.

    2. Copy Region Items - Select Yes or No to determine whether to copy items within this region.

    3. Copy Buttons - Select Yes or No to determine whether to copy buttons within this region.

    4. Click Next.

  5. Click Copy Region.

Creating a Multiple Column Layout

A region is an area on a page that uses a specific template to format HTML content. You use regions to group page controls. To create a multiple column layout, you create two regions that display in adjacent cells of the same table.

You can create a multiple column layout by either:

  • Manually creating the two adjacent regions

  • Defining a page template that contains a multiple column table

Topics in this section include:

Creating Regions in Multiple Columns

You create regions using the Create Region Wizard. To create a two-column page, you create two regions. Oracle Application Express replaces the #BOX_BODY# substitution string within a two-column table and displays the regions in two separate cells.

To create a two-column page by creating regions:

  1. Navigate to the Page Definition. See "Accessing a Page Definition".

  2. Create the first region:

    1. Under Regions, click Create.

      The Create Region Wizard appears.

    2. Select a region type.

    3. From the Column field, select 1.

    4. Follow the on-screen instructions.

  3. Create the second region:

    1. Under Regions, click Create.

      The Create Region Wizard appears.

    2. Select a region type.

    3. From the Column field, select 2.

    4. Follow the on-screen instructions.

Creating a Multiple Column Page Template

Page templates define the appearance of individual pages, including the placement of page controls and components. Each page template is divided into three sections: Header, Body, and Footer. The most basic template must include the substitution string #BOX_BODY# in the Body attribute. When the page is rendered, the Application Express engine replaces #BOX_BODY# with HTML to display the regions on that page.

You can create a multiple column page by defining a page template that contains a multiple column table. You then explicitly place regions within specific table cells.

The following example demonstrates how to create a two-column page and specify a region position using the #REGION_POSITION_XX# substitution string in each column. You would enter the code in the Body section of the page-level template.

<body #ONLOAD#>
  #FORM_OPEN#
  <table style="width:100%">
    <tr>
      <td style="width:50%;padding:5px;">#REGION_POSITION_01#</td>
      <td style="width:50%; border-left:2px #bbbbbb dashed; padding:5px;">#REGION_POSITION_02#</td>
    </tr>
  <br />
  #BOX_BODY#
  #FORM_CLOSE#
</body>

Once you create this page-level template, the newly defined positions would be available as Display Point options when you run the Create Region Wizard.

How Item Attributes Affect Page Layout

An item is part of an HTML form and can be a text field, text area, password, select list, check box, and so on. You can alter the appearance of a page by changing the item attributes. For example, these attributes can effect where a label displays, how large an item will be, if the item will display next to or below the previous item.

To edit item attributes:

  1. Navigate to the Page Definition. See "Accessing a Page Definition".

  2. Under Items, click the item name.

    The Edit Page Item page appears.

Table 9-3 describes how item attributes affect the layout of a page.

Table 9-3 Item Attributes Effecting Page Layout

HeadingAttributeDescription

Displayed

Sequence

Determines the order that items are rendered within a region.

Displayed

Region

Defines the region where the item displays. All items must be in a region.

Displayed

Begin On New Line

Determines if this item displays on the same line or on the next line as the previous item.

Displayed

...Field

Determines if this item displays in the next column or in the same column as the previous item.

Displayed

ColSpan

Items are laid out in HTML tables. Defines the value to be used for the COLSPAN attribute of the table cell containing an item.

Displayed

RowSpan

Items are laid out in HTML tables. Defines the value to be used for the ROWSPAN attribute in the table cell where the item displays.

Label

Label

Defines the label for this item. You can include HTML, JavaScript, and shortcuts. You can also use the substitution string #CURRENT_ITEM_NAME# to obtain the name of the item associated with this label.

Label

Horizontal/Vertical Alignment

Controls the placement and the horizontal and vertical alignment of the label. Labels can be displayed above, below, or to the left of the item.

Label

Template

Specifies the label template. Use label templates to apply a consistent appearance to labels in your application.

Label

HTML Table Cell Attributes

Defines additional attributes for the cell containing this item's label (for example, nowrap="nowrap").

Element

Pre Element Texts

Specifies additional attributes for the HTML table cell used to display each individual option in a radio group or set of check boxes. Can include HTML, JavaScript, and shortcuts. You can reference the following substitution strings:

  • #CURRENT_FORM_ELEMENT# obtains the name of the HTML form element with which this post element text is associated.

  • #CURRENT_ITEM_NAME# obtains the name of the item with which this post element text is associated.

Element

Post Element Texts

Specifies additional attributes for the HTML table cell used to display each individual option in a radio group or set of check boxes. Can include HTML, JavaScript, and shortcuts. You can reference the following substitution strings:

  • #CURRENT_FORM_ELEMENT# obtains the name of the HTML form element with which this post element text is associated.

  • #CURRENT_ITEM_NAME# obtains the name of the item with which this post element text is associated.

List of Values

Columns

Applies to radio groups and check boxes. Defines the number of columns to use to display the values defined in the List of Values. By default, all values display in one column.

Conditions

Condition Type and Expressions

Defines conditions and appropriate expressions that determine if an item displays.

See Also: "Understanding Conditional Rendering and Processing"

Read Only Display Settings

Read Only Condition Type

Defines conditions and expressions that determine if the item displays as read-only. Use this attribute to display certain items to a set of users as updatable, while displaying that same set of items to others users as nonupdatable. Reduces the need to code duplicate interfaces for different users.


Incorporating Content from Other Web Sites

Typically, pages in an application are based on data stored in an Oracle database. To incorporate content from other servers, you can create a region based on a URL to display content. For example, suppose you wanted to reference the current Oracle stock price. You could create a region of type URL based on a URL such as the following:

http://quote.yahoo.com/q?d=b&s=ORCL

You could then create an item called STOCK_SYMBOL and base your region on a stock price entered by the user. For example:

http://quote.yahoo.com/q?d=b&s=&STOCK_SYMBOL.

Sometimes (as is the case with the previous example) the HTML returned to the region is more than is needed. To restrict the HTML displayed, you can use the following region attributes:

  • URL (discard until but not including this text)

  • URL (discard after and including this text)

Note that the previous example may require that you set the Proxy Server application attribute. If you do not set the Proxy Server application attribute, you get an error message. Oracle Application Express uses the Oracle utl_http.request_pieces function to obtain the HTML generated from the given URL. See "Configuring the Application Definition".

Working with SSL-Enabled URLs

If you call a SSL-enabled URL (for example, by invoking a Web service), or create a region of type URL that is SSL-enabled, you must create a wallet. A wallet is a password-protected container that stores authentication and signing credentials (including private keys, certificates, and trusted certificates) needed by SSL.


Tip:

See "Configuring Wallet Information" in Oracle Application Express Administration Guide

Managing Images

You can reference images within your application by uploading them to the Images Repository. When you upload an image, you can specify whether it is available to all applications or a specific application.

Topics in this section include:


Tip:

You can use the Images Finder to identify images available to the current application. See "Using the Images Finder".

Uploading Images

You upload images to your workspace using the Image Repository.

To upload images to your workspace:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click Shared Components.

    The Shared Components page appears.

  4. Under Files, select Images.

    The Images page appears.

  5. To upload an image, click Create.

  6. On the Create Image page, specify the following:

    1. Application - Select No Application Associated to make the image available to all applications within the workspace, or select a specific application ID.

    2. Upload New Image - Click Browse to identify a file to upload.

    3. Note - Enter details that describe the image.

  7. Click Upload.

Referencing Images

You can reference images in your application by referencing the substitution string #IMAGE_PREFIX# or including a fully qualified URL to the image.

Topics in this section include:

Verifying the Prefix for the Virtual Image Directory

When you install Application Builder, the installer creates a virtual directory for images. This virtual directory points to the actual path on the file system that contains uploaded images. By default, you reference this virtual directory using the prefix:

/i/

When you first create an application, you must verify this prefix on the Edit Definition page.

To verify the Image Prefix for an application:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. On the Application home page, click Shared Components.

  4. Under Application, select Definition.

  5. When the Edit Application Definition page appears, locate the Image Prefix field.

    By default, this attribute is defined as /i/. Contact your administrator for information about the name of this virtual directory for your installation.

Referencing an Image Using #IMAGE_PREFIX#

When you embed an image in static text (for example, in page headers, region headers, or footers), you can reference the image using the substitution string #IMAGE_PREFIX#. For example, to reference the image go.gif, you would use the following syntax:

<img src="#IMAGE_PREFIX#go.gif">

Referencing Images Using a Fully Qualified URL

Alternatively, you can also reference an image using a fully qualified URL. For example:

<img src="http://g-images.amazon.com/images/G/01/associates/navbar2000/logo-no-border(1).gif">

Editing Image Attributes

When you edit image attributes, you can add notes that describe an image or change the associated application. However, you cannot change the actual image. To change an image, delete it and then upload it again.

To edit images attributes:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click Shared Components.

    The Shared Components page appears.

  4. Under Files, select Images.

    The Images page appears.

  5. Use the following controls to filter the view:

    1. Image - Enter text to search for an image name or notes describing the image. Select whether to search for All Images, Workspace Images, or Application Images.

    2. View - Select one of the following:

      • Icons (the default) displays each image as a large icon.

      • Details displays each image as a line in a report.

    3. Display - Determines the number of images that display.

    4. Click Go.

  6. Select an image.

    The Edit Image Attributes page appears.

  7. From Application, specify the image availability.

    Select No Application Associated to make the image available to all applications within the workspace, or select a specific application ID.

  8. In Notes, enter details that describe the image.

  9. Click Apply Changes.

Deleting an Image

To delete an image:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click Shared Components.

    The Shared Components page appears.

  4. Under Files, select Images.

    The Images page appears.

  5. Use the following to filter the view:

    1. Image - Enter text to search for an image name or notes describing the image. Select whether to search for All Images, Workspace Images, or Application Images.

    2. View - Select one of the following:

      • Icons (the default) displays each image as a large icon.

      • Details displays each image as a line in a report.

    3. Click Go.

  6. Select an image.

  7. Click Delete.

Managing Static Files

You can upload static files to your workspace using the Static File Repository.

Topics in this section include:

Uploading Static Files

To upload static files:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click Shared Components.

    The Shared Components page appears.

  4. Under Files, select Static Files.

    The Static Files page appears.

  5. To upload a file, click Create.

  6. Follow the on-screen instructions.

Editing an Uploaded File

You can edit static files smaller than 30,000 bytes by selecting the file name. Otherwise, you must edit the file offline and upload it again.

To edit a static file smaller than 30,000 bytes:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click Shared Components.

    The Shared Components page appears.

  4. Under Files, select Static Files.

    The Static Files page appears.

  5. Use the following controls to filter the view:

    1. Static File - Enter text to search for a file name or notes describing the file.

    2. Application - Narrow or broaden the view by selecting one of the following:

      • All Static Files

      • No Associated Application

      • A specific application

    3. View - Select one of the following:

      • Icons (the default) displays each file as a large icon.

      • Details displays each file as a line in a report.

    4. Display - Determines the number of files to display.

    5. Click Go.

  6. Select a file.

  7. If the file is smaller than 30,000 bytes, edit the file.

  8. In Notes, edit or enter notes describing the file.

  9. Click Apply Changes.

Downloading an Uploaded File

To download an uploaded file:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click Shared Components.

    The Shared Components page appears.

  4. Under Files, select Static Files.

    The Static Files Repository appears.

  5. From View, select Details and click Go.

    Details displays each file as a line in a report.

  6. Select the Download icon next to the appropriate file.

Deleting an Uploaded File

To delete an uploaded static file:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click Shared Components.

    The Shared Components page appears.

  4. Under Files, select Static Files.

    The Static Files Repository appears.

  5. Use the following controls to filter the view:

    1. Static File - Enter text to search for a file name or notes describing the file.

    2. Application - Narrow or broaden the view by selecting one of the following:

      • All Static Files

      • No Associated Application

      • A specific application

    3. View - Select one of the following:

      • Icons (the default) displays each file as a large icon.

      • Details displays each file as a line in a report.

    4. Display - Determines the number of files to display.

    5. Click Go.

  6. Select a file.

  7. Click Delete.

Rendering HTML Using Custom PL/SQL

If you need to generate specific HTML content not handled by Oracle Application Express forms, reports, and charts, you can use the PL/SQL region type. To generate HTML in this type of region, you need to use the PL/SQL Web Toolkit. You can reference session state using bind variable syntax. Keep in mind that when you generate HTML in this way, you do not get the same consistency and control provided with templates.


See Also:


To give you more control over HTML dynamically generated within a region, you can use PL/SQL. For example, to print the current date, you could create a region with the following source:

htp.p(TO_CHAR(SYSDATE,'Day Month DD, YYYY'));

This next example accesses tables:

DECLARE
   l_max_sal NUMBER;
BEGIN
   SELECT max(sal) INTO l_max_sal FROM emp;
   htp.p('The maximum salary is: '||TO_CHAR(l_max_sal,'999,999.00'));
END;
PK9*PK6(AOEBPS/concept.htm Application Builder Concepts

3 Application Builder Concepts

This section provides basic conceptual information about Application Builder. Use Application Builder to assemble an HTML interface (or application) on top of database objects such as tables and procedures. Each application is a collection of pages linked together using tabs, buttons, or hypertext links.

This section contains the following topics:

What Is a Page?

A page is the basic building block of an application. When you build an application in Application Builder, you create pages that contain user interface elements, such as tabs, lists, buttons, items, and regions.

You add controls to a page on the Page Definition.

To view the Page Definition of an existing page:

  1. Navigate to the Workspace home page.

  2. Click the Application Builder icon.

  3. Select an application.

  4. Select a page.

    The Page Definition appears and is divided into three main sections:

    • Page Rendering lists user interface controls and logic that are executed when a page is rendered. Page Rendering is the process of generating a page from the database. See "About Page Rendering".

    • Page Processing lists logic controls (such as computations and processes) that are evaluated and executed when the page is processed. See "About Page Processing".

    • Shared Components lists common components that can be used by one or more pages within an application. See "About Shared Components".

Understanding Page Processing and Page Rendering

When you create an application in Application Builder, you link pages together using tabs, buttons, or hypertext links. Each page can have buttons and items and can include application logic. You can branch from one page to the next using conditional navigation, perform calculations and validations, and display reports, calendars, and charts. You can generate reports, charts, and forms using built-in wizards, static HTML, or deliver more custom rendering with PL/SQL programming.

Topics in this section include:

How the Application Express Engine Renders and Processes Pages

The Application Express engine dynamically renders and processes pages based on data stored in Oracle database tables. To view a rendered version of your application, you request it from the Application Express engine. When you run an application, the Application Express engine relies on two processes:

  • Show Page is the page rendering process. It assembles all the page attributes (including regions, items, and buttons) into a viewable HTML page.

  • Accept Page performs page processing. It performs any computations, validations, processes, and branching.

When you request a page using a URL, the engine is running Show Page. When you submit a page, the Application Express engine is running Accept Page or performing page processing during which it saves the submitted values in the session cache and then performs any computations, validations, or processes.

Understanding Conditional Rendering and Processing

A condition is a small unit of logic that helps you control the display of regions, items, buttons, and tabs as well as the execution of processes, computations, and validations. For example, when you apply a condition to a button, the rendering engine evaluates the condition during the rendering (or Show Page) process. Whether the condition passes or fails determines if the page control (such as a button) displays.

You specify a condition by selecting a condition type. You can select a condition type when you first create the control or component, or by editing the control or component and making a selection from the Condition Type attribute. Depending upon the Condition Type you select, you enter the appropriate values in the Expressions fields. The condition evaluates to true or false based on the values you enter in the Expression fields.


Note:

Whether you use the Expression fields depends upon the selected condition type. Some condition types do not require values in either field, others require a value only for Expression 1, and other condition types require values in both fields. Although these fields are labeled "Expression 1" and "Expression 2", the values for a given condition type do not necessarily conform to any formal definition of the term expression. They are simply text values appropriate for the selected condition type.

Description of condition.gif follows
Description of the illustration condition.gif

To view a complete list of all available conditions for a given component or control, click the arrow to the right of the Condition Type list. Shortcuts to common selections appear directly beneath the list. If your condition requires an expression, enter it in the appropriate field.

The following sections offer examples of some commonly used condition types.


See Also:

Appendix A, "Available Conditions" for a detailed listing of available condition types

Current Page in Expression 1

Current page in Expression 1 evaluates to true if the current page number is contained within the comma-delimited list of pages in Expression 1. For example:

3,100,203

If the current page is 100, then this condition evaluates to true and the condition passes.

Exists

Exists (SQL query returns at least one row) is expressed as a SQL query. If the query returns at least one row, then the condition evaluates as true. For example:

SELECT 1 FROM employees WHERE department_id = :P101_DEPTNO

This example references item P101_DEPTNO as a bind variable. You can use bind variables within application processes and SQL query regions to reference item session state. If one or more employees are in the department identified by the value of P101_DEPTNO, then the condition evaluates as true.

PL/SQL Expression

Use PL/SQL Expression to specify an expression in valid PL/SQL syntax that evaluates to true or false. For example:

NVL(:MY_ITEM,'NO') = 'YES'

If the value of :MY_ITEM is Yes, as in the previous example, then the condition evaluates as true. If the value of :MY_ITEM is No, then the condition evaluates as false.

Verifying User Identity

Authentication is the process of establishing users' identities before they can access an application. Authentication may require a user to enter a user name and password, or may involve the use of a digital certificate or a secure key.

Oracle Application Express supports modular authentication, making it easy to switch authentication methods when needed. You can establish a user's identity by selecting from a number of built-in authentication methods, or by using a wizard to create your own custom authentication approach.

Controlling Access to Controls and Components

While conditions control the rendering and processing of specific controls or components on a page, authorization schemes control user access. Authorization is a broad term for controlling access to resources based on user privileges.

Authorization schemes extend the security of your application's authentication scheme. You can specify an authorization scheme for an entire application, a page, or a specific page control such as a region, item, or button. For example, you could use an authorization scheme to selectively determine which tabs, regions, or navigation bar entries a user sees.

Understanding Session State Management

HTTP, the protocol over which HTML pages are most often delivered, is a stateless protocol. A Web browser is only connected to the server for as long as it takes to download a complete page. In addition, each page request is treated by the server as an independent event, unrelated to any page requests that happened previously or may occur in the future. This means that to access form values entered on one page on a subsequent page, some form of session state management needs to occur. Typically, when a user enters values into a form on one page, those values are not accessible on later pages. Oracle Application Express transparently maintains session state and provides developers with the ability to get and set session state values from any page in the application.

Topics in this section include:

What Is a Session?

A session is a logical construct that establishes persistence (or stateful behavior) across page views. Each session is assigned a unique identifier. The Application Express engine uses this identifier (or session ID) to store and retrieve an application's working set of data (or session state) before and after each page view.

Because sessions are entirely independent of one another, any number of sessions can exist in the database at the same time. Also, because sessions persist in the database until purged by an administrator, a user can return to an old session and continue running an application long after first launching it. A user can also run multiple instances of an application simultaneously in different browser sessions.

Sessions are logically and physically distinct from Oracle database sessions used to service page requests. A user runs an application in a single Oracle Application Express session from log in to log out with a typical duration measured in minutes or hours. Each page requested during that session results in the Application Express engine creating or reusing an Oracle database session to access database resources. Often these database sessions last just a fraction of a second.


See Also:

"Viewing Active Sessions" in Oracle Application Express Administration Guide

Understanding Session IDs

The Application Express engine establishes the identity (or anonymity) of the user for each page request and the session ID to fetch session state from the database. The most visible location of the session ID is in the URL for a page request. The session ID displays as the third parameter in the URL, for example:

http://apex.somewhere.com/pls/apex/f?p=4350:1:220883407765693447

In this example, the session ID is 220883407765693447.

Another visible location is in the page's HTML POST data and indirectly in the contents of a session cookie. This cookie is sent by the Application Express engine during authentication and is maintained for the life of the application (or browser) session.

Oracle Application Express assigns new session IDs during authentication processing, records the authenticated user's identity with the session ID, and continually checks the session ID in each page request's URL or POST data with the session cookie and the session record in the database. These checks provide users with flexibility and security.

While the session ID is the key to session state, the session cookie (where applicable) and the session record safeguard the integrity of the session ID and the authentication status of the user.

Viewing Session State

The behavior of an Oracle Application Express application is usually driven by values in session state. For example, a button may display conditionally based on the value of an item session state. You can view the session state for a page by clicking Session on the Developer toolbar.

Description of d_toolbar.gif follows
Description of the illustration d_toolbar.gif

About the Session State Page

The Session State page provides valuable information about the session in which the application is currently running. To locate a specific page, enter the page number in the page field and click Go. Table 3-1 describes the various types of information available on the Session State page.

Table 3-1 Information Available on the Session State Page

HeadingDescription

Application

Identifies the application name.

Session

Summarizes session state for the current session.

User

Identifies the current user.

Workspace

Identifies the current workspace ID.

Browser Language

Identifies the current browser language.

Page Items

Identify attributes of the page item, including the application ID, page number, item name, how the item displays (for example, check box, date picker, display only, text field, hidden, popup, radio group, and so on), the item value in session state, and status.

The Status column indicates the status of the session state. Available values include:

  • I - Inserted

  • U - Updated

  • R - Reset

See Also: "Understanding Page-Level Items"s

Application Items

Application items are items that do not reside on a page. Application items are session state variables without the associated user interface properties.

See Also: "Understanding Application-Level Items" and "Understanding Substitution Strings" for information about referencing item values


Understanding URL Syntax

The URL that displays for each page identifies the location of Oracle Application Express, the address of Oracle Application Express, the application ID, the page number, and the session ID.

The application ID is a unique number that identifies each application. Similarly, the page number uniquely identifies each page. Applications and pages may also have alphanumeric aliases. Application aliases are unique within a workspace and page aliases are unique within each application. When you run an application, the Application Express engine generates a session number that serves as a key to the user's session state.

Topics in this section include:

Understanding the URL that Displays for a Page

The URL that displays for each page indicates the location of Oracle Application Express and identifies the address of Oracle Application Express, the application ID, page number, and session ID. For example:

http://apex.somewhere.com/pls/apex/f?p=4350:1:220883407765693447

This example indicates:

  • apex.somewhere.com is the URL of the server

  • pls is the indicator to use the mod_plsql cartridge

  • apex is the database access descriptor (DAD) name. The DAD describes how HTTP Server connects to the database server so that it can fulfill an HTTP request. The default value is apex.

  • f?p= is a prefix used by Oracle Application Express

  • 4350 is the application being called

  • 1 is the page within the application to be displayed

  • 220883407765693447 is the session number

Using f?p Syntax to Link Pages

You can create links between pages in your application using the following syntax:

f?p=App:Page:Session:Request:Debug:ClearCache:itemNames:itemValues:PrinterFriendly

Table 3-2 describes the arguments you can pass when using f?p syntax.

Table 3-2 f?p Syntax Arguments

SyntaxDescription

App

Indicates an application ID or alphanumeric alias.

Page

Indicates a page number or alphanumeric alias.

Session

Identifies a session ID. You can reference a session ID to create hypertext links to other pages that maintain the same session state by passing the session number. You can reference the session ID using the syntax:

  • Short substitution string: &SESSION.

  • PL/SQL: V('SESSION')

  • Bind variable: :APP_SESSION

Request

Sets the value of REQUEST. Each application button sets the value of REQUEST to the name of the button. This enables accept processing to reference the name of the button when a user clicks it. You can reference REQUEST using the syntax:

  • Substitution string: &REQUEST.

  • PL/SQL: V('REQUEST')

  • Bind variable: :REQUEST

Debug

Displays application processing details. Valid values for the DEBUG flag are YES or NO. Setting this flag to YES displays details about application processing. You can reference the Debug flag using the following syntax:

  • Short substitution string: &DEBUG.

  • PL/SQL: V('DEBUG')

  • Bind variable: :DEBUG

See Also: "Debugging an Application"

ClearCache

Clears the cache. This sets the value of items to null.

To clear cached items on a single page, specify the numeric page number. To clear cached items on multiple pages, use a comma-separated list of page numbers. Clearing a page's cache also resets any stateful processes on the page. Individual or comma-separated values can also include collection names to be reset or the keyword RP, which resets region pagination on the requested page. The keyword APP clears cache for all pages and all application-level items in the current application and removes sort preferences for the current user. The keyword SESSION achieves the same result as the APP keyword, but clears items associated with all applications that have been used in the current session.

See Also: "Clearing Session State"

itemNames

Comma-delimited list of item names used to set session state with a URL.

itemValues

List of item values used to set session state within a URL. Item values cannot include colons, but can contain commas if enclosed with backslashes. To pass a comma in an item value, enclose the characters with backslashes. For example:

\123,45\

PrinterFriendly

Determines if the page is being rendered in printer friendly mode. If PrinterFriendly is set to Yes, then the page is rendered in printer friendly mode. The value of PrinterFriendly can be used in rendering conditions to remove elements such as regions from the page to optimize printed output. You can reference the printer friendly preference by using the following syntax:

V('PRINTER_FRIENDLY')

When referenced, the Application Express engine will not display tabs or navigation bars, and all items will be displayed as text and not as form elements.


Although it is important to understand how f?p syntax works, you rarely have to construct this syntax yourself. Application Builder includes many wizards that automatically create these references for you. The following sections describe specific instances that utilize f?p syntax to link pages.

Calling a Page Using an Application and Page Alias

Application and page aliases must consist of valid Oracle identifiers, cannot contain any whitespace, and are not case-sensitive. The following example calls a page using an application and a page alias from within an application. It runs the page home of the application myapp and uses the current session ID.

f?p=myapp:home:&APP_SESSION.

Application aliases must be unique within a workspace. If an application in a different workspace has the same application alias, use the &c argument to specify the workspace name. For example:

f?p=common_alias:home:&APP_SESSION.&c=WORKSPACE_A

Calling a Page from a Button URL

When you create a button, you can specify a URL to redirect to when the user clicks the button. This example runs page 6001 of application 6000 and uses the current session ID.

f?p=6000:6001:&APP_SESSION.

Note that this is only one approach to using a button. This method bypasses page submission and acts as a hyperlink on the page. Another method is to submit the page first. In that approach, clicking the button submits the page for processing, allowing forms to be submitted and session state to be saved.

Facilitating Bookmarks by Using Zero as the Session ID

If the pages within an application are public and do not require authentication, you make it easier for application users to bookmark pages by using zero as the session ID.

Application pages that do not require authentication can be accessed with "f?p" URLs where the session ID is zero (that is, the single digit 0). When you request a page by either entering the URL in the browser or by clicking on a link having 0 for the session ID, the Application Express engine assigns a new session ID and sends a session cookie containing this new session ID to your browser. As you navigate through the application's public pages, you will see that all generated links to public pages will contain 0 for the session ID and all branches to public pages will have new URLs that use 0 as the visible session ID. Behind the scenes, however, the Application Express engine uses the session ID in the cookie as the actual session ID to locate session state.

This feature is useful when you want to hide the actual session ID. By hiding the session ID, you enable users to bookmark pages without needing to include the session ID in the bookmark link. As an added benefit, using zero as the session ID also keeps the actual session ID hidden from search engines.

In order to use zero as the session ID in your application, you have to generate at least one link having a zero session ID. The use of this first link starts the zero session ID mechanism. One approach would be to provide a single static link with a zero session ID on the application home page. For example, where you might normally code the link to page 2 as f?p=&APP_ID.:2:&APP_SESSION, you would code f?p=&APP_ID.:2:0.

About APEX_UTIL.PREPARE_URL

Oracle provides a utility function to enable developers to use PL/SQL to generate anchors to application pages using the f?p syntax. Use APEX_UTIL.PREPARE_URL whenever PL/SQL in the application produces f?p anchors that might require a zero session ID. To learn more, see "PREPARE_URL" in Oracle Application Express API Reference.

How the Zero Session ID Feature Works

The zero session ID feature provides support for pages having anchors in the HTML (such as in templates or HTML regions). When the Application Express engine encounters f?p anchors it recognizes them and replaces the session ID with zero, if certain criteria are met.

The Application Express engine replaces the session ID component with zero when it detects one of the following patterns:

  • &APP_ID.

  • The numeric ID of the current application

  • One of the following patterns:

    • the all-uppercase or all-lowercase alphanumeric alias of the current application followed by a colon followed by the numeric ID of a public page in the current application

    • the all-uppercase or all-lowercase alphanumeric alias of a public page in the current application followed by a colon followed by &APP_SESSION. or &SESSION.

Examples of patterns in HTML that are candidates for zero-session ID replacement include:

  • Page 10 is a public page:

    "f?p=&APP_ID.:10:&APP_SESSION. 
    
  • Page 10 is a public page:

    "f?p=100:10:&APP_SESSION.
    
  • home is an alias for a public page:

    "f?p=&APP_ID.:home:&APP_SESSION. 
    
  • HOME is an alias for a public page:

    "f?p=&APP_ID.:HOME:&APP_SESSION.
    
  • PEOPLE is an application alias and HOME is an alias for a public page:

    "f?p=PEOPLE:HOME:&APP_SESSION
    

In these examples, the pattern &APP_SESSION. (or &SESSION., not shown) is replaced with zero if the application is operating in zero-session ID mode and the user is a public user. Note that the user is considered a public user if the following PL/SQL expression is true:

:app_user in ('nobody','HTMLDB_PUBLIC_USER','PUBLIC_USER','ANONYMOUS','APEX_PUBLIC_USER')" 

Managing Session State Values

When building interactive, data-driven Web applications, the ability to access and manage session state values is critical. In Oracle Application Express, session state is automatically managed for every page and easily referenced in static HTML or logic controls such as processes or validations.

Topics in this section include:

Referencing Session State

You can reference item values stored in session state in regions, computations, processes, validations, and branches. An item can be a field, a text area, a password, a select list, or a check box. Table 3-3 describes the supported syntax for referencing item values.

Table 3-3 Syntax for Referencing Item Values

TypeSyntaxDescription

SQL

:MY_ITEM

Use standard bind variable syntax for items whose names are no longer than 30 characters. Use this syntax for references within a SQL query and within PL/SQL.

PL/SQL

V('MY_ITEM')

Use PL/SQL syntax to reference an item value using the V function.

See Also: Oracle Application Express API Reference

PL/SQL

NV('MY_NUMERIC_ITEM')

Use standard PL/SQL syntax referencing the numeric item value using the NV function.

See Also: Oracle Application Express API Reference

Static text (exact)

&MY_ITEM.

For static text or an exact substitution use the convention &ITEM_NAME followed by a period (.), for example:

&MY_ITEM.


Setting Session State

You set the value of an item in your application and therefore session state using one of the following methods:

Form Submission Example

When a user submits a page, the Application Express engine automatically stores values typed into fields (items) in session state. For example, suppose you have an application containing two pages. The first page of the application contains a form in which a user can enter a phone number. You defined this form by creating an item named P2_PhoneNo. On the second page, you want to display the information the user enters in the form.

When the page is submitted, Oracle Application Express captures the value entered in the phone number field and stores the value for future use. The phone number entered by the user can then be retrieved from session state by referencing the item associated with the field on the page.

Clearing Session State

As you develop your applications, you may find it useful to clear the cached value for specific items, all items on a page, all pages in an application, or the current user session. Clearing a cached value resets the value to null. The topics that follow offer specific examples of clearing session state.

Topics in this section include:

Clearing Cache by Item

Clearing cache for a single item resets the value of the item to null. For example, you might use this approach to make sure a specific item's value is null when a page is prepared for rendering.

The following example uses standard f?p syntax to clear the cache for an item. This example calls page 5 of application 100. Placing MY_ITEM in the ClearCache position of the f?p syntax resets the value of MY_ITEM to NULL.

f?p=100:5:&APP_SESSION.::NO:MY_ITEM

The following example resets the value of the items THE_EMPNO and THE_DEPTNO.

f?p=100:5:&APP_SESSION.::NO:THE_EMPNO,THE_DEPTNO

Clearing Cache by Page

Caching application items provides an effective way to maintain session state. However, there are occasions when you may want to clear the cache for all items on a page. For example, suppose you needed to clear all fields on a page when a user clicks a link that creates a new order. By clearing the cache for an entire page, you set the value of all items on the page to null.

Clearing Session Cache for Two Pages While Resetting Pagination

This example clears the session cache for two pages and resets pagination.

f?p=6000:6003:&APP_SESSION.::NO:RP,6004,6014 

This example:

  • Runs page 6003 of application 6000 and uses the current session ID

  • Indicates to not show debug information (NO)

  • Clears all values maintained by the current session's cache for items of pages 6004 and 6014

  • Resets region pagination (RP) on page 6003 (the requested page)

Clearing Session Cache on a Page and Passing an Item Value

This example shows how to implement an update form. It clears existing information and sets the item's value (typically a primary key).

f?p=6000:6003:&APP_SESSION.::NO:6003:MY_ITEM:1234 

This example:

  • Runs page 6003 of application 6000 and uses the current session ID

  • Indicates to not show debug information (NO)

  • Clears all values maintained by the current session's cache for items on page 6003

  • Sets the session state of an item called MY_ITEM to the value 1234

Clearing Session Cache on a Page and Passing Values to Multiple Items

This example is similar to the previous example, except it passes values to multiple items.

f?p=6000:6004:&APP_SESSION.::NO:6003:MY_ITEM1,MY_ITEM2,MY_ITEM3:1234,,5678 

This example:

  • Runs page 6004 of application 6000 and uses the current session ID

  • Clears the current session's cache for items on page 6003

  • Indicates debug information should be hidden (NO)

  • Sets the value of MY_ITEM1 to 1234, sets the value of MY_ITEM2 to null (indicated by the comma used as placeholder), and sets the value of MY_ITEM3 to 5678

Clearing Cache for an Entire Application

You can clear an application's cache by using f?p syntax and creating a Clear Cache argument using the keyword APP. For example:

f?p=App:Page:Session::NO:APP

Note:

Resetting the cache for an entire application does not restore the application to a completely reset state. For example, if an application includes on-new instance computations or on-new instance processes, the Application Express engine runs these computations and processes when the application session is created. Then, it processes the clear cache request and displays the requested page.

To reset an application completely without a session ID (if no cookie is used to track the session ID), you must request it using a URL without a session ID, or by calling APEX_UTIL.CLEAR_APP_CACHE from another application. If the session ID is tracked using a cookie, you will need to logout to reset the state.


Clearing Cache for the Current User Session

Another approach to clearing an application's cache is to create a Clear Cache argument using the keyword SESSION. For example:

f?p=6000:6004:12507785108488427528::NO:SESSION

About Bind Variable Syntax

You can use bind variables syntax anywhere in Oracle Application Express where you are using SQL or PL/SQL to reference session state of a specified item. For example:

SELECT * FROM employees WHERE last_name like '%' || :SEARCH_STRING || '%'

In this example, the search string is a page item. If the region type is defined as SQL Query, you can reference the value using standard SQL bind variable syntax. Using bind variables ensures that parsed representations of SQL queries are reused by the database, optimizing memory usage by the server.

When using bind variable syntax, remember the following rules:

  • Bind variable names must correspond to an item name.

  • Bind variable names are not case-sensitive.

  • Bind variable names cannot be longer than 30 characters (that is, they must be a valid Oracle identifier).

    Although page item and application item names can be up to 255 characters, if you intend to use an application item within SQL using bind variable syntax, the item name must be 30 characters or less.

Using Bind Variables in Regions Based on a SQL Query or LOV

If your region type is defined as a SQL Query, SQL Query (plsql function body returning SQL query), or list of values (LOV), you can reference session state using the following syntax:

:MY_ITEM

One common way to do this is to incorporate a session state variable in a WHERE clause. The following example shows how to bind the value of the item THE_DEPTNO into a region defined from a SQL Query.

SELECT last_name, job_id, salary
FROM employees
WHERE department_id = :THE_DEPTNO

See Also:

"Understanding Regions" for information about creating regions

Using Bind Variables in PL/SQL Procedures

For region types defined as a PL/SQL Procedure, regions are constructed using PL/SQL anonymous block syntax. In other words, the beginning and ending keywords are used to enclose the PL/SQL block. For example:

IF :P1_JOB IS NOT NULL THEN
  INSERT INTO employees (employee_id, first_name, job_id) 
  VALUES (:P1_EMP_ID, :P1_NAME, :P1_JOB)
end if;

In this example, the values of the employee_id, first_name, and job_id are populated by the values of P1_EMP_ID, P1_NAME, and P1_JOB.

Understanding Substitution Strings

You can use substitution strings within a page template or region source to replace a character string with another value. As you design your application and enable users to edit items, you use substitution strings to pass information.

Topics in this section include:

Using Substitution Strings

You can use substitution strings in Application Builder in the following ways:

  • Include a substitution string within a template to reference component values

  • Reference page or application items using &ITEM. syntax

  • Use built-in substitution strings to achieve a specific type of functionality

Special substitution strings available within a template are denoted by the number symbol (#). For example:

#ABC#

To reference page or application items using substitution variables:

  1. Reference the page or application item in all capital letters.

  2. Precede the item name with an ampersand (&).

  3. Append a period (.) to the item name.

For example, you would refer to an application item named F101_X in an HTML region, a region title, an item label, or in any of numerous other contexts in which static text is used, for example:

&F101_X.

Notice the required trailing period. When the page is rendered, Application Express engine replaces value the substitution string with the value of item F101_X.

Determining Substitution String Usage within a Given Template

You can determine what template-specific substitution strings are supported in which templates by viewing the template definition. See "Customizing Templates".

About Built-in Substitution Strings

Application Builder supports a number of built-in substitution strings. You may need to reference these values to achieve specific types of functionality.

The following sections describe these substitution strings, when to use them, and what supported syntax is currently available. Note that bind variable :USER has special meaning within the database. Also, the term Direct PL/SQL refers to PL/SQL that can be used in stored database objects such as procedures and functions.

Topics in this section include:


See Also:


APP_ALIAS

APP_ALIAS is an alphanumeric name for the current application. APP_ALIAS is different from the APP_ID in that the APP_ID must be unique over all workspaces and all applications hosted in one database. In contrast, APP_ALIAS must be unique within a workspace. For example, by using the same APP_ALIAS you can create the application, ABC, in two different workspaces. You can use APP_ALIAS almost anywhere APP_ID can be used. For example, f?p syntax can use an APP_ALIAS or an application ID as demonstrated in this example:

f?p=ABC:1:&APP_SESSION.

This example runs application ABC, page 1 using the current session.

Table 3-4 describes the supported syntax for referencing APP_ALIAS.

Table 3-4 APP_ALIAS Syntax

Reference TypeSyntax

Bind variable

:APP_ALIAS

PL/SQL

V('APP_ALIAS')

Substitution string

&APP_ALIAS.


The following is an HTML example:

Click me to go to page 1 <a href="f?p=&APP_ALIAS.:1:&APP_SESSION."> of the current application</a>

APP_ID

APP_ID identifies the application ID of the currently executing application. Table 3-5 describes the supported syntax for referencing APP_ID.

Table 3-5 APP_ID Syntax

Reference TypeSyntax

Bind variable

:APP_ID

Direct PL/SQL

APEX_APPLICATION.G_FLOW_ID (A NUMBER)

PL/SQL

NV('APP_ID')

Substitution string

&APP_ID.


The following is an example of a substitution string reference:

f?p=&APP_ID.:40:&APP_SESSION.

APP_IMAGES

Use this substitution string to reference uploaded images, JavaScript, and cascading style sheets that are specific to a given application and are not shared over many applications. If you upload a file and make it specific to an application, then you must use this substitution string, or bind variable. Table 3-6 describes the supported syntax for referencing APP_IMAGES.

Table 3-6 APP_IMAGES Syntax

Reference TypeSyntax

Bind variable

:APP_IMAGES

Direct PL/SQL

Not available.

PL/SQL

V('APP_IMAGES')

Substitution string

&APP_IMAGES.

Template substitution

#APP_IMAGES#


APP_PAGE_ID

APP_PAGE_ID is the current application ID. For example, if your application was on page 3, then the result would be 3. Using this syntax is useful when writing application components that need to work generically in multiple applications. Table 3-7 describes the supported syntax for referencing APP_PAGE_ID.

Table 3-7 APP_PAGE_ID Syntax

Reference TypeSyntax

Bind variable

:APP_PAGE_ID

PL/SQL

:APP_PAGE_ID

PL/SQL and Direct PL

NV('APP_PAGE_ID')

Substitution string

&APP_PAGE_ID.


The following is an example of a substitution string reference:

f?p=&APP_ID.:&APP_PAGE_ID.:&APP_SESSION.

APP_SESSION

APP_SESSION is one of the most commonly used built-in substitution strings. You can use this substitution string to create hypertext links between application pages that maintain a session state by passing the session number. Note that you can also use the substitution string SESSION in place of APP_SESSION. Table 3-8 describes the supported syntax for referencing APP_SESSION.

Table 3-8 APP_SESSION Syntax

Reference TypeSyntax

Bind variable

:APP_SESSION

PL/SQL

V('APP_SESSION')

Short PL/SQL

V('SESSION')

Substitution string

&APP_SESSION.


Consider the following examples:

  • From within an HTML region:

    <a href="f?p=100:5:&APP_SESSION.">click me</a> 
    
  • Using PL/SQL:

    htf.anchor('f?p=100:5:'||V('APP_SESSION'),'click me');
    
  • Using a SQL query:

    SELECT htf.anchor('f?p=100:5:'||:APP_SESSION,'clickme') FROM DUAL;
    

APP_UNIQUE_PAGE_ID

APP_UNIQUE_PAGE_ID is an integer generated from an Oracle sequence which is unique for each page view. This number is used by applications to prevent duplicate page submissions and can be used for other purposes. For example, to make a unique URL and avoid browser caching issues, you can embed this number in the request or debug column in calls to the f procedure. Table 3-9 describes the supported syntax for referencing APP_UNIQUE_PAGE_ID.

Table 3-9 APP_UNIQUE_PAGE_ID Syntax

Reference TypeSyntax

Bind variable

:APP_UNIQUE_PAGE_ID

PL/SQL

V('APP_UNIQUE_PAGE_ID')

Substitution string

&APP_UNIQUE_PAGE_ID.


The following is an HTML example:

SELECT 'f?p=100:1:'||:APP_SESSION||':'||:APP_UNIQUE_PAGE_ID||
    ':::P1_EMPNO:'||employee_id,
   first_name,
    job_id
FROM employees

Note the use of the APP_UNIQUE_PAGE_ID in the request column. This makes this URL unique and may avoid excessive browser caching problems.

APP_USER

APP_USER is the current user running the application. Depending upon your authentication model, the value of the user is set differently. If the application is running using database authentication, then the value of the user is the same as the database pseudo column USER. If the application uses an authentication scheme that requires the user to authenticate, the value of APP_USER is set by the authentication scheme, usually to the user name used during authentication. Table 3-10 describes the supported syntax for referencing APP_USER.

Table 3-10 APP_USER Syntax

Reference TypeSyntax

Bind variable

:APP_USER

PL/SQL

V('APP_USER')

Substitution string

&APP_USER.


Consider the following examples:

  • From within an HTML region:

    Hello you are logged in as &APP_USER.
    
  • Using PL/SQL:

    htp.p('Hello you are logged in as'||V('APP_USER')); 
    
  • As a bind variable:

    SELECT * FROM some_table WHERE user_id = :APP_USER
    

    See Also:

    "Authentication" for information about the Public User attribute

AUTHENTICATED_URL_PREFIX

This application-level attribute identifies a valid authenticated prefix (that is, a logged in URL prefix). You can use a relative path or a full path beginning with http. This item is useful if your application can be run in both authenticated (logged in) and public (not logged in) modes. You can use AUTHENTICATED_URL_PREFIX to construct a link to an authenticated page. This item is most useful when using basic database authentication because changes to the URL can require authentication. Table 3-11 describes the supported syntax for referencing AUTHENTICATED_URL_PREFIX.

Table 3-11 AUTHENTICATED_URL_PREFIX Syntax

Reference TypeSyntax

Bind variable

:AUTHENTICATED_URL_PREFIX

PL/SQL

V('AUTHENTICATED_URL_PREFIX')

Substitution string

&AUTHENTICATED_URL_PREFIX.


BROWSER_LANGUAGE

BROWSER_LANGUAGE refers to the Web browser's current language preference. Table 3-12 describes the supported syntax for referencing BROWSER_LANGUAGE.

Table 3-12 BROWSER_LANGUAGE Syntax

Reference TypeSyntax

Bind variable

:BROWSER_LANGUAGE

Direct PL/SQL

APEX_APPLICATION.G_BROWSER_LANGUAGE

PL/SQL

V('BROWSER_LANGUAGE')

Substitution string

:BROWSER_LANGUAGE.

Substitution string

&BROWSER_LANGUAGE.


CURRENT_PARENT_TAB_TEXT

CURRENT_PARENT_TAB_TEXT is most useful in page templates, but is only relevant for applications that use two-level tabs (that is, parent and standard tabs). Use this string to reference the parent tab label. This substitution string enables you to repeat the currently selected parent tab within the page template. Table 3-13 describes the supported syntax for referencing CURRENT_PARENT_TAB_TEXT.

Table 3-13 CURRENT_PARENT_TAB_TEXT Syntax

Reference TypeSyntax

Bind variable

Not Available.

Substitution string

&CURRENT_PARENT_TAB_TEXT.


DEBUG

Valid values for the DEBUG flag are Yes or No. Turning debug on shows details about application processing. If you write your own custom code, you may want to generate debug information only if the debug mode is set to Yes. Table 3-14 describes the supported syntax for referencing DEBUG.

Table 3-14 DEBUG Syntax

Reference TypeSyntax

Bind variable

:DEBUG

Direct PL/SQL

APEX_APPLICATION.G_DEBUG

PL/SQL

V('DEBUG')

Substitution string

&DEBUG.


The following is an example of a substitution string reference that preserves the current value of DEBUG:

f?p=100:1:&APP_SESSION.::&DEBUG

HOME_LINK

HOME_LINK is the home page of an application. The Application Express engine will redirect to this location if no page is given and if no alternative page is dictated by the authentication scheme's logic. You define the Home Link on the Application Attributes page.

Table 3-15 describes the supported syntax for referencing HOME_LINK.

Table 3-15 HOME_LINK Syntax

Reference TypeSyntax

Direct PL/SQL

APEX_APPLICATION.G_HOME_LINK

PL/SQL

V('HOME_LINK')

Template Reference

#HOME_LINK#

Substitution String

&HOME_LINK.



See Also:

"Authentication" for information about the Home Link attribute

LOGIN_URL

Use LOGIN_URL to display a link to a login page for users that are not currently logged in. Table 3-16 describes the supported syntax for LOGIN_URL.

Table 3-16 LOGIN_URL Syntax

Reference TypeSyntax

Bind variable

:LOGIN_URL

Direct PL/SQL

APEX_APPLICATION.G_LOGIN_URL

PL/SQL

V('LOGIN_URL')

Substitution string

&LOGIN_URL.

Template Substitution

#LOGIN_URL#


IMAGE_PREFIX

The value of IMAGE_PREFIX determines the virtual path the Web server uses to point to the images directory distributed with Oracle Application Express. To reference uploaded images, use WORKSPACE_IMAGES and APP_IMAGES. Table 3-17 describes the supported syntax for referencing IMAGE_PREFIX.

Table 3-17 IMAGE_PREFIX Syntax

Reference TypeSyntax

Bind variable

:IMAGE_PREFIX

Direct PL/SQL

APEX_APPLICATION.G_IMAGE_PREFIX

PL/SQL

V('IMAGE_PREFIX')

Substitution string

&IMAGE_PREFIX.

Template Substitution

#IMAGE_PREFIX#


Application Express SCHEMA OWNER

If you are generating calls to applications from within your PL/SQL code, you may need to reference the owner of the Oracle Application Express schema. The following describes the correct syntax for a direct PL/SQL reference:

APEX_APPLICATION.G_FLOW_SCHEMA_OWNER

You may also use #FLOW_OWNER# to reference this value in SQL queries and PL/SQL (for example, in a region or a process).

PRINTER_FRIENDLY

The value of PRINTER_FRIENDLY determines if the Application Express engine is running in print view mode. This setting can be referenced in conditions to eliminate elements not desired in a printed document from a page. Table 3-18 describes the supported syntax for referencing PRINTER_FRIENDLY.

Table 3-18 PRINTER_FRIENDLY Syntax

Reference TypeSyntax

Direct PL/SQL

APEX_APPLICATION.G_PRINTER_FRIENDLY (VARCHAR2 DATATYPE)

PL/SQL

V('PRINTER_FRIENDLY')

Substitution string

&PRINTER_FRIENDLY.


LOGOUT_URL

LOGOUT_URL is an application-level attribute used to identify the logout URL. This is a URL that navigates the user to a logout page or optionally directly logs out a user. To create a logout navigation bar entry, add a trailing period to &LOGOUT_URL (&LOGOUT_URL.). If you are coding a page template, use #LOGOUT_URL#. Table 3-19 describes the supported syntax for referencing LOGOUT_URL.

Table 3-19 LOGOUT_URL Syntax

Reference TypeSyntax

Bind variable

:LOGOUT_URL

PL/SQL

V('LOGOUT_URL')

Substitution string

&LOGOUT_URL.

Template substitution

#LOGOUT_URL#


PROXY_SERVER

PROXY_SERVER is an application attribute. The attribute may be used by regions whose source comes from a URL. The following is the correct syntax for a direct PL/SQL reference used when you are writing PL/SQL to access remote Web servers from within the database (for example, when using the utl_http package shipped with the database).

APEX_APPLICATION.G_PROXY_SERVER

PUBLIC_URL_PREFIX

PUBLIC_URL_PREFIX is an application-level attribute that identifies a URL to toggle out of a logged in mode to a public view. Table 3-20 describes the supported syntax for referencing PUBLIC_URL_PREFIX.

Table 3-20 PUBLIC_URL_PREFIX Syntax

Reference TypeSyntax

Bind variable

:PUBLIC_URL_PREFIX

PL/SQL

V('PUBLIC_URL_PREFIX')

Substitution string

&PUBLIC_URL_PREFIX.

Template substitution

#PUBLIC_URL_PREFIX#


REQUEST

Each application button sets the value of REQUEST to the name of the button or to the request value attribute associated with the button. This enables accept processing to reference the name of the button when a user clicks it. In the f?p syntax, REQUEST may be set using the fourth argument.

Referencing the Value of REQUEST

REQUEST is typically referenced during Accept processing (that is, the processing that occurs when you post a page). Table 3-21 describes the supported syntax for referencing REQUEST.

Table 3-21 REQUEST Syntax

Reference TypeSyntax

Bind variable

:REQUEST

Direct PL/SQL

APEX_APPLICATION.G_REQUEST

PL/SQL

V('REQUEST')

Substitution string

&REQUEST

&REQUEST. (exact syntax match)


Scope and Value of REQUEST for Posted Pages

When you post a page, you initiate Accept processing. Accept processing consists of computations, validations, processes, and branches. The value of REQUEST is available during each phase of the Accept processing. Once an application branches to a different page then REQUEST is set to NULL.

The value of REQUEST is the name of the button the user clicks, or the name of the tab the user selects. For example, suppose you have a button with a name of CHANGE, and a label Apply Change. When a user clicks the button, the value of REQUEST is CHANGE.

About the When Button Pressed Attribute

Validations, processes, and branches have a When Button Pressed attribute. This attribute displays as a select list and contains the names of buttons that exist on the current page. If you make a selection from When Button Pressed, you associate the button's REQUEST value with the validation, process, or branch.

When you use a button to submit a page, the REQUEST value is passed to the page. The Accept processing logic evaluates each validation, process, and branch that uses a When Button Pressed attribute to determine whether the component should run (or fire). When one of these components runs, do not assume that a user actually clicked the associated button and caused the page to be submitted. Keep in mind, that another button using the same request value may have submitted the page. Similarly, JavaScript on the page can also submit the page and pass in a request value.

Referencing REQUEST Using Declarative Conditions

It is common to reference REQUEST using conditions. For example, you may want to reset pagination when a user clicks Go on a report page. You can reset pagination by creating an on-submit page process. The page process can be made conditional using the condition Request = Expression 1.

To conditionalize an on-submit page process:

  1. Under Condition, select the condition type Request = Expression 1.

  2. In Expression 1, enter GO.

Using REQUEST for Show Processing

You can also use REQUEST for Show processing when navigating to a page using f?p syntax. For example:

f?p=100:1:&APP_SESSION.:GO

Remember that the fourth argument in the f?p syntax is REQUEST. This example goes to application 100, page 1 for the current session, and sets the value of REQUEST to GO. Any process or region can reference the value of REQUEST using Show processing.

The following is a similar example using PL/SQL:

IF V ('REQUEST') = 'GO' THEN
   htp.p('hello');
END IF;

Note that htp.p('hello') is a call to a PL/SQL Web Toolkit package to print out the specified text string.


See Also:


SQLERRM

SQLERRM is a template substitution only available in the Applications Region Error Message. The following describes the correct syntax for a region template substitution reference:

#SQLERRM#

SYSDATE_YYYYMMDD

SYSDATE_YYYYMMDD represents the current date on the database server, with the YYYYMMDD format mask applied. You may use this value instead of repeated calls to the SYSDATE() function. The following list describes the supported syntax for referencing SYSDATE_YYYYMMDD.

  • Bind variable

    :SYSDATE_YYYYMMDD
    
  • PL/SQL

    V('SYSDATE_YYYYMMDD')
    
  • Direct PL/SQL

    APEX_APPLICATION.G_SYSDATE (DATE DATATYPE)
    

Table 3-22 SYSDATE_YYYYMMDD Syntax

Reference TypeSyntax

Bind variable

:SYSDATE_YYYYMMDD

Direct PL/SQL

APEX_APPLICATION.G_SYSDATE (DATE DATATYPE)

PL/SQL

V('SYSDATE_YYYYMMDD')


WORKSPACE_IMAGES

Use this substitution string to reference uploaded images, JavaScript, and cascading style sheets that are shared over many applications within a workspace. Table 3-23 describes the supported syntax for referencing WORKSPACE_IMAGES.

Table 3-23 WORKSPACE_IMAGES Syntax

Reference TypeSyntax

Bind variable

:WORKSPACE_IMAGES

Direct PL/SQL

Not available

PL/SQL

V('WORKSPACE_IMAGES')

Substitution string

&WORKSPACE_IMAGES.

Template substitution

#WORKSPACE_IMAGES#


PK`PK6(AOEBPS/app_comp.htm Adding Application Components

7 Adding Application Components

This section describes how to use Application Builder to add pages to an application and add other components (reports, charts, or forms), page controls (buttons, items, list of values), and shared components (breadcrumbs, lists, or tabs).

This section contains the following topics:

Creating Reports

In Oracle Application Express, a report is the formatted result of a SQL query. You can generate reports by selecting and running a built-in query, or by defining a report region based on a SQL query.

Topics in this section include:

Creating a Report Using a Wizard

Application Builder includes a number of built-in wizards for generating reports.

To create a report using a wizard:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select the application.

  3. Click Create Page and click Next.

  4. Select Report.

  5. Select a report type and click Next:

    • SQL Report - Creates a report based on a custom SQL SELECT statement or a PL/SQL function returning a SQL SELECT statement that you provide. For assistance in writing the SQL query, click the Query Builder button.

    • Interactive Report - Creates an interactive report based on a custom SQL SELECT statement you provide. For assistance in writing the SQL query, click the Query Builder button. End users can customize the report layout and data displayed by selecting options on the Actions menu.

    • Report on Web Service Result - Creates a report based on a Web service result. To learn more, see "Implementing Web Services".

    • Wizard Report - Creates a classic report without requiring any SQL knowledge. Select the appropriate schema, table, columns, and result set display.

  6. Follow the on-screen instructions. To learn more about a specific field, click the item label.

    When Help is available, the item label changes to red when you pass your cursor over it and the cursor changes to an arrow and question mark. See "About Field-Level Help".


See Tutorials:

"How to Create a Drill Down Report" and "How to Create a Parameterized Report" in Oracle Application Express Advanced Tutorials

Understanding the Difference Between Interactive and Classic Reports

Oracle Application Express includes two main report types, an interactive report and a classic report. The main difference between these two report types is that interactive reports enable the user to customize the appearance of the data through a searching, filtering, sorting, column selection, highlighting, and other data manipulations.

The following is an example of an interactive report.

Description of rpt_ir.gif follows
Description of the illustration rpt_ir.gif

Notice that the interactive report includes a Search Bar, Column Heading Menu links, and Link Column icons in the first column of each row. For a complete description of these components, see "Using Interactive Reports".

In contrast, a classic report does not include any of these customization features. The following is an example of a classic report built on top of the same data.

Description of rpt_classic.gif follows
Description of the illustration rpt_classic.gif

Classic reports do not include a Search Bar and the links at the top of each column only support basic sorting.

Using Interactive Reports

Interactive reports include components that enable users to alter the layout of report data. Users can select columns, create filters, apply highlighting, sort columns, define break groups, aggregate columns, create charts, and define computations. Once customized, users can then save an interactive report as named report and download the data to various file formats.

Topics in this section include:

About the Search Bar

Description of ir_search_bar.gif follows
Description of the illustration ir_search_bar.gif

A search bar displays at the top of every interactive report and includes the following features:

  • Search columns icon - Resembles a magnifying glass. Click this icon to narrow your search to only specific columns. To search all columns, select All Columns.

  • Text area - Enter case insensitive search criteria (wild card characters are implied) and then click Go.

  • Rows - Selects the number of rows to display per page.

  • Go button - Executes a search.

  • Actions menu - Displays the Actions menu. See "About the Actions Menu".

Searching Specific Columns

Clicking the Search columns icon (resembles a magnifying glass) displays a listing of all columns in the current report.

To use the Search columns icon:

  1. Click the Search columns icon and select a column.

    The column name displays to the right of the Search columns icon.

  2. Enter keywords in the Text area and click Go.

    Description of ir_srch_col.gif follows
    Description of the illustration ir_srch_col.gif

    Notice the filter Person Role contains 'manager' has been added to the Report Settings area above the report.

  3. To disable the filter, select the Enable/Disable Filter check box.

  4. To delete the filter, click the Remove Filter icon.

Editing a Filter

To edit an existing filter:

  1. Click the filter name.

    The filter appears.

    Description of ir_edit_srch_col_filter.gif follows
    Description of the illustration ir_edit_srch_col_filter.gif

  2. Edit the the Column, Operator, and Expression fields.

  3. Click Apply.

About Link Column Icons

Link Column icons display on the far left of each row in an interactive report. A Link Column can link to a single row view, a custom target, or be excluded from the report. To learn more about customizing this interactive report attribute, see "Understanding Link Columns" and "Creating a Column Link in an Interactive Report".

About the Actions Menu

The Actions menu appears to the right of the Go button on the Search bar. Use this menu to customize an interactive report.

Description of ir_action_menu.gif follows
Description of the illustration ir_action_menu.gif

The Actions menu contains the following options:

  • Select Columns specifies which columns to display and in what order. See "Selecting Columns to Display".

  • Filter focuses the report by adding or modifying the WHERE clause on the query. See "Adding a Filter".

  • Sort specifies which columns to sort on and the sort order (that is, ascending or descending). See "Selecting Columns and Sort Order".

  • Control Break creates a break group on one or several columns. See "Creating a Control Break".

  • Highlight defines a filter that highlights the rows that meet the filter criteria. See "Adding Highlighting".

  • Compute enables users to add computed columns to a report. See "Computing Columns".

  • Aggregate enables users to perform mathematical computations against a column. See "Aggregating a Column".

  • Chart displays the report data as a chart. See "Creating a Chart".

  • Flashback performs a flashback query enabling users to view the data as it existed at a previous point in time. See "Executing a Flashback Query".

  • Save Report saves the current customized report settings so they can be used in the future. See "Saving a Report".

  • Reset enables users to reset the report back to the default report settings. See "Resetting a Report".

  • Help provides detailed descriptions of how to use the interactive report components to customize your reports.

  • Download enables users to download a report. Available download formats depend upon your installation and report definition. See "Downloading a Report".

Selecting Columns to Display

To customize a report to include specific columns, select Select Columns on the Actions menu.

To use the Select Columns option:

  1. Click the Actions menu and select Select Columns.

    The Select Columns region appears.

    Description of ir_select_col.gif follows
    Description of the illustration ir_select_col.gif

  2. Select the columns you wish to move. Cclick the arrows in the center of region to move a column from the Display in Report box to the Do Not Display in Report box. To select multiple columns at once, press and hold the CTRL key.

  3. To change the order of the columns, click the Top, Up, Down, and Bottom arrows on the right.

  4. Click Apply.

    A revised report appears.

Adding a Filter

You can create a filter to focus a report by selecting Filter on the Actions menu. This option enables you to add or modify the WHERE clause in the query.

To add a filter:

  1. Click the Actions menu and select Filter.

    The Filter region appears.

  2. Select a column, an operator, and expression.

    Description of ir_filter.gif follows
    Description of the illustration ir_filter.gif

    In the previous example, the filter will display all people who have the Person Role of Lead.

  3. Click Apply.

    Description of ir_select_col_rpt.gif follows
    Description of the illustration ir_select_col_rpt.gif

    Notice the filter Person Role contains 'Lead' has been added to the Report Settings area above the report.

  4. To revise the filter:

    1. Click the filter name (in this example, Person Role contains 'Lead').

    2. Edit your selections and click Apply.

  5. To disable the filter, select the Enable/Disable Filter check box.

  6. To delete the filter, click Remove Filter.

Selecting Columns and Sort Order

You can specify which columns to display and the sort order (ascending or descending) by selecting Sort on the Actions menu.

To sort by column:

  1. Click the Actions menu and select Sort.

    The Sort region appears.

    Description of ir_sort.gif follows
    Description of the illustration ir_sort.gif

  2. Select a column, the sort direction (Ascending or Descending), and Null Sorting behavior (Default, Nulls Always Last, or Nulls Always First).

  3. Click Apply.

Creating a Control Break

You can create a break group of one or several columns by selecting Control Break from the Actions menu. Creating a break group pulls the columns out of the interactive report and displays them as a master record.

To create a break group:

  1. Click the Actions menu and select Control Break.

    The Control Break region appears.

    Description of ir_ctrl_break.gif follows
    Description of the illustration ir_ctrl_break.gif

  2. Select a column and then a status (Enable or Disable)

  3. Click Apply.

    One or more break groups display in Report Settings area above the report.

  4. To expand the break group, click the plus (+) sign.

  5. To enable the Control Break filter, select the Enable/Disable Filter check box.

  6. To delete the filter, click Remove Filter.

Adding Highlighting

You can customize the display to highlight specific rows in a report by selecting Highlight on the Actions menu.

To create highlighting:

  1. Click the Actions menu and select Highlight.

    The Highlight region appears.

    Description of ir_highlight.gif follows
    Description of the illustration ir_highlight.gif

  2. Enter the following information:

    1. Name - Enter a name to define this filter.

    2. Sequence - Enter numeric value to identify the sequence in which the rules are evaluated.

    3. Highlight Type - Select Cell or Row. If Cell is selected, the column referenced in the Highlight Condition is highlighted.

    4. Background Color - Select a new color for the background of the highlighted area.

    5. Text Color - Select a new color for the text in the highlighted area.

    6. Select a column, an operator, and expression.

  3. Click Apply.

    Description of ir_highlight_rpt.gif follows
    Description of the illustration ir_highlight_rpt.gif

    Notice a new filter appears in the Report Settings area above the report.

  4. To revise the filter:

    1. Click the filter name (in this example, Project Lead).

    2. Edit your selections and click Apply.

  5. To disable the filter, select the Enable/Disable Filter check box.

  6. To delete the filter, click Remove Filter.

Computing Columns

You can add computations to columns by selecting Compute from the Actions menu.

To create a computation:

  1. Click the Actions menu and select Compute.

    The Compute region appears.

    Description of ir_compute.gif follows
    Description of the illustration ir_compute.gif

  2. From Computation, select a previously defined computation or select New Computation.

  3. For Column Heading, enter a heading for the new column.

  4. For Format Mask, select an Oracle format mask to be applied to the new column.

    Next, create the computation. Use the Columns, Keypad, and Functions sections to create a computation.

  5. To create the computation:

    1. Columns - Select the column name or alias to be added to the computation.

    2. Keypad - Click the appropriate options. This section provides shortcuts for commonly used keys.

    3. Functions - Select the appropriate function.

  6. Click Apply.

Deleting a Computation

To delete a computation:

  1. Click the Actions menu and select Compute.

    The Compute region appears.

  2. From Computation, select the defined computation.

  3. Click Delete.

Aggregating a Column

You can define a mathematical computation against a column (or aggregate) by selecting Aggregate from the Actions menu. Aggregates are displayed after each control break and at the end of the report within the column in which they are defined.

To aggregate columns:

  1. Click the Actions menu and select Aggregate.

    The Aggregate region appears.

    Description of ir_aggreg.gif follows
    Description of the illustration ir_aggreg.gif

  2. From Aggregation, select a previously defined aggregation or select New Aggregation.

  3. For Function, select one of the following: Sum; Average, Count, Minimum, Maximum, or Median.

  4. For column, select a column name or alias.

  5. Click Apply.

    The computation appears at the bottom of the report.

    Description of ir_aggreg_rpt.gif follows
    Description of the illustration ir_aggreg_rpt.gif

    In this example, the aggregate shows the sum of all amounts in the Order Total column.

  6. To remove the aggregate:

    1. Select Aggregate from the Actions menu.

      The Aggregate region appears.

Removing an Aggregate

To remove aggregate columns:

  1. Click the Actions menu and select Aggregate.

    The Aggregate region appears.

  2. From Aggregation, select a previously defined aggregation.

  3. Click Delete.

Creating a Chart

To create a chart, select Chart on the Actions menu. You can create one chart for each interactive report. Once defined, you can switch between the chart and report views using links on the Search bar.

To create a chart:

  1. Click the Actions menu and select Chart.

    The Chart region appears.

    Description of ir_chart.gif follows
    Description of the illustration ir_chart.gif

  2. In the Chart region, specify the following:

    1. Chart Type - Select the type of chart you wish to create.

    2. Label - Select the column to be used as the label.

    3. Axis for Title for Label - Enter title to be displayed on the axis associated with the column selected for Label (not available for pie chart).

    4. Value - Select the column to be used as the Value. If your function is a COUNT, a Value does not need to be selected.

    5. Axis Title for Value - Enter the title to display on the axis associated with the column selected for Value (not available for pie chart).

    6. Function - (Optional) Select a function to be performed on the column selected for Value.

      Edit Chart and View Chart links appear beneath the Search bar.

  3. To alter the chart, click Edit Chart.

  4. To return to the report, click View Report.

  5. To delete the chart, click Edit Chart and then Delete.

Executing a Flashback Query

You can execute a flashback query by selecting Flashback from the Actions menu. A flashback query enables you to view the data as it existed at a previous point in time. The default amount of time that you can flashback is 3 hours (or 180 minutes) but the actual amount will differ for each database.

To execute a flashback query:

  1. Click the Actions menu and select Flashback.

  2. In the Flashback region, enter the number of minutes.

  3. Click Apply.

Saving a Report

You can save a customized report by selecting Save Report from the Actions menu. You can choose to save a Named Report or Default Report Settings.


Tip:

The Save Report option does not display if an authentication scheme is not defined for the current application. See "Establishing User Identity Through Authentication".

Saving a Interactive Report

To save an interactive report:

  1. Run the report.

  2. From the Actions menu, select Save Report.

  3. In Save Report:

    1. Save - Select As Named Report.

    2. Name - Enter a name for the report.

    3. Description - Enter an optional description.

    4. Click Apply.


Tip:

To save a named report saved to a new page, disable Show Saved Reports as Tabs under Advanced Attributes. See "Configuring Advanced Attributes for Interactive Reports"

Saving Default Report Settings

Default report settings determine the way a report initially displays to end users. End users can then modify any of the settings.

To save default report settings:

  1. Click the Actions menu and select Save Report.

  2. From Save, select As Default Report Settings.

  3. Click Apply.

Resetting a Report

You can reset a report back to the default settings by selecting Reset from the Actions menu. Resetting a report removes any customizations you have made.

To reset a report:

  1. Click the Actions menu and select Reset.

  2. Click Apply.

Downloading a Report

You can download an interactive report back by selecting Download from the Actions menu. Available download formats depend upon your installation and report definition but may include comma-delimited file (CSV) format, Microsoft Excel (XLS) format, Adobe Portable Document Format (PDF), and Microsoft Word Rich Text Format (RTF).

To download a report:

  1. Click the Actions menu and select Download.

  2. Select a report download format and follow the provided instructions.

Editing Interactive Reports

By default, an interactive report includes a Search Bar, Column Heading Menu links, and Link Column icons. Users can use these components to alter the layout of report data by selecting columns, applying filters, highlighting, and sorting. This section describes how developers can customize an interactive report by editing report attributes.

Topics in this section include:

Accessing the Interactive Report Attributes Page

You can access the Interactive Report Attributes page by clicking the Interactive Report link next to the report region you want to edit on the Page Definition. You can also navigate to the Report Attributes page by clicking the region name and then selecting the Report Attributes tab.

Description of int_rprt_att.gif follows
Description of the illustration int_rprt_att.gif

To access the Report Attributes page:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select the application.

  3. Select a page.

    The Page Definition appears.

  4. Under Regions, click Interactive Report next to the name of the report region you want to edit.

    The Report Attributes page appears and is divided into the following sections:

  5. To learn more about a specific attribute, click the item label.

    When Help is available, the item label changes to red when you pass your cursor over it and the cursor changes to an arrow and question mark. See "About Field-Level Help".

About Navigation Alternatives

The Report Attribute page is divided into these sections: Column Attributes, Groups, Default Report, Pagination, Sorting, Search Bar, Download, Link Column, Advanced, and Description.

You can access these sections by scrolling down the page, or by clicking a navigation button at the top of the page.

Description of int_rprt_nav.gif follows
Description of the illustration int_rprt_nav.gif

When you select a button at the top of the page, the selected section appears and all other sections are temporarily hidden. To view all sections of the page, click Show All.

Editing Interactive Report Column Attributes

You can use the Column Attributes section of the Report Attributes page to precisely control the report layout. For example, you can use these attributes to alter column heading text, change column positioning, or hide a column.

To access Column Attributes:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select the application.

  3. Select a page.

    The Page Definition appears.

  4. Under Regions, click Interactive Report next to the name of the report region you want to edit.

    The Interactive Report Attributes page appears with the Column Attributes section at the top of the page.

    Description of int_rprt_col.gif follows
    Description of the illustration int_rprt_col.gif

    Use the Column Attributes section to control report column appearance and functionality.

    Heading displays the heading text to be included in the report. Type indicates the type of query column. The Link column indicates if a link column is currently defined.

    Table 7-1 describes common report column edits.

    Table 7-1 Common Report Column Edits for Interactive Reports

    DescriptionDeveloper Action

    Alter column display sequence.

    Click the up and down arrows to change the column display sequence.

    Change column group assignment.

    If Column Groups are defined, individual columns can be assigned under Column Group.

    Change column heading text.

    Under Heading, enter different heading text.

    Change how columns display.

    Select an option from Display Text As.


    You can further refine the attributes of a specific column on the Column Attributes page.

  5. To access the Column Attributes page, click the Edit icon next to the appropriate column Alias.

    You can control whether users can sort, filter, control breaks, aggregate, and create computations or chart, by selecting the appropriate check boxes under Allow Users To.

  6. Under Column Definition, Allow Users To, select the appropriate check boxes.

    To learn more about a specific attribute, click the item label.

Creating Column Groups

Use column groups to group columns together on a single row view.

To create a column group:

  1. Navigate to the Interactive Report Attributes page. See "Accessing the Interactive Report Attributes Page".

    The Interactive Report Attributes page appears.

  2. Scroll down to Column Groups.

  3. Click Add Group.

  4. Under Column Group:

    1. Sequence - Enter the display sequence for this column group. This attribute determines the order in which the column groups display in the detail view.

    2. Group Name - Enter a column group name. This name displays in the region header in detailed view.

    3. Description - Enter an optional description for the column group. This description never displays to the end user.

  5. Click Create.

Controlling Interactive Report Pagination

You control how pagination displays by making selections from Pagination attributes on the Interactive Report Attributes page.

To access the Pagination section of the Report Attributes page:

  1. Navigate to the Interactive Report Attributes page. See "Accessing the Interactive Report Attributes Page".

    The Interactive Report Attributes page appears.

  2. Scroll down to Pagination.

    You use the Pagination attributes to select a pagination style, determine where pagination occurs, specify the maximum number of rows to query, and messages to display when more than the maximum number of rows are returned or if no rows are returned. Table 7-2 describes the available Pagination attributes.

Table 7-2 Pagination Attributes

AttributeDescription

Pagination Type

Select a pagination type. Pagination provides the user with information about the number of rows and the current position within the result set. Pagination can be displayed above or below the report (or both) and can be positioned on the left or right. Available pagination options include:

  • Row Ranges X to Y

  • Row Ranges X to Y of Z

Pagination Display Position

Defines where pagination occurs. Pagination can be display on the left side, right side, at the bottom, or above the report.

Show Null Values as

Enter the text you want to display for null columns. The default value is (null).

Maximum Row Count

Defines the maximum number of rows to query, for example, rows 1 - 10 or 456.

If you set this attribute to 200, the result would appear as follows:

rows 1 - 10 of more than 200 rows

Note that this attribute impacts performance. Counting fewer rows can improve performance and counting thousands of rows can degrade performance.

When more than maximum row data found message

Defines the text message that displays when more than maximum row count are returned.

When No Data Found Message

Defines the text message that displays when the query does not return any rows.


Managing Interactive Report Column Sorting

You manage column sorting on the Interactive Report Attributes page.

To manage column sorting:

  1. Navigate to the Interactive Report Attributes page. See "Accessing the Interactive Report Attributes Page".

    The Interactive Report Attributes page appears.

  2. Under Column Attributes, click the Edit icon for the column for which you want to enable sorting.

  3. Under Column Definition, select Sort and click Apply Changes.

    The Interactive Report Attributes page appears.

  4. Scroll down to Sorting.

  5. Specify ascending and descending image attributes, or click set defaults.

Removing or Customizing a Search Bar in an Interactive Report

Search bars display above the report.

Description of search_bar.gif follows
Description of the illustration search_bar.gif

To remove a search bar in your report:

  1. Navigate to the Interactive Report Attributes page. See "Accessing the Interactive Report Attributes Page".

    The Interactive Report Attributes page appears.

  2. Scroll down to Search Bar.

  3. For Include Search Bar, select Yes or No. Selecting No removes the following default components:

    • Search Field - Displays a text field in the search bar in which to enter search criteria.

    • Finder Drop Down - Enables users to search on a selected column or against all columns.

    • Rows Per Page Selector - Displays a select list to enable users to select the number of rows to display per page.

    • Actions Menu - Enables the user to customize the report based on selected Actions.

  4. To customize the Actions Menu, select the Action functions to include.

  5. For Button Template, select a template for buttons that display in the search region and in the dialogs.

  6. For Finder Image, specify an image. If no image is defined, #IMAGE_PREFIX#/htmldb/builder/builder_find.png is used.

  7. For Actions Menu Image, specify an image. If no image is defined, #IMAGE_PREFIX#/ws/action_dropdown.gif is used.

  8. For Search Button Label, enter the text to be used as the search button label.

  9. For Maximum Rows Per Page, enter the maximum number to display in the Rows Per Page Selector in the search bar.

  10. Click Apply Changes.

Adding a Download Option to the Actions Menu

You can add a Download option to the Actions menu to enable users to export an interactive report as a comma-delimited file (CSV) format, Microsoft Excel (XLS) format, Adobe Portable Document Format (PDF), and Microsoft Word Rich Text Format (RTF).

Description of download.gif follows
Description of the illustration download.gif

To add a download link to a report you must enable the CSV output option.

To enable the Enable CSV output option:

  1. Navigate to the Interactive Report Attributes page. See "Accessing the Interactive Report Attributes Page".

    The Interactive Report Attributes page appears.

  2. Scroll down to Search Bar.

    1. For Include Search Bar, select Yes and Actions Menu.

    2. Under Include in Actions menu, select Download.

  3. Scroll down to Download.

  4. From Download Formats, select CSV - Comma-delimited file (CSV) file format.


    Tip:

    The Download option will not display in the Actions menu if no file formats are selected.

  5. In the CSV Separator, define the column separator. If no value is entered, a comma or semicolon is used depending on your current NLS settings.

  6. In the CSV Enclosed By, enter delimiter character. This character is used to delineate the starting and ending boundary of a data value. Default delimiter is double quotation marks (" ").

  7. In Filename, enter a name for the downloaded document. Do not specify a file extension, the extension is added automatically. If you leave this blank, the region name is used as the file name.

  8. Click Apply Changes.

Understanding Link Columns

A Link Column displays on the left side of an interactive report. It can link to a single row view, a custom target, or be excluded from the report. Note that a Link Column cannot be sorted, hidden, or moved by an end user and does not interact with the standard column link defined on the Column Attributes page.

Linking to a Single Row View

To link to a single row view:

  1. Navigate to the Interactive Report Attributes page. See "Accessing the Interactive Report Attributes Page".

    The Interactive Report Attributes page appears.

  2. Scroll down to Link Column.

  3. For Link Column, select Link to Single Row View.

  4. From Single Row View, select the appropriate options:

    • Allow Exclude Null Values - Excludes columns with null values.

    • Allow Displayed Columns - Displays only the columns shown in the report.

  5. For Uniquely Identify Rows by, select ROWID or Unique Column.

    If you select, Unique Column, specify the column in the Unique Column field.

  6. For Link Icon, select an icon.

  7. For Link Attributes (Optional), specify additional column link attributes to be included in the <a href= > tag (for example, a link target, classes, or styles).

  8. Click Apply Changes.

Linking to a Specific Page

To link to a specific page:

  1. Navigate to the Interactive Report Attributes page. See "Accessing the Interactive Report Attributes Page".

    The Interactive Report Attributes page appears.

  2. Scroll down to Link Column.

  3. For Link Column, select Link to Custom Target.

  4. For Link Icon, select an icon.

  5. For Link Attributes (Optional), specify additional column link attributes to be included in the <a href= > tag (for example, a link target, classes, or styles).

  6. For Target, select Page in this Application.

  7. For Page, select the target page number. To reset the pagination for this page, select Reset Pagination.

  8. For Request, specify the request to be used.

  9. For Clear Cache, specify the pages (that is, the page numbers) on which to clear cache. You can specify multiple pages by listing the page numbers in a comma-delimited list. See "Linking to Interactive Reports".

  10. For Name and Value, specify session state for a specific item.

  11. Click Apply Changes.

Linking to a URL

To link to a URL:

  1. Navigate to the Interactive Report Attributes page. See "Accessing the Interactive Report Attributes Page".

    The Interactive Report Attributes page appears.

  2. Scroll down to Link Column.

  3. For Link Column, select Link to Custom Target.

  4. For Link Icon, select an icon.

  5. For Link Attributes (Optional), specify additional column link attributes that to be included in the <a href= > tag (for example, a link target, classes, or styles).

  6. From Target, select URL.

  7. In URL, enter the appropriate address.

  8. For Checksum - Select one of the following:

    • Use default

    • Application Level - Link reusable by any user

    • User Level - Link reusable by current user

    To learn more about each option, see item Help.

  9. Click Apply Changes.

Excluding a Link Column

To exclude a column link:

  1. Navigate to the Interactive Report Attributes page. See "Accessing the Interactive Report Attributes Page".

    The Interactive Report Attributes page appears.

  2. Scroll down to Link Column.

  3. For Link Column, select Exclude Link Column.

  4. Click Apply Changes.

Creating a Column Link in an Interactive Report

Use Column Attributes to create a link from a report to another page in your application or to a URL.

To create a column link to another page:

  1. Navigate to the Interactive Report Attributes page. See "Accessing the Interactive Report Attributes Page".

    The Interactive Report Attributes page appears.

  2. Under Column Attributes, locate the column to contain the link.

  3. Click the Edit icon next to the column name.

    The Column Attributes page appears.

  4. Scroll down to Column Link.

  5. To create a column link to another page:

    1. From Target, select Page in this Application.

    2. (Optional) In Link Attributes, specify additional column link attributes to be included in the <a href= > tag (for example, a link target, classes, or styles).

    3. In Link Text, enter the text to be displayed as a link, specify an image tag, or pick from the list of default images.

    4. In Page, specify the target page number. To reset the pagination for this page, select Reset Pagination.

    5. In Request, specify the request to be used.

    6. In Clear Cache, specify the pages (that is, the page numbers) on which to clear cache. You can specify multiple pages by listing the page numbers in a comma-delimited list.

    7. Use the Name and Value fields to specify session state for a specific item.

    8. For Checksum - Select one of the following:

      • Use default

      • Application Level - Link reusable by any user

      • User Level - Link reusable by current user

      To learn more about each option, see item Help.

  6. Click Apply Changes.

To create a column link to a URL:

  1. Navigate to the Interactive Report Attributes page. See "Accessing the Interactive Report Attributes Page".

    The Interactive Report Attributes page appears.

  2. Access the Column Attributes page by clicking the Edit icon next to the appropriate column.

    The Column Attributes page appears.

  3. Scroll down to Column Link.

  4. Under Column Link, specify the following:

    1. From Target, select URL.

    2. In Link Text, enter the text to be displayed as a link and select a substitution string.

    3. (Optional) In Link Attributes, specify additional column link attributes to be included in the <a href= > tag (for example, a link target, classes, or styles).

    4. In URL, enter the appropriate address.

  5. Click Apply Changes.

Defining a Column as a List of Values in an Interactive Report

In interactive reports you can use a list of values to improve the speed of built-in filter tools.

To define a report column as a list of values:

  1. Navigate to the Interactive Report Attributes page. See "Accessing the Interactive Report Attributes Page".

    The Interactive Report Attributes page appears.

  2. Access the Column Attributes page by clicking the Edit icon next to the appropriate column.

    The Column Attributes page appears.

  3. Scroll down to List of Values.

  4. From Column Filter List of Values, specify how to create a list of values as a filter on the report column list. Available options include:

    • None - Disable filter on list of values.

    • Default Based on Column Type - STRING and NUMBER columns derive list of values from distinct column values. DATE columns derive list of values from predefined date ranges.

    • Use Defined List of Values - Derive list of values from defined list of values SQL Query.

    • List of values definition - If you select Use Defined List of Values, enter a SQL query that selects the distinct column values. Entering a SQL query can improve performance in some reports. This list of values will be displayed when a user clicks on a column header.

  5. Click Apply Changes.

Configuring Advanced Attributes for Interactive Reports

Use the Advanced Attributes section to define a report alias, send a user a saved view of a report, show saved reports as tabs, prevent execution of queries that take a specified amount of time to execute, and define items to set into session state.

To configure Advanced Attributes:

  1. Navigate to the Interactive Report Attributes page. See "Accessing the Interactive Report Attributes Page".

    The Interactive Report Attributes page appears.

  2. Scroll down to Advanced Attributes.

    Table 7-3 describes the available Advanced Attributes.

Table 7-3 Advanced Attributes

AttributeDescription

Report Alias

Enter an alphanumeric alias for this interactive report. You may use an alias to reference an interactive report in an API call (for example, to change the columns displayed). The alias must be unique within the application.

Report ID Item

This attribute enables you to send a user directly to a saved view of the report. You specify an item whose value stores the report ID of the saved view. Report ID's can be retrieved from the APEX_APPLICATION_PAGE_IR_RPT view.

Show Saved Reports as Tabs

If saved versions of the report exist, this attribute specifies if they should be displayed as tabs. To create a separate page with a list of reports, disable this attribute.

Page Items to Submit

Enter a comma separated list of items to be set into session state when the user clicks the Go button on the search bar. Only items on the current page will be set.


Linking to Interactive Reports

Unlike classic reports which typically use page items as report parameters, the data in an interactive report is driven by declarative filters. However, the developer may desire to set these report parameters by modifying interactive report settings for an end user. These settings only affect the end user's working report and will not affect any saved report settings.

To reset an interactive report in a link, use the string "RIR" in the Clear-Cache section of a URL. This is equivalent to the end user choosing the Reset option from the interactive report actions menu on the target page. The report is returned to the default report settings specified by the developer or saved by the user.

To create a Row text contains filter on an interactive report, use the string IR_ROWFILTER in the Item Names section of the URL. Adding this string passes the filter value in the corresponding location in the Item Values section of the URL.

To create a filter on an interactive report in a link, use the string IR<operator>_<target column alias> in the Item Names section of the URL, and pass the filter value in the corresponding location in the Item Values section of the URL.

Valid operators include:

  • EQ = Equals (this is the default)

  • NEQ = Not Equals

  • LT = Less than

  • LTE = Less then or equal to

  • GT = Greater Than

  • GTE = Greater than or equal to

  • LIKE = SQL Like operator

  • N = Null

  • NN = Not Null

  • C = Contains

  • NC = Not Contains

Consider the following examples:

f?p=...:IR_ENAME:KING

The previous example is equivalent to the end user creating a filter on the target page: ENAME = KING. Note that when an operator is not provided, EQ is used because it is the default.

f?p=...:IRGT_SAL:3000

The previous example is equivalent to the end user creating a filter on the target page: SAL > 3000.

Editing SQL and Wizard Reports

You can control report layout, pagination, column sorting, error messages, export links, and column break of SQL and Classic reports using the Report Attributes page.


Tip:

With the addition of interactive reports in Oracle Application Express release 3.1, all previous report types are referred to as classic reports. See "Editing Interactive Reports".

Topics in this section include:

Accessing Classic Report Attributes

You can access the classic Report Attributes page by clicking the Report link next to the report region you want to edit on the Page Definition. You can also navigate to the Report Attributes page by clicking the region name and then selecting the Report Attributes tab.

Description of rprt_edit.gif follows
Description of the illustration rprt_edit.gif

To access the Report Attributes page:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select the application.

  3. Select a page.

    The Page Definition appears.

  4. Under Regions, click Report next to the name of the report region you want to edit.

    The Report Attributes page appears and is divided into the following sections:

  5. To learn more about a specific attribute, click the item label.

    When Help is available, the item label changes to red when you pass your cursor over it and the cursor changes to an arrow and question mark. See "About Field-Level Help".

  6. Click Apply Changes.

About Navigation Alternatives

The Report Attribute page is divided into these sections: Column Attributes, Layout and Pagination, Sorting, Messages, Report Export, Break Formatting, and External Processing.

You can access these sections by scrolling down the page, or by clicking a navigation button at the top of the page.

Description of int_rprt_nav.gif follows
Description of the illustration int_rprt_nav.gif

When you select a button at the top of the page, the selected section appears and all other sections are temporarily hidden. To view all sections of the page, click Show All.

Altering Classic Report Layout Using Column Attributes

You can use the Column Attributes section of the Report Attributes page to precisely control the report layout. For example, you can use these attributes to alter column heading text, change column positioning, hide a column, create a sum of a column, or select a sort sequence.

To access the Column Attributes:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select the application.

  3. Select a page.

    The Page Definition appears.

  4. Under Regions, click Report next to the name of the report region you want to edit.

    The Report Attributes page appears with the Column Attributes section at the top of the page.

    Description of rpt_att.gif follows
    Description of the illustration rpt_att.gif

    Use the Column Attributes section to control report column appearance and functionality.

    Heading Type identifies how the heading is generated for the report. The Link column indicates if a column link is currently defined. The Edit column indicates whether a column is currently updatable.

    Table 7-4 describes common report column edits.

    Table 7-4 Common Report Column Edits for Classic Reports

    DescriptionDeveloper Action

    Alter column display sequence.

    Click the up and down arrows to change the column display sequence.

    Alter heading alignment.

    Under Column Alignment, select a column alignment.

    Change column heading text.

    Under Heading, enter different heading text.

    Control which columns display.

    Click Show to indicate a column should display.

    Enable a unique sort sequence.

    Click Sort and select a sequence number from Sort Sequence.

    Any number of columns can be sort enabled. However, at least one column must have a Sort Sequence defined.

    Enable the sum of a column.

    Click Sum to enable the sum of a column.


    You can further refine the attributes of a specific column on the Column Attributes page.

  5. To access the Column Attributes page, click the Edit icon next to the appropriate column Alias.

    To learn more about a specific attribute, click the item label.

    When Help is available, the item label changes to red when you pass your cursor over it and the cursor changes to an arrow and question mark. See "About Field-Level Help".

Controlling Classic Report Pagination

You control report pagination by:

  • Including a pagination substitution string in the report template

  • Making selections from the Layout and Pagination section on the Report Attributes page

You control how pagination displays by making selections from the Layout and Pagination attributes on the Report Attributes page.

Topics in this section include:

Accessing and Understanding Layout and Pagination Attributes

To access the Layout and Pagination section of the Report Attributes page:

  1. Create a report. See "Creating a Report Using a Wizard".

  2. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  3. Under Regions, click the appropriate Report attributes link.

    The Report Attributes page appears.

  4. Scroll down to Layout and Pagination.

    You use the Layout and Pagination attributes to select a pagination style, determine where pagination occurs, and specify the number of rows that display on each page. Table 7-5 describes the most commonly used Layout and Pagination attributes.

    To learn more about a specific attribute, click the item label. When Help is available, the item label changes to red when you pass your cursor over it and the cursor changes to an arrow and question mark. See "About Field-Level Help".

Table 7-5 Layout and Pagination Attributes

AttributeDescription

Report Template

Specifies a template to be applied to this report. Report templates provide control over the results of a row from your SQL query. You can choose from a number of default templates, or pick a custom build template.

Report Attributes Substitution

Enter a value to be in place of the #REPORT_ATTRIBUTES# substitution string. The #REPORT_ATTRIBUTES# substitution string is only replaced in the before rows attribute of the report template.

Show Null Values as

Enter the text you want to display for null columns. The default value is (null).

Pagination Scheme

Specifies a pagination scheme for this report.

Pagination provides the user with information about the number of rows and the current position within the result set. Pagination also defines the style of links or buttons used to navigate to the next or previous page.

For more information, see the Help information for this attribute.

Enable Partial Page Refresh

If enabled, this attribute refreshed the report region when paginating forward and backward in your result set.

Display Position

Defines where pagination occurs.

If you choose to display pagination above a report, the selected report template needs to support that type of display.

Number of Rows

Defines the maximum number of rows to display on each page.

Number of Rows (Item)

Defines the number of rows displayed by default per page for SQL queries (obtained dynamically from an item). Identify the item in this attribute.

Maximum Row Count

Defines the maximum number of rows to query, for example, rows 1 - 10 of 456.

If you set this attribute to 200, the result would appear as follows:

rows 1 - 10 of more than 200 rows

Note that this attribute impacts performance. Counting fewer rows can improve performance and counting thousands of rows can degrade performance.

Strip HTML

Specify whether to remove HTML tags from the original column values for HTML expressions, column links and report data exported as CSV files.

If you select values from the database that contain HTML tags, then those tags can cause conflicts with the HTML generated for your columns links or HTML expressions. When this option is enabled, only the actual data portion of your column value is used.

Sort Nulls

For reports with column heading sorting, specify if you want null valued columns to sort first or last.

See Also: "Enabling Column Sorting in a Classic Report"


Including Pagination After the Rows in a Classic Report

To include pagination after the rows in a report:

  1. Create a report. See "Creating a Report Using a Wizard".

    Next, select the appropriate Layout and Pagination attributes.

  2. Navigate to the Report Attributes page:

    1. Navigate to the Page Definition. See "Accessing a Page Definition".

    2. Under Regions, click the appropriate Report attributes link.

      The Report Attributes page appears.

  3. Under Layout and Pagination, select the following:

    1. Report Template - Select a report template (optional).

    2. Pagination Scheme - Select a pagination scheme.

    3. Display Position - Select a display position.

    4. Number of Rows - Specify how many rows display on each page.

    5. Click Apply Changes.

  4. Edit the report template:

    1. Navigate to the Page Definition. See "Accessing a Page Definition".

    2. Under Templates, select the report template name.

    3. Include the #PAGINATION# substitution string in the After Rows attribute.

    4. Click Apply Changes.

  5. Run the page.

Including Pagination Before the Rows in a Classic Report

To include pagination before the rows in a report:

  1. Create a report. See "Creating a Report Using a Wizard".

    Next, select the appropriate Layout and Pagination attributes.

  2. Navigate to the Report Attributes page:

    1. Navigate to the Page Definition. See "Accessing a Page Definition".

    2. Under Regions, click the appropriate Report attributes link.

      The Report Attributes page appears.

  3. Under Layout and Pagination:

    1. Report Template - Select a report template (optional).

    2. Pagination Scheme - Select a pagination scheme.

    3. Display Position - Select a position that contains the word top.

    4. Number of Rows - Specify how many rows display on each page.

    5. Click Apply Changes.

  4. Edit the report template.

    1. Navigate to the Page Definition. See "Accessing a Page Definition".

    2. Under Templates, select the report template name.

    3. Include the #TOP_PAGINATION# substitution string in the Before Rows attribute.

    4. Click Apply Changes.

  5. Run the page.

Enabling Column Sorting in a Classic Report

You enable column sorting on the Report Attributes page.

To enable column sorting:

  1. Navigate to the Report Attributes page. See "Editing SQL and Wizard Reports".

  2. Under Column Attributes, select the Sort check box next to the columns to be sorted.

  3. From Sort Sequence, select a sequence number.

    Sort Sequence is optional. However, if there are one or more sort enabled columns, then at least one column needs a defined Sort Sequence.

  4. Scroll down to Sorting.

  5. Specify ascending and descending image attributes or click set defaults.

  6. Click Apply Changes.


Tip:

Note that column sorting must be enabled if you want columns with null values to display at the top or end of the report. To learn more about the Sort Nulls attribute, see "Accessing and Understanding Layout and Pagination Attributes".

Adding a Download Link to a Classic Report

You can create a link within a report that enables users to export the report as a comma-delimited file (.csv) file. To add a CSV link to a report you must enable the CSV output option. When using the CSV output option, the report template is not important. You can include a CSV link with any report template that has the CSV export substitution string defined.

Enabling the CSV Output Option in a Classic Report

To use the enable the Enable CSV output option:

  1. Navigate to the appropriate Report Attributes page. See "Editing SQL and Wizard Reports".

  2. Scroll down to Report Export.

  3. From Enable CSV output, select Yes.

  4. (Optional) In the Separator and Enclosed By fields, define the separator and delimiter.

    The default Enclosed By by characters are a double quotation marks (" "). The default delimiter is either a comma or a semicolon depending upon your current NLS settings.

  5. In the Link Label field, enter link text. This text will display in your report and enable users to invoke a download.

  6. (Optional) To specify a default export file name, enter a name in the Filename field.

    By default, the Application Express engine creates an export file name by taking the region name and adding the appropriate file name extension (.csv or .xml).

  7. Click Apply Changes.

Exporting a Classic Report as an XML File or a CSV File

You can export a report as an XML file by selecting a report template.

To export a report as a file:

  1. Navigate to the appropriate Report Attributes page. See "Editing SQL and Wizard Reports".

  2. Scroll down to Layout and Pagination.

  3. From the Report Template list, select export: XML or export: CSV.

    Selecting export: XML prevents the Application Express engine from rendering the page and dumps the content to an XML file.

  4. Click Apply Changes.

Creating a Column Link in a Classic Report

Use the Column Link attributes to create a link from a report to another page in your application or to a URL.

To create a column link to another page:

  1. Navigate to the appropriate Report Attributes page. See "Editing SQL and Wizard Reports".

  2. Under Column Attributes, locate the column to contain the link.

  3. Click the Edit icon next to the column name.

    The Column Attributes page appears.

  4. Scroll down to Column Link.

  5. To create a column link to another page:

    1. From Target, select Page in this Application.

    2. (Optional) In Link Attributes, specify additional column link attributes to be included in the <a href= > tag (for example, a link target, classes, or styles).

    3. In Link Text, enter the text to be displayed as a link, specify an image tag, or pick from the list of default images.

    4. In Page, specify the target page number. To reset the pagination for this page, select Reset Pagination.

    5. In Request, specify the request to be used.

    6. In Clear Cache, specify the pages (that is, the page numbers) on which to clear cache. You can specify multiple pages by listing the page numbers in a comma-delimited list. See "Linking to Interactive Reports".

    7. Use the Name and Value fields to specify session state for a specific item.

  6. Click Apply Changes.

To create a column link to a URL:

  1. Navigate to the appropriate Report Attributes page. See "Editing SQL and Wizard Reports".

  2. Access the Column Attributes page by clicking the Edit icon next to the appropriate column.

    The Column Attributes page appears.

  3. Scroll down to Column Link.

  4. Under Column Link, specify the following:

    1. From Target, select URL.

    2. In Link Text, enter the text to be displayed as a link and select a substitution string.

    3. (Optional) In Link Attributes, specify additional column link attributes to be included in the <a href= > tag (for example, a link target, classes, or styles).

    4. In URL, enter the appropriate address.

  5. Click Apply Changes.

Defining an Updatable Column in a Classic Report

You can make a column updatable by editing Tabular Form Element attributes on the Column Attributes page. Note that the Application Express engine can only perform updates if:

  • A multirow update is defined

  • A PL/SQL process is implemented to process updated data

  • When using the built-in tabular form elements and display types, then the report has to be defined using the type SQL Query (updatable report)

To define updatable column attributes:

  1. Navigate to the appropriate Report Attributes page. See "Editing SQL and Wizard Reports".

  2. Access the Column Attributes page by clicking the Edit icon next to the appropriate column.

    The Column Attributes page appears.

  3. Scroll down to Tabular Form Element.

  4. Under Tabular Form Element, specify the following:

    1. Display As - Select a type of updatable column.

      Use this option to make a column updatable. Updates can only be performed if a multirow update is defined, or a PL/SQL process is implemented to process updated data.

    2. Date Picker Format Mask - Make a selection if you selected the Display As type of Date Picker.

    3. Element Width - Specify the width of the form item.

    4. Number of Rows - Specify the height of a form item (applicable to text areas).

    5. Element Attributes - Define a style or standard form element attribute.

    6. Element Option Attributes - Specify form element attributes for items in a radio group or check box.

    7. Primary Key Source Type - Identify the default type.

    8. Primary Key Source - Identify the default source.

      If the current column is part of the primary key defined in an MRU process, only the primary key source type and source appear.

      Otherwise, Default and Default Type appear. Use Default and Default Type to establish a relationship between two master records in a master detail form, or to set the default values for new rows.

    9. Reference Table Owner - Identify the owner of the referenced table. Use this attribute to build User Interface Defaults for reports.

    10. Reference Table Name - Identify the table or view that contains the current report column.

    11. Reference Column Name - Identify the column name that this report column references.

  5. Click Apply Changes.

Defining a Column as a List of Values in a Classic Report

Report columns can be rendered as lists of values. For example, a column can be rendered using a select list or a popup list of values. Or, a column can be rendered as read-only text based on a list of values.

This last approach is an effective strategy when creating display lookup values and is particularly useful in regular, nonupdatable reports. This approach enables you to display the value of a column without having to write a SQL JOIN statement.

To render a report column as a list of values:

  1. Navigate to the appropriate Report Attributes page. See "Editing SQL and Wizard Reports".

  2. Access the Column Attributes page by clicking the Edit icon next to the appropriate column.

    The Column Attributes page appears.

  3. Scroll down to List of Values.

  4. From Named LOV, make a selection from the List of Values repository. See "Creating Lists of Values".

  5. To include a null value in a list of values:

    1. In Display Null, select Yes.

    2. In Null Text, specify the value that displays.

    A column can also have a value that does not display in its list of values.

  6. To define a value that does not display in the list of values:

    1. From Display Extra Value, select Yes.

      The extra value is used if the actual column value is not part of the LOV. In that situation, the actual value is shown. If you do not display extra values, you may end up with the wrong value and unintentionally update your data incorrectly.

    2. In Null Value, specify the value that displays.

    3. If you have not selected a Named LOV, enter the query used to display a select list in the LOV Query field.

  7. If you have not selected a Named LOV, enter the query used to display a select list in LOV Query.

  8. Click Apply Changes.


See Tutorials:

"How to Create a Tabular Form" in Oracle Application Express Advanced Tutorials

Controlling When Columns Display in a Classic Report

You can use the Authorization and Condition attributes to control when a column displays.

Authorization enables you to control access to resources (such as a report column) based on predefined user privileges. For example, you could create an authorization scheme in which only managers can view a specific report column. Before you can select an authorization scheme, you must first create it.

A condition is a small unit of logic that enables you to control the display of a column based on a predefined condition type. The condition evaluates to true or false based on the values you enter in the Expressions fields.

To specify Authorization and Condition attributes:

  1. Navigate to the appropriate Report Attributes page. See "Editing SQL and Wizard Reports".

  2. Access the Column Attributes page by clicking the Edit icon next to the appropriate column.

    The Column Attributes page appears.

  3. Under Authorization, make a selection from the Authorization Scheme list.

  4. Under Conditions, make a selection from the Condition Type list, and depending upon your selection, enter an expression or value in the appropriate Expression fields.

    If the authorization is successful and the condition type display evaluates to true, the column displays.

Controlling Column Breaks in a Classic Report

You can control if a specific column repeats and how column breaks appear when printed using Break Formatting attributes. For example, suppose your report displays employee information by department number. If multiple employees are members of the same department, you can increase the readability by specifying the department number only appears once.

To create this type of column break:

  1. Navigate to the appropriate Report Attributes page. See "Editing SQL and Wizard Reports".

  2. Scroll down to Break Formatting.

  3. Make a selection from the Breaks list.

Printing Report Regions

You can configure a classic report region to print by exporting it to a number of different formats. Oracle BI Publisher supports Adobe Portable Document Format (PDF), Microsoft Word Rich Text Format (RTF), or Microsoft Excel format (XLS), or Extensible Markup Language (XML). The supplied OC4J with Apache FOP alternative only supports PDF and XML. If you choose to use other third-party rendering engines, other output formats can also be configured.

By taking advantage of region report printing, your application users can view and print reports that have a predefined orientation, page size, column headings, and page header and footer. Interactive reports also have the ability to export to PDF, RTF, Microsoft Excel and Comma Separated Values (CSV). Note that for interactive reports, it is not possible to define a custom report layout.

Topics in this section include:


Tip:

If you are running Oracle Application Express with Oracle Database 11g Release 1 (11.1), you must enable network services in order to use report printing. See "Enabling Network Services in Oracle Database 11g"


See Also:

"How to Create a Master Detail PDF Report" in Oracle Application Express Advanced Tutorials

About Printing Reports to PDF

When printing to a PDF, the report data is transformed using an externally defined report server. When the application end user clicks a print link, a request is sent to the Application Express engine. The Application Express engine then generates the report data in XML format and report template in XSL-FO or RTF format. The external reporting engine then transforms the data and the template into a PDF which displays to the end user using the conversion servlet that ships with BI Publisher 10.1.3.2 (formerly known as Oracle XML Publisher). Fortunately, this architectural complexity is transparent to both end users and developers. End users just click a print link, and developers just declaratively set regions to support PDF printing. Output to other formats operates in the same manner using the necessary conversion servlet.

About Report Printing Configuration Options

Your report server can be Oracle BI Publisher, OC4J with Apache FOP, or another standard XSL-FO processing engine. Oracle BI Publisher provides a higher level of functionality and facilitates "high fidelity" output requirements including master-detail reports, charts, and so on. To accommodate the difference in functionality, Oracle Application Express provides two report printing configuration options:

  • Standard Support. Enables you to print report regions and report queries using either the built-in templates (provided with a standard XSL-FO processing engine), or other XSL-FO compatible formats you provide. This setting does not support RTF.

    Standard Support provides declarative formatting of report regions and report queries with basic control over page attributes, including page orientation, page size, column heading formats, page header, and page footer.

  • Advanced Support. Requires a valid license of Oracle BI Publisher (also known as Oracle XML Publisher). This setting, provides you with all the capabilities of the Standard configuration plus the ability to define RTF-based report layouts developed using the BI Publisher Word Template Builder.

    To learn more about installing and configuring Oracle BI Publisher, see PDF Printing in Application Express 3.1. Go to:

    http://www.oracle.com/technetwork/developer-tools/apex/overview/index.html
    

Note:

To use the full functionality of report printing, your Oracle Application Express service administrator must enable it for your site. See "Configuring Report Printing" in Oracle Application Express Administration Guide.

About Classic Report Printing Methods

There are two ways to print classic report regions:

Both report regions and report queries can be downloaded in the following formats:

  • PDF - Adobe Portable Document Format.

  • RTF - Microsoft Word Rich Text Format.

  • XLS - Microsoft Excel format. Note that this is not a true .xls file because the content is HTML-based.

  • HTML

  • XML - Extensible Markup Language.

To format either a report region or report query, you associate it with a report layout. To learn more, see "About Report Layouts".

About Report Queries

You can print a report region by defining a report query as a Shared Component. A report query identifies the data to be extracted. Unlike SQL statements contained in regions, report queries contain SQL statements that are validated when you save the query. Note that report queries must be SQL statements, not functions returning SQL statements.

You can associate a report query with a report layout and download it as a formatted document. If no report layout is selected, a generic layout is used. The generic layout is intended to be used to test and verify a report query. When using the generic layout option and multiple source queries are defined, only the first result set is included in the print document. The reports can include session state of the current application.

To make these reports available to end users, you then integrate them with an application. For example, you can associate a report query with a button, list item, branch, or other navigational component that enables you to use URLs as targets. Selecting that item then initiates the printing process.

Topics in this section include:

Creating a Report Query

Note that the availability of the report query options depends on how your service administrator configures report printing for your instance. All options described in these steps may not be available to you.

To create a report query:

  1. Navigate to the Shared Components page. See "Accessing the Shared Components Page".

  2. Under Reports, click Report Queries.

  3. Click Create.

  4. For Query, specify the following information:

    1. Report Query Name - Enter a name to identify the report query. When referencing a report query as a link target, the report query name is part of the request string.

    2. Output Format - Select the report output format. Valid options include:

      • PDF - Adobe Portable Document Format.

      • Word - Microsoft Word Rich Text Format.

      • Excel - Microsoft Excel format. Note that this is not a true .xls file because the content is HTML-based.

      • HTML

      • XML - Extensible Markup Language.

    3. Item - Select the item to hold the format value. This can be used to determine the output format at runtime.

    4. View File As - Select how the Web browser opens the report query document. Options include:

      • Attachment - Displays a File Open/Save dialog box when the user clicks the report query download button.

      • Inline - Displays the report query document inside the Browser window.

    5. Session State - Select this check box to reference session state values, such as the values of page items in the XML structure of your report.

    6. Click Next.

  5. For SQL Query, enter a SQL statement directly or click Query Builder to build a SQL statement by clicking and pointing.

    To reference applications and page items in the SQL statement, reference them as bind variables. Click Set Bind Variables to be able to enter in values for each bind variable and test the query to ensure the expected output is returned.

  6. For Download Definition, specify the following:

    1. Data Source for Report Layout - Use this option to download a report definition export file. Select XML Data or XML Schema and then click Download.

      XML Schema creates XSD file (that is, a XML schema definition of your XML structure.)

    2. Add Query - Click this button to add another query to the report query. Adding another query enables the production of complex reports with more than one output component (for example, a chart and a report based on two different queries).

    3. Create Report Query - Click this button to exit the wizard early. The Report Layout Source will default to use the generic report layout.

    4. Click Next.

  7. For Upload Report Layout, specify the following:

    1. Report Layout Source - Specify how the report layout is derived. If you choose the report based file layout then the layout name and report layout file must be provided.

    2. Layout Name - Enter a layout name (optional). The default is the report query name.

    3. Report Layout File - Click Browse and select a Rich Text Format (RTF).

    4. Click Next.

  8. For Confirm:

    1. Query Name - Identifies the query.

    2. Report Layout - Identifies the report layout you selected.

    3. Output Format - Identifies the format for this report query.

    4. Derive from Item - Identifies the item to hold the format information.

    5. URL - To integrate this report with your application, use the displayed URL as the target for a button, list item, link, or other navigational component. End users can click a button, for example, to start the printing process.

    6. Test Report - Click this to preview your report. If you have chosen to use a generic report layout then the Test Report will not produce an output.

    7. Click Finish.

      The Report Query is created and saved to Shared Components.

Editing Report Queries

To edit a report query:

  1. Navigate to the Shared Components page. See "Accessing the Shared Components Page".

  2. Under Reports, click Report Queries.

  3. On the Report Queries page, you can use the Navigation bar at the top of the page to search for a query by name or change the page display. For example, you can change the default display by making a selection from View list. Available options include:

    • Icons (the default) displays each query as a large icon. To edit a query, click the appropriate icon.

    • Details displays each query as a line in a report. To edit a query, click the name.

  4. Select the appropriate report query. On the Edit Report Query page, edit the information.

  5. Click Apply Changes.

Copying Report Queries

To copy a report query:

  1. Navigate to the Shared Components page. See "Accessing the Shared Components Page".

  2. Under Reports, click Report Queries.

  3. On the Report Queries page, click Copy.

  4. On the Copy Report Query, select the query you want to copy, enter a name for the report query, and click Copy.

    The copy appears in the query list.

About Report Layouts

To format either a classic report region or report query, you associate it with a report layout. Using report layouts renders the data in a printer-friendly format. If you do not select a report layout, a default XSL-FO layout is used. The default XSL-FO layout is always used for rendering Interactive Report regions.

When creating and using report layouts, you can:

  • Take advantage of the default layouts for report regions and generic layouts for report queries provided with Oracle Application Express.

  • Utilize the built-in XSL-FO-based layouts for report regions by copying and customizing the code. You can edit a number of attributes for report regions that control page size, fonts, colors, and so on.

  • Create RTF or XSL-FO report layouts to customize the report look and feel. To use RTF report layouts, your Oracle Application Express service administrator must select the Advanced setting for your site. See "Configuring Report Printing" in Oracle Application Express Administration Guide.

Topics in this section include:

About Report Layout Options

You can create a report layout based on one of these options:

  • Generic Columns - A generic report layout works with most query result sets. With this layout, the number of columns is automatically adjusted when generating the printable document.

    A number of report layout attributes can be defined declaratively for report regions using the built-in XSL-FO default layout. This step allows for creating customizable copies of the built-in default XSL-FO layout, if additional control over the report layout is needed.

  • Named Columns - A named column report layout is a query-specific report layout designed to work with a defined list of columns in the query result set. This type of layout is used for custom-designed layouts when precise control of the positioning of page items and query columns is required.

Note that the availability of the Report Layout options depends on how your site administrator configured the report printing settings at your site. All options described in these steps may not be available to you.


See Also:

"Configuring Report Printing" in Oracle Application Express Administration Guide.

Creating a Report Layout

To create a report layout:

  1. Navigate to the Shared Components page. See "Accessing the Shared Components Page".

  2. Under Reports, click Report Layouts.

  3. Click Create.

    The Create Report Layout wizard appears.

  4. For Report Layout Type, select an option and click Next:

    • Generic Columns (XSL-FO) - This layout is pre-populated with a default template, which you can edit to fit your needs.

    • Named Columns (RTF) - This layout is uploaded as an RTF file.

    • Named Columns (XSL-FO) - This layout is uploaded as an XSL-FO file.

  5. For Layout Source, review and edit the appropriate information. The options that appear on this page depend on the layout type you select:

    • If you selected Generic Columns:

    1. Report Layout Name - Enter a name to identify the report layout when associating it with a report query or report region.

    2. Report Layout - The report layout is the XSL-FO based definition of the page formatting. All attributes defining page size, orientation, fonts, styles, and so on, are defined in this section.

      To see a list of valid substitution strings and other information, click the item label, Report Layout. This opens a separate Help window.

    3. Report Column Heading - Defines the look of each cell in the report heading row.

    4. Report Column - Defines the look of each cell for all report rows.

    5. Report Column Width - This width is computed at runtime time or can be derived from the report column definition of a report region.

    • If you selected Named Columns:

    1. Layout Name - Enter a name to identify the report layout when associating it with a report query or report region.

    2. 8.b) Report Layout File - Upload the file containing the report layout.

Editing Report Layouts

You can edit a generic column report layout directly in Application Express. However, to edit a named column report layout, you must download the current file, edit it, and then upload it again.

To edit a report layout:

  1. Navigate to the Shared Components page. See "Accessing the Shared Components Page".

  2. Under Reports, click Report Layouts.

  3. On the Report Layouts page, select the layout you want to edit.

  4. For generic column layouts, edit the layout directly on the Edit Report Layout page and then click Apply Changes.

  5. For named column layouts, click Download and save the file to your computer.

    Edit the file and then upload the updated version as a new report layout.

Copying Report Layouts

You can copy a report layout to edit and save.

To copy a report layout:

  1. Navigate to the Shared Components page. See "Accessing the Shared Components Page".

  2. Under Reports, click Report Layouts.

  3. On the Report Layouts page, click Copy.

  4. On the Copy Report Layout page, select the layout you want to copy, enter a name for the copy, and click Copy.

    The copy appears in the layout list.

Configuring Classic Report Region Print Attributes

One approach to printing a report region is to configure Print Attributes. Once configured, these attributes only apply only to current region and cannot be used outside the context of the region.

If the printing feature is set up for your instance, you can configure a report region to print in various formats.

To configure a classic report region for printing:

  1. In your application, select the page containing the classic report region you want to print.

    The Page Definition appears.

  2. Under Regions, click Report next to the region you want to print.

  3. Click the Print Attributes tab.

  4. Under Printing, specify the appropriate information:

    1. Enable Report Printing - Select Yes.

    2. Link Label - Enter the text for the link that starts the printing process.

    3. Response Header - Specify whether the response header generated by Oracle Application Express is based on your Report Settings or the Print Server. The response header is the information the server sends back to the Web browser in response to receiving an HTTP request. It contains the date, size and type of file that the server is sending back to the client and also data about the server itself. To specify content disposition (using the attribute View File As) and file name, the response header needs to be based on Report Settings.

    4. View File As - Select how the Web browser opens the report query document. Options include:

      • Attachment - Displays a File Open/Save dialog box when the user clicks the report query download button.

      • Inline - Displays the report query document inside the Browser window.

    5. (Optional) File Name - Enter a name for the downloaded file. If you leave this blank, the region name is used as the file name.

    6. Output Format - Select an output option.

    7. Item - Determines the output format at runtime. Select the application or page item that holds format value.

    8. Report Layout - Select Default Report Layout to use the built-in generic report layout, or an available report layout you or your administrator created. See item Help for a listing of the supported substitution strings available when building custom XSL-FO report layouts.

    9. Print Server Overwrite - Specify an alternate print server. A print server is typically configured centrally for all workspaces in Oracle Application Express Administration Services. See "Configuring Report Printing" in Oracle Application Express Administration Guide.

      Configuring an alternative print server at the report level makes debugging and diagnosis of potential printing problems easier and supports the use of specific custom built end points to perform custom XSLT transformations.

    10. Print URL - Report regions can be printed using the standard print link or using a page button. To use a button, remove the Link Label, create a button on your page, and use the URL shown in this attribute as the button target.

  5. In the remaining sections, define page size, paper orientation, page headers and footers, fonts, text color, and background color.

  6. Under Report Columns, specify the width for each column.

    The default is to make each column the same width. The Total Width is a display only field that shows the sum of all column width values. When changing the width for an individual column the Total Width is automatically recalculated. If Column Width Units is set to Percentage, rather than Points, then the total column width must be less than or equal to 100.

    Use the Reset Column Width button to reset the Column Width Units to Percentage and change all column widths back to their default value. The Recalculate button maintains the current ratios between column widths but reduce all column widths such that the Total Width is less than or equal to 100%.

  7. Click Apply Changes.

Configuring Interactive Report Region Print Attributes

Unlike classic reports, the Interactive Report Print Attributes can only utilize the default XSL-FO layout and is initiated from the Report Attributes, Download section rather than directly from this screen. Once configured, these attributes only apply only to the current region and cannot be used outside the context of the region.

If the printing feature is set up for your instance, you can configure a report region to print in various formats

To configure a interactive report region for printing:

  1. In your application, select the page containing the interactive report region you want to print.

    The Page Definition appears.

  2. Under Regions, click Interactive Report next to the region you want to print.

  3. Click the Print Attributes tab.

  4. Under Printing, specify the appropriate information:

    1. Response Header - Specify whether the response header generated by Oracle Application Express is based on your Report Settings or the Print Server. The response header is the information the server sends back to the Web browser in response to receiving an HTTP request. It contains the date, size and type of file that the server is sending back to the client and also data about the server itself. To specify content disposition (using the attribute View File As) and file name, the response header needs to be based on Report Settings.

    2. Content Disposition - Select how the Web browser opens the report query document. Options include:

      • Attachment - Displays a File Open/Save dialog box when the user clicks the report query download button.

      • Inline - Displays the report query document inside the Browser window.

    3. Print Server Overwrite - Specify an alternate print server. A print server is typically configured centrally for all workspaces in Oracle Application Express Administration Services. See "Configuring Report Printing" in Oracle Application Express Administration Guide.

      Configuring an alternative print server at the report level allows for easier debugging and diagnosis of potential printing problems and supports the use of specific custom built end points to perform custom XSLT transformations.

  5. In the remaining sections, define page size, paper orientation, page headers and footers, fonts, text color, and background color.

  6. Click Apply Changes.

Creating Forms

You can include a variety of different types of forms in your applications. You can include forms that enable users to update just a single row in a table or multiple rows at once. Application Builder includes a number of wizards you can use to create forms automatically, or you can create forms manually.

Topics in this section include:

Creating a Form Using a Wizard

The easiest way to create a form is to use a wizard. For example, the Form on Table or View Wizard creates one item for each column in a table. It also includes the necessary buttons and processes required to insert, update, and delete rows from the table using a primary key. Each region has a defined name and display position; all other attributes are items, buttons, processes, and branches.

To create a form using a wizard:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click Create Page.

  4. Select Form and click Next.

  5. Under Forms, select a type of form page as described in Table 7-6.

    Table 7-6 Forms Page Types

    Form Page TypeDescription

    Form on a Procedure

    Builds a form based on stored procedure arguments. Use this approach when you have implemented logic or data manipulation language (DML) in a stored procedure or package.

    Form on a Table or View

    Creates a form that enables users to update a single row in a database table.

    Form on a Table with Report

    Creates two pages. One page displays a report. Each row provides a link to the second page to enable users to update each record.

    Note: This wizard does not support tables having more than 127 columns. Selecting more than 127 columns generates an error.

    Master Detail Form

    Creates a form that displays a master row and multiple detail rows within a single HTML form. With this form, users can query, insert, update, and delete values from two tables or views.

    See Also: "Creating a Master Detail Form"

    Tabular Form

    Creates a form in which users can update multiple rows in a database.

    See Also: "Creating a Tabular Form"

    Form on a SQL Query

    Creates a form based on the columns returned by a SQL query such as an EQUIJOIN.

    Summary Page

    Creates a read-only version of a form. Typically used to provide a confirmation page at the end of a wizard.

    Form on Web Service

    Creates a page with items based on a Web service definition. This wizard creates a user input form, a process to call the Web service, and a submit button.

    See Also: "Creating a Form on a Web Service"

    Form and Report on Web Service

    Creates a page with items based on a Web service definition. This wizard creates a user input form, a process to call the Web service, a submit button, and displays the results returned in a report.

    See Also: "Creating an Input Form and Report on a Web Service"


  6. Follow the on-screen instructions. To learn more about a specific field, click the item label.

    When Help is available, the item label changes to red when you pass your cursor over it and the cursor changes to an arrow and question mark. See "About Field-Level Help".

Creating a Tabular Form

A tabular form enables users to update multiple rows in a table. The Tabular Form Wizard creates a form to perform update, insert, and delete operations on multiple rows in a database table.

To create a tabular form:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click Create Page.

  4. Select Form and click Next.

  5. Select Tabular Form and click Next.

    The Tabular Form Wizard appears.

  6. For Table/View Owner:

    1. Specify the table or view owner on which you want to base your tabular form.

    2. Select the operations to be performed on the table (for example, Update, Insert and Delete).

    3. Click Next.

  7. For Table/View Name, select a table and click Next.

  8. For Displayed Columns:

    1. Select the columns (updatable and nonupdatable) to include in the form.

      Note that you can modify the column order or your SQL query after you create the page.

    2. Click Next.

  9. For Primary Key, select the Primary Key column and a secondary Primary Key column (if applicable) and click Next.

  10. For Primary Key Source, select a source type for the primary key column and click Next. Valid options include:

    • Existing trigger - Select this option if a trigger is defined for the table. You can also select this option if you plan on specifying the primary key column source later after completing the form.

    • Custom PL/SQL function - Select this option if you want to provide a PL/SQL function to generate returning key value.

    • Existing sequence - Select this option if you want to pick the sequence from a list of sequences available in the selected schema.

  11. On Updatable Columns, select which columns should be updatable and click Next.

  12. On Page and Region Attributes:

    1. Specify page and region information.

    2. Select a region template.

    3. Select a report template.

    4. Click Next.

  13. On Tab, specify a tab implementation for this page and click Next.

  14. On Button Labels, enter the display text to appear for each button and click Next.

  15. On Branching, specify the pages to branch to after the user clicks the Submit and Cancel buttons and click Next.

  16. Click Finish.


Note:

Any modification of the select list of a SQL statement of a tabular form after it has been generated is not recommended. If you do modify the query, make sure the values of the updateable columns are not altered after being queried from the database by the Application Express engine.


See Tutorial:

"How to Create a Tabular Form" in Oracle Application Express Advanced Tutorials

Creating a Master Detail Form

A master detail form reflects a one-to-many relationship between two tables in a database. Typically, a master detail form displays a master row and multiple detail rows within a single HTML form. With this form, users can insert, update, and delete values from two tables or views.

To create a master detail form:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click Create Page.

  4. Select Form and click Next.

  5. Select Master Detail Form and click Next.

    The Master Detail Wizard appears.

  6. On Master Table:

    1. Select the table or view owner.

    2. Select a table or view name.

      The columns in that object appear under Available Columns.

    3. Select the columns to display in the form and then click the arrow keys to move them to Displayed Columns.

    4. Click Next.

  7. On Detail Table:

    1. Specify whether to show only related tables by selecting Yes or No.

    2. Select the table or view owner.

    3. Select a table or view name.

      The columns in that object appear under Available Columns.

    4. Select the columns to display in the form and then click the arrow keys to move them to Displayed Columns.

    5. Click Next.

  8. On Primary Key:

    1. Primary Key(s) of Master Table - Select the primary key (or keys) of the master table. You can select maximum of two primary keys for master table.

    2. Primary Key(s) of Detail Table - Select the primary key (or keys) of the detail table. You can select maximum of two primary keys for detail table.

    3. Click Next.

  9. On Master Detail Link, define the relationship between the master and detail tables and click Next.

  10. On Primary Key Source, select the primary key column for the master table and click Next. Then select the primary key column for the detail table and click Next. Options include:

    • Existing trigger - Select this option if a trigger is defined to populate the primary key, or if the user will be expected to enter the primary key value manually. Detail tables do not support user entered primary key values.

    • Custom PL/SQL function - Select this option if you want to provide a PL/SQL function to populate the primary key.

    • Existing sequence - Select this option if an existing sequence will be used to generate the primary key.

  11. On Master Options, specify whether to include master row navigation and click Next.

    If you include master row navigation, define navigation order columns. If a navigation order column is not defined, the master update form navigates by the primary key column.

  12. On Layout, specify how to build the master detail and click Next. Options include:

    • Edit detail as tabular form on same page creates a two page master detail. Edit detail on separate page creates a three page master detail.

    • Edit detail on separate page creates a three page master detail.

  13. On Page Attributes, review and edit the master page and detail page information and then click Next.

  14. On Tab, specify whether to include a tab set and click Next.

  15. Click Create.

Creating a Form Manually

You can also create a form manually by performing the following steps:

  • Create an HTML region (to serve as a container for your page items)

  • Create items to display in the region

  • Create processes and branches

To create a form manually by creating and HTML region:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Create an HTML region:

    1. Under Regions, click the Create icon.

    2. Select the region type HTML.

    3. Follow the on-screen instructions.

  3. Start adding items to the page:

    • Under Items, click the Create icon.

    • Follow the on-screen instructions.

Processing a Form

Once you create a form, the next step is to process the data a user types by inserting into or updating the underlying database tables or views. There are three ways to process a form:

Creating an Automatic Row (DML) Processing Process

One common way to implement a form is to manually create an Automatic Row Processing (DML) process. This approach offers three advantages. First, you are not required to provide any SQL coding. Second, Oracle Application Express performs DML processing for you. Third, this process automatically performs lost update detection. Lost update detection ensures data integrity in applications where data can be accessed concurrently.

To implement this approach you need to:

  • Add items, define the Item Source Type as Database Column, and specify a case-sensitive column name.

  • Select the option Always overrides the cache value.

To create an Automatic Row Processing (DML) process:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition"

  2. Under Processes, click the Create icon.

  3. Select the process Data Manipulation.

  4. Select the process category Automatic Row Processing (DML).

  5. Specify the following process attributes:

    1. In the Name field, enter a name to identify the process.

    2. In the Sequence field, specify a sequence number.

    3. From the Point list, select the appropriate processing point. In most instances, select Onload - After Header.

    4. From the Type list, select Automated Row Processing (DML).

  6. Follow the on-screen instructions.

Creating a Process that Contains One or More Insert Statements

In this approach to form handling, you create one or more processes to handle insert, update, and delete actions. Instead of having the Application Express engine handling everything transparently, you are in complete control.

For example, suppose you have a form with three items:

  • P1_ID - A hidden item to store the primary key of the currently displayed row in a table.

  • P1_FIRST_NAME - A text field for user input.

  • P1_LAST_NAME - A text field for user input.

Assume also there are three buttons labeled Insert, Update, and Delete. Also assume you have a table T that contains the columns id, first_name, and last_name. The table has a trigger that automatically populates the ID column when there is no value supplied.

To process the insertion of a new row, you create a conditional process of type PL/SQL that executes when the user clicks the Insert button. For example:

BEGIN
  INSERT INTO T ( first_name, last_name )
     VALUES  (:P1_FIRST_NAME, :P1_LAST_NAME);
END; 

To process the updating of a row, you create another conditional process of type PL/SQL. For example:

BEGIN
    UPDATE T
       SET first_name = :P1_FIRST_NAME,
           last_name = :P1_LAST_NAME
    WHERE ID = :P1_ID;
END; 

To process the deletion of a row, you create a conditional process that executes when the user clicks the Delete button. For example:

BEGIN
    DELETE FROM T
    WHERE ID = :P1_ID;
END;

Using a PL/SQL API to Process Form Values

For certain types of applications, it is appropriate to centralize all access to tables in a single or a few PL/SQL packages. If you created a package to handle DML operations, you can call procedures and functions within this package from an After Submit PL/SQL process to process insert, updates, and delete requests.

Populating Forms

Oracle Application Express populates a form either on load or when the Application Express engine renders the page. You can populate a form in the following ways:

  • Create a process and define the type as Automated Row Fetch.

  • Populate the form manually by referencing a hidden session state item.

To create an Automated Row Fetch process:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Under Processes, click Create.

  3. Select the process type Data Manipulation.

  4. Select the process category Automatic Row Fetch.

  5. Specify the following process attributes:

    1. In the Name field, enter a name to identify the process.

    2. In the Sequence field, specify a sequence number.

    3. From the Point list, select the appropriate processing point.

    4. From the Type list, select Automated Row Fetch.

  6. Follow the on-screen instructions.

You can also populate a form manually by referencing a hidden session state item. For example, the following code in an Oracle Application Express process of type PL/SQL would set the values of ename and sal. The example also demonstrates how to manually populate a form by referencing a hidden session state item named P2_ID.

FOR C1 in (SELECT ename, sal
FROM emp WHERE ID=:P2_ID)
LOOP     
     :P2_ENAME := C1.ename;
     :P2_SAL := C1.sal;
END LOOP;

In this example:

  • C1 is an implicit cursor.

  • The value of P2_ID has been set.

  • The process point for this process would be set to execute (or fire) on or before Onload - Before Regions.

Validating User Input in Forms

You can use validations to check data a user enters before processing. Once you create a validation and the associated error message, you can associate it with a specific item. You can choose to have validation error messages display inline (that is, on the page where the validation is performed) or on a separate error page.

Creating an inline error message involves these steps:

  • Create a validation and specify error message text.

  • Associate the validation with a specific item.

Creating a Validation

To create a validation:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Under Validations, click the Create icon.

  3. When the Create Validations Wizard appears, follow the on-screen instructions.

    Validation Types are divided into two categories:

    • Item. These validations start with the term Item and provide common checks you may want to perform on the item with which the validation is associated.

    • Code. These validations require that you provide either a piece of PL/SQL code or SQL query that defines the validation logic. Use this type of validation to perform custom validations that require verifying values of more than one item or accessing additional database tables.

  4. Follow the on-screen instructions.


Note:

Validations cannot contain more than 3,950 characters.

Associating a Validation with a Specific Item

To associate an item with a validation and specify error message text:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Under Validations, select the validation item you want to associate.

    The attributes page for the validation appears.

  3. Scroll down to Error Message:

    • In Error message display location, verify the display location.

    • In Associated Item, select the item you want to associate with this validation.

  4. Click Apply Changes.

About Error Message

Error message display location identifies where a validation error message displays. Validation error messages can display on an error page or inline within the existing page. Inline error messages can display in a notification area (defined as part of the page template) or within the field label.

To create a hard error that stops processes, including any remaining validations, you must display the error on an error page.

Creating Calendars

Application Builder includes a built-in wizard for generating a calendar with monthly, weekly, and daily views. Once you specify the table on which the calendar is based, you can create drill-down links to information stored in specific columns. Note that Oracle Application Express supports the creation of only one calendar per page.

Topics in this section include:

About Creating Calendars

Application Builder supports two calendar types:

  • Easy Calendar creates a calendar based on schema, table, and columns you specify. The wizard prompts you to select a date column and display column.

  • SQL Calendar creates a calendar based on a SQL query you provide. The SQL SELECT statement you provide must include at least two columns: a date column and display column.


See Also:

"Calendar Display"

Supported Calendar Substitution Strings

Application Builder supports a number of date format substitution strings. You can view a complete list of supported substitution strings on the Calendar Templates page.

To view a list of supported substitution strings for calendars:

  1. Navigate to the appropriate calendar template.

  2. View the Substitution Stings list on the right side of the page.


See Also:

"Managing Themes"

Creating a New Calendar

How you create a calendar depends on if you are adding a calendar to an existing page or adding a calendar on a new page. When creating calendars remember:

  • You can only create one calendar for each page. The calendar includes daily, weekly, and monthly views.

  • The date column determines which days on the calendar will contain entries.

  • The display column defines a specific row that will display a calendar date.

Topics in this section include:


Tip:

In Oracle Application Express release 3.1, the Create Calendar Wizard includes a new Display Type option. Standard submits the page along with the associated request. Partial Page Refresh only refreshes the Calendar region. Once the calendar is created, the display type cannot be changed. To change the display type, you must delete the calendar and then re-create it.

Adding a Calendar to an Existing Page

Oracle Application Express supports the creation of one calendar per page.

To add a calendar to an existing page:

  1. Navigate to the Page Definition. See "Accessing a Page Definition".

  2. Under Regions, click the Create icon.

    The Create Region Wizard appears.

  3. Select Calendar and click Next.

  4. Select the type of calendar you want to create and click Next:

    • Easy Calendar creates a calendar based on the date column and display column you specify.

    • SQL Calendar creates a calendar based on a SQL query you provide.

  5. Follow the on-screen instructions.

Adding a Calendar to a New Page

To create a calendar on a new page:

  1. Navigate to the Workspace home page.

  2. Click the Application Builder icon.

  3. Select an application.

  4. Click Create Page.

  5. Select Calendar and click Next.

  6. Select the type of calendar you want to create and click Next:

    • Easy Calendar creates a calendar based on the date column and display column you specify.

    • SQL Calendar creates a calendar based on a SQL query you provide.

  7. Follow the on-screen instructions.

Editing a Calendar Title

The title that appears at the top of calendar corresponds to the region title.

To alter the region title:

  1. Navigate to the Page Definition. See "Accessing a Page Definition".

  2. Under Regions, select the region name.

    The Region Definition appears.

  3. Under Identification, enter a title.

  4. Click Apply Changes.

Editing Calendar Attributes

Once you create a calendar, you can alter the display by editing attributes on the Calendar Attributes page.

Note that to disable a view of a calendar, you must delete the Monthly, Weekly, or Daily buttons on the calendar page.

Topics in this section include:

Accessing the Calendar Attributes Page

To access the Calendar Attributes page:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Under Regions, click Calendar next to the region name.

    The Calendar Attributes page appears.

  3. Edit the appropriate attributes. To learn more about a specific item on a page, click the item label.

    When Help is available, the item label changes to red when you pass your cursor over it and the cursor changes to an arrow and question mark.

  4. Click Apply Changes.

About Navigation Alternatives

The Calendar Attribute page is divided into sections.

You can access these sections by scrolling down the page, or by clicking a navigation button at the top of the page. When you select a button at the top of the page, the selected section appears and all other sections are temporarily hidden. To view all sections of the page, click Show All.

About the Calendar Attributes Page

The topics that follow describe specific sections of the Calendar Attributes page. You can use these attribute to specify general calendar formatting, define the dates included in the calendar, or create a link on the column or a day in the calendar.

Calendar Display

Use Calendar Display to specify a calendar template, date columns, and general calendar formatting.

Calendar Template determines what template is used when the Application Express engine renders a calendar. Date Column defines the column from the table or query containing the dates to be placed on the calendar. Date Item defines the item which holds the date on which the calendar is based. Calendar Type Column specifies the item which holds the calendar type. Display Type defines the display type. Options include: Column, Custom, or No Display Value. Display Column defines a specific row that displays on a calendar date. If Display Type is set to Column, use Display Column to select the column to display in the day cell of the monthly calendar.

To select another Display Column:

  1. Navigate to the appropriate Calendar Attributes page.

  2. Locate the Calendar Display section.

  3. To specify another display column, make a selection from the Display Column list.

  4. Click Apply Changes.

To specify a custom Display Column:

  1. Navigate to the appropriate Calendar Attributes page.

  2. Locate the Calendar Display section.

  3. From Display Type, select Custom.

  4. In Column Format, enter a custom column format. You can use an HTML expression and supported substitution strings.

  5. Click Apply Changes.

Display Attributes

Use Display Attributes to define the dates that are included in the calendar.

Begin at Start of Interval determines when the calendar should start. Selecting this option creates a calendar that spans an entire interval (such as a month). For example:

  • If Begin at Start of Interval is selected, the date is June 15th, and the display is monthly, the resulting calendar spans from June 1st to June 30th.

  • If Begin at Start of Interval is not selected, the date is June 15th, and the display is monthly, the resulting calendar spans from June 15th to June 30th.

The next two attributes define which items hold the calendar start date and end date. You can use these attributes to create calendars that span multiple months at a time. Note that the format of the date of either item must be YYYYMMDD:

  • Item Containing Start Date points to an item that holds the start date of the calendar.

  • Item Containing End Date points to an item that holds the end date of the calendar.

Start of Week for Monthly Calendar determines the day on which the calendar starts for the monthly view.

Start Day for Weekly Calendar determines the day on which the calendar starts for the weekly view.

End Day for Weekly Calendar determines the day on which the calendar ends for the weekly view.

Time Format determines if the time displays in a 12-hour or 24-hour format.

Start Time and End Time determine the start and end times to display in the weekly and daily calendar views.

Column Link

Use Column link to create a link on the column in the calendar.

To create a column link to another page:

  1. Navigate to the appropriate Calendar Attributes page.

  2. Scroll down to Column Link.

  3. From Target is a, select Page in this Application.

  4. In Page, specify the target page number. To reset the pagination for this page, select reset pagination for this page.

  5. In Request, specify the request to be used.

  6. In Clear Cache, specify the pages (that is, the page numbers) on which to clear cache. Specify multiple pages by listing the page numbers in a comma-delimited list.

    You can set session state (that is, give a listed item a value) using the next two attributes: the Set these items attribute and the With these values attribute.

  7. To set session state:

    1. Set these items - Enter a comma-delimited list of item names for which you would like to set session state.

    2. With these values - Enter a comma-delimited list of values for the items specified in the previous step.

      You can specify static values or substitution syntax (for example, &APP_ITEM_NAME.). Note that item values passed to f?p= in the URL cannot contain a colon (:). Additionally, item values cannot contain commas unless you enclose the entire value in backslashes (for example, \1234,56\).

  8. Click Apply Changes.

To create a column link to a URL:

  1. Navigate to the appropriate Calendar Attributes page.

  2. Scroll down to Column Link.

  3. From Target is a, select URL.

  4. In URL, enter the appropriate address.

  5. Click Apply Changes.

Day Link

Use Day link to create a link on a day in the calendar. This attribute creates a link on an actual number (or day) on the calendar.

To create a day link to another page:

  1. Navigate to the appropriate Calendar Attributes page.

  2. Scroll down to Day Link.

  3. From Target is a, select Page in this Application.

  4. In Page, specify the target page number.

    To reset the pagination for this page, select reset pagination for this page.

  5. In Request, specify the request to be used.

  6. In Clear Cache, specify the pages (that is, the page numbers) on which to clear cache. Specify multiple pages by listing the page numbers in a comma-delimited list.

    You can set session state (that is, give a listed item a value) using the next two attributes: Set these items and With these values.

  7. To set session state:

    1. Set these items - Enter a comma-delimited list of item names for which you would like to set session state.

    2. With these values - Enter a comma-delimited list of values for the items specified in the previous step.

      You can specify static values or substitution syntax (for example, &APP_ITEM_NAME.). Note that item values passed to f?p= in the URL cannot contain a colon (:). Additionally, item values cannot contain commas unless you enclose the entire value in backslashes (for example, \1234,56\).

  8. Click Apply Changes.

To create a day link to a URL:

  1. Navigate to the appropriate Calendar Attributes page.

  2. Scroll down to Day Link.

  3. From Target is a, select URL.

  4. In URL, enter the appropriate address.

  5. Click Apply Changes.

Upgrading a Calendar Created in a Previous Releases

By default, calendars you create in Oracle Application Express 3.0 include daily, weekly, and monthly views. To update calendars created in a previous release to include these views, you can either:

Converting an Easy Calendar to a SQL Calendar

Creating an Easy Calendar is the simplest way to create a calendar. However, if you find the resulting calendar does not meet your needs, you can quickly convert it to a SQL Calendar.

To convert an Easy Calendar to a SQL Calendar:

  1. Navigate to the Page Definition. See "Accessing a Page Definition".

  2. Under Regions, click Calendar next to the region name.

    The Calendar Attributes page appears.

  3. On the Tasks list, click Convert to SQL Based calendar.

    Converting an Easy Calendar to a SQL Calendar adds a Region Source section to the Region Definition. The Region Source contains the original SQL query that creates the calendar. By accessing the Region Source, you can edit the query to meet your needs.

Creating Charts

Application Builder includes built-in wizards for generating HTML, Scalable Vector Graphics (SVG), and Flash charts. Oracle Application Express supports only those three types of graphical charts.

Topics in this section include:


See Tutorial:

"How to Create a Stacked Bar Chart" in Oracle Application Express Advanced Tutorials

About Supported Chart Types

Oracle Application Express supports three types of graphical charts: HTML, Scalable Vector Graphics (SVG), and Flash.

About Flash Charts

Flash chart support in Oracle Application Express is based on the Anychart Flash Chart Component. Anychart is a flexible Macromedia Flash-based solution that enables developers to create animated, compact, interactive flash charts. Flash charts are rendered by a browser and require Flash player 8 or later. Flash charts used in interactive reports require Flash Player 9 or later. For more information about Anychart, go to

http://www.anychart.com

About SVG Plug-in Support

SVG is an XML-based language for Web graphics from the World Wide Web Consortium (W3C). SVG charts are defined using an embed tag. When evaluating whether an SVG chart is the appropriate chart type for your application, remember that:

  • Some Web browsers do not support SVG charts.

  • Most Web browsers that support SVG charts require that users download an SVG plug-in.

The Adobe SVG plug-in can handle data encoded in UTF-8, UTF-16, ISO-8859-1, and US-ASCII. Encoding of an SVG chart is determined by the database access descriptor (DAD) database character set. If the DAD character set is not UTF8, AL32UTF8, AL16UTF16, WE8ISO8859P1, or US7ASCII, SVG charts may not render properly in the Adobe SVG plug-in.

About Creating SQL Queries for Charts

You define a chart in Application Builder using a wizard. For most chart wizards, you select a chart type and provide a SQL query using the following syntax:

SELECT link, label, value
FROM   ...

Where:

  • link is a URL.

  • label is the text that displays in the bar.

  • value is the numeric column that defines the bar size.

For example:

SELECT null, last_name, salary
FROM   employees
WHERE  DEPARTMENT_ID = :P101_DEPARTMENT_ID

Note:

Do not change the type of an existing chart. Instead, delete the existing chart and then re-create it.

Dial Chart Syntax

To create a dial chart, select a dial chart type and provide a SQL query using the following syntax:

SELECT value , maximum_value [ ,low_value [ ,high_value] ]
FROM   ...

Where:

  • value is the starting point on the dial.

  • maximum_value is the possible highest point on the dial.

  • low_value and high_value are the historical low and high values.

For example:

SELECT dbms_random.value(500, 1200), 1300, dbms_random.value(100, 200)
FROM DUAL

Multiple Series Syntax (Flash only)

For column charts and line Flash charts, you can define multiple series in one SQL query. The series names for these chart types are derived from the corresponding column aliases in the query. To define a multiple series Flash chart, use the following syntax:

SELECT link, label, series_1_value [, series_2_value [, ...]]
FROM   ...

Range Chart Syntax (Flash only)

Range charts require two values for each bar. To create a range chart, create a Flash chart and provide a SQL query using the following syntax:

SELECT link, label, low_value, high_value 
FROM   ...

Scatter Chart Syntax (Flash only)

Scatter charts require an x value and y value for each point. To create a range chart, create a Flash chart and provide a SQL query using the following syntax:

SELECT link, label, x_value, y_value 
FROM   ...

Candlestick Chart Syntax (Flash only)

Candlestick charts require open, low, high, and close values for each candlestick. To create a candlestick chart, create a Flash chart and provide a SQL query using the following syntax:

SELECT link, label, open, low, high, close
FROM   ...

Creating an HTML Chart

How you create a chart depends upon whether you are adding the chart to an existing page, or adding a chart on a page. This chart type creates a bar chart showing one data series with each data point represented by a bar.

Topics in this section include:

Adding an HTML Chart to an Existing Page

To add an HTML chart to an existing page:

  1. Navigate to the Page Definition. See "Accessing a Page Definition".

  2. Under Regions, click the Create icon.

    The Create Region Wizard appears.

  3. Select Chart and click Next.

  4. For Region, select HTML Chart and click Next.

  5. For Display Attributes

    1. Specify the following:

      • Title

      • Region Template

      • Display Point

      • Sequence

      • Column

      To learn more, click the item label. When Help is available, the item label changes to red when you pass your cursor over it and the cursor changes to an arrow and question mark. See "About Field-Level Help".

    2. Click Next.

  6. For Source:

    1. Specify a query by either:

      • Entering a SQL query in the field provided. See "About Creating SQL Queries for Charts".

      • Clicking the Build Query button. When the Build Chart Query Wizard appears, follow the on-screen instructions.

    2. Specify relevant chart attributes. To learn more, click the item label.

  7. Click Create Region.

Adding an HTML Chart to a New Page

To create an HTML chart on a new page:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click Create Page.

  4. Select Chart and click Next.

  5. For Region, select HTML Chart and click Next.

  6. For Page Attributes:

    1. Specify the following:

      • Page Number

      • Page Name

      • Region Template

      • Region Column

      • Breadcrumb

      To learn more, click the item label. When Help is available, the item label changes to red when you pass your cursor over it and the cursor changes to an arrow and question mark. See "About Field-Level Help".

    2. Click Next.

  7. Specify whether to include tabs and click Next.

  8. For Chart Definition:

    1. Specify a query by either:

      • Entering a SQL query in the field provided. See "About Creating SQL Queries for Charts".

      • Clicking the Build Query button. When the Build Chart Query Wizard appears, follow the on-screen instructions.

    2. Specify relevant chart attributes. To learn more, click the item label.

    3. Click Next.

  9. Click Finish.

Creating a SVG Chart

Oracle Application Express supports a number of different SVG charts. To see a complete listing, see "About SVG Chart Types".

How you create a chart depends upon whether you are adding the chart to an existing page, or adding a chart on a new page. This chart type creates a bar chart showing one data series with each data point represented by a bar.

Topics in this section include:

Adding a SVG Chart to an Existing Page

To add a SVG chart to an existing page:

  1. Navigate to the Page Definition. See "Accessing a Page Definition".

  2. Under Regions, click the Create icon.

    The Create Region Wizard appears.

  3. Select Chart and click Next.

  4. For Region, select SVG Chart.

  5. For Region, select a chart type and click Next. See "About SVG Chart Types".

  6. For Display Attributes

    1. Specify the following:

      • Title

      • Region Template

      • Display Point

      • Sequence

      • Column

      To learn more, click the item label. When Help is available, the item label changes to red when you pass your cursor over it and the cursor changes to an arrow and question mark. See "About Field-Level Help".

    2. Click Next.

  7. For Source:

    1. Specify a query by either:

      • Entering a SQL query in the field provided. See "About Creating SQL Queries for Charts".

      • Clicking the Build Query button. When the Build Chart Query Wizard appears, follow the on-screen instructions.

    2. Specify relevant chart attributes. To learn more, click the item label.

  8. Click Create Region.

Adding a SVG Chart to a New Page

To create a SVG chart on a new page:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click Create Page.

  4. Select Chart and click Next.

  5. Select SVG Chart.

  6. Select a chart type and click Next. See "About SVG Chart Types".

  7. For Page Attributes:

    1. Specify the following:

      • Page Number

      • Page Name

      • Region Template

      • Region Name

      • Chart Color Theme

      • Breadcrumb

      To learn more, click the item label. When Help is available, the item label changes to red when you pass your cursor over it and the cursor changes to an arrow and question mark. See "About Field-Level Help".

    2. Click Next.

  8. Specify whether to include tabs and click Next.

  9. For Query:

    1. Specify a query by either:

      • Entering a SQL query in the field provided. See "About Creating SQL Queries for Charts".

      • Clicking the Build Query button. When the Build Chart Query Wizard appears, follow the on-screen instructions.

    2. Specify the remaining attributes. To learn more, click the item label.

    3. Click Next.

  10. Click Finish.

About SVG Chart Types

Table 7-7 describes the SVG chart types available in Application Builder.

Table 7-7 Available SVG Chart Types

Chart TypeDescription

Bar, Horizontal

Single series-based bar chart oriented horizontally with each data point in the series represented by a bar.

SVG-based. Requires an SVG plug-in.

Bar, Vertical

Single series-based bar chart oriented vertically with each data point in series represented by a bar.

SVG-based. Requires an SVG plug-in.

Cluster Bar, Horizontal

Multiple series-based bar chart oriented horizontally and clustered by a common variable with each data point in the series represented by a bar (for example, Department sales total clustered by month of year).

SVG-based. Requires an SVG plug-in.

Cluster Bar, Vertical

Multiple series-based bar chart oriented vertically clustered by a common variable with each data point in series represented by a bar (for example, Department sales total clustered by month of year).

SVG-based. Requires an SVG plug-in.

Dial - Sweep

Also known as an angular gauge; this chart shows either percentage of maximum value or absolute value compared to a maximum value represented as a solid area.

SVG-based. Requires an SVG plug-in.

Dial

Also known as angular gauge; this chart shows either percentage of maximum value or absolute value compared to maximum value represented as a line.

SVG-based. Requires an SVG plug-in.

Line

Multiple series-based line chart oriented with each line representing all data points in the series.

SVG-based. Requires an SVG plug-in.

Pie

Single series-based pie chart with each slice representing a data point in the series.

SVG-based. Requires an SVG plug-in.

Stacked Bar, Horizontal

Multiple series-based bar chart oriented horizontally with each data point being an absolute value in the series representing a segment of a single bar.

SVG-based. Requires an SVG plug-in.

Stacked Bar, Vertical

Multiple series-based bar chart oriented vertically with each data point being an absolute value in the series representing a segment of a single bar.

SVG-based. Requires an SVG plug-in.

Stacked Percentage Bar, Horizontal

Multiple series-based bar chart oriented horizontally with each data point being a percentage of 100% of the series represented by a segment of a single bar.

SVG-based. Requires an SVG plug-in.

Stacked Percentage Bar, Vertical

Multiple series-based bar chart oriented vertically with each data point being a percentage of 100% of the series represented by a segment of a single bar

SVG-based. Requires an SVG plug-in.


Understanding SVG Chart Cascading Style Sheet Classes

When you create a new chart, Oracle Application Express renders it based on cascading style sheet (CSS) classes associated with the current theme. You can change the appearance of a chart by referencing another CSS or by overriding individual classes in the CSS section of the Edit Attributes page

The following sample contains the CSS classes for the dial chart in Sample Application. This example contains all the available CSS classes. Class names appear in boldface.

text{font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;fill:#000000;}
tspan{font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;fill:#000000;}
text.title{font-weight:bold;font-size:14;fill:#000000;}
text.moredatafound{font-size:12;}
rect.legend{fill:#EEEEEE;stroke:#000000;stroke-width:1;}
text.legend{font-size:10;}
#background{fill:#FFFFFF;stroke:none;}
rect.chartholderbackground{fill:#ffffff;stroke:#000000;stroke-width:1;}
#timestamp{text-anchor:start;font-size:9;}
text.tic{stroke:none;fill:#000000;font-size:12}
line.tic{stroke:#000000;stroke-width:1px;fill:none;}
#dial{stroke:#336699;stroke-width:2px;fill:#336699;fill-opacity:.5;}
#dial.alert{fill:#FF0000;fill-opacity:.5;}
#dialbackground{stroke:#000000;stroke-width:none;fill:none;filter:url(#MyFilter);}
#dialcenter{stroke:none;fill:#111111;filter:url(#MyFilter);}
#dialbackground-border{stroke:#DDDDDD;stroke-width:2px;fill:none;filter:url
(#MyFilter);}#low{stroke-width:3;stroke:#336699;}
#high{stroke-width:3;stroke:#FF0000;}
#XAxisTitle{letter-spacing:2;kerning:auto;font-size:14;fill:#000000;text-anchor:middle;}
#YAxisTitle{letter-spacing:2;kerning:auto;font-size:14;fill:#000000;text-anchor:middle;writing-mode:tb;}
.XAxisValue{font-size:8;fill:#000000;}
.YAxisValue{font-size:8;fill:#000000;text-anchor:end;}
.nodatafound{stroke:#000000;stroke-width:1;font-size:12;}
.AxisLine{stroke:#000000;stroke-width:2;fill:#FFFFFF;}
.GridLine{stroke:#000000;stroke-width:0.3;stroke-dasharray:2,4;fill:none;}
g.dataholder rect{stroke:#000000;stroke-width:0.5;}
.legenditem rect{stroke:#000000;stroke-width:0.5;}

Table 7-8 describes all supported CSS classes. Note that certain classes only apply to specific chart types.

Table 7-8 Available SVG Chart CSS Classes

ClassDescription

text

Defines the appearance of text that displays in a chart.

tspan

Defines the appearance of text that displays in a chart. tspan should match the definition of text.

text.title

Overrides the default chart text. Use this class for title text.

text.moredatafound

Defines the appearance of more datafound text.

rect.legend

Creates the rectangular box that holds the chart legend.

To remove the legend border, change rect.legend to the following:

rect.legend{fill:#CCCC99;stroke:none;} 

text.legend

Defines the text that appears in the chart legend.

#background

Creates the entire background for the SVG plug-in.

For a solid white background with no border, change #background to the following:

#background{fill:#FFFFFF;stroke:#FFFFFF;stroke-width:2;}

rect.chartholderbackground

Not applicable to pie and dial charts. Creates the background of the rectangle that holds the chart data.

For a clear background, change rect.chartholderbackground to the following:

rect.chartholderbackground(display:none;)

#timestamp

Only applicable if the Asynchronous Update chart attribute is set to Yes. Controls the appearance of the update timestamp test.

To disable the display of the timestamp, use defines #timestamp as follows in the Custom CSS, Inline attribute.

"#timestamp{display:none;}" 

See Also: "Enabling Asynchronous Updates"

text.tic

Dial charts only. Defines the numbers on a dial chart.

line.tic

Dial charts only. Defines the graduation mark that displays directly beneath the number on a dial chart.

#dial

Dial charts only. Defines the value that displays on the dial chart.

#dial.alert

Dial charts only. Defines a value (called an alert value) that renders in a dial chart using a different display.

#dialbackground

Dial charts only. Creates the background of a dial chart.

#dialcenter

Dial charts only. Creates the center of the dial on a dial chart.

#dialbackground-border

Dial charts only. Works with #dialbackground to create specific graphic effect.

#low

Dial charts only. Defines the historical low watermark of the data being displayed on a chart.

#high

Dial charts only. Defines the historical high watermark of the data being displayed on a chart.

#XAxisTitle

Defines the title that appears on the x-axis

#YAxisTitle

Defines the title that appears on the y-axis.

.XAxisValue

Defines the value that appears on the x-axis.

.YAxisValue

Defines the value that appears on the y-axis.

.AxisLabel

Similar to the axis value.

.nodatafound

Defines the text element that displays if no information is available.

.AxisLine

Indicates zero on charts that have negative values.

.GridLine

Creates the horizontal and vertical lines on the chart.

g.dataholder rect

Applies a blanket style to all data that displays in the chart.

.legenditem rect

Applies a blanket style to all rectangular items in the legend.


Referencing a Custom SVG Chart Cascading Style Sheet

You can reference a custom cascading style sheet for a chart using the CSS section of the Chart Attributes page. When you reference an external CSS, you can reference it entirely or simply override specific styles.

To reference a custom chart CSS:

  1. Upload the CSS to Application Builder. See "Uploading Cascading Style Sheets".

  2. Create a chart. See "Creating a SVG Chart".

  3. Navigate to the Page Definition. See "Accessing a Page Definition".

  4. Under Regions, click Chart next to the region name.

    The Chart Attributes page appears.

  5. Scroll down to the CSS section.

  6. From Use Custom CSS, select Yes.

  7. To reference an external CSS exclusively:

    1. In Custom CSS, Link, enter a link to a custom CSS. For example:

      #IMAGE_PREFIX#themes/theme_4/svg.css
      
    2. Specify that the CSS should be used exclusively. In Custom CSS, Inline enter the following:

      /**/
      
  8. To reference a custom CSS and override specific styles:

    1. In Custom CSS, Link, enter a link to a custom style sheet. For example:

      #IMAGE_PREFIX#themes/theme_4/svg.css
      
    2. In Custom CSS, Inline, enter the custom CSS styles you want to override.

Specifying Custom CSS Styles Inline for SVG Charts

You can override specific styles within the default CSS, using the Custom CSS, Inline attribute on the Chart Attributes page.

To override specific styles within the default CSS:

  1. Create a chart. See "Creating a SVG Chart".

  2. Navigate to the Page Definition. See "Accessing a Page Definition".

  3. Under Regions, click Chart next to the region name.

    The Chart Attributes page appears.

  4. Scroll down to CSS.

  5. From Use Custom CSS, select Yes.

  6. In Custom CSS, Inline, enter the custom CSS styles you want to override.

Creating a Flash Chart

How you create a flash chart depends upon whether you are adding the chart to an existing page, or adding a chart on a new page.


Tip:

Note that in order to view Flash charts, you must install Flash Player 8 or later. Flash charts used in interactive reports require Flash Player 9 or later.

Topics in this section include:

Adding a Flash Chart to an Existing Page

To add a flash chart to an existing page:

  1. Navigate to the Page Definition. See "Accessing a Page Definition".

  2. Under Regions, click the Create icon.

    The Create Region Wizard appears.

  3. Select Chart and click Next.

  4. For Region, select Flash Chart.

  5. For Display Attributes

    1. Specify the following:

      • Title

      • Region Template

      • Display Point

      • Sequence

      • Column

      To learn more, click the item label. When Help is available, the item label changes to red when you pass your cursor over it and the cursor changes to an arrow and question mark. See "About Field-Level Help".

    2. Click Next.

  6. On Chart Preview, configure the chart attributes. Click Update to refresh the preview image.

  7. Click Next.

  8. For Source:

    1. Specify a query by either:

      • Entering a SQL query in the field provided. See "About Creating SQL Queries for Charts".

      • Clicking the Build Query button. When the Build Chart Query Wizard appears, follow the on-screen instructions.

    2. Specify relevant chart attributes. To learn more, click the item label.

  9. Click Create Region.

Adding a Flash Chart to a New Page

To create a flash chart on a new page:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click Create Page.

  4. Select Chart and click Next.

  5. Select Flash Chart.

  6. For Page Attributes:

    1. Specify the following:

      • Page Number

      • Page Name

      • Region Template

      • Region Name

      • Breadcrumb

      To learn more, click the item label. When Help is available, the item label changes to red when you pass your cursor over it and the cursor changes to an arrow and question mark. See "About Field-Level Help".

    2. Click Next.

  7. Specify whether to include tabs and click Next.

  8. For Chart Preview, configure the chart attributes. Click Update to refresh the preview image.

  9. Click Next.

  10. For Query:

    1. Specify a query by either:

      • Entering a SQL query in the field provided. See "About Creating SQL Queries for Charts".

      • Clicking the Build Query button. When the Build Chart Query Wizard appears, follow the on-screen instructions.

    2. Specify the remaining attributes. To learn more, click the item label.

    3. Click Next.

  11. Click Finish.

About Migrating SVG Charts to Flash

You can automatically migrate single or multiple SVG charts to Flash.

About SVG Chart Migration Restrictions

Note that SVG charts are migrated with the following restrictions:

  • Only number formats defined in axis format strings will be migrated. Date and time formats will be ignored.

  • Number format elements containing the following will be migrated:

    0,9,D,G,, (comma),. (period),$,C,L,FM
    
  • The label for each series in the Flash chart will be derived from each series' column alias. This differs from SVG charts, where the label for each series was derived from the Series Name attribute.

  • Flash Dial charts display actual values instead of percentages.

  • In SVG charts, only the labels for the first series are used for the x-axis. In Flash charts, this has been enhanced so that all data appears, even if the data's label does not occur in the first series.

Migrating a SVG Chart to Flash

To migrate a SVG chart to Flash:

  1. Navigate to the Page Definition. See "Accessing a Page Definition".

  2. Under Regions, click region name. The region name displays to the left of SVG Chart.

    The Region Definition appears.

  3. From the Tasks list, click Migrate SVG Chart to Flash Chart.

  4. Click Migrate.

Migrating all SVG Charts in a Application to Flash

To migrate all SVG Charts to Flash charts:

  1. Navigate to the Workspace home page.

  2. Click the Application Builder icon.

  3. Select an application.

    The Application home page appears.

  4. On the Tasks list, click Application Reports.

  5. Click Page Components.

  6. Under Regions, click Migrate SVG to Flash Charts.

    The Migrate SVG to Flash Charts page appears.

  7. To migrate specific charts, select the charts to be migrated and click Migrate Checked.

  8. To migrate all charts, click Migrate All.

Editing Chart Attributes

Once you have created a chart, you can alter its display by editing chart attributes on the Chart Attributes page.

To access the Chart Attributes page:

  1. Navigate to the Page Definition. See "Accessing a Page Definition".

  2. Under Regions, click the chart type (Chart, SVG Chart, or Flash Chart).

    The Chart Attributes page appears.

  3. Edit the appropriate attributes.

  4. To learn more about a specific item on a page, click the item label.

    When Help is available, the item label changes to red when you pass your cursor over it and the cursor changes to an arrow and question mark. See "About Field-Level Help".

  5. Click Apply Changes.


Tip:

Removing the chart title of an SVG chart (that is, the Chart Title attribute) may negatively impact the location and display of the chart legend.

About Navigation Alternatives

The Chart Attributes page is divided into sections. You can access these sections by scrolling down the page, or by clicking a navigation button at the top of the page. When you select a button at the top of the page, the selected section appears and all other sections are temporarily hidden. To view all sections of the page, click Show All.

Using Custom XML with Flash Charts

There are additional chart settings that cannot be controlled using the standard attributes on the Chart attributes page. To further control the look and feel of a chart, you can use custom XML.

To use custom XML:

  1. Navigate to the Chart Attributes page:

    1. Navigate to the Page Definition. See "Accessing a Page Definition".

    2. Under Regions, click the chart type, Flash Chart.

      The Chart Attributes page appears.

  2. Scroll down to Chart XML.

  3. From Use Custom XML, select Yes.

    Note that when you select to use custom XML, regions with attributes that no longer apply are hidden. To display these regions again, select No for Use Custom XML.

  4. Edit the XML.

  5. Click Apply Changes.


Tip:

For more information on supported XML format for charts, see the Online XML Reference at:
http://www.anychart.com

Enabling Asynchronous Updates

You can create SVG and Flash charts that monitor information by enabling the Asynchronous Update attribute on the Chart attributes page. Enabling this attribute updates the chart to reflect changes in the underlying data within a specified time interval.

To enable asynchronous updates:

  1. Create an SVG or Flash chart. See "Creating a SVG Chart" or "Creating a Flash Chart".

  2. Navigate to the Page Definition. See "Accessing a Page Definition".

  3. Under Regions, click Chart next to the region name.

    The Chart Attributes page appears.

  4. Scroll down to Refresh.

  5. From Asynchronous Update, select Yes.

  6. In Update Interval (Seconds), enter the interval in seconds between chart updates. For optimal performance, select an interval that is greater than 2 seconds.

When Asynchronous Update is enabled for an SVG chart, a timestamp displays on the chart indicating the last update.

To disable the Asynchronous Update timestamp:

  1. Navigate to the Chart Attributes page.

  2. Locate the CSS section.

  3. From Use Custom CSS, select Yes.

  4. In Custom CSS, Inline edit #timestamp as follows:

    #timestamp{display:none;}
    

Displaying SVG Charts in Other Languages

To display an SVG chart in another language, you edit the text and tspan classes to reflect the correct language.

To display an SVG chart in another language:

  1. Navigate to the Chart Attributes page. See "Editing Chart Attributes".

  2. Scroll down to CSS.

  3. From Use Custom CSS, select Yes.

  4. In Custom CSS, Inline, edit the text and tspan classes to reflect the correct language. The following example demonstrates how to change a chart to Korean:

    text{font-family:Batang;fill:#000000;}
    tspan{font-family:Batang;fill:#000000;}
    

Creating Buttons

As you design your application, you can use buttons to direct users to a specific page or URL, or to post or process information (for example, by creating Create, Cancel, Next, Previous, or Delete buttons).

Buttons can perform two different types of actions. A button can submit a page and then redirect to a URL. Alternately, a button can branch to a URL without submitting the page, such as for a Cancel button.

Topics in this section include:

About the Buttons Section of the Page Definition

You create and edit buttons on the Page Definition. The Buttons section appears in the Page Rendering area. See "Accessing a Page Definition".

Description of pg_def_buttons.gif follows
Description of the illustration pg_def_buttons.gif

You can temporarily hide all other subsections by clicking the Buttons icon. To restore the view, click Show All. The Show All icon resembles an inverted triangle.

The following icons display next to the section title:

  • Edit All. The Edit All icon resembles a small grid with a pencil on top of it. Use this icon to edit all buttons at once.

  • Copy. The Copy icon resembles two small overlapping pages. Use this icon to make a copy of an existing button.

  • Create. The Create icon resembles a plus (+) sign overlapping a small page. Click this icon to create a new button.

Buttons are organized by region. To edit a button, click the button name.


See Also:

"Editing Buttons"

Creating a Button Using a Wizard

You create a button by running the Create Button Wizard from the Page Definition. Each button resides in a region. A region is an area on a page that serves as a container for content.

To create a button:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. If necessary, create an HTML region. See "Understanding Regions".

  3. Under Buttons, click the Create icon.

    The Create Button Wizard appears.

  4. Select a region to contain the button and click Next.

  5. Select a position for the button and click Next:

    • Create a button displayed among this region's items - Select this option to display the button within or between page items (for example, to add a button directly to the right of a form field).

    • Create a button in a region position - Select this option to place the button in a region position. A region position is a position defined by a region template.

  6. If you select Create a button in a region position:

    1. Specify the Button Name and Label.

    2. Select a Button Type: HTML Button (Default), Image, or Template Driven

      Select Button is Reset to create an Undo button. When enabled, this type of button resets the page values to the state they were in when the page was initially rendered.

    3. Select an Action:

      • Submit page and redirect to URL submits the current page to the Application Express engine whenever a user clicks the button.

      • Redirect to URL without submitting page avoids submitting the page. Choose this action when submitting the page for processing is not necessary (for example, a Cancel button). This action avoids processing in the database and therefore reduces the load.

    4. Click Next.

  7. If you select Create a button displayed among this region's items:

    1. Specify the Button Name and Sequence.

    2. Specify if the button displays at the beginning of a new line or new field.

    3. Specify a Label.

    4. Enter the value of Request.

    5. Select the Button Style.

    6. Click Next.

  8. Follow the on-screen instructions. To learn more about a specific field, click the item label.

    When Help is available, the item label changes to red when you pass your cursor over it and the cursor changes to an arrow and question mark. See "About Field-Level Help".

Creating an HTML Button

Buttons can be placed in a predefined region template position or among items in a form. To create an HTML button, select one of the following while running the Create Button Wizard:

  • Under Task, select Create a button in a region position.

  • Under Button Type, select a button type and then HTML Button (default).

Creating Multiple Buttons

You can create multiple buttons within the same region at once using the Create Multiple Buttons Wizard.

To create multiple buttons at once:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. If necessary, create an HTML region. See "Understanding Regions".

  3. Under Buttons, click the Create icon.

    The Create Button Wizard appears.

  4. Select Create Multiple Buttons at the bottom of the page.

    The Create Multiple Button Wizard appears.

  5. From Place Buttons in Region, select the region to contain the buttons.

  6. From Template, select a template.

  7. In HTML Attributes, specify HTML attributes for these buttons. This text will be added to the HTML element definition. For example, you could set the class of a text button as follows:

    class="myclass"
    
  8. To quickly populate the remaining fields, make a selection from the Quick Button list on the right side of the page.

  9. Click Create Buttons.

Editing Buttons

When you want to edit a button, you start from the Buttons section on the Page Definition. You can edit the attributes of a button, edit multiple buttons at once, or change a button position within a region.

Topics in this section include:

Editing Button Attributes

You can edit button attributes on the Edit Pages Buttons page.

To edit attributes for an existing button:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Under Buttons, select the button name.

    The attributes page for the button appears.

  3. To learn more about a specific item on a page, click the item label.

    When Help is available, the item label changes to red when you pass your cursor over it and the cursor changes to an arrow and question mark. See "About Field-Level Help".

  4. Click Apply Changes.

Using the Edit All Icon to Edit Multiple Buttons

You can edit multiple buttons at once by clicking the Edit All icon on the Page Definition. The Edit All icon resembles a small grid with a pencil on top of it.

Description of edit_all_button.gif follows
Description of the illustration edit_all_button.gif

Clicking the Edit all icon displays the Buttons page, which contains a table listing the buttons in the region. Use this icon to edit multiple buttons at once.

From the Buttons page, you can delete multiple buttons or view a history of recent changes.

To edit multiple buttons:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Under Buttons, click the Edit All icon.

    The Buttons page appears.

  3. Edit the attributes on the Buttons page, or click the Edit icon to edit the attributes for a single button.

  4. Click Apply Changes.

Delete Multiple Buttons

To delete multiple buttons at once:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Under Buttons, click the Edit All icon.

  3. Click Delete Multiple Buttons.

    The Delete Multiple Buttons page appears.

  4. Select the buttons to delete and click Remove Buttons.

History

Use the History page to view a summary of recent edits to buttons.

Using the Reorder Buttons Icon

You can quickly edit a button label or change a button position within a region by clicking the Reorder Region Buttons icon on the Page Definition. The Reorder Region Buttons icon resembles a light green downward arrow and upward arrow and displays next to the region name.

Description of reorder_buttons.gif follows
Description of the illustration reorder_buttons.gif

To edit buttons using the Reorder Region Buttons icon:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Under Buttons, click the Reorder Region Buttons icon.

    The Reorder Buttons page appears. Use this page to edit the button label, select a region position, or change the button order.

  3. To edit the button label, enter a name in the Label field.

  4. To change the region position, make a selection from the Position list.

  5. To change the order in which buttons display, click the up and down arrows in the far right column.

    Note that you can also control the order in which buttons display by editing the Sequence attribute. See "Editing Button Attributes".

  6. Click Apply Changes.


Note:

To change the region where a button resides, you must edit the button attributes. See "Editing Button Attributes".

Understanding the Relationship Between Button Names and REQUEST

The name you give a button determines the value of the built-in attribute REQUEST. You can reference the value of REQUEST from within PL/SQL using the bind variable :REQUEST. By using this bind variable, you can conditionally process, validate, or branch based on which button the user clicks. You can also create processes that execute when the user clicks a button. And you can use a more complex condition as demonstrated in the following examples:

If :REQUEST in ('EDIT','DELETE') then ...
If :REQUEST != 'DELETE' then ...

These examples assume the existence of buttons named EDIT and DELETE. You can also use this syntax in PL/SQL Expression conditions. Be aware, however, that the button name capitalization (case) is preserved. In other words, if you name a button LOGIN, then a request looking for the name Login will fail. For example:

<input type="BUTTON" value="Finish" onClick="javascript:doSubmit('Finish');">

Note that in this example Finish is the name of the REQUEST and this example is case-sensitive.

About Branching with Buttons

Each page can include any number of branches. A branch links to another page in your application or to a URL. The Application Express engine considers branching at different times during page processing. You can choose to branch before processing, before computation, before validation, and after processing. Like any other control in Application Builder, branching can be conditional. For example, you can branch when a user clicks a button. When you create a branch, you associate it with a specific button. The branch will only be considered if a user clicks the button.

Displaying Buttons Conditionally

You can choose to have a button display conditionally by editing attributes on the Edit Pages Button page.

To have a button display conditionally:

  1. Create the button. See "Creating a Button Using a Wizard".

  2. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  3. Under Buttons, select the button name.

    The attributes page for the button appears.

  4. Scroll down to Conditional Button Display.

  5. Make a selection from the Condition Type list.

  6. Enter an expression in the fields provided.

  7. Click Apply Changes.

Creating Lists of Values

A list of values (LOV) is a static or dynamic set of values used to display a specific type of page item, such as popup lists of values, a select list, a check box, a radio group, or multiple select lists.

Creating a LOV as a shared component has a number of advantages:

  • It can be added to any page within an application.

  • All LOV definitions are stored in one location, making them easy to locate and update.

Topics in this section include:

Creating a Named LOV at the Application Level

You define named (or shared) LOVs at the application level by running the Create LOV Wizard and adding them to the List of Values repository. All LOVs can be defined as static or dynamic. Static lists are based on predefined pairs of display values and return values. Dynamic lists are based on a SQL query you write that selects values from a table.

To create a named LOV:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

    The Application home page appears.

  3. Click the Shared Components icon.

  4. Under User Interface, select Lists of Values.

    The Lists of Values page appears.

  5. To create a LOV, click Create.

  6. Follow the on-screen instructions.

    New named LOVs are added to the List of Values repository. Note to add the LOV to a page you must edit the appropriate item or column and select the named LOV.

About the List of Values Page

Once you create an LOV, it appears on the List of Values page.

Description of lov_page.gif follows
Description of the illustration lov_page.gif

Use the Navigation bar at the top of the page to search for a LOV by name or change the page display. For example, you can change the default display by making a selection from View list. Available options include:

  • Icons (the default) displays each LOV as a large icon. To edit an LOV, click the appropriate icon.

  • Details displays each LOV as a line in a report. To edit an LOV, click the name.

About Static LOVs

Static LOVs are based on a static list of display values and return values you specify when you run the Create LOV Wizard. To create a static LOV, run the Create LOV Wizard and select the LOV type Static. Oracle Application Express stores the display values, return values, and sort sequence you specify in the List of Values repository. Once you add a static LOV to the repository, you can create an item and display it as a check box, radio group, select list, or popup list based on this definition.

Editing an Existing LOV

To edit an existing LOV, select the LOV on the Lists of Values page.

To edit an LOV:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click Shared Components.

  4. Under User Interface, select Lists of Values.

  5. Select an LOV.

    The Edit List of Values page appears.

  6. To learn more about a specific item on a page, click the item label.

    When Help is available, the item label changes to red when you pass your cursor over it and the cursor changes to an arrow and question mark. See "About Field-Level Help".

  7. Click Apply Changes.

About Navigation Alternatives

The Edit List of Values page is divided into the following sections: Name, Subscription, Source, and Comments.

You can access these sections by scrolling down the page, or by clicking a navigation button at the top of the page. When you select a button at the top of the page, the selected section appears and all other sections are temporarily hidden. To view all sections of the page, click Show All.

Bulk Edit of Static LOVs

You can edit the display values of all static LOVs by clicking the Grid Edit button on the Edit List of Values page.

To perform a bulk edit of static LOVs:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click Shared Components.

  4. Under User Interface, select Lists of Values.

    By default, LOVs display as icons.

  5. Change the default display. Select Details from the View list and click Go.

  6. Locate the Static LOV and select the LOV name.

  7. Click the Grid Edit button located under Subscription.

  8. Edit the appropriate display values and click Apply Changes.

Referencing Session State Within an LOV

You can reference session state by using bind variables. Keep in mind that referencing session state makes an LOV a bit less reusable, but is still a recommended development practice. In the following example, this LOV only works if the item called my_deptno contains a valid department number.

SELECT ename, empno FROM emp WHERE deptno = :P1_DEPTNO

Referencing a Null Value in an Item Based on an LOV

LOVs have a null display value option and a null return value option. The null display value is the value the end user sees in the list indicating the no selection from the proper (non-null) values of the list will be made. When a user selects a null display value, the LOV's null return value is sent to the application when the page is submitted. If the developer has left the null return value unspecified (or empty), the actual value transmitted is not an empty string or an Oracle null, but the literal %null%. The application must be prepared to deal with this literal and treat is as the null selection.

Be aware of this behavior when writing code to evaluate submitted values. For example, suppose a page evaluates the submitted item P1_X and you need to use the PL/SQL expression replace(:P1_X,'%'||'null%',null) to prepare the item for permanent storage in session state or for passing to DML or other APIs.

To avoid problems, be aware of the appropriate way to code %null% in expressions that occur in page computations, processes, and validations. You must break up the string so that the application does not replace %null% with a null value in the page metadata when it is saved. Consider the following example:

'%'||'null%'

Accessing LOV Reports

Application Builder includes a number of reports designed to help you better manage LOVs.

To access LOV reports:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. When Application Builder appears, click Shared Components.

  4. Under User Interface, select Lists of Values.

  5. Select one of the following tabs at the top of the page:

    • Search

    • Subscription

    • Utilization

    • History

  6. Follow the on-screen instructions.

Search

Click Search to display the Search Dynamic Lists of Values page. Use this page to search the queries that make up dynamic LOVs. Enter a query in the Query Contains field and click Go.

Subscription

Click Subscription to display the List of Values Subscription page. This page displays all subscribed LOVs in your application.

Utilization

Click Utilization to display the List of Values Utilization page. This page displays LOVs used in the current application. To edit an LOV, click the LOV name.

History

Click History to display the List of Values History page. This page displays a history of recently changed LOVs by date.

Creating Dependent Select Lists

You can use a select list to determine the range of values of another select list on the same page. You can achieve this functionality by having a driving select list submit values to a subsequent select list. You incorporate these values in the subsequent select list as a bind variable in the WHERE clause of its query.

To have one LOV drive another LOV:

  • Create a basic form.

  • Define two lists of values. Note that the driving LOV must submit the page after a value is chosen.

  • Define a branch that branches back to the current page.

Consider the following example. The first LOV enables the user to pick a state:

SELECT state_name d, state_id v
FROM states

The second LOV selects the county name and county ID based on the state selected in the first LOV:

SELECT county_name d, county_id v
  FROM counties
WHERE state_id = :P1_STATE_ID

Using Shortcuts

By using shortcuts you can avoid repetitive coding of HTML or PL/SQL functions. You can use a shortcut to define a page control such as a button, HTML text, a PL/SQL procedure, or HTML. Once defined, you can invoke a shortcut using specific syntax unique to the location in which the shortcut is used. Shortcuts can be referenced many times, thus reducing code redundancy.

This section contains the following topics:

About Shortcut Types

When you create a shortcut, you must specify the type of shortcut you want to create. Oracle Application Express supports the following shortcut types:

  • PL/SQL Function Body

  • HTML Text

  • HTML Text with Escaped Special Characters

  • Image

  • Text with JavaScript Escaped Single Quotes

  • Message

  • Message with JavaScript Escaped Special Quotes

Text with JavaScript Escaped Single Quotes

Use this type of shortcut to reference a shortcut inside of a JavaScript literal string. This shortcut defines a text string. When the shortcut is referenced, it escapes the single quotation marks required for JavaScript.

Message

Use this type of shortcut to reference a translatable message at run time. Note that since this shortcut does not have a shortcut body, the name of the shortcut must match the corresponding message name. At run time, the name of the shortcut expands to the text of the translatable message for the current language.

Message with JavaScript Escaped Single Quotes

Use this type of shortcut to reference a shortcut inside of JavaScript literal string and reference a translatable message at run time.

Defining Shortcuts

Before you can incorporate a shortcut in your application, you must define it and add it to the Shortcuts repository. You reference shortcuts using the following syntax:

"MY_SHORTCUT"

Note that the shortcut name must be capitalized and enclosed in quotation marks.

To define a shortcut:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. When Application Builder appears, click Shared Components.

  4. Under User Interface, select Shortcuts.

  5. Click Create.

  6. Select one of the following creation methods:

    • From Scratch

    • As a Copy of an Existing Shortcut

  7. Follow the on-screen instructions.

New shortcuts are added to the Shortcut repository and are available for use within the following locations:

About the Shortcuts Page

Once you create a shortcut, it appears on the Shortcuts page. You control how the page displays by making a selection from the View list. Available options include:

  • Icons (the default) displays each shortcut as a large icon. To edit a shortcut, click the appropriate icon.

  • Details displays each shortcut as a line in a report. To edit a shortcut, click the name.

Editing Existing Shortcuts

Once you create a shortcut, you can alter it by editing attributes on the Edit Shortcut page.

To edit an existing shortcut:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click Shared Components.

  4. Under User Interface, select Shortcuts.

  5. Select a shortcut.

    The Edit Shortcut page appears.

  6. To learn more about a specific item on a page, click the item label.

    When Help is available, the item label changes to red when you pass your cursor over it and the cursor changes to an arrow and question mark. See "About Field-Level Help".

  7. Click Apply Changes.

About Navigation Alternatives

The Edit Shortcut page is divided into the following sections: Name, Subscription, Source, Configuration, and Comments.

You can access these sections by scrolling down the page, or by clicking a navigation button at the top of the page. When you select a button at the top of the page, the selected section appears and all other sections are temporarily hidden. To view all sections of the page, click Show All.

Accessing Shortcut Reports

Application Builder includes a number of reports designed to help you better manage shortcuts.

To access shortcut reports:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. When Application Builder appears, click Shared Components.

  4. Under User Interface, select Shortcuts.

  5. Click one of the following tabs:

    • Subscription

    • History


    Note:

    The Subscription and History tabs only appear after you create a shortcut.

Subscribed Shortcuts

Click Subscription to display the Subscribed Shortcuts page. This page displays all subscribed shortcuts in your application.

Shortcut History

Click History to display the Shortcut History page. This page displays a history of recently changed shortcuts by date.

Using the Find Icon

You can search for items, pages, queries, tables, PL/SQL code, images, or cascading style sheets by clicking the Find icon on numerous pages within Application Builder.

This section contains the following topics:

About the Find Icon

The Find icon resembles a flashlight and often displays to the right of the Run Page and Edit Page icons as shown in the following illustration. The Find icon displays on many pages in Application Builder, including the Application Home page, the Page Definition, application attribute pages, and numerous pages for creating and managing shared components.

Description of find_icon.gif follows
Description of the illustration find_icon.gif

About the Item Finder

In Application Builder, an item can be a text field, text area, password, select list, check box, and so on. You can use the Item Finder to search for items within the current application or within the schema associated with the workspace.

To search for an item using the Item Finder:

  1. Click the Find icon.

    The Item Finder appears.

    A search bar displays at the top of the page and contains the following controls:

    • Search. Search for an item name. Enter case insensitive keywords in the Search field and click Go. To view all items, leave the Search field blank and click Go.

    • Page. Search for pages that contain items. Enter a page number in the Page field or select a page number from the list and click Go. To view all pages containing items, leave the Page field blank and click Go.

    • Display. Determine how many rows display in the resulting report. To change the number of rows that display, make a selection from the Display list and click Go.

    A Item Finder report appears, displaying the item name, label, item type, and associated page number.

    Description of item_finder.gif follows
    Description of the illustration item_finder.gif

  2. To restrict the report to display just items on a specific page, click the appropriate page number in the far right column.

    Note the page number you select appears in the Page field at the top of the page. To expand the view to all pages, delete the page number in the Page field and click Go.

  3. To edit a specific item, navigate to the appropriate item. See "Understanding Page-Level Items" and "Using the Edit All Icon to Edit Multiple Items".

Using the Page Finder

A page (or Page Definition) is the basic building block of an application. You can use the Page Finder to search for pages within the current application or within the schema associated with the workspace.

To search for a page:

  1. Click the Find icon.

  2. Select the Pages tab.

    The Page Finder appears.

    A search bar displays at the top of the page and contains the following controls:

    • Search. Search for a page name. Enter case insensitive keywords in the Search field and click Go. To view all pages, leave the Search field blank and click Go.

    • Display. Determine how many rows display in the resulting report. To change the number of rows that display, make a selection from the Display list and click Go.

    The Page Finder report appears, displaying the page number, page name, page alias, title, tab set, and counts of the number of items and regions on the page.

    Description of pages_finder.gif follows
    Description of the illustration pages_finder.gif

  3. To link to the Items page, click the page number.

Using the Query Finder

You can use the Query Finder to locate a query within your application or within the schema associated with the workspace.

To search for a query using the Query Finder:

  1. Click the Find icon.

  2. Select the Queries tab.

    The Query Finder appears.

    A search bar displays at the top of the page and contains the following controls:

    • Search. Search for query statements. Enter case insensitive keywords in the Search field and click Go. To view all queries, leave the Search field blank and click Go.

    • Display. Determine how many rows display in the resulting report. To change the number of rows that display, make a selection from the Display list and click Go.

    The Query Finder report appears, displaying the page number, page name, the region containing the query, and the query source.

    Description of query_finder.gif follows
    Description of the illustration query_finder.gif

  3. To link to the Items page, click the page number.

Using the Table Finder

You can use the Table Finder to view tables within the schema associated with the workspace.

To view tables associated within the current schema:

  1. Click the Find icon.

  2. Select the Tables tab.

    The Table Finder appears.

    A search bar displaying the selected schema displays at the top of the page and contains the following controls:

    • Search. Search for a table name. Enter case insensitive keywords in the Search field and click Go. To view all tables, leave the Search field blank and click Go.

    • Display. Determine how many rows display in the resulting report. To change the number of rows that display, make a selection from the Display list and click Go.

    • Views. Select the Views check box and click Go to include views in the resulting report.

    The Table Finder report appears displaying the table name, the number of rows, and the object type.

  3. Select a table name.

    A table definition appears on the right side of the page.

    Description of table_finder.gif follows
    Description of the illustration table_finder.gif

    This report displays the column names, data type, length, precision, and scale and the SQL necessary to re-create the table appears at the bottom of the page.


See Also:

"Managing Tables" in Oracle Application Express SQL Workshop and Utilities Guide

Using the PL/SQL Finder

You can use the PL/SQL Finder to locate and view details about stored procedures, functions, and packages associated with each object within the schema associated with the workspace.

To search for PL/SQL code in the current schema:

  1. Click the Find icon.

  2. Select the PL/SQL tab.

    The PL/SQL Finder appears.

    A search bar displays at the top of the page contains the following controls:

    • Search. Search for procedure, function, or package names. Enter case insensitive keywords in the Search field and click Go. To view all, leave the Search field blank and click Go.

    • Display. Determine how many rows display in the resulting report. To change the number of rows that display, make a selection from the Display list and click Go.

    • Procedures, Functions, or Packages. Select at least one check box and click Go to include procedures, functions, and packages in the report. You must select at least one check box to return results.

    The PL/SQL Finder report appears.

  3. To view additional details, select the procedure, function, or package name.

    Description of plsql_finder.gif follows
    Description of the illustration plsql_finder.gif

    The procedure, package, or function name appears and additional information including the owner, source name, source type, return type, argument names, data types, and IN/OUT parameters.


See Also:

"Managing Database Objects with Object Browser," in Oracle Application Express SQL Workshop and Utilities Guide

Using the Images Finder

You can use the Images Finder to identify images available to the current application.

To view available images:

  1. Click the Find icon.

  2. Select the Images tab.

    The Images Finder appears.

    Description of image_finder.gif follows
    Description of the illustration image_finder.gif

    A search bar displays at the top of the page and contains the following controls:

    • Search. Search for image names. Enter case insensitive keywords in the Search field and click Go. To view all, leave the Search field blank and click Go.

    • Icon Size. Select the size of icon you want to search for and click Go.

    • Display. Determine how many rows display in the resulting report. To change the number of rows that display, make a selection from the Display list and click Go.

    • Columns. Select the number of columns to view per row and click Go.

  3. From Show, select the type of images to view. Options include:

    • Standard Images

    • Workspace Images

    • Application Images


See Also:

"Managing Database Objects with Object Browser" in Oracle Application Express SQL Workshop and Utilities Guide

Using the CSS Finder

You can use the CSS Finder to view cascading style sheets that are available to any application regardless of theme.

To view available cascading style sheets:

  1. Click the Find icon.

  2. Select the CSS tab.

    The CSS Finder appears.

    Description of css_finder.gif follows
    Description of the illustration css_finder.gif

    A search bar displays at the top of the page and contains the following controls:

    • Search. Enter case insensitive keywords in the Search field and click Go. To view all, leave the Search field blank and click Go.

    • Category. Select a CSS category and click Go. Available options include:

      • Absolute Sizes

      • Anchor Tags

      • Relative Sizes

    • Display. Determine how many rows display in the resulting report. To change the number of rows that display, make a selection from the Display list and click Go.

Controlling Access to Applications, Pages, and Page Components

You can control access to an application, individual pages, or page components by creating an access control list.

This section contains the following topics:


See Also:

"Building Queries with Query Builder" in Oracle Application Express SQL Workshop and Utilities Guide


See Tutorial:

"How to Build an Access Control Page" in Oracle Application Express Advanced Tutorials

How the Access Control List Works

You create an access control list by running the Access Control Wizard. The Access Control Wizard creates a page named Access Control Administration. This page contains a list of application modes and an Access Control List. Once you create the Access Control Administration page, you:

  1. Run the Access Control Administration page.

  2. Select one of the following application modes:

    • Full access to all, access control list not used.

    • Restricted access. Only users defined in the access control list are allowed.

    • Public read only. Edit and administrative privileges controlled by access control list.

    • Administrative access only.

  3. Add users to the Access Control List.

In addition to creating the Access Control Administration page, the Access Control Wizard also creates:

  • two tables within the application's default schema to manage the access control

  • the authorization schemes that correspond to the application mode list options

  • the privileges available in the Access Control List

You can control access to a specific page or page component by selecting one of these authorization schemes on the page or component attributes pages. Once you create an Access Control, you can customize the page, tables and values to suit the specific needs of your application.

Creating an Access Control List

You create an access control list by creating a page. You can create a page on the Application home page, while viewing a Page Definition, or by clicking Create on the Developer toolbar.

Topics in this section include:

Creating an Access Control from the Application Home Page

To create an access control list from the Application home page:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

    The Application home page appears.

  3. Click Create Page.

  4. For page type, select Access Control and click Next.

    The Access Control Wizard appears.

  5. Specify a page number and click Next.

  6. Select a tab option and click Next.

  7. Review the confirmation page and click Finish.

Creating an Access Control from the Page Definition

To create an access control list from the Page Definition:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Click the Create button next to the navigation bar at the top of the page.

  3. Select New page and click Next.

  4. For page type, select Access Control and click Next.

    The Access Control Wizard appears.

  5. Specify a page number and click Next.

  6. Select a tab option and click Next.

  7. Review the confirmation page and click Finish.

Creating an Access Control List from the Developer Toolbar

To create an access control list from the Developer toolbar:

  1. Run the application. See "Running a Page or Application".

  2. On the Developer toolbar, click Create.

    The New Component Wizard appears.

  3. Select New page and click Next.

  4. For page type, select Access Control and click Next.

    The Access Control Wizard appears.

  5. Specify a page number and click Next.

  6. Select a tab option and click Next.

  7. Review the confirmation page and click Finish.

Selecting an Application Mode and Adding Users

You can control access to an application by running the Access Control Administration page, selecting an application mode, and then adding users to the Access Control list.

This section contains the following topics:

Selecting an Application Mode

To select an application mode:

  1. Create an access control list. See "Creating an Access Control List".

    The wizard creates a page named Access Control Administration.

  2. Run the Access Control Administration page. See "Running a Page or Application".

  3. Select an Application Mode. Options include:

    • Full access to all, access control list not used.

      Select this option to enable all users access to an application.

    • Restricted access. Only users defined in the access control list are allowed.

      Select this option to restrict access to users on the Access Control List. Only users on the Access Control List can view pages and components associated with an authorization scheme.

    • Public read only. Edit and administrative privileges controlled by access control list.

      Provides public access to pages and components associated with the access control - view authorization scheme.

    • Administrative access only.

      Only users with Administrator privileges can access pages or components associated with an authorization scheme.

  4. Click Set Application Mode.

    Description of access_control_1.gif follows
    Description of the illustration access_control_1.gif

    Note that the user interface of your page is dependent upon the theme you selected for your application. See "Managing Themes".

    Next, add users to the Access Control List.

Adding Users to the Access Control List and Selecting Privileges

To add users to the Access Control List:

  1. Under Access Control List, click Add User.

    A new row appears.

    Description of access_control_2.gif follows
    Description of the illustration access_control_2.gif

  2. Enter a user in the Username field.

  3. Associate a privilege with the user. Available options include:

    • Administrator

    • Edit

    • View

  4. Click Apply Changes.

  5. Repeat steps 1 to 5 for all users.

Removing Users from the Access Control List

To remove users from the Access Control List:

  1. Select the user to be removed by selecting the check box to the left of the user name.

  2. Click Delete.

Controlling Access for Pages and Page Components

The Access Control Wizard creates authorization schemes that correspond to the application mode list options and the privileges available in the Access Control List.

You can control access to a specific page or page component by selecting one of the following authorization schemes on the page or component attributes pages:

  • access control administrator. Only users with Administrator privileges can view the page or component.

  • access control - edit. Users with both Edit and Administrator privileges can view the page or component. Users with View privileges cannot view the page or component.

  • access control - view. Users with Administrator, Edit, or View privileges can view the page or component.

  • Not access control administrator. Users with Administrator privileges cannot view the page or component.

  • Not access control - edit. Users with both Edit and Administrator privileges cannot view the page or component. Users with View privileges can view the page or component.

  • Not access control - view. Users with Administrator, Edit, or View privileges cannot view the page or component.

Incorporating JavaScript into an Application

Adding JavaScript to a Web application is a great way to add features that mimic those found in client/server applications without sacrificing all the benefits of Web deployment. Oracle Application Express includes multiple built-in interfaces especially designed for adding JavaScript.

Remember that JavaScript is not appropriate for data intensive validations. For example, to verify that a name is contained within a large database table, you would need to pull down every record to the client, creating a huge HTML document. In general, complex operations are much better suited for server-side Application Express validations instead of JavaScript.

This section contains the following topics:

Referencing Items Using JavaScript

When you reference an item, the best approach is to reference by ID. If you view the HTML source of an Oracle Application Express page in a Web browser, you would notice that all items have an id attribute. This id corresponds to the name of the item, not the item label. For example, if you create an item with the name P1_FIRST_NAME and a label of First Name, the ID will be P1_FIRST_NAME.

Knowing the item ID enables you to use the JavaScript method getElementById() to get and set item attributes and values. The following example demonstrates how to reference an item by ID and display its value in an alert box.

<script language="JavaScript1.1" type="text/javascript">
  function firstName(){    
    alert('First Name is ' + document.getElementById('P1_FIRST_NAME').value );
  }
 // or a more generic version would be
  function displayValue(id){    
    alert('The Value is ' + document.getElementById(id).value );
  }
</script>
 
  // Then add the following to the "Form Element Attributes" Attribute of the item:
  onchange="displayValue('P1_FIRST_NAME');"

Incorporating JavaScript Functions

There are two primary places to include JavaScript functions:

  • In the HTML Header attribute of the page

  • In a .js file in the page template


See Also:

"Text with JavaScript Escaped Single Quotes" for information about referencing a shortcut inside of a JavaScript literal string

Incorporating JavaScript into the HTML Header Attribute

One way to include JavaScript into your application is to add it to the HTML Header attribute of the page. This is a good approach for functions that are very specific to a page and a convenient way to test a function before you include it in the .js file.

You can add JavaScript functions to a page by simply entering the code into the HTML Header attribute of the Page Attributes page. In the following example, adding the code would make the test function accessible from anywhere on the current page.

To add JavaScript code in the HTML Header attribute:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Select a page.

  4. Under Page, click the Edit page attributes icon.

  5. Scroll down to HTML Header.

  6. Enter code into HTML Header and click Apply Changes.

For example, adding the following would test a function accessible from anywhere on the current page.

<script type="text/javascript">
  function test(){
    window.alert('This is a test.');
  }
</script>

See Also:

"HTML Header"

Including JavaScript in a .js File Referenced by the Page Template

In Oracle Application Express, you can reference a .js file in the page template. This approach makes all the JavaScript in that file accessible to the application. This is the most efficient approach since a .js file loads on the first page view of your application and is then cached by the browser.

The following demonstrates how to include a .js file in the header section of a page template. Note the line script src= that appears in bold.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <title>#TITLE#</title>
    #HEAD#
    <script src="http://myserver.myport/my_images/custom.js" type="text/javascript"></script>
</head>
<body #ONLOAD#>#FORM_OPEN#

See Also:

"Page Templates"

Calling JavaScript from a Button

Calling JavaScript from a button is a great way to confirm a request. Oracle Application Express uses this technique for the delete operation of most objects. For example, when you delete a button, a JavaScript message appears asking you to confirm your request. Consider the following example:

<script type="text/javascript">
  function deleteConfirm(msg)
  {
var confDel = msg;
if(confDel ==null)
  confDel= confirm("Would you like to perform this delete action?");
else
  confDel= confirm(msg);
  
if (confDel== true)
  doSubmit('Delete');
  }
</script>

This example creates a function to confirm a delete action and then calls that function from a button. Note that the function optionally submits the page and sets the value of the internal variable :REQUEST to Delete, thus performing the deletion using a process that conditionally executes based on the value of the request.

Note that when you create the button, you would need to select Action Redirect to URL without submitting page. Then, you would specify a URL target such as the following:

confirmDelete('Would you like to perform this delete action?');

Optimizing a Page for Printing

You can optimize a page for printing by creating a specific Printer Friendly template and selecting that template on the Create/Edit Theme page. See "Changing the Default Templates in a Theme".

Generally, a Printer Friendly template optimizes a page for printing. For example, a Printer Friendly template might:

  • Not display tabs or navigation bars

  • Display items as text instead of as form elements

If the theme you select does not include a printer friendly template, you can create a Printer Friendly template by creating a new page template.

Topics in this section include:

Selecting a Printer Friendly Template for an Application

To select a Printer Friendly template:

  1. Navigate to the Themes page:

    1. On the Workspace home page, click Application Builder.

    2. Select an application.

    3. Click Shared Components.

    4. Under User Interface, select Themes.

  2. In the Themes list, click the theme name.

    The Create/Edit Theme page appears.

  3. Scroll down to Component Defaults and locate the Printer Friendly Page list.

  4. Make a selection from the Printer Friendly Page list.

  5. Click Apply Changes.

Using f?p Syntax to Toggle to Printer Friendly Mode

Once you create a Printer Friendly template and select it, you can use f?p syntax to toggle to Printer Friendly mode. Including the ninth f?p syntax argument (PrinterFriendly) renders the page in printer friendly mode (optimizing printed output). For example, you could include this argument when coding a link or creating a navigation bar icon.

Creating a Help Page

Application Builder includes built-in attributes to create Help for your application. Creating Help for your application involves the following steps:

  1. Create a dedicated Help page and Help region.

  2. Define page Help text.

  3. Define item Help text.

  4. Create a navigation bar icon to link to your Help page.

Help created in Application Builder displays on a dedicated Help page. To access Help, users click a link that takes them to a dedicated Help page. This Help page displays page and item Help topics specific to the page they are viewing.

Topics in this section include:

Creating a Help Page and Region

The first step in creating Help for your application is to create a dedicated page and Help Text region.

To create a Help Text region:

  1. Create a page for your Help. See "Managing Pages in an Application".

  2. Navigate to the Page Definition of your Help page. See "Accessing a Page Definition".

  3. Under Regions, the Create icon.

  4. When prompted to select a region type, select Help Text.

  5. Follow the on-screen instructions.

Defining Help Text

You define Help text for a page or single item by editing attributes. Ideally, you would define these attributes as you create your application. For simplicity, however, the following procedures describe how to define this text after the fact.


See Also:

"Item Help"

Topics in this section include:

Defining Help for a Page

To define page Help text:

  1. Navigate to the Page Definition for the page for which you want to add page Help. See "Accessing a Page Definition".

  2. Under Page, click the Edit page attributes icon to view the existing page attributes.

  3. Scroll down to Help.

  4. Enter your Help text in the field provided.

  5. Click Apply Changes.

Repeat the previous procedure for each page requiring page Help text.

Defining Help Text for an Item

To define item Help text for an item:

  1. Navigate to the Page Definition for the page for which you want to add item Help. See "Accessing a Page Definition".

  2. Under Items, click the name of the item you want to edit.

  3. Scroll down to Help Text.

  4. Enter your Help text in the field provided.

  5. Click Apply Change.

Repeat the previous procedure for each item requiring Help text.

Editing Multiple Item Help Topics Simultaneously

If you are including item Help in your application, you can edit multiple item Help topics at once using the Bulk Edit Item Help report.

Accessing the Bulk Edit Item Help Report

To view the Bulk Edit Item Help report:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. On the Tasks list, click Application Reports.

  4. Click Page Components.

  5. Under Items, click Item Help Text.

    A report displays at the bottom of the page.

  6. In Bulk Item Help Report, you can:

    • Update existing Help topics. Edit the Help text that appears and click Apply Changes.

    • Link to the Page Definition containing the item by clicking the page number.

    • Link to the Page Item by clicking the item name.

Seeding Item Help Topics

If your application does not yet contain item Help, you can perform a mass update of default Help text.

To seed item Help topics:

  1. Access the Bulk Edit Item Help report as described in the previous topic.

  2. Click Seed Item Help Text.

  3. In Default Help Text, enter the default text to appear in all Help topics.

  4. Click Apply Changes.

Searching for Existing Item Help Topics

You can search for existing Help text, or for an item label.

To search for existing item Help topic:

  1. In Help Contains, enter keywords.

  2. Click Go.

Searching for an Item Label

To search for an item label:

  1. In Help Contains, enter keywords.

  2. Click Go.

Creating a Help Navigation Bar Entry

Once you have created your Help, the next step is to create a navigation bar entry so users can link to it.

To create a navigation bar entry:

  1. Navigate to the Page Definition. See "Accessing a Page Definition".

  2. Under Navigation Bar, click the Create icon.

  3. For Attributes:

    1. Sequence - Specify the sequence for this component. The sequence determines the order of evaluation.

    2. Alt Tag Text - Enter ALT text for navigation icons that are images. If you do not specify an image name, then this text displays.

    3. Icon Image Name - Enter the name of the image that displays.

    4. Image Height - Enter the height of the image.

    5. Image Width - Enter the width of the image.

    6. Text - Enter additional text to display with the image. You can include text or use icons with no text. This attribute is optional and can be translated.

    7. Click Next.

    Next, specify the target location.

  4. For Target:

    1. Target is a - Select Page in this application.

    2. Page - Specify the page number of the help page you created in "Creating a Help Page and Region".

    3. Request - Enter the following:

      &APP_PAGE_ID.
      

      By specifying substitution string &APP_PAGE_ID as the Request, you are instructing the Application Express engine to display Help text for the current page when the user clicks this icon.

    4. Click Next.

  5. Click Create.

PKGjjPK6(AOEBPS/themes.htm Managing Themes and Templates

10 Managing Themes and Templates

This section describes different ways you can alter your application's user interface and page layout through themes and templates.

This section contains the following topics:

Managing Themes

Themes are collections of templates that can be used to define the layout and style of an entire application. The idea behind a theme is to provide a complete set of templates that accommodate every UI pattern that may be needed in an application. Templates are organized first by type (breadcrumb, button, calendar, label, list, page, popup list of values, region, and report) and then by template classes, identifying the purpose of the each template within that type. Each template type provides a group of standard classes and eight custom classes. These classifications enable Oracle Application Express to map templates among themes, making it easy to quickly change the entire look and feel of an application.

Oracle Application Express ships with an extensive theme repository. You can add themes to the theme repository as follows:

  • Workspace administrators can create Workspace themes. Workspace themes are available to all developers within the workspace. See "Managing Workspace Themes".

  • Instance administrators can create public themes. Public themes are added using the Application Express Administration Services. Once added, these themes are available to all workspaces and developers. See "Managing Themes for an Oracle Application Express Instance" in Oracle Application Express Administration Guide.

Topics in this section include:

Accessing the Themes Page

You manage themes on the Themes page. You can access the Themes page from the Shared Components page or from the Page Definition.

Topics in this section include:

Accessing the Themes Page from Shared Components

To access the Themes page from Shared Components:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click Shared Components.

  4. Under User Interface, select Themes.

    The Themes page appears.

  5. Select Details from the View list and click Go.

    A check mark in the Current column indicates which theme is selected.

  6. Click the theme name.

    The Create/Edit Theme page appears.

Accessing the Themes Page from a Page Definition

To access the Themes page from the Page Definition:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Select a page.

    The Page Definition appears.

  4. Under Shared Components, locate the Theme section.

  5. Click a theme name.

    The Create/Edit Theme page appears.

Changing the Default Templates in a Theme

A standard theme contains templates for every type of application component and region type. You can change the selected default templates for a theme on the Create/Edit Theme page.

You can override the default templates in a theme by selecting another template when you create components or regions, or by changing the template on the component or region attributes page.

To review or change the default templates in a theme:

  1. Navigate to the Themes page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. Click Shared Components.

    4. Under User Interface, select Themes.

      The Themes page appears.

  2. To edit a theme:

    1. From the View list, select Details and click Go.

    2. Click the theme name.

    The Create/Edit Theme page appears.

    The Create/Edit Theme page is divided into sections. You can access these sections by scrolling down the page, or by clicking a navigation button at the top of the page. When you select a button at the top of the page, the selected section appears and all other sections are temporarily hidden. To view all sections of the page, click Show All.

    Note the application ID and the Theme Identification Number display at the top of the page.

  3. To change the theme name, enter a name in the Name field.

  4. To change a default template, make a selection from the appropriate list.

    Table 10-1 describes the default templates available under Component Defaults.

    Table 10-1 Component Default Templates

    AttributeDescription

    Page

    Identifies the default template for displaying pages. If a developer does not explicitly choose a template, then the Application Express engine uses the template specified here.

    Once defined, this default template appears on the Edit Definition page under the heading Application Template Defaults.

    See Also: "Display Attributes" for information about overriding the page template on the Page Attributes page

    Error Page

    Specifies a page template to use for errors that display on a separate page as opposed to those that display inline. Leave this attribute blank if you do not want to use a template designed to display errors.

    Once defined, this default template appears on the Edit Definition page under the heading Application Template Defaults.

    Printer Friendly Page

    Identifies the template to be used when the Application Express engine is in printer friendly mode.

    See Also: "Optimizing a Page for Printing"

    Breadcrumb

    Identifies the default breadcrumb template used when you create a breadcrumb.

    Button

    Identifies the default button template used when you create a button.

    Calendar

    Specifies the default calendar template used when you create a calendar.

    Label

    Identifies the default label template used when you create a label.

    List

    Specifies the default list template used when you create a list.

    Region

    Specifies the default region template used when you create a region.

    Report

    Identifies the default region template used when you create a report.


    Table 10-2 describes the default templates available under the section Regions Defaults.

    Table 10-2 Region Defaults

    AttributeDescription

    Breadcrumbs

    Default region template used when you create a breadcrumb.

    Charts

    Default chart template used when you create a chart.

    Forms

    Default form template used when you create a form.

    Lists

    Default region template used when you create a list.

    Reports

    Default region template used when you create a report.

    Tabular Forms

    Default region template used when you create a tabular form.

    Wizards

    Default region template used when you create a wizard component.


Creating a Theme

You can create a theme from scratch or select an existing theme from the repository.

To create a theme:

  1. Navigate to the Themes page:

    1. On the Workspace home page, click Application Builder.

    2. Select an application.

    3. Click Shared Components.

    4. Under User Interface, select Themes.

  2. Click Create.

  3. Select a creation method:

    • From the Repository

    • From Scratch

    • From Export

  4. Follow the on-screen instructions.

  5. To learn more about a specific field, click the field label.

    When Help is available, the item label changes to red when you pass your cursor over it and the cursor changes to an arrow and question mark. See "About Field-Level Help".

About the Themes Page

Once you create a theme, it appears on the Themes page. A navigation bar appears at the top of the page and contains the following controls:

  • Theme. Enter a case insensitive query for a theme name and click Go. To view all themes, leave the field blank and click Go.

  • View. Controls how the page displays. Options include:

    • Icons (the default) displays each theme as a large icon. To edit a theme, click the appropriate icon.

    • Details displays each theme as a line in a report. To change the theme name or default templates, click the theme name. In Details view, you can select the following options from the Show list:

      • Summary View displays the theme number, name, and current status.

      • Detailed View displays the theme number, name, current status, and the number of templates in each template type.

  • Display. Determines how themes display. To increase or decrease the number, make a selection from the Display list and click Go.

Editing a Theme

You can create a theme from scratch or select an existing theme from the repository.

To create a theme:

  1. Navigate to the Themes page:

    1. On the Workspace home page, click Application Builder.

    2. Select an application.

    3. Click Shared Components.

    4. Under User Interface, select Themes.

  2. On the Tasks list, click Edit Theme.

    The Create/Edit Theme page appears.

  3. To learn more about a specific field, click the field label.

    When Help is available, the item label changes to red when you pass your cursor over it and the cursor changes to an arrow and question mark. See "About Field-Level Help".

  4. Make the appropriate edits and click Apply Changes.

Switching the Active Theme

When you switch to a theme, all components with assigned templates are assigned to a corresponding template in the theme. Application Builder accomplishes template mapping through the assignment of template class identifiers.


Note:

You can only switch to a theme if that theme exists. For example, before you can switch to a theme available in the repository, you must first create it. See "Creating a Theme".

To apply a theme to an application:

  1. Navigate to the Themes page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. Click Shared Components.

    4. Under User Interface, select Themes.

  2. Click Switch Theme.

    The Switch Theme page appears.

  3. From Switch to Theme, select a theme and click Next.

  4. Review the Status column to identify problematic mappings:

    • Check indicates the mapping was successful.

    • Warning indicates there are more than one template in the theme you are switching to with the identified class. The warning provides a select list from which to choose the appropriate template.

    • Error indicates that Application Builder was unable to map the class among the themes. Ensure that a class is identified for the templates in both themes.

  5. Click Next to continue.

  6. Click Switch Theme.


See Also:

"Creating a Theme"

Copying a Theme

Each theme is identified by a numeric identification number (ID). When you copy a theme, you specify a theme ID. Copying a theme is useful when experimenting with editing a theme or to export a theme with a different ID.

To copy a theme:

  1. Navigate to the Themes page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. Click Shared Components.

    4. Under User Interface, select Themes.

  2. On the Tasks list, click Copy Theme.

  3. On Copy Theme:

    1. Copy From Theme - Select the theme you want to copy.

    2. Copy to this Theme Identification Number - Enter a new ID for the theme.

    3. Click Next.

  4. Click Copy Theme ID.

Deleting a Theme

You can only delete inactive themes. When you delete a theme, Application Builder only removes inactive templates.

To delete a theme:

  1. Navigate to the Themes page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. Click Shared Components.

    4. Under User Interface, select Themes.

  2. On the Tasks list, click Delete Theme.

  3. From Remove Theme, select the theme you want to delete and click Next.

  4. Click Delete Theme.

Managing Workspace Themes

Workspace administrators manage the theme repository for a workspace. Workspace administrators can add a theme to the repository, making it available to all developers within a workspace, or delete it.

Topics in this section include:


See Also:

"Managing Themes for an Oracle Application Express Instance" in Oracle Application Express Administration Guide

Adding a Theme to the Theme Repository

To add a theme to the Theme repository:

  1. Navigate to the Themes page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. Click Shared Components.

    4. Under User Interface, select Themes.

  2. From the Tasks List, click Manage Workspace Themes.

  3. Select Create and click Next.

  4. For Application Theme to Copy, select the desired theme and click Next.

  5. for Identify Name, enter a theme number, name, and optional description and then click Next.

  6. Click Create Workspace Theme.

Deleting a Workspace Theme

To delete a workspace theme:

  1. On the Workspace home page, click the Application Builder icon.

  2. On the Tasks list, click Workspace Themes.

  3. Select the theme to be deleted.

  4. Click Delete.

Modifying a Workspace Theme

You cannot edit a workspace theme directly. To modify a workspace theme, you need to create an application using the theme, modify it, and then manually add it to the workspace theme repository. a theme in the same way you export any related application files.

To modify a workspace theme:

  1. Create an application using the theme you want to modify. "Creating an Application".

  2. Modify the theme. See "Editing a Theme".

  3. Delete the existing workspace theme. See "Deleting a Workspace Theme".

  4. Add the modified theme to the workspace theme repository. See "Adding a Theme to the Theme Repository".

About Exporting a Workspace Theme

You export a theme in the same way you export any related application files. Exporting a workspace theme involves the following steps:

  1. Create an application using the theme. "Creating an Application".

  2. Export the application. See "Exporting an Application".

  3. Import the exported file into the target Oracle Application Express instance. See "Importing an Application or Page".

  4. Install the exported file from the Export Repository. See "Installing Export Files".

About Exporting and Importing Themes

You export a theme in the same way you export any related application files. Exporting a theme from one development instance to another involves the following steps:

  1. Create an application using the theme. "Creating an Application".

  2. Export the theme using the Export Theme utility. See "Exporting Themes".

  3. Import the exported file into the target Oracle Application Express instance. See "Importing Export Files".

  4. Install the exported file from the Export Repository. See "Installing Export Files".

Changing a Theme Identification Number

Each theme has an identification number (ID). You can use the Change Theme ID utility to change a theme ID to another identification number. Changing a theme ID is useful when you want to export a theme with a different number and then import it into another application.

To change a theme identification number:

  1. Navigate to the Themes page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. Click Shared Components.

    4. Under User Interface, select Themes.

  2. On the Tasks list, click Change Identification Number.

  3. For Theme Number:

    1. Identify Theme - Select a theme.

    2. Change to this Theme Identification Number - Specify an identification number.

    3. Click Next.

    4. Confirm your changes and click Change Theme ID.

Viewing Theme Reports

Application Builder includes a number of reports designed to help you manage themes and templates.

Topics in this section include:

Viewing All Templates in a Theme

To view all templates that comprise a theme:

  1. Navigate to the Themes page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. Click Shared Components.

    4. Under User Interface, select Themes.

  2. Click Reports.

  3. On the Theme Reports page:

    1. From Report, select Application Templates.

    2. From Theme, select a theme.

    3. Click Go.

    A list of templates appears with the template type, template name, the associated theme, and template class.

  4. To edit a template, select the template name.

Viewing Theme Template Counts

The Theme Template Count report lists which template classes currently have templates created for them.

To view the Theme Template Count report:

  1. Navigate to the Themes page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. Click Shared Components.

    4. Under User Interface, select Themes.

  2. Click Reports.

  3. On the Theme Reports page:

    1. From Report, select Theme Template Counts.

    2. From Theme, select a theme.

    3. Click Go.

  4. If you are using custom classifications, select Show Custom and click Go.

Viewing File References

The File References report displays a list of all files associated with templates, shared components, or page components in the current application.

To view the File References report:

  1. Navigate to the Themes page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. Click Shared Components.

    4. Under User Interface, select Themes.

  2. On the Themes page, click Reports.

  3. On the Theme Reports page:

    1. From Report, select File References.

    2. From Theme, select a theme.

    3. Click Go.

  4. On the File References page:

    1. From Show, select the type of component to include in the report. If you do not make a selection, no results are returned.

    2. From Show Files, select one of the following:

      • With context displays the component, the theme identification number, the component name, the image (if applicable), and the page number. Select the page number to link to a Page Definition.

      • Without context displays only the file name and the image (if applicable).

    3. From File Extensions, select the type of extensions for which to search.

    4. Click Go.

  5. To download a comma-delimited file (.csv) version of this report, click Download at the bottom of the page.

Viewing Class References

Accessing the Class References report displays a list of classes associated with templates, shared components, or page components in the current application.

To view the Class References report:

  1. Navigate to the Themes page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. Click Shared Components.

    4. Under User Interface, select Themes.

  2. Click Reports.

  3. On the Theme Reports page:

    1. From Report, select Class References.

    2. From Theme, select a theme.

    3. Click Go.

  4. On the Class References page:

    1. From Show, select the components to check for a class reference. If you do not make a selection, no results are returned.

    2. From Show Class Names, select one of the following:

      • With context displays the component, the theme identification number, the component name, the image (if applicable), and the page number.

      • Without context displays only the referenced class.

    3. Click Go.

  5. To download a comma-delimited file (.csv) version of this report, click Download at the bottom of the page.

Viewing Template Substitution Strings

Use the Template Substitution Strings report to view all supported substitution strings by component.

To view the Substitution String report:

  1. Navigate to the Themes page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. Click Shared Components.

    4. Under User Interface, select Themes.

  2. Click Reports.

  3. On the Theme Reports page:

    1. From the Report list, select Template Substitution Strings.

    2. From the Theme list, select which themes to include in the report.

    3. Click Go.

  4. To link to a template definition, select the component name.

Customizing Templates

The Application Express engine creates the user interface of an application based on a named collection of templates called a theme. Templates control the look and feel of the components in your application. If you need to create a custom template, it is generally easier to start with an existing template and then modify it. Once you have created one or more default templates, you can modify those templates to fit your specific needs.

Topics in this section include:


See Also:

Managing Themes

About Cascading Style Sheets

A cascading style sheet (CSS) provides a way to control the style of a Web page without changing its structure. When used properly, a CSS separates visual attributes such as color, margins, and fonts from the structure of the HTML document. Oracle Application Express includes themes that contain templates that reference their own CSS. The style rules defined in each CSS for a particular theme also determine the way reports and regions display.

Selecting a Default Page Template

You can specify a default page template in two ways:

  • Select a default page template within a specific theme.

  • Select a specific page template on a page-by-page basis.

By default, the Application Express engine uses the Page template specified on the Themes page.

Topics in this section include:

Selecting a Page-level Template Within a Theme

To specify a default page template within a theme:

  1. Navigate to the Themes page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. Click Shared Components.

    4. Under User Interface, select Themes.

      The Themes page appears.

  2. From View, select Details and click Go.

  3. In the Themes list, select the theme name.

    The Create/Edit Theme page appears.

  4. Under Component Defaults, make a selection from the Page list.

  5. Click Apply Changes at the top of the page.

Selecting a Page-level Template for a Specific Page

To specify a page-level template for a specific page:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Select a page.

  4. Under Page, click the Edit page attributes icon.

  5. Locate the section Display Attributes.

  6. Make a selection from the Page Template list.

  7. Click Apply Changes at the top of the page.

Creating a New Template

If you must create a custom template, it is generally easier to start with an existing template and then modify it. Once you have created one or more default templates, you can modify those templates to fit your specific needs.

To create a custom template:

  1. Navigate to the Templates page.

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. Click Shared Components.

    4. Under User Interface, select Templates.

  2. Click Create.

  3. Select the type of template you want to create.

  4. Select a creation method:

    • From Scratch

    • As a Copy of an Existing Template

  5. Follow the on-screen instructions.


Tip:

Make sure you associate your template with the correct theme.

Viewing Template Reports

Application Builder includes reports describing template utilization, subscription, published templates and edit history.

To view template reports for the current application:

  1. Navigate to the Themes page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. Click Shared Components.

    4. Under User Interface, select Templates.

  2. You can narrow the display by making a selection from the following lists and clicking Go.

    • Template Name - Enter a case insensitive query.

    • Theme - View only templates in a specific theme.

    • Referenced - Select a type of template to display.

    • Type - Select a a type of template type.

    • Since - Restrict the report to a specific time frame. Select the amount of time to include in your report.

    • Subscribed - Specify whether to view All Templates, Subscribed Templates, or Not Subscribed Templates.

  3. To view template reports, click the following buttons:

    • Utilization displays template utilization in the current application for all template types (page, report, region, label and list).

    • Subscription displays subscribed templates in your application.

    • History details recent changes to templates by developers and the last update date.

Managing Templates

You can view all available templates on the Templates page. Alternatively, you can access a template associated with a specific page on the Page Definition.

Topics in this section include:

Viewing Templates on the Templates Page

To view existing templates:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click Shared Components.

  4. Under User Interface, select Templates.

    The Templates page appears.

  5. You can narrow the display by making a selections from the following lists and clicking Go.

    • Template Name - Enter a case insensitive query.

    • Theme - View only templates in a specific theme.

    • Referenced - Select a type of template to display.

    • Type - Select a a type of template type.

    • Since - Restrict the report to a specific time frame. Select the amount of time to include in your report.

    • Subscribed - Specify whether to view All Templates, Subscribed Templates, or Not Subscribed Templates.

  6. To see a preview of a template, click the Run icon in the Preview column.

    Note that not all template types have the preview capability.

  7. To view or edit a template definition, click the template name.

    The template definition appears.

    Each template definition is divided into sections. You can access these sections by manually scrolling, or by clicking a navigation button at the top of the page. When you select a button at the top of the page, the selected section appears and all other sections are temporarily hidden. To view all sections of the page, click Show All.

  8. Edit the appropriate attributes.

    Note that if you edit a template, you can make changes in one window and run your application in another by selecting the Return to Page check box on the right side of the template definition page. Selecting this check box keeps the page you are editing current after you click Apply Changes.

  9. Click Apply Changes.

Viewing Templates Associated with a Specific Page

To view templates associated with a specific page:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Select a page.

    The Page Definition appears. Templates associated with the current page display under the Templates heading in the far right column.

  4. To view or edit a template definition, click the template name.

    The Template Definition appears.

    Each template definition is divided into sections. You can access these sections by manually scrolling, or by clicking a navigation button at the top of the page. When you select a button at the top of the page, the selected section appears and all other sections are temporarily hidden. To view all sections of the page, click Show All.

  5. Edit the appropriate attributes.

    Note that if you edit a template, you can make changes in one window and run your application in another by selecting the Return to Page check box on the right side of the template definition page. Selecting this check box keeps the page you are editing current after you click Apply Changes.

  6. Click Apply Changes.

Replacing Templates

You can update the template associated with a component using the Replace Templates Wizard.

To replace the template associated with a component:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click Shared Components.

  4. Under User Interface, select Templates.

    The Templates page appears.

  5. From the Task list, select Replace Templates.

  6. From Template Type, select a template and click Next.

  7. For Replace Templates, select the following:

    1. Change From - Select the template you want to change.

    2. Change To - Select the template you want to change to.

    3. Click Next.

  8. Click Finish.

Replacing All Templates within an Application

To replace all templates within an application with templates from another application:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click Shared Components.

  4. Under User Interface, select Templates.

    The Templates page appears.

  5. From the Task list, select Replace templates in this application with templates from another application.

  6. From Replace from Application, select an application and click Next.

  7. On Replace Templates, select a new template for each component and then select one of the following:

    • Replace copies the template definition

    • Replace/Subscribe copies the templates and adds a subscription.

  8. Click Replace Templates.

Viewing Region Position Utilization by Page Template

Regions are organized on a page by position (or Display Point). The possible display points for a region are determined by the page-level template.

To view region position utilization by page template:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click Shared Components.

  4. Under User Interface, select Templates.

    The Templates page appears.

  5. From the Task list, select View page template region position utilization.

    The Region Display Point Utilization report appears.

Unsubscribing to Templates

A subscribed template is a template that has its definition maintained in another template, the referenced template. If your application utilizes subscribed templates, you can unsubscribe to templates on the Unsubscribe Templates page.

To unsubscribe to templates:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click Shared Components.

  4. Under User Interface, select Templates.

    The Templates page appears.

  5. From the Task list, select Unsubscribe Templates.

    The Unsubscribe Templates page appears.

  6. To unsubscribe to a specific template type within the current theme, select the template type and click Unsubscribe.

Publishing Templates

Use the Publish Templates page to view templates that are subscribed to by other templates in your workspace.

To publish master template content to subscribing templates:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click Shared Components.

  4. Under User Interface, select Templates.

    The Templates page appears.

  5. Click the Publish tab.

    The Published Templates page appears.

  6. Select those you want to publish and click Publish Checked.

Breadcrumb Templates

A breadcrumb template controls the display of breadcrumb entries. You select a breadcrumb template when you create a region.

About Breadcrumb Style Navigation

Breadcrumbs usually indicate where the current page is relative to other pages in the application. In addition, users can click a specific page to instantly view it. For example, the Oracle Application Express user interface includes breadcrumb paths at the top of each page.

Description of bc_menu.gif follows
Description of the illustration bc_menu.gif


See Also:

  • Online help for information about using specific sections of the Edit Breadcrumb Template page

  • "Creating Breadcrumbs"


Breadcrumb Template Attributes

This section describes specific sections of the Edit Breadcrumb Template page. You can access the sections of the page by either scrolling down the page, or by clicking a navigation button at the top of the page. Note that when you select a button at the top of the page, the selected section appears and all other sections are temporarily hidden. To view all sections of the page, click Show All.

Name

Name identifies the name of the template. Use the Translatable check box to indicate that the template contains text strings that require translation. Theme indicates the theme to which the template is a member.

Template Class identifies a specific use for the template. When you switch to a theme, all templates in one theme are mapped to corresponding templates in another theme. Application Builder accomplishes this template mapping through the assignment of a template class.

Subscription

Use Subscription to apply an existing template to the current application. When you select an existing template, you become a subscriber to that template.

To load a copy of a master template, click Refresh.

Template Type

Select one of the following template styles:

  • Child Breadcrumb Entries displays all breadcrumb entries that are children of the current page parent breadcrumb (that is, peers of the current breadcrumb).

  • Current Breadcrumb displays all breadcrumb entries in sequence with a common parent.

  • Parent Breadcrumb Entries displays all breadcrumb entries for the current pages parent breadcrumb (that is, one level up from the current breadcrumb entry).

  • Parent to Leaf (breadcrumb style) displays the current page breadcrumb entry, its parent to the left, and so on, until the root node is reached.

Definition

Table 10-3 describes available breadcrumb Entry attributes.

Table 10-3 Breadcrumb Entry Control attributes

AttributeDescription

Before First

Defines text that displays before the first breadcrumb entry.

Current Page Breadcrumb Entry

Defines the look of a breadcrumb entry that corresponds to the current page. This attribute supports the following substitution strings:

  • #NAME# specifies the short name of the breadcrumb entry.

  • #LINK# specifies the anchor target of the breadcrumb entry.

  • #LONG_NAME# specifies the long name of the breadcrumb entry.

Non Current Page Breadcrumb Entry

Defines the look of a breadcrumb entry that does not correspond to the current page. This attribute supports the following substitution strings:

  • #NAME# specifies the short name of the breadcrumb entry

  • #LINK# specifies the anchor target of the breadcrumb entry

  • #LONG_NAME# specifies the long name of the breadcrumb entry

After Last

Defines text that displays after the last breadcrumb entry.

Between Level

Defines text that displays between levels of breadcrumb entries. For example, if a breadcrumb has three levels this text would display at the "X" in the example that follows:

main X cars X porsche X 911

Maximum Levels

Specifies the number of levels that appear when displaying breadcrumbs in a breadcrumb style.


Link Attributes

Use Breadcrumb Link Attributes to specify hypertext link attributes for a breadcrumb entry.

Comments

Use this attribute to record comments about this component.

Substitution Strings

Lists substitution string usage for this template. Substitution strings are used within subtemplates to reference component values.

Button Templates

Button templates enable application developers to customize the look and feel of a button. To build a button, you can use multiple images or HTML tags. Using button templates is optional.

Button Template Attributes

This section describes specific sections of the Edit Button Template page. You can access the sections of the page by either scrolling down the page, or by clicking a navigation button at the top of the page. Note that when you select a button at the top of the page, the selected section appears and all other sections are temporarily hidden. To view all sections of the page, click Show All.

Name

Template Name identifies the name of the template. Use the Translatable check box to indicate if the template contains text strings that require translation. Theme indicates the theme to which the template is a member.

Template Class identifies a specific use for the template. When you switch to a theme, all templates in one theme are mapped to corresponding templates in another theme. Application Builder accomplishes this template mapping through the assignment of a template class.

Subscription

Use Subscription to apply an existing template to the current application. When you select an existing template, you become a subscriber to that template.

To load a copy of a master template, click Refresh Template.

Definition

Use Template to define the button template that displays. You have the option of including standard application substitutions. For example, &ITEM_NAME. values can be substituted at rendering time. Button templates support the following substitution strings:

  • #LABEL# is replaced with a button label.

  • #LINK# is replaced with a URL. The URL then calls a #doSubmit# or a redirect JavaScript that submits the page (that is, setting the request value), or simply redirects it to the supplied URL.

Comments

Use this attribute to record comments about this component.

Substitution Strings

Lists substitution string usage for this template. Substitution strings are used within subtemplates to reference component values.

Calendar Templates

Calendar templates control the appearance and placement of a calendar. Calendar templates frequently use HTML tables to arrange dates. You place calendar attributes using substitution strings such as #DD# and #MONTH#. A list of supported substitution strings appears on the right side of the Edit Calendar Template page. Note that template substitution strings must be in uppercase letters and begin and end with a number sign (#).

Calendar Template Attributes

This section describes specific sections of the Edit Calendar Template page. You can access the sections of the page by either scrolling down the page, or by clicking a navigation button at the top of the page. Note that when you select a button at the top of the page, the selected section appears and all other sections are temporarily hidden. To view all sections of the page, click Show All.

Calendar Definition

Name

Name identifies the name of the template. Theme indicates the theme to which the template is a member.

Template Class identifies a specific use for the template. When you switch to a theme, all templates in one theme are mapped to corresponding templates in another theme. Application Builder accomplishes this template mapping through the assignment of a template class.

Template Subscription

Use Template Subscription to apply an existing template to the current application. When you select an existing template, you become a subscriber to that template.

To load a copy of a master template, click Refresh.

Comments

Use this attribute to record comments about this component.

Monthly Calendar, Weekly Calendar, and Daily Calendar

Use the Monthly Calendar, Weekly Calendar, and Daily Calendar attributes to control the appearance and placement of specific calendars.

To learn more about a specific attribute, click the attribute label. When Help is available, the item label changes to red when you pass your cursor over it and the cursor changes to an arrow and question mark. See "About Field-Level Help".

Label Templates

Label templates are designed to centrally manage HTML markup of page item labels. Each item can have an optional label. You can control how these labels display using label templates. For example, you could create a label template called Required Field that references an image (such as an asterisk) to indicate to the user that the field is required.

Label templates enable you to define a before-and-after text string that gets prepended and appended to the item.

Label Template Attributes

This section describes specific sections of the Edit Label Template page. You can access the sections of the page by either scrolling down the page, or by clicking a navigation button at the top of the page. Note that when you select a button at the top of the page, the selected section appears and all other sections are temporarily hidden. To view all sections of the page, click Show All.

Name

Template Name identifies the name of the template. Use the Translatable check box to indicate that the template contains text strings that require translation. Theme indicates the theme to which the template is a member.

Template Class identifies a specific use for the template. When you switch to a theme, all templates in one theme are mapped to corresponding templates in another theme. Application Builder accomplishes this template mapping through the assignment of a template class.

Subscription

Use Template Subscription to apply an existing template to the current application. When you select an existing template, you become a subscriber to that template.

To load a copy of a master template, click Refresh Template.

Definition

In Before Label, enter HTML to display before the item label. Before Label supports the substitution strings #CURRENT_FORM_ELEMENT#; #CURRENT_FORM_ID#, and #CURRENT_ITEM_NAME#. For example:

<label for="#CURRENT_ITEM_NAME#">
<a href="javascript:popupFieldHelp('#CURRENT_ITEM_ID#',
  '&APP_SESSION.','&CLOSE.')" > 

In After Label, enter HTML to display after the item label. Since the label will automatically display before the HTML in this region, any open HTML tags in the Before Label region should be closed here. For example:

</a></label>
Error Display

In On Error Before Label, enter HTML to precede the item label when an application displays an inline validation error message for the item. For example:

<font class="fieldtitleleft">#ERROR_MESSAGE#

In On Error After Label, enter HTML to be appended to the item label when an application displays an inline validation error message for the item. This attribute supports the substitution strings #CURRENT_FORM_ELEMENT#, #CURRENT_FORM_ID#, and #CURRENT_ITEM_NAME#. The following example would append a space and a closing bracket to the displayed item label with the error.

&nbsp;]</font>
Comments

Use this attribute to record comments about this object.

Substitution Strings

Lists substitution string usage for this template. Substitution strings are used within subtemplates to reference component values.

List Templates

A list is a shared collection of links. You control the appearance of a list through list templates. Using template attributes, you can also define a list element to be either current or non current for a specific page.

About Hierarchical Lists

Oracle Application Express supports hierarchical lists. To create a hierarchical list, you must:

  • Select a list template that supports hierarchical lists. To determine which list templates support hierarchical lists, look for templates having the naming convention "with Sublist."

  • Select a Parent List Entry when you create each list entry.


See Also:

  • Online Help for information about using specific sections of the Edit List Template page

  • "Creating Lists"


List Template Attributes

This section describes specific sections of the Edit List Template page. You can access the sections of the page by either scrolling down the page, or by clicking a navigation button at the top of the page. Note that when you select a button at the top of the page, the selected section appears and all other sections are temporarily hidden. To view all sections of the page, click Show All.

Name

Name identifies the name of the template. Use the Translatable check box to indicate that the template contains text strings that require translation. Theme indicates the theme to which the template is a member.

Template Class identifies a specific use for the template. When you switch to a new theme, all templates in one theme are mapped to corresponding templates in another theme. Application Builder accomplishes this template mapping through the assignment of a template class.

Subscription

Use Subscription to apply an existing template to the current application. When you select an existing template, you become a subscriber to that template.

To load a copy of a master template, click Refresh Template.

Before List Entry

Enter HTML that displays before any list elements. You can use this attribute to open an HTML table or HTML table row.

Template Definition

Defines current and noncurrent list templates. Supported substitution strings include #LINK#, #TEXT#, #IMAGE_PREFIX#, #IMAGE#, #IMAGE_ATTR#, and #A01# to #A10#.

  • List Template Current. Enter HTML or text to be substituted for the selected (or current) list template.

  • List Template Current with Sub List Items. Enter HTML or text to be substituted for the selected (or current) list template when an item has sublist items. If not specified, the current list item template will be used.

  • List Template Noncurrent. Enter HTML or text to be substituted for the unselected (or noncurrent) list template.

  • List Template Noncurrent with Sub List Items. Enter HTML or text to be substituted for the unselected (or noncurrent) list template used when an item has sublist items. If not specified, the current list item template will be used.

  • Between List Elements. Enter HTML that displays between list elements. This attribute will be ignored if no HTML is specified.

Before Sub List Entry

Enter HTML that displays before any sublist elements.

Sub List Entry

Defines current and noncurrent list templates. Supported substitution strings include #LINK#, #TEXT#, #IMAGE_PREFIX#, #IMAGE#, #IMAGE_ATTR#, and #A01# to #A10#.

  • Sub List Template Current. Enter HTML or text to be substituted for the selected (or current) list template.

  • Sub List Template Current with Sub List Items. Enter HTML or text to be substituted for the selected (or current) list template when an item has sublist items. If not specified, the current list item template will be used.

  • Sub List Template Noncurrent. Enter HTML or text to be substituted for the unselected (or noncurrent) list template.

  • Sub List Template Noncurrent with Sub List Items. Enter HTML or text to be substituted for the unselected (or noncurrent) list template used when an item has sublist items. If not specified, the current list item template will be used.

  • Between Sub List Items. Enter HTML that displays between list elements. This attribute will be ignored if no HTML is specified.

After Sub List Entry

Enter HTML that displays after displaying sublist elements.

After List Entry

Enter HTML that displays after displaying all list elements. You can use this attribute to close an HTML table opened in the Before List Elements attribute.

Comments

Use this attribute to record comments about this object.

Substitution Strings

Lists substitution string usage for this template. Substitution strings are used within subtemplates to reference component values.

Page Templates

Page templates define the appearance of a page. Each template consists of a header template, a body template, a footer template, and a number of subtemplates. If you do not specify a page template as a page-level attribute, then the Application Express engine uses the default page template defined on the Create/Edit Theme page.

Page templates combine static HTML with substitution strings that are replaced at run time. You use substitution strings to indicate the existence and placement of a component within a page template. You can further specify how a component should display using subtemplates.

Topics in this section include:

Supported Page Template Substitution Strings

Table 10-4 describes the available page template substitution strings. Note that all template substitution strings must be in uppercase letters and begin and end with a number sign (#).

To view a report of substitution strings supported by a given template, look at the Substitution Stings section of the Edit Page Template page. See "Page Template Attributes".

Table 10-4 Page Template Substitution Strings

Substitution StringDescription

#APP_VERSION#

Can be used in the Header or Footer sections of the page template. You define the value of #APP_VERSION# in the Version attribute on the Edit Definition page

See Also: "Name"

#BOX_BODY#

Identifies where the Body displays. If the Body is null, then #BOX_BODY# will be used instead.

#CUSTOMIZE#

Can be used in the Header, Body, or Footer sections of the page template.

The Customization section of the Region Definition enables you to turn on end-user customization. To utilize this feature, you must also include the #CUSTOMIZE# substitution string in the page template.

If at least one region supports end-user customization, a link called Customize appears wherever the #CUSTOMIZE# substitution string appears in the page template. When users click this link, a window displays enabling them to turn on and off regions on the page.

See Also: "Editing Region Attributes"

#FORM_CLOSE#

If a #FORM_OPEN# is included, then you must include a #FORM_CLOSE# in the header, body, or footer template. #FORM_OPEN# must appear before the #BOX_BODY# and #FORM_CLOSE# must appear after the #BOX_BODY# substitution string.

#FORM_OPEN#

Specifies where the HTML open form tag <form> is placed. You must include this substitution string in order to submit a form.

You do not need to code your own form open; the Application Express engine does it for you.

#GLOBAL_NOTIFICATION#

Displays the Global Notification attribute. Global notifications are intended to communicate system status, such as pending system downtime. You can also use APEX_APPLICATION.G_GLOBAL_NOTIFICATION to set this value programmatically.

See Also: "Global Notifications" for information about the Global Notification attribute

#HEAD#

Used after the <head> open tag but before the </head> close tag. You can optionally define the contents of #HEAD# for each page (for example, to reference additional style sheets or JavaScript libraries).

#LOGO#

Identifies an application logo.

In the Logo section of the Edit Definition page, you can identify an image and image attributes for an application logo. To utilize this feature, you must also include the #LOGO# substitution string in the Header or Body page template.

See Also: "Logo"

#NAVIGATION_BAR#

Defines the existence of navigation bar entries. A navigation bar will appear on every page in your application that uses a template that includes this substitution string.You can expand this substitution string using the Navigation bar subtemplate.

See Also: "Subtemplate" for information about the Navigation Bar subtemplate

#NOTIFICATION_MESSAGE#

Enables developers to communicate messages to the user. Defines where a summary of inline error messages is displayed. Inline error messages can be displayed next to a field, inline in the notification area, or both.

#ONLOAD#

Can be used in the Header and Footer section of the page template and should be placed inside the <body> html tag. For example:

<body #ONLOAD#>

Use this string as a substitute in a JavaScript call to be executed when a page is loaded by the Web browser. The JavaScript to be called can vary for each page.

#PARENT_TAB_CELLS#

Identifies the display of parent tabs. Parent tabs require standard tabs. If your application only has one level of tabs, you do not need this substitution string.

See Also: "Standard Tab Attributes" for information about defining Parent Tab Attributes

#REGION_POSITION_NN#

Identifies the exact placement of regions within a page. If no region is specified (for example, #REGION_POSITION_01#), then #REGION_POSITION_01# will be replaced with nothing.

#SUCCESS_MESSAGE#

Defines where in the page success and error messages appear. If the page process runs without raising errors, then this text displays.

You can customize the display of the success message for each template by adding HTML to be displayed before and after the success message.

#TAB_CELLS#

Identifies the display of standard tabs.

See Also: "Standard Tab Attributes"

#TITLE#

Defines the page title. Typically included within HTML title tags.


Page Template Attributes

This section describes specific sections of the Edit Page Template page. You can access the sections of the page by either scrolling down the page, or by clicking a navigation button at the top of the page. Note that when you select a button at the top of the page, the selected section appears and all other sections are temporarily hidden. To view all sections of the page, click Show All.

Name

Name identifies the name of the template. Theme indicates the theme to which the template is a member.

Template Class identifies a specific use for the template. When you switch to a new theme, all templates in one theme are mapped to corresponding templates in another theme. Application Builder accomplishes this template mapping through the assignment of a template class. Use the Translatable check box to indicate that the template contains text strings that require translation.

Subscription

Use Subscription to apply an existing template to the current application. When you select an existing template, you become a subscriber to that template.

To load a new copy of a master template, select Refresh Template.

Definition

Each template consists of a header, a body, a footer, and subtemplates. Use substitution strings to include dynamic content. All template substitution strings must be in uppercase letters and begin and end with a number sign (#). See item Help for information about supported substitution strings.

Header is the first section of the page template. Enter HTML that defines the <Head> section of the HTML document. Regions that display or processes and computations that execute AFTER HEADER will display or execute immediately after this section in the template that is rendered. For example:

<html>
 <head>
   <title>#TITLE#</title>
   #HEAD#
 </head>

Body is the second section in the page template and is rendered after the header section but before the footer section. Enter HTML that defines the <Body> section of the HTML document. At a minimum, you must include the #BOX_BODY# substitution string. It is recommended that you also include the #FORM_OPEN# and #FORM_CLOSE# substitution strings. For example:

   <body #ONLOAD#>
      #FORM_OPEN#
      #BOX_BODY#
      #FORM_CLOSE#
   </body>

Footer is the third section in the page template that displays after the body.

Display Points

Breadcrumb Display Point applies to generated components that use breadcrumbs. It defines where the breadcrumbs are placed on the page. Sidebar Display Point applies to generated components that use Sidebars. It defines where sidebars are placed on the page.

Subtemplate

Use Subtemplate to specify how a component should display. Available subtemplates include:

  • Success Message. Expands the #SUCCESS_MESSAGE# substitution string. You can define a success message either programmatically or as an attribute of a process. If a success message exists and if the page template includes the #SUCCESS_MESSAGE# substitution string, then this subtemplate is used to render the message.

  • Navigation Bar. Controls the display of navigation bar entries. Enter HTML or text to be substituted when the #NAVIGATION_BAR# substitution string is referenced in the template header, body, or footer. Use the #BAR_BODY# substitution string to identify where each navigation bar icon should display. In the following example, #BAR_BODY# substitution string will generate the appropriate HTML table cells:

    <table class="navBar"><tr>#BAR_BODY#</tr></table>
    
  • Navigation Bar Entry. Enter HTML or text to be substituted into the navigation bar #BAR_BODY# substitution string for each navigation bar entry. Use the following substitution strings to create the navigation bar entry subtemplate.

    Use the following substitution strings to compose the navigation bar entry subtemplate:

    • #LINK# - entry link

    • #TEXT# - entry sub text

    • #IMAGE# - entry image

      Note that the HTML image ALT, HEIGHT, and WIDTH arguments will be included with the HTML IMG tag when supplied with the navigation bar entry.

    • #EDIT# - Inline edit link editing capability

    • #WIDTH# - Image width

    • #HEIGHT# - Image height

    • #COLSPAN# - HTML COLSPAN value

    • #ALT# - Image alternative text

  • Notification. Enter HTML or text to be substituted when the #NOTIFICATION_MESSAGE# substitution string is referenced in the template header, body, or footer. Use the substitution string #MESSAGE# to indicate where the body of the message will appear in the Notification Message.

Standard Tab Attributes

You must populate this attribute if your application includes standard tabs. Standard tabs can be placed in the header, body, or footer sections of the page template using the #TAB_CELLS# substitution string. The page template Header/Body/Footer defines the HTML table and rows. This subtemplate defines how these tabs display by defining the specific cell. Available attributes include:

  • Current Tab. Enter HTML or text to be substituted for the currently selected standard tab. Whether a tab is current is determined by standard tab attributes. For example:

    <td>#TAB_LABEL#</td>
    
  • Non Current Standard Tab. Enter HTML or text that will be substituted for the unselected standard tabs. Use the #TAB_TEXT# substitution string to position a tab's label and link within the template. For example:

    <td><a href="#TAB_LINK#">#TAB_LABEL#</a></td>
    

See Also:

"Creating Tabs"

Parent Tab Attributes

You must populate this attribute if your application includes two levels of tabs. Enter HTML or text that will be substituted for the selected parent tabs. Parent tabs can be placed in the header, body, or footer section of the page template using the #PARENT_TAB_CELLS# substitution string. Parent tabs only display with standard tabs. Available attributes include:

  • Current Parent Tab. Enter HTML or text that will be substituted for the selected parent tabs. Whether a tab is current is determined by the page that displays and the standard tab set that the page uses. Use the #TAB_TEXT# substitution string to position a tab's label and link within the template. For example:

    <td><a href="#TAB_LINK#">#TAB_LABEL#</a></td>
    
  • Non Current Parent Tab. Enter HTML or text that will be substituted for the unselected parent tabs. Use the #TAB_TEXT# substitution string to position a tab's label and link within the template. For example:

    <td><a href="#TAB_LINK#">#TAB_LABEL#</a></td>
    

See Also:

"Creating Tabs"

Image Based Tab Attributes

Use this subtemplate for tabs that are entirely based on images. Available attributes include:

  • Current Image Tab. Enter HTML to be used to indicate that an image-based tab is currently selected. Include the #TAB_TEXT# substitution string to show the displayed name of the tab.

  • Non Current Image Tab. Enter the HTML to be used to indicate that an image tab is not currently selected. Include the #TAB_TEXT# substitution string to show the displayed name of the tab.

Multi Column Region Table Attribute

If the Application Express engine displays regions in multiple columns in the same region position, then Oracle Application Express will render an HTML table. This attribute enables you to control the attributes of the <table> tag.

Error Page Template Control

Use this attribute only when a page template will be designated as an error template. Use the #MESSAGE# substitution string to place the error message and the #BACK_LINK# substitution string to display a link back to the previous page. A template can be designated as an error template by editing the application attributes. For example:

#MESSAGE#

<br>

<a href="#BACK_LINK#">back</a>
Comments

Use this attribute to record comments about this component.

Substitution Strings

Lists substitution string usage for this template. Substitution strings are used within subtemplates to reference component values.

Popup LOV Templates

Popup LOV templates control how popup lists display for all items defined as POPUP. You can only specify one popup LOV template for each theme.

Popup List of Values Template Attributes

This section describes specific sections of the Edit Popup List of Values Template page. You can access the sections of the page either by scrolling down the page or by clicking a navigation button at the top of the page. Note that when you select a button at the top of the page, the selected section appears and all other sections are temporarily hidden. To view all sections of the page, click Show All.

Application

Theme indicates the theme to which the template is a member. Template Class identifies a specific use for the template. When you switch to a new theme, all templates in one theme are mapped to corresponding templates in another theme. Application Builder accomplishes this template mapping through the assignment of a template class. Use the Translatable check box to indicate that the template contains text strings that require translation.

Subscription

Use Subscription to apply an existing template to the current application. When you select an existing template, you become a subscriber to that template.

To load a new copy of a master template, click Refresh Template.

Icon

Use Popup Icon to specify an icon to display to the right of a form field for items of type POPUP. By default, the Application Express engine uses a list.gif image. Use Popup Icon Attr to define image attributes, such as height and width, for the Popup Icon.

Search Field

Use these attributes to specify how a Search field displays. Table 10-5 describes available Search Field attributes.

Table 10-5 Search Field Attributes

AttributeDescription

Before Field Text

Defines text to display before the popup list of values search field displays.

Filter Width

Displays the text field using this width.

Filter Max Width

Displays the text field widget using this maximum width.

Filter Text Attribute

Displays the text field using these attributes. This will be included within the HTML input tag.

After Field Text

Displays this text after displaying the search field, the search button, and the close button.


Buttons

Use these attributes to define the button name and attributes for the Find, Close, Next, and Previous buttons.

Window

Popup lists of values are executed using JavaScript. Use these attribute to control the values of scrollbars=, resizable=, width=, and height=. For information about default values, see item Help.

Pagination

Defines how row count results display.

Result Set

Use these attributes to define text or HTML to display before and after a result set.

Page Attributes

Use these attributes to define popup pages. For more information, see item Help.

Region Templates

Region templates control the appearance and placement of region attributes. Region templates frequently use HTML tables to arrange content.

Region templates apply style elements to regions. Region templates display substitution strings. The only required substitution string, #BODY#, identifies where the source of the region should be placed. All other substitution strings are optional. You can use these substitution strings to indicate the existence and placement of a page control, such as a button, within the region.

Region Template Attributes

This section describes specific sections of the Edit Region Template page. You can access the sections of the page either by scrolling down the page or by clicking a navigation button at the top of the page. Note that when you select a button at the top of the page, the selected section appears and all other sections are temporarily hidden. To view all sections of the page, click Show All.

Name

Name identifies the name of the template. Theme indicates the theme to which the template is a member.

Template Class identifies a specific use for the template. When you switch to a new theme, all templates in one theme are mapped to corresponding templates in another theme. Application Builder accomplishes this template mapping through the assignment of a template class. Use the Translatable check box to indicate that the template contains text strings that require translation.

Subscription

Use Template Subscription to apply an existing template to the current application. When you select an existing template, you become a subscriber to that template.

To load a new copy of a master template, click Refresh Template.

Definition

Region templates provide the appearance for a portion of a page called a region. Use substitution strings to indicate the existence and placement of a component within the region. #BODY# is the only required substitution string. It identifies where the source of the region should be placed. All other substitution strings are optional. The following are valid substitution strings:

  • #TITLE#

  • #EXPAND#

  • #CHANGE#

  • #BODY#

  • #FORM_OPEN#

  • #FORM_CLOSE#

When you create a button in a region position, the positions you define will appear in a select list. Use the following substitution strings to define positions for the placement of buttons in a region:

  • #EDIT#

  • #CLOSE#

  • #CREATE#

  • #EXPAND#

  • #HELP#

  • #DELETE#

  • #COPY#

  • #NEXT#

  • #PREVIOUS#

Form Table Attributes

Page items display within regions. Items are rendered as HTML form elements in an HTML table. With this template property, you can define attributes that will be placed in the <table> tag. For example:

class="instructiontext"
Comments

Use this attribute to record comments about this component.

Substitution Strings

Lists substitution string usage for this template. Substitution strings are used within subtemplates to reference component values.

Report Templates

Report column templates provide you with control over the results of a row from a SQL query. This type of template defines a cell, not an entire row.

Each report template identifies column names using the syntax #1#, #2#, #3#, and so on. You can also name columns using column name substitution syntax such as #ENAME# or #EMPNO#. You can reference any item from your application within your template. For example, to reference an item called ABC. in your template, you could include the exact substitution string &ABC.. The actual value of ABC. would be provided by an end user editing an item in your application named ABC.

Topics in this section include:

About Generic Column Templates and Named Column Templates

Oracle Application Express includes two types of report templates:

  • Generic column templates

  • Named column templates

Generic Column Templates

A generic column template determines the appearance of a report by defining the look of the column once. This look is then repeated as many times as is necessary, based on the number of columns specified in the report's definition. This type of template is limited to reports that have a standard row and column structure. Additional style can be applied to a report using this type of template through the use of conditions.

The following example demonstrates how to have each column use a specific style:

<td class="tabledata" align="#ALIGN#">#COLUMN_VALUE#</td>

This example assumes your page template includes a CSS containing the class tabledata. This example also demonstrates the use the substitution strings #ALIGN# and #COLUMN_VALUE#. If you actually ran this report, these substitution strings would be replaced with values generated by the results of a SQL query.

If your query uses an expression in the select list, it is a good idea to create an alias for the columns to avoid run time errors. For example, suppose your query was as follows:

SELECT ename, (sal + comm) * 12 FROM emp

You could rewrite the query to alias the columns as follows:

SELECT ename, (sal + comm) * 12 yearly_comp FROM emp
Named Column Templates

Named column templates allow for more flexibility in report design. However, because they reference columns by name, they can only be used by reports that are based on those columns. For example:

<tr><td>#ENAME#</td><td>#SAL#</td></tr>

Although named column templates offer flexibility, you may need to create a new template for each query. You can also include a position notation. The following example demonstrates how to use following HTML and substitution strings:

<tr><td>#ENAME#</td><td>#SAL#</td></tr>

<tr><td>#1#</td><td>#2#</td></tr>

Report Column Template Attributes for Generic Column Templates

This section describes specific sections of the Edit Report Template page for Generic Column Templates. You can access the sections of the page by either scrolling down the page, or by clicking a navigation button at the top of the page. Note that when you select a button at the top of the page, the selected section appears and all other sections are temporarily hidden. To view all sections of the page, click Show All.

Report Template

Template Name identifies the name of the template. Template Type indicates the type of template. Named Column templates reference column names in the template. Generic Column Templates reference the #COLUMN_VALUE# substitution string in the template.

Theme indicates the theme to which the template is a member. Template Class identifies a specific use for the template. When you switch to a new theme, all templates in one theme are mapped to corresponding templates in another theme. Application Builder accomplishes this template mapping through the assignment of a template class. Use the Translatable check box to indicate the template contains text strings that require translation.

Template Subscription

Use Template Subscription to apply an existing template to the current application. When you select an existing template, you become a subscriber to that template.

To load a new copy of a master template, click Refresh Template.

Before Rows

In Before Rows, enter HTML that displays once at the beginning of a report template. Opening an HTML table is a common use of this attribute as shown in the following example:

<table>

You can identify column headers using the syntax #1#, #2#, #3#. For example:

<th>#1#</th><th>#2#</th><th>#3#</th>

You can include pagination above a report by including the substitution string #TOP_PAGINATION#. This substitution string generates HTML that starts with an opening <tr> tag and ends with a closing </tr> tag. For example, to include an open table tag and the #TOP_PAGINATION# substitution string, you would enter the following:

<table>#TOP_PAGINATION#

You can also include the substitution string #CSV_LINK# to include support for exporting your report to comma-separated value (CSV) format, a format compatible with most spreadsheet programs.

Column Headings

Use Column Heading Template to add color to each column header cell. Note that the text of this attribute must indicate where the cell heading text will be colorized. For example:

 <th #ALIGNMENT#>#COLUMN_HEADER#</th>

If you do not want any column headings, enter the following:

OMIT

If you do use this attribute, Application Express engine applies the default column heading template.

Before Each Row

In Before Each Row, enter text to display before all columns in the report. Use this attribute to open a new HTML row. Before Each Row supports the following substitution strings:

  • #ROWNUM#

    Use this substitution string to specify the current row.

  • #COLCOUNT#

    Use this substitution string to specify the number of columns.

  • #HIGHLIGHT_ROW#

    Use this substitution string to specify the number of highlighted rows.

Column Templates

Column templates define the look of each column. You can define up to four column templates; each can be conditional. For example, you can have different background colors for even and odd rows, or highlight rows that meet a PL/SQL defined condition.

In each Column Template, you define the look of each column. Column Templates support the substitution strings described in Table 10-6.

Table 10-6 Column Template Substitution Strings

Substitution StringDescription

#ALIGNMENT#

Determines the column alignment. Specified by the user.

#COLCOUNT#

Defines the count of the number of columns.

#COLNUM#

Defines the current column number.

#COLUMN_HEADER#

Defines the column header.

#COLUMN_VALUE#

Replaced with the value of the column.

#ROWNUM#

Specifies the current row number.


Consider the following example:

<td> #ALIGNMENT#>#COLUMN_VALUE#</td>

If you actually ran this report, these substitution strings would be replaced with values generated by the results of a SQL query.

By creating conditions, you can create a report that displays columns differently depending on whether the specified condition is met. To specify a column template be used conditionally, select a condition type from the Column Template Condition list. Valid values include:

  • Use Based on PL/SQL Expression. Conditionally formats columns based on data in that row.

  • Use for Even Numbered Rows. Conditionally formats even numbered rows.

  • Use for Odd Numbered Rows. Conditionally formats odd numbered rows.

If you select Use Based on PL/SQL Expression, the next step is to enter a PL/SQL expression in the Column Template Expression field. For example, the following expression displays a value in bold if the value is greater than 2000:

#SAL# > 2000

Note that you could also use the substitution string #ROWNUM#. For example:

#ROWNUM# > 2000
After Each Row

In After Each Row, enter HTML that displays after all columns in the report display. This attribute is often used to close an HTML table row. For example:

</tr>
After Rows

Use After Rows to specify text that should display after the last row. A common use of this attribute is to close the HTML table tag. For example:

</table>

The After Rows attribute supports the following substitution strings:

  • #PAGINATION#

    Replaced with a pagination attribute.

  • #COLCOUNT#

    Substituted at run time with the number of columns defined in the report.

Row Highlighting

Use Background color for checked row to control the background color of a report row when the row selector is checked. Use Background color for current row to control the background color of a report row when the user moves the mouse over the row.

Pagination Subtemplate

The Pagination Subtemplate section contains attributes for editing the Pagination Template, Next Page Template, Previous Page Template, Next Set Template, and Previous Template. Pagination Subtemplates support the substitution strings #PAGINATION_NEXT#, #PAGINATION_NEXT_SET#, #PAGINATION_PREVIOUS# and #PAGINATION_PREVIOUS_SET#. Table 10-9 describes these templates.

Table 10-7 Pagination Subtemplate Attributes

Pagination Subtemplate AttributeDescription

Pagination Template

Applies to the entire pagination subtemplate. For example:

<span class="instructiontext">#TEXT#</span>

You can use the substitution string #TEXT# to specify where you want the pagination subtemplate to display.

Use the other Pagination Subtemplate attributes to modify individual items.

Next Page Template

Enter HTML to modify how the Next Page portion of the pagination subtemplate appears. For example:

<a href="#LINK#">next</a>

Previous Page Template

Enter HTML to modify how the Previous Page portion of the pagination subtemplate appears. For example:

<a href="#LINK#">previous</a>

Next Set Template

Enter HTML to modify how the Next Set portion of the pagination subtemplate appears. For example:

<a href="#LINK#">next set</a>

Previous Set Template

Enter HTML to modify how the Previous Set portion of the pagination subtemplate appears. For example:

<a href="#LINK#">previous set</a>

Comments

Use this attribute to record comments about this component.

Report Column Template Attributes for Named Column Templates

This section describes specific sections of the Edit Report Template page for Named Column Templates. You can access the sections of the page by either scrolling down the page, or by clicking a navigation button at the top of the page. Note that when you select a button at the top of the page, the selected section appears and all other sections are temporarily hidden. To view all sections of the page, click Show All.

Name

Template Name identifies the name of the template. Template Type indicates the type of template. Named Column templates reference column names in the template. Generic Column Templates reference the #COLUMN_VALUE# substitution string in the template.

Theme indicates the theme to which the template is a member. Use the Translatable check box to indicate the template contains text strings that require translation. Template Class identifies a specific use for the template. When you switch to a new theme, all templates in one theme are mapped to corresponding templates in another theme. Application Builder accomplishes this template mapping through the assignment of a template class.

Subscription

Use Subscription to apply an existing template to the current application. When you select an existing template, you become a subscriber to that template.

To load a new copy of a master template, click Refresh.

Row Templates

Row templates define the look of each column. You can define up to four row templates, each of which can be conditional.

In each Row Template, you define the look of each row. Row Templates support the substitution strings described in Table 10-8.

Table 10-8 Row Template Substitution Strings

Substitution StringDescription

#ALIGNMENT#

Determines the row alignment. Specified by the user.

#COLCOUNT#

Defines the count of the number of columns.

#COLNUM#

Defines the current column number.

#COLUMN_HEADER#

Defines the column header.

#COLUMN_VALUE#

Replaced with the value of the column.

#ROWNUM#

Specifies the current row number.


By creating conditions, you can create a report that displays rows differently depending on whether the specified condition is met. To specify a row template be used conditionally, select a condition type from the Column Template Condition list. Valid values include:

  • Use Based on PL/SQL Expression. Conditionally formats columns based on data in that row.

  • Use for Even Numbered Rows. Conditionally formats even numbered rows.

  • Use for Odd Numbered Rows. Conditionally formats odd numbered rows.

If you select Use Based on PL/SQL Expression, the next step is to enter a PL/SQL expression in the Column Template Expression field. For example, the following expression displays a value in bold if the value is greater than 2000:

#SAL# > 2000

Note that you could also use the substitution string #ROWNUM#. For example:

#ROWNUM# > 2000
Column Headings

Use this template to add color to each column header cell. The text of this attribute must include help to indicate where the cell heading text should be colorized. If you do not enter a Column Heading Template, then a default column header template is applied. If you do not want any column headings, then enter OMIT. For example:

 <th #ALIGNMENT#>#COLUMN_HEADER#</th>
Before first and after last row text

In Before Rows, enter HTML that displays once at the beginning of a report template. Opening an HTML table is a common use of this attribute, as shown in the following example:

<table>

You can identify column headers using the syntax #1#, #2#, #3#. For example:

<th>#1#</th><th>#2#</th><th>#3#</th>

You can include pagination above a report by including the substitution string #TOP_PAGINATION#. This substitution string generates HTML that starts with an opening <tr> tag and ends with a closing </tr> tag. For example, to include an open table tag and #TOP_PAGINATION# substitution string, you would enter the following:

<table>#TOP_PAGINATION#

You can also include the substitution string #CSV_LINK# to include support for exporting your report to CSV format, a format compatible with most spreadsheet programs.

Use After Rows to specify text that should display after the last row. A common use of this attribute is to close the HTML table tag. For example:

</table>

The After Rows attribute supports the following substitution strings:

  • #PAGINATION#

    Replaced with a pagination attribute.

  • #COLCOUNT#

    Substituted at run time with the number of columns defined in the report.

Pagination

The Pagination section contains attributes for editing the Pagination Template, Next Page Template, Previous Page Template, Next Set Template, and Previous Template. Pagination Subtemplates support the substitution strings #PAGINATION_NEXT#, #PAGINATION_NEXT_SET#, #PAGINATION_PREVIOUS# and #PAGINATION_PREVIOUS_SET#. Table 10-9 describes these templates.

Table 10-9 Pagination Subtemplate Attributes

Pagination Subtemplate AttributeDescription

Pagination Template

Applies to the entire pagination subtemplate. For example:

<span class="instructiontext">#TEXT#</span>

You can use the substitution string #TEXT# to specify where you want the pagination subtemplate to display.

Use the other Pagination Subtemplate attributes to modify individual items.

Next Page Template

Enter HTML to modify how the Next Page portion of the pagination subtemplate appears. For example:

<a href="#LINK#">next</a>

Previous Page Template

Enter HTML to modify how the Previous Page portion of the pagination subtemplate appears. For example:

<a href="#LINK#">previous</a>

Next Set Template

Enter HTML to modify how the Next Set portion of the pagination subtemplate appears. For example:

<a href="#LINK#">next set</a>

Previous Set Template

Enter HTML to modify how the Previous Set portion of the pagination subtemplate appears. For example:

<a href="#LINK#">previous set</a>

Comments

Use this attribute to record comments about this component.

About Using JavaScript in Column Templates

You can conditionally display HTML depending upon values in the database using JavaScript. The following example displays an HTML row only if the GROUP_DESC query column is not null:

<script language="javascript">
IF ( "#GROUP_DESC#" != "" )
document.writeln( "<TR>;
<TD BGCOLOR=#336699>;</TD>
</TR>
</TR>
<TD>#GROUP_DESC#</TD>
                </TR>" );
        </TR>" );


See Also:

  • Online Help for information about using specific sections of the Edit Report Template page

  • "Understanding Regions"


Using Custom Cascading Style Sheets

A cascading style sheet (CSS) provides a way to control the style of a Web page without changing its structure. When used properly, a CSS separates visual attributes such as color, margins, and fonts from the structure of the HTML document. Oracle Application Express includes themes that contain templates that reference their own CSS. The style rules defined in each CSS for a particular theme also determine the way reports and regions display.

Topics in this section include:

Uploading Cascading Style Sheets

You upload cascading style sheets to your workspace using the Cascading Style Sheet Repository. Uploaded cascading style sheets (CSS) are available to any application created in your workspace. The cascading style sheets are written to the file system, so you can reference them in your HTML source code.

To upload cascading style sheets:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click Shared Components.

    The Shared Components page appears.

  4. Under Files, select Cascading Style Sheets.

    The Cascading Style Sheet page appears.

  5. From the View list, select Details. See "About the Cascading Style Sheets Page".

  6. To upload a CSS, click Create and follow the on-screen instructions.

  7. To edit an existing CSS, select the CSS name.

  8. To download an existing CSS, click the Download icon.

About the Cascading Style Sheets Page

Once you upload a CSS to the CSS Repository, you control how the page displays by making a selection from the View list. Available options include:

  • Icons (the default) displays each CSS as a large icon. To edit a CSS, click the appropriate icon.

  • Details displays each CSS as a line in a report. To edit a CSS, click the appropriate name.

Referencing an Uploaded Cascading Style Sheet in the Page Template

You can reference an uploaded cascading style sheet within the Header section of the page template. You use the Header section to enter the HTML that makes up the <HEAD> section of the HTML document.

To reference an uploaded cascading style sheet:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click Shared Components.

  4. Under User Interface, select Themes.

    The Themes page appears.

  5. On the Tasks list, click View Templates.

  6. Select the name of the page template you want to edit.

  7. Use a <link> tag within the head section to reference the appropriate style sheet.

    To reference an uploaded file that is associated with a specific application, you would use the substitution string #APP_IMAGES#. For example:

    <html>
    <head>
        <title>#TITLE#</title>
        #HEAD#
        <link rel="stylesheet" href="#APP_IMAGES#sample2.css" type="text/css">
    </head>
    ...
    

    To reference an uploaded file that is associated with a specific workspace, you would use the substitution string #WORKSPACE_IMAGES#. For example:

    <html>
    <head>
        <title>#TITLE#</title>
        #HEAD#
        <link rel="stylesheet" href="#WORKSPACE_IMAGES#sample3.css" type="text/css">
    </head>
    ...
    
PK#@"PK6(AOEBPS/debug.htm? Debugging an Application

12 Debugging an Application

This section describes approaches to debugging an application including viewing Debug Mode, enabling SQL tracing, and viewing page reports. It also describes how to manually remove a control or a component to isolate a problem.

This section contains the following topics:

About Tuning Performance

For applications having a large number of concurrent users, maintaining optimal performance is critical. To optimize your application's performance, remember to utilize the following features:

  • Use bind variables within your application whenever possible. You can reference session state values using bind variable syntax in SQL queries and application logic such as PL/SQL executed from processes and validations. Accessing session state using bind variables is the most efficient way to reference session state.

  • Include a #TIMING# substitution string in the region footer so that you can view the timing of each region.

Reviewing Session State

Many applications are based on data contained within application controls. For example, buttons can display conditionally based on a value stored in session state. You can view current session state for your application by clicking the Session link on the Developer Toolbar.

Accessing Debug Mode

Viewing a page in Debug Mode enables you to track what the Application Express engine is doing as it renders a page. You access Debug mode by clicking the Debug link in the Developer Toolbar.

Debug Mode displays time codes that correspond to specific Application Express engine actions. This can be useful to determine when the engine is setting session state. The Debug view also shows additional details about item names and computation and processing points. To exit Debug mode, click No Debug on the Developer Toolbar.

You can also use f?p syntax to run an application in Debug mode. Simply call the page and set the Debug argument to YES. For example:

f?p=100:1:&APP_SESSION.::YES

Enabling SQL Tracing and Using TKPROF

Tracing your session can be a very effective way to debug an application. From a database perspective, each page request is a single database session. If you enable SQL tracing, then Oracle Application Express creates a temporary file you can then analyze using the TKPROF utility.

You enable SQL tracing in Oracle Application Express by using f?p syntax to set the argument p_trace=YES. For example, to trace the display of page 1 in application 100, you would use the syntax:

http:/.../f?p=100:1&p_trace=YES

To use the TKPROF utility:

  1. Log in to SQL*Plus as a privileged user.

  2. Execute the following statement:

    show parameter USER_DUMP_DEST
    
  3. Navigate to the directory in which the trace file is created.

  4. Run the TKPROF utility from the operating system prompt using the following syntax:

    tkprof filename1 filename2 [waits=yes|no] [sort=option] [print=n]
        [aggregate=yes|no] [insert=filename3] [sys=yes|no] [table=schema.table]
        [explain=user/password] [record=filename4] [width=n]
    

    The input and output files are the only required arguments.

  5. To view online Help, invoke TKPROF without arguments.


See Also:

"Using Application Tracing Tools" in Oracle Database Performance Tuning Guide for information about using the TKPROF program

Monitoring Application and Page Resource Use

Oracle Application Express facilitates the monitoring of resources used by applications and pages by calling the package DBMS_APPLICATION_INFO. Whenever the Application Express engine renders or processes a page, the module is set to APEX and includes the application ID and page number. Once set, you can query the V$SESSION and V$SQLAREA views to monitor transactions.

Viewing Reports

When isolating an issue within a page, it is important to clearly understand the functions it is performing. To accomplish this goal, Application Builder includes a number of page and application reports.

Viewing Page Reports

To view page reports:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Click one of the following buttons at the top of the Page Definition:

Viewing Application Reports

To view application reports:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. On the Tasks list, click Application Reports.

  4. Select the type of reports to view:

    • Shared Components reports offer information on common elements that can display on every page within an application. Reports are grouped by category including Logic, Navigation, Security, User Interface, Globalization, and Files. Report examples include Application Items, Computations, Breadcrumb Entries, Authentication Schemes, and Shortcuts.

    • Page Components reports offer detailed information on controls and logic that execute when the page is rendered (for example, branches, buttons, computations, items, and regions).

    • Activity Reports offer details about developer activity within the current application. Available reports include Changes by Developer, Changes by Developer by Day, Chart of Changes by Developer, Page Performance, and Recent Changes.

    • Cross Application Reports offer information that apply to multiple applications. Available reports include Application Attributes, Application Comments, Build Options, Build Status and Application Status, Page Component Counts, Security Profiles, Authentication Schemes, and Template Defaults by Application.

Debugging Problematic SQL Queries

If your query does not seem to be running correctly, try running it in SQL*Plus, SQL Developer, or in SQL Commands. Any of these approaches will test your query outside the context of your application, making it easier to determine what the problem is.

Removing Controls and Components to Isolate a Problem

If you have problems running a page, try removing controls and components one at a time. Using this approach, you can quickly determine which control or component may be the source of your problem. You can disable a control or component by selecting the Condition attribute Never.

To remove a control or component using conditional attributes:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Select the name of the control or component you want to disable.

    The appropriate attributes page appears.

  3. Scroll down to Condition Type and select Never from the Condition Type list.

  4. Click Apply Changes and return to the Page Definition.

  5. Try running the page again.

  6. Continue to remove controls or components until the page runs correctly.

PK"z ??PK6(A OEBPS/toc.ncxX Oracle® Application Express Application Builder User's Guide, Release 3.2 Cover Table of Contents Oracle Application Express Application Builder User's Guide, Release 3.2 Preface What's New in Oracle Application Express Quick Start Running a Demonstration Application Application Builder Concepts Using Application Builder Working with Application Pages Building an Application Adding Application Components Adding Navigation Controlling Page Layout Managing Themes and Templates Managing User Interface Defaults Debugging an Application Managing Application Security Deploying an Application Advanced Programming Techniques Managing Application Globalization Available Conditions Privileges Granted to PUBLIC Index Copyright PK]Y\]XPK6(AOEBPS/ui_default.htmPk Managing User Interface Defaults

11 Managing User Interface Defaults

User interface defaults enable you to assign default user interface properties to a table, column, or view within a specified schema. When you create a form or report using a wizard, the wizard uses this information to create default values for region and item properties. Utilizing user interface defaults can save valuable development time and has the added benefit of providing consistency across multiple pages in an application.

Because user interface defaults are associated with a table, you can use them with applications created using the form and report wizards.

This section contains the following topics:

Viewing Tables or Views Utilizing User Interface Defaults

You can view tables or views utilizing user interface defaults by either navigating to the User Interface Defaults page or viewing the UI Defaults report in Object Browser.

Topics in this section include:


See Also:

"Managing Database Objects with Object Browser" in Oracle Application Express SQL Workshop and Utilities Guide.

Creating to User Interface Defaults

To create user interface defaults:

  1. On the Workspace home page, click the Application Builder icon.

    Application Builder home page appears.

  2. Select an application.

  3. On the Application, click Shared Components.

    The Shared Components page appears.

  4. Under User Interface, select User Interface Defaults.

    The User Interface Defaults page appears.

    The current schema displays to the right of the breadcrumb menu.

  5. To narrow the display, use the following controls at the top of the page and click Go:

    • Table/View - Enter a case insensitive query for a table or view name within the current schema.

    • Display - Determines the types of tables to display.

    • View - Make a selection to filter the view:

      • Icons (default) displays each table or view as a large icon.

      • Details displays each table or view as a line in a report, identifying the table or view name, the object type, and whether user interface defaults currently exist.

    • Display determines the number of items that display in the report.

  6. Select a specific table or view by selecting the name.

    The Table Defaults page appears.

  7. If no user interface defaults exist, click Create User Interface Defaults.


Tip:

You can also access the User Interface Defaults page by clicking User Interface Defaults on the Tasks list on either the Application Builder home or Applications home pages. See "About the Application Builder Home Page" and "About the Application Home Page".

Viewing the UI Defaults Report in Object Browser

To view the User Interface Details Report in Object Browser:

  1. On the Workspace home page, click SQL Workshop and then Object Browser.

    Object Browser appears.

  2. From the Object list, select either Tables or Views.

  3. From the Object Selection pane, select an object.

  4. Select the UI Defaults tab.

    The User Interface Defaults report appears displaying the following information:

    • Column Name - Indicates the name of the column.

    • Label - Specifies the default label text for items in a form and the heading for columns in reports.

    • Report Sequence - Specifies the sequence of items in a report.

    • Report Display - Specifies how the column should be displayed in a report.

    • Tabular Form Display - Specifies how an item should display in a tabular form.

    • Form Sequence - Specifies the sequence of items in a form.

    • Form Display - Specifies how items in a form display.

  5. To edit the user interface defaults, click Edit.

    The Table Defaults page appears.

  6. If no user interface defaults exist, click Create Defaults.

Editing Column Attributes

You define user interface defaults for a specific column by editing column attributes.

To edit column attributes:

  1. Navigate to the Table Defaults page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. On the Application, click Shared Components.

    4. Under User Interface, select User Interface Defaults.

      The User Interface Defaults page appears.

    5. Select a specific table or view by selecting the name.

      The Table Defaults page appears.

    The following information displays at the top of the Table Defaults page:

    • Table/View Name identifies the name of the selected table or view.

    • Report Region Title and Form Region Title become the default title for all report or form regions. These names are modified versions of Table/View Name in which the first letter is capitalized and any underscores are replaced with spaces.

    Column-level User Interface Defaults appear next. By default, a short report displays.

  2. To view a complete report, click Detailed Report.

  3. To edit select attributes for all displayed columns:

    1. Click Grid Edit.

    2. Edit the appropriate attributes and click Apply Changes.

  4. To edit a specific column, select the column name.

    The column defaults appear. Column defaults are divided into two pages:

    • Column Definition

    • List of Values

    The topics that follow describe how to edit specific attributes on these pages.

About the Column Definition

Column Definition is the default page that displays when you edit column attributes. The top of the page displays the selected schema, table or view name, and column name. Click View Database Column Definition to view details about a specific column.

Label Default

This attribute is used in report and forms. Use Label to specify default label text for items in a form and the heading for columns in reports.

Report Defaults

Available attributes include:

  • Display - Indicates if the column displays in a report. The default is Yes.

  • Display Sequence - Specifies the display sequence of items in a report. The default value is based on the column ID, which is based on the order of the columns in the table.

  • Display As - Specifies how the column should be displayed in a report.

  • Mask - Indicates if a mask should be applied against the data. This attribute is not applicable for character- based items.

  • Alignment - Specifies report alignment (left, center, or right). If the column is a number, the default is Right. Otherwise, the default is Left.

  • Searchable - Indicates whether the column should be searchable in reports. If the column is VARCHAR2 or CHAR, the default is Yes. If not, the default is No.

  • Group By - Indicates whether the column should be used for Group By and then the sequence of the grouping. The default is Yes.

  • Aggregate By - Indicates whether the column should be used for aggregation in reports and charts.

Tabular Form Default

Use Display As to specify how an item should display in a tabular form.

Form Defaults

Available attributes include:

  • Display - Indicates if the column displays in a form. The default is Yes.

  • Display Sequence - Specifies the sequence of items in a form. The default is based on the column ID, which is based on the order of the columns in the table.

  • Display As - Indicates how items in a form display. The default selection is Text Field.

  • Mask - Indicates if a mask should be applied against the data in a form. Not used for character-based items.

  • Default Value - Specifies the default value associated with this column.

  • Width - Specifies the display width.

  • maxWidth - Specifies the maximum string length a user is allowed to enter in this item.

  • Height - Specifies the display height of an item.

  • Required - Used to generate a validation in which the resulting item must not be null. If resulting item is not null, select Yes.

  • Help Text - Becomes Item help. By default, this text is pulled from the column hint (if applicable).

About List of Values

You access the List of Values page by clicking the List of Values tab. The top of the page displays the selected schema, table or view name, and column name. Click View Database Column Definition to view details about a specific column.

Use the List of Values Type list to specify if the selected column will include a static or dynamic list of values. Once you select the type, you are prompted to enter either display value and return value pairs, or a list of values query.

About the Database Column Definition Report

You can view details about a specific column by accessing the Column Definition report. The Column Definition report displays the schema, table name, column name, data type, data length, and nullable as well as any check constraints, primary and unique keys, and foreign keys that reference the column. A link to this report appears on both the Column Definition and List of Values pages.

To view the Column Definition report:

  1. Navigate to the Table Defaults page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. On the Application, click Shared Components.

    4. Under User Interface, select User Interface Defaults.

      The User Interface Defaults page appears.

    5. Select a specific table or view by selecting the name.

    The Table Defaults page appears.

  2. Select the column name.

  3. Under Schema and Table, click the View Database Column Definition link.

Comparing User Interface Defaults Across Applications

Use the Compare Defaults report to monitor consistency in user interface design across all pages in a single application or multiple applications. Running the Compare Defaults report compares currently defined user interface defaults (or column attributes) against the item attributes set for forms, reports, and tabular forms.

To run the Compare Defaults report:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. On the Application home page, click Shared Components.

    The Shared Components page appears.

  4. Under User Interface, select User Interface Defaults.

    The User Interface Defaults page appears.

  5. On the Tasks list, click Comparison Report.

    The current schema displays to the right of the breadcrumb menu.

  6. Make sections from the following lists and click Go:

    1. Table/View - Restricts the comparison to the selected table or view.

    2. Column - Select a column in which to search for form, reports, and tabular forms.

  7. Optionally, make sections from the following lists and click Go.

    • Display - Select an attribute category.

    • Application - Select an application.

A report appears containing the following sections:

  • Form Pages Referencing the Selected Column

  • Report Regions Referencing the Selected Column

  • Tabular Form Regions Referencing the Selected Column

About Exporting and Importing User Interface Defaults

You export user interface defaults in the same way you export any related application file. Exporting user interface defaults from one development instance to another involves the following steps:

  1. Export the user interface defaults using the Export User Interface Defaults utility. See "Exporting User Interface Defaults".

  2. Import the exported file into the target Oracle Application Express instance. See "Importing User Interface Defaults".

  3. Install the exported file from Export Repository. See "Installing Export Files".

When you export user interface defaults, all user interface defaults for the selected schema are exported to a single script. The file contains an API call to create table hints by making calls to the application PL/SQL API. You can use this file to import user interface defaults to another database and Oracle Application Express instance.

PK=(HPPPK6(AOEBPS/priv_public.htm'( Privileges Granted to PUBLIC

B Privileges Granted to PUBLIC

This section describes public synonyms that exist and for which the execute privilege is granted to PUBLIC for the packages, procedures, functions, tables, and views owned by the Oracle Application Express product schema, (for example, APEX_030200).

This section contains the following topics:

Packages

Public synonyms exist and execute privilege is granted to PUBLIC for the following packages owned by the Oracle Application Express product schema, (for example, APEX_030200):

HTMLDB_CUSTOM_AUTH

HTMLDB_ITEM

HTMLDB_LANG

HTMLDB_UTIL

WWV_FLOW

WWV_FLOW_API

WWV_FLOW_AUDIT

WWV_FLOW_CSS_API

WWV_FLOW_COLLECTION

WWV_FLOW_CUSTOM_AUTH

WWV_FLOW_CUSTOM_AUTH_LDAP

WWV_FLOW_CUSTOM_AUTH_SSO

WWV_FLOW_CUSTOM_AUTH_STD

WWV_FLOW_CUSTOMIZE

WWV_FLOW_EPG_INCLUDE_MODULES

WWV_FLOW_FILE_MGR

WWV_FLOW_FND_USER_API

WWV_FLOW_GLOBAL

WWV_FLOW_HELP

WWV_FLOW_HINT

WWV_FLOW_HTML_API

WWV_FLOW_ID

WWV_FLOW_IMAGE_API

WWV_FLOW_ITEM

WWV_FLOW_ITEM_HELP

WWV_FLOW_LANG

WWV_FLOW_LDAP

WWV_FLOW_LOOKUP_TABLES

WWV_FLOW_MAIL

WWV_FLOW_PLSQL_JOB

WWV_FLOW_PREFERENCES

WWV_FLOW_RANDOM

WWV_FLOW_RENDER_SHORTCUT

WWV_FLOW_REWRITE_QUERY

WWV_FLOW_USER_API

WWV_FLOW_UTILITIES

WWV_FLOW_SVG

WWV_FLOW_WEB_SERVICES

WWV_MIG_ACC_LOAD

WWV_RENDER_CALENDAR2

WWV_RENDER_CHART2

WWV_SPELING

Execute privilege is granted to PUBLIC for the following packages owned by the Oracle Application Express product schema, (for example, APEX_030200):

APEX_SITE_ADMIN_PRIVS

HTMLDB_SITE_ADMIN_PRIVS

WWV_CALCULATOR

WWV_FLOW_FLASH_CHART

WWV_FLOW_GENERATE_DDL

WWV_FLOW_IMAGE_GENERATOR

WWV_FLOW_TREE_GLOBAL_VARS

Procedures

Public synonyms exist and execute privilege is granted to PUBLIC for the following procedures owned by the Oracle Application Express product schema, (for example, APEX_030200):

APEX

APEX_ADMIN

DEVELOPMENT_SERVICE_HOME

DEVELOPMENT_SERVICE_HOME_LOGIN

DEVELOPMENT_SERVICE_SIGNUP

F

HTMLDB

HTMLDB_ADMIN

HTMLDB_LOGIN

P

WWV_FLOW_INIT_HTP_BUFFER

Z

Functions

Public synonyms exist and execute privilege is granted to PUBLIC for the following functions owned by the Oracle Application Express product schema, (for example, APEX_030200):

NV

V

WWV_FLOW_HOT_HTTP_LINKS

Execute privilege is granted to PUBLIC for the following function owned by the Oracle Application Express product schema, (for example, APEX_030200):

WWV_POPUP_FILTER

Tables

Public synonyms exist and select privilege is granted to PUBLIC for the following tables owned by the Oracle Application Express product schema, (for example, APEX_030200):

WWV_FLOW_DUAL100

WWV_FLOW_TEMP_TABLE

WWV_FLOW_LOV_TEMP

Views

Public synonyms exist and select privilege is granted to PUBLIC for the following views owned by the Oracle Application Express product schema, (for example, APEX_030200):

APEX_APPLICATIONS

APEX_APPLICATION_ALL_AUTH

APEX_APPLICATION_AUTH

APEX_APPLICATION_AUTHORIZATION

APEX_APPLICATION_BC_ENTRIES

APEX_APPLICATION_BREADCRUMBS

APEX_APPLICATION_BUILD_OPTIONS

APEX_APPLICATION_COMPUTATIONS

APEX_APPLICATION_FLASH_CHARTS

APEX_APPLICATION_FLASH_SERIES

APEX_APPLICATION_ITEMS

APEX_APPLICATION_LISTS

APEX_APPLICATION_LIST_ENTRIES

APEX_APPLICATION_LOVS

APEX_APPLICATION_LOV_ENTRIES

APEX_APPLICATION_NAV_BAR

APEX_APPLICATION_PAGES

APEX_APPLICATION_PAGE_BRANCHES

APEX_APPLICATION_PAGE_BUTTONS

APEX_APPLICATION_PAGE_COMP

APEX_APPLICATION_PAGE_DB_ITEMS

APEX_APPLICATION_PAGE_ITEMS

APEX_APPLICATION_PAGE_MAP

APEX_APPLICATION_PAGE_PROC

APEX_APPLICATION_PAGE_REGIONS

APEX_APPLICATION_PAGE_RPT_COLS

APEX_APPLICATION_PAGE_VAL

APEX_APPLICATION_PARENT_TABS

APEX_APPLICATION_PROCESSES

APEX_APPLICATION_SHORTCUTS

APEX_APPLICATION_SUPP_OBJECTS

APEX_APPLICATION_SUPP_OBJ_BOPT

APEX_APPLICATION_SUPP_OBJ_CHCK

APEX_APPLICATION_SUPP_OBJ_SCR

APEX_APPLICATION_TABS

APEX_APPLICATION_TEMPLATES

APEX_APPLICATION_TEMP_BC

APEX_APPLICATION_TEMP_BUTTON

APEX_APPLICATION_TEMP_CALENDAR

APEX_APPLICATION_TEMP_LABEL

APEX_APPLICATION_TEMP_LIST

APEX_APPLICATION_TEMP_PAGE

APEX_APPLICATION_TEMP_POPUPLOV

APEX_APPLICATION_TEMP_REGION

APEX_APPLICATION_TEMP_REPORT

APEX_APPLICATION_THEMES

APEX_APPLICATION_TRANSLATIONS

APEX_APPLICATION_TREES

APEX_APPLICATION_WEB_SERVICES

APEX_DICTIONARY

APEX_WORKSPACES

APEX_WORKSPACE_ACTIVITY_LOG

APEX_WORKSPACE_APEX_USERS

APEX_WORKSPACE_CLICKS

APEX_WORKSPACE_DEVELOPERS

APEX_WORKSPACE_FILES

APEX_WORKSPACE_LOG_SUMMARY

APEX_WORKSPACE_LOG_SUMMARY_USR

APEX_WORKSPACE_SCHEMAS

APEX_WORKSPACE_SESSIONS

APEX_WORKSPACE_SQL_SCRIPTS

WWV_FLOW_CLICKTHRU_LOG

WWV_FLOW_COLLECTIONS

WWV_FLOW_FILES

WWV_FLOW_GROUP_USERS

WWV_FLOW_HOURS_12

WWV_FLOW_HOURS_24

WWV_FLOW_LISTS_OF_VALUES$_V

WWV_FLOW_LIST_OF_VALUES_DATA_V

WWV_FLOW_MINUTES

WWV_FLOW_MINUTES_5

WWV_FLOW_MONTHS_MON

WWV_FLOW_MONTHS_MONTH

WWV_FLOW_PLSQL_JOBS

WWV_FLOW_USERS

WWV_FLOW_USER_ACTIVITY_LOG

WWV_FLOW_USER_MAIL_LOG

WWV_FLOW_USER_MAIL_QUEUE

WWV_FLOW_YEARS

PKA$t,('(PK6(AOEBPS/content.opf Oracle® Application Express Application Builder User's Guide, Release 3.2 en-US E11947-02 Oracle Corporation Oracle Corporation Oracle® Application Express Application Builder User's Guide, Release 3.2 2012-04-27T05:39:44Z Functions as a comprehensive, task-based reference on using the Application Builder development environment to build and deploy database-centric Web applications. PKFEq;1PK6(AOEBPS/dcommon/prodbig.gif GIF87a!!!)))111BBBZZZsss{{ZRRcZZ!!1!91)JB9B9)kkcJJB991ssc絽Zcc!!{祽BZc!9B!c{!)c{9{Z{{cZB1)sJk{{Z{kBsZJ91)Z{!{BcsRsBc{9ZZk甽kBkR!BZ9c)JJc{!))BZks{BcR{JsBk9k)Zck!!BZ1k!ZcRBZcZJkBk1Z9c!R!c9kZRZRBZ9{99!R1{99R{1!1)c1J)1B!BJRkk{ƽ絵ތkk絵RRs{{{{JJsssBBkkk!!9ss{{ZZssccJJZZRRccRRZZ))cBBJJ99JJ!!c11991199Z11!c!!))Z!!!1BRck{)!cJBkZRZ,HP)XRÇEZ֬4jJ0 @ "8pYҴESY3CƊ@*U:lY0_0#  5tX1E: C_xޘeKTV%ȣOΏ9??:a"\fSrğjAsKJ:nOzO=}E1-I)3(QEQEQEQEQEQEQE֝Hza<["2"pO#f8M[RL(,?g93QSZ uy"lx4h`O!LŏʨXZvq& c՚]+: ǵ@+J]tQ]~[[eϸ (]6A&>ܫ~+כzmZ^(<57KsHf妬Ϧmnẁ&F!:-`b\/(tF*Bֳ ~V{WxxfCnMvF=;5_,6%S>}cQQjsOO5=)Ot [W9 /{^tyNg#ЄGsֿ1-4ooTZ?K Gc+oyڙoNuh^iSo5{\ܹ3Yos}$.nQ-~n,-zr~-|K4R"8a{]^;I<ȤL5"EԤP7_j>OoK;*U.at*K[fym3ii^#wcC'IIkIp$󿉵|CtĈpW¹l{9>⪦׺*ͯj.LfGߍԁw] |WW18>w.ӯ! VӃ :#1~ +މ=;5c__b@W@ +^]ևՃ7 n&g2I8Lw7uҭ$"&"b eZ":8)D'%{}5{; w]iu;_dLʳ4R-,2H6>½HLKܹR ~foZKZ࿷1[oZ7׫Z7R¢?«'y?A}C_iG5s_~^ J5?œ tp]X/c'r%eܺA|4ծ-Ե+ْe1M38Ǯ `|Kյ OVڅu;"d56, X5kYR<̭CiطXԮ];Oy)OcWj֩}=܅s۸QZ*<~%뺃ȶp f~Bðzb\ݳzW*y{=[ C/Ak oXCkt_s}{'y?AmCjޓ{ WRV7r. g~Q"7&͹+c<=,dJ1V߁=T)TR՜*N4 ^Bڥ%B+=@fE5ka}ędܤFH^i1k\Sgdk> ֤aOM\_\T)8靠㡮3ģR: jj,pk/K!t,=ϯZ6(((((((49 xn_kLk&f9sK`zx{{y8H 8b4>ÇНE|7v(z/]k7IxM}8!ycZRQ pKVr(RPEr?^}'ðh{x+ՀLW154cK@Ng C)rr9+c:׹b Жf*s^ fKS7^} *{zq_@8# pF~ [VPe(nw0MW=3#kȵz晨cy PpG#W:%drMh]3HH<\]ԁ|_W HHҡb}P>k {ZErxMX@8C&qskLۙOnO^sCk7ql2XCw5VG.S~H8=(s1~cV5z %v|U2QF=NoW]ո?<`~׮}=ӬfԵ,=;"~Iy7K#g{ñJ?5$y` zz@-~m7mG宝Gٱ>G&K#]؃y1$$t>wqjstX.b̐{Wej)Dxfc:8)=$y|L`xV8ߙ~E)HkwW$J0uʟk>6Sgp~;4֌W+חc"=|ř9bc5> *rg {~cj1rnI#G|8v4wĿhFb><^ pJLm[Dl1;Vx5IZ:1*p)إ1ZbAK(1ׅ|S&5{^ KG^5r>;X׻K^? s fk^8O/"J)3K]N)iL?5!ƾq:G_=X- i,vi2N3 |03Qas ! 7}kZU781M,->e;@Qz T(GK(ah(((((((Y[×j2F}o־oYYq $+]%$ v^rϭ`nax,ZEuWSܽ,g%~"MrsrY~Ҿ"Fت;8{ѰxYEfP^;WPwqbB:c?zp<7;SBfZ)dϛ; 7s^>}⍱x?Bix^#hf,*P9S{w[]GF?1Z_nG~]kk)9Sc5Ո<<6J-ϛ}xUi>ux#ţc'{ᛲq?Oo?x&mѱ'#^t)ϲbb0 F«kIVmVsv@}kҡ!ˍUTtxO̧]ORb|2yԵk܊{sPIc_?ħ:Ig)=Z~' "\M2VSSMyLsl⺿U~"C7\hz_ Rs$~? TAi<lO*>U}+'f>7_K N s8g1^CeКÿE ;{+Y\ O5|Y{/o+ LVcO;7Zx-Ek&dpzbӱ+TaB0gNy׭ 3^c T\$⫫?F33?t._Q~Nln:U/Ceb1-im WʸQM+VpafR3d׫é|Aү-q*I P7:y&]hX^Fbtpܩ?|Wu󭏤ʫxJ3ߴm"(uqA}j.+?S wV ~ [B&<^U?rϜ_OH\'.;|.%pw/ZZG'1j(#0UT` Wzw}>_*9m>󑓀F?EL3"zpubzΕ$+0܉&3zڶ+jyr1QE ( ( ( ( ( ( ( (UIdC0EZm+]Y6^![ ԯsmܶ捆?+me+ZE29)B[;я*wGxsK7;5w)}gH~.Ɣx?X\ߚ}A@tQ(:ͧ|Iq(CT?v[sKG+*רqҍck <#Ljα5݈`8cXP6T5i.K!xX*p&ќZǓϘ7 *oƽ:wlຈ:Q5yIEA/2*2jAҐe}k%K$N9R2?7ýKMV!{W9\PA+c4w` Wx=Ze\X{}yXI Ү!aOÎ{]Qx)#D@9E:*NJ}b|Z>_k7:d$z >&Vv󃏽WlR:RqJfGإd9Tm(ҝEtO}1O[xxEYt8,3v bFF )ǙrPNE8=O#V*Cc𹾾&l&cmCh<.P{ʦ&ۣY+Gxs~k5$> ӥPquŽўZt~Tl>Q.g> %k#ú:Kn'&{[yWQGqF}AЅ׮/}<;VYZa$wQg!$;_ $NKS}“_{MY|w7G!"\JtRy+贾d|o/;5jz_6fHwk<ѰJ#]kAȎ J =YNu%dxRwwbEQEQEQEQEQEQEQEQEQE'fLQZ(1F)hQ@X1KEQE-Q@ 1KE3h=iPb(((1GjZ(-ʹRPbR@ 1KE7`bڒyS0(-&)P+ ڎԴP11F)h&:LRmQ@Q@Š(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+MrKoT*4flglO|t$>x1a}oryQ$о7#T2Qjnqko{Z[Ov-eF9`0=G\Y2K;iVQ|3@#*NFA(qlڤ\Zme2&r̼z;xoSUԙ Iƒ (b麶۵ƗZ_@QeP#8 UIaY?TTlڤ\Zme2&r̼zv5mrW|Csh]X}6,7q{(mn%. 9I#%d`pA5(Y2K;iVQ|3@#*NFA *gvgdH$F U}O]O+[U"ߌg2:zТwGVǙKfs'kB ( ( ( ( ( ( ( ( ( ( ( ( ( (8?zᖪۣ00c ! 2^? f5_+_E-BCv;9fБS5o' >V< 881,~x& ;+Yjy˜ꁶ  95N9 ͼ6ʜCEoی@0}/<'ku{R|Y]$#'j@#A⹼[זNl$|5)I$!$-bIaY?TU;[gojR":NA9ʢln8wnxv ,M!c+g:{v?Yu4=QaӸJW\)K.-,eDs|/'f8?쯀Z'Koq߹eߟ| |>k6puQ-'Ufzo.:;Ѯ'SpC|nP+2P(?kU-=DŽ>"WO> ‚P002I&;'PA +?f˟򼿵O3v1n?wn{cES<7 rDC MkTW AK᤟J%@bG7H9f%I ǃF(*?mtYJmgºFpPH3bI85\?xkV)k5K&e(H*|˧;$?LESm7F|Uqj06,S,J[e,@85?0T}6c. pjo]EʤFdu?S^7ןs?t?+;\߽{'ɕ',o;8,.໵;&A"6  88 ¼_[o>2x i:7lo# {!AN iן,xOZ7j:]fH7@F} q~ԡ})dInYST1_^ѡ]銓I9pFpx&#ß |k=GMdK.dfbP1]2A=x?OR7Uŏxƞ( :f-[9m pp"o|4CkZzeփ[,ͼmH϶?|5 xQ]2D5I(!b2#l 8-X1Rwu5Ɣ2 զH"HX8Ҁ7&|LJKĪ!d+dĈrnLJNYS=F{xk 5kKi<"h;xwSpe=c_"񝜗~iKk2l@hc>ߩxR2TO [nIrǟLbClk 7y6o~]^3]_H&N8:Ę2?Tg3h5A㿆7]BF@-fFW'HsҀ+?? {Gm$Ы-rʃ=(?BK9HȂY!At9ֻ  =2;; H--c`FIŽI'Pvz+ ;H.dң -Hʞt"gydAS׸Z#tuIHD&Mݬ*%u|dx'V?-xGNC%<ד.@=~UEc[FE߉`٫!sPvojO7VEJ$E `*J(뛉gG.;A'<* =vL KX#pIjcijc#aȠ\;V^վai[XDڴHjBrds3KdAV8a3 ;u/=+RDagDe ;G]Eom~%fw{5@I><[oqsA*92<G(~wmdg8l۟qq]CkoQH8Ppb1 h_~E֩/xkc1 rjƷi#ukXϷ̋{&rZP{ }3N˵!7'ZE |=b}[VѾ}>2_LQ¸I|<{'n?z4;o i$Z9FCn*YI9:qV4iMlc_bŘ,IcdEa-^cHD#!# 23+hxVᦗ GĊd9f$$޽ZNۭ_@ceP# 0#8$g7,N@O CIfbIOt6{NK " +U cq z` 8օqm%~i 5!A~uE ^+k 2 HP`#;zѴ=/rXiYZSnc՛eI&^ 54Hw@3sR䑜zS]eot=" I$iHAW{~Pvk((((((((((((((+xēZ񦛨j'[vrK0f޿ V1F?Fg/F>jI٭?'] |~CӨ+䏁Rn8 NeY^E ph) 2@=B ặXTeu# 8 sRW<}&=O!2rnSyt>hCO o_zQ^/ giIxX}w#1{*9MkV_]uio;e2? VHTt״뿴G4jriOoV8 A sB5MN}G:֫oιTdWERA{x$P**>OYjRѯx _`njg'dQPax5ohm?#^Cv}n{ Q6Wžx'zp q9,2QQ2AEx?2{Y$vyQXy99=^hz֍7d֒uR&V,cf \K(%Z L9v(€2>w0~5Լ/ivPZIzmZdbȻ\q!A]|Zl|3p݇%U0D /kyA6SO-[HK+dmE9sN/>(j4?-~F<UhgmjşkQj/+s$֬dS9La gsSDzϚ?~ImjokRׂUs$֒gS`L`$gkcĠzg+_4}fLN+Mj@i}*GpveeO_D>-o5+i*"3P6n۔`CtV~m{Lռ'֑\[lށ83Zŏ<]>񖫢Er (?w*:!9о[MIX-'i&e %eсSF&MKGt]볽Q5mȦ;sF8@C?2Rџ`U.č7(' dЀw cqoC}kt,Ys݀+;+WH#-ѩUI`U~gmh(O,T {ujT| [-uQgIF(' i݈݃ giiҬx|iKB=F=畃)T:ӵWm)5kͶn3!VQBā8>oQ9u FPyx8钅,q`KMG^|3 ihT}b['?ö+Nx+M6w455ӫ0bUF0tQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEx_+mKǞ<Ѽ {wvQUSQgOG9ߕz4i_u_5MEn:1"*ae~A'=%|/|:xgVHrZMhP8:|uԡѼUTY +n$X,U dQ^i,Ү绶Ү>isj VR2y;f|69Sd92m#PX^ǭ&}gqbq911^We__xL)eDH :d ryU.ecAp 7=y'4 ik1Z/Ibzf$2I }/6?-"YF _HK6[ª;$H57ncݡ"}J`*ASd#5c<*9Us'PG%[ӊF>h](A #*]2 YC²訫 "@TP0+Zoi.{YUڪ1h?kU&\?0GƗo#c4$f,弶uDVcGOvu qo,l1sݯRzcUҬu.LM0Ar`S Y3h$#`pÃ+⏱(5 D"]7ȱ3#˹Aᇶ+ulʗzYb2 tdtMzF#F6V1i J%I <+} bֺ(߸ƅLvѲ[">`fl)9o-k,QSݝB[:A@eFkԞt=/:sj^ڶNɓ;InS[,};Gp}/m9wό>.[4X#XV\Cy_1G=kC_?iu_'>;3~qcyHѴ=/rXiYZSnc՛eI&<?6Huw҈s~ |/뺥rO\}fu*  zUn;[W$GjO'UZ*ãh:]HY[oHAbA8gUQ6zepZZǍO $< ^⟂wV; c61Gz˃ul7Jz0l`EW2>:N ML=X RS mjFuIEi`Sӓe׊+J}3L6EtQ'$$kßx{i$p8a׆'4_⟈t 1S[AD/*K5O ?J~+N]o$&%XYK w͐X6 0Ewݟ|9iI<< r@C²訨?k]炼FK绚 n՘1U\ A֋/i><|agPξPP#Q9'<4O$*۽9/-1AHG8//NLH>(qݜc99i)M֬c.cXt*ASd#5v?ς/#iu[9{rQ=8 Z:ϊ j"{{k 3ko_tWzY{:)($IyM$>Oh u$οڲBq` 7,^]9lO7` ?$ @w?[yn.5}f"BI%*dLxs]ox3O](:m* >zA> yoc\ #DVt3JҬt=.L-MD2I$I$IaY?TU+Zoi.{YUڪ1k((((((((((((((()txL-uM@xR7d#`Hۦ:פPXDžm{Q;?>Kγ5|yE랕GNekj!G1ֽ" (1-ZxİYqހ(i;G^ֶ( ( +#Y|eK 2ȵ5 yHjye#n^@Q@W -OPʲ AP0ܠ %ps GR.Ш*G81˜m1V4{ⷅu ?XE֡ AO7j.6mڪǫGw*h((h$CWߛ#L{;v!WlaEPEy^jPѾ.OLwfaێY3~UҽR ( ( (<|a6Mݖ5bU6qր>^_xᾣcU/uK@WĐ;Pgjm28cQEQ\?3nyaw=~Fɠ 9Ʒ<<^IJMZ4& B;V/A02 O> |W8&jZavIq&-f#*02XrAU3\w |Tԥon eO g'3@ōZkoD- I4|Tk߆~#xZnxD: 8mRO6EayN,[b%;AtOIY[yv,K83< $_ K@E'յ+lxV2/KH191'֩\<o77 iȄoی1$0{lt[N}'W o3c8-,1ۑf<2m_֤^?0vVU9 1:Wx+KMeMb=ZxmnUp*;<\ xU/""B(ヌt[ˬ0\lL%@āCX]5h#ӝlB /W>կPQ[I@ݓ^MSIҥydGg3u3(|{~K#U]&Vyʆ r@#xAnd&p|@CkD2Ɨ^ X, 0q>7U_Gi&-Ę%0a}Wνs&SRO uGh͖>01uƱqo,sA*[wK+o7n%wc'q[7k 8˫ $07;['GZ|{~K#U]&Vyʆ r@#xAnd&p|@CkD2Ɨ^ X, 0q>7U_Gi&-Ę%0a}Wνs&SRO uGh͖>01zg'4]B#ðh(2 U8Iu/&eX&%Q v*V ?Ma-lc;pJG#vAȬg]d3k{Hܣ 9+,rr{7>x]5}Kī< b݅P 2V?|TkvI-g3ܶē Ђ7X|$| |n|=}% ðb|7n#=Ou(}i>i(Yz 14¯i?/W HalwnyBH@v2O6|<9M&gW6.M2" B9ʁ;(Rĝn#k鶓kd\ g qևxJ׀guVqe}2"U2&K 8>+J3++>#|)> ih່҇ ұ PxX((((((((((((?[4:,gEv 9R/)Xh7LO6vr"ŏ :}HeڊOw\-֡u)-&\˻',kS>qdz²xdddx,9(cc]ad B+<m[HLkif>?yͻdWuZ3IEmۿb݌gMhQ@s1v'VfHk## a=}pGAEx淖^P0# J}^hGBe}\NCK1`rzOIEsHNncݡp*áVR  J(iO4>Z{lݴX 8q3Z7]95Լ[_x,,&FeK1lCz (\^GZD̛܌a'yu-)ß+Ow-1;K'v09k(/M/4u'RaDtyp@\QI>տ~w+8=}+zuͅ~eO ɸzW7RҞh|9 YҴ}ChIqhf|-M'^u)I-M;wu oc({aEg5t;"7>%sї  ^E˔s yʩ;yBqQ@g⿃v:׈t-^þgV$0f*푒XmQrڼyeJ =bmL|!}}jyvȯr3޴4-3fya۷~ 83Т<uZ߇}h2H`*U#$695Nmž55XIcy838ʕ _c/XM?Qrď@JnG<^Ey߃>X7Z֛H֓Y D<ݖs&IhP0(oKx_iΥΊL l,WOe9J(o7|g1˹0IRFw!H\I㑊 Kt94K$!  m 60+BZS>!k:V[(bwm)"N:`sa>.55=KV֮ 3u_X=QEQEQEQEQEQEQEQEQEQEQEQE\ִ-|?Ij7 mJHX+bG+ƍ5٭#u2he, g9R0 {%y~Co,I;X3>܀dEnxZ_41`|V{w=7|v WKy|OmZ}6m{Pi0 glpy20Wg RƏIjwe#ڠfJqEp|nw!ZWyv3n3/߻Í⽢ރa>W3d, g;X@ t'f-E0`'Z Ε̣rC~Ich((((((((((((((((((((((((((((((((x6Xº0IFpS#SׇSž#ɾ?s" GnOn-TVi-DC*waGt?(^y$7Ɯ@i 19J Yޓ>dH,W$I$$t\|Pum_Eua͐pXNI(?OZ TVCD# f= k-i~cYavH%0q^|;m-tľ_bcdƗ#Hʷfsc\:nvXⵌ+ w.$ha׸Ӽ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((PKRݶrrPK6(AOEBPS/dcommon/contbig.gif`GIF87a!!!111999BBBJJJRRRccckkksss{{{skk{{ZRRRJJƽ{sZRJRJB91)kcZB9)sskZRJ1޽ƽ{{ssskkkcƵZZRccZRRJJJB{BB9991ssckkZccR))!RRB!!JJ1))99!11ƌ)1R)k֔)s1RZJR{BJs9R1J!11J1J9k{csZk!1J!)cBR9J1B)91B!cRs{!)s!){1B!k!s!{ksksckckZc9B)1!)!)BJ9B1919έƌ!!)JJcZZ{!!!1RR{JJsBBkJJ{!!9BB{1!!J9)!!Z!!c1!!kR!!s9Z!BckJs)19!!c!!ZRZ,H rrxB(Kh" DժuICiи@S z$G3TTʖ&7!f b`D 0!A  k,>SO[!\ *_t  Exr%*_}!#U #4 & ֩3|b]L ]t b+Da&R_2lEٱZ`aC)/яmvUkS r(-iPE Vv_{z GLt\2s!F A#葡JY r|AA,hB}q|B`du }00(䡆<pb,G+oB C0p/x$…– ]7 @2HFc ) @AD \0 LHG',(A` `@SC)_" PH`}Y+_|1.K8pAKMA @?3҄$[JPA)+NH I ,@8G0/@R T,`pF8Ѓ)$^$ DDTDlA@ s;PKPK6(AOEBPS/dcommon/darbbook.cssPKPK6(A!OEBPS/dcommon/O_signature_clr.JPG"(JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (?O '~MQ$Vz;OlJi8L%\]UFjޙ%ԯS;rA]5ފ<׈]j7Ouyq$z'TQuw7Ŀ KX߁M2=S'TQt?.5w'97;~pq=" ~k?`'9q6 E|yayM^Om'fkC&<5x' ?A?Zx'jß={=SßM gVC.5+Hd֪xc^)Җufz{Cީ|D Vkznq|+Xa+{50rx{|OG.OϞ~f/ xxX[2H )c+#jpUOZYX\=SG ߨC|K@;_߆'e?LT?]:?>w ڔ`D^So~xo[Ӡ3i7B:Q8 Vc-ďoi:FM292~y_*_闱YN\Fr=xZ3鳎OwW_QEzW~c]REeaSM}}Hӏ4&.E]u=gMѠ+mF`rNn$w9gMa꺢nTuhf2Xv>އ a(Û6߭?<=>z'TQuw7Ŀ KX߁M2=S'TQt?.5Kko\.8S$TOX߀Gw?Zx汴X)C7~.i6(Щ=+4{mGӭ¸-]&'t_kV*I<1)4thtIsqpQJ+> \m^[aJ5)ny:4o&QEnyAEPEEss 72,PDۢ׃K W{Wjr+wگ iM/;pd?~&?@;7E4gv8 $l'z'TQuw7Ŀ Gֱ=ɿ&G?. iR(5W*$|?w᫼gkmIbHe/_t>tg%y.l}N5[]+Mk0ĠeHdPrsst'UiC,y8`V%9ZIia|ܪvi מYG,o}+kk{YbyIeb*sAtի82zWoEK5z*o-eo;n(P u-I)4Š(HQEQEQEQEhz(X/Đ?}Bk˩ ݏrk0]4>8XzV? }6$}d^F>nU K ?Bտk_9׾x~w'ߞ  uDŽtL ؈5c-E/"|_Oo.IH쐍=i*Iw5(ںw?t5s.)+tQ2dUt5Vĺ.jZ"@IRrZƅY4ߡ_;}ų(KyQf1Aǵt?sZg+?F5_oQR&Dg߿]6FuRD u>ڿxl7?IT8'shj^=.=J1rj1Wl$얲cPx;E,p$֟ˏkw qg"45(ǛkV/=+ũ)bYl~K#˝J_כ5&\F'I#8/|wʾ_Xj Q:os^T1.M_|TO.;?_  jF?g N 8nA2F%i =qW,G=5OU u8]Rq?wr'˻S+۾.ܼ 87Q^elo/T*?L|ۚ<%<,/v_OKs B5f/29n0=zqQq(ª=VX@*J(э(f5qJN_EVǞQEOuoѕOuoa5}gO?:߂8Wא|cڽ~]N&O( (<]>͠@VQ=^~U ̴m&\խ5i:}|}r~9՝f}_>'vVֲ$~^f30^in{\_.O F8to}?${φ|#x^#^n~w=~k~?'KRtO.㌡h![3Zu*ٷճ(ԟ]z_/W1(ԟ]v~g|Yq<ז0 ; b8֮s,w9\?uEyStKaª@\,)) (!EPEPEPEPEPzѧts{v>C/"N6`d*J2gGӧWqBq_1ZuΓ\X]r?=Ey88Mp&pKtO-"wR2 K^-Z< \c>V0^@O7x2WFjs<׻kZ(<Т(OFw/6$1[:ޯԯ#q~4|,LVPem=@=YLUxӃV}AUbcUB.Ds5*kٸAeG>PJxt͝ b88?*$~@ׯD VkraiJs}Q.20x&mXξ,Z]“A-J#`+-E/"<]\a'tZGy.(|lދ~gMK OZdxDŽU9T6ϯ^<Ϡt5CZ]].t۫S=s`ڳ%8iVK:nqe+#<.T6U>zWoy3^I {F?J~=G}k)K$$;$de8*G Uӟ4Ocºw}|]4=ݣ\x$ʠms?q^ipw\"ȿPs^Z Q_0GڼU.t}ROM[G#]8wٞ ӫ87}Cgw vHȩBM55vof =A_٭`Ygx[6 P,5}>蚊(0(+?>+?> k|TuXq6_ +szk :u_ Z߶Ak_U}Jc2u/1[_»ݸG41-bሬ۴}}Eȹפ_c?5gi @cL\L<68hF_Ih>X4K7UТ sMj =J7CKo>Օ5s:߀t ~ηaٿ?|gdL8+gG%o?x`دOqȱwc¨&TW_V_aI=dpG!wu۞սZ1yL50$(l3(:~'ַo A}a3N*[0ǭ HKQV}G@֜$ 9of$ArNqUOgË05#m?D)^_h//5_/<?4}Jį+GkpG4"$ r| >S4Ђ"S 1%R:ȝ 8;PKPz PK6(AOEBPS/dcommon/feedback.gif7GIF89a'%(hp|fdx?AN5:dfeDGHɾTdQc`g*6DC\?ؘ||{;=E6JUՄfeA= >@,4`H.|`a (Q 9:&[|ځ,4p Y&BDb,!2@, $wPA'ܠǃ@CO~/d.`I @8ArHx9H75j L 3B/` P#qD*s 3A:3,H70P,R@ p!(F oԥ D;"0 ,6QBRɄHhI@@VDLCk8@NBBL2&pClA?DAk%$`I2 #Q+l7 "=&dL&PRSLIP)PɼirqМ'N8[_}w;PK-PK6(AOEBPS/dcommon/booklist.gifGIF89a1޵֥΄kZ{Jk1Rs!BZ)B),@I9Z͓Ca % Dz8Ȁ0FZЌ0P !x8!eL8aWȠFD(~@p+rMS|ӛR$ v "Z:]ZJJEc{*=AP  BiA ']j4$*   & 9q sMiO?jQ = , YFg4.778c&$c%9;PKː5PK6(AOEBPS/dcommon/cpyr.htm1 Oracle Legal Notices

Oracle Legal Notices

Copyright Notice

Copyright © 1994-2012, Oracle and/or its affiliates. All rights reserved.

Trademark Notice

Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.

Intel and Intel Xeon are trademarks or registered trademarks of Intel Corporation. All SPARC trademarks are used under license and are trademarks or registered trademarks of SPARC International, Inc. AMD, Opteron, the AMD logo, and the AMD Opteron logo are trademarks or registered trademarks of Advanced Micro Devices. UNIX is a registered trademark of The Open Group.

License Restrictions Warranty/Consequential Damages Disclaimer

This software and related documentation are provided under a license agreement containing restrictions on use and disclosure and are protected by intellectual property laws. Except as expressly permitted in your license agreement or allowed by law, you may not use, copy, reproduce, translate, broadcast, modify, license, transmit, distribute, exhibit, perform, publish, or display any part, in any form, or by any means. Reverse engineering, disassembly, or decompilation of this software, unless required by law for interoperability, is prohibited.

Warranty Disclaimer

The information contained herein is subject to change without notice and is not warranted to be error-free. If you find any errors, please report them to us in writing.

Restricted Rights Notice

If this is software or related documentation that is delivered to the U.S. Government or anyone licensing it on behalf of the U.S. Government, the following notice is applicable:

U.S. GOVERNMENT RIGHTS Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, the use, duplication, disclosure, modification, and adaptation shall be subject to the restrictions and license terms set forth in the applicable Government contract, and, to the extent applicable by the terms of the Government contract, the additional rights set forth in FAR 52.227-19, Commercial Computer Software License (December 2007). Oracle America, Inc., 500 Oracle Parkway, Redwood City, CA 94065.

Hazardous Applications Notice

This software or hardware is developed for general use in a variety of information management applications. It is not developed or intended for use in any inherently dangerous applications, including applications that may create a risk of personal injury. If you use this software or hardware in dangerous applications, then you shall be responsible to take all appropriate fail-safe, backup, redundancy, and other measures to ensure its safe use. Oracle Corporation and its affiliates disclaim any liability for any damages caused by use of this software or hardware in dangerous applications.

Third-Party Content, Products, and Services Disclaimer

This software or hardware and documentation may provide access to or information on content, products, and services from third parties. Oracle Corporation and its affiliates are not responsible for and expressly disclaim all warranties of any kind with respect to third-party content, products, and services. Oracle Corporation and its affiliates will not be responsible for any loss, costs, or damages incurred due to your access to or use of third-party content, products, or services.

Alpha and Beta Draft Documentation Notice

If this document is in prerelease status:

This documentation is in prerelease status and is intended for demonstration and preliminary use only. It may not be specific to the hardware on which you are using the software. Oracle Corporation and its affiliates are not responsible for and expressly disclaim all warranties of any kind with respect to this documentation and will not be responsible for any loss, costs, or damages incurred due to the use of this documentation.

Oracle Logo

PKN61PK6(AOEBPS/dcommon/masterix.gif.GIF89a1ޜΌscJk1Rs!Bc1J),@IS@0"1 Ѿb$b08PbL,acr B@(fDn Jx11+\%1 p { display: none; } /* Class Selectors */ .ProductTitle { font-family: sans-serif; } .BookTitle { font-family: sans-serif; } .VersionNumber { font-family: sans-serif; } .PrintDate { font-family: sans-serif; font-size: small; } .PartNumber { font-family: sans-serif; font-size: small; } PKeӺ1,PK6(AOEBPS/dcommon/larrow.gif#GIF87a絵ƌֵƽ{{ss֜ƔZZ{{{{ZZssZZccJJJJRRBBJJJJ991111))!!{,@pH,Ȥrl:ШtpHc`  өb[.64ꑈ53=Z]'yuLG*)g^!8C?-6(29K"Ĩ0Яl;U+K9^u2,@@ (\Ȱ Ë $P`lj 8x I$4H *(@͉0dа8tA  DсSP v"TUH PhP"Y1bxDǕ̧_=$I /& .)+ 60D)bB~=0#'& *D+l1MG CL1&+D`.1qVG ( "D2QL,p.;u. |r$p+5qBNl<TzB"\9e0u )@D,¹ 2@C~KU 'L6a9 /;<`P!D#Tal6XTYhn[p]݅ 7}B a&AƮe{EɲƮiEp#G}D#xTIzGFǂEc^q}) Y# (tۮNeGL*@/%UB:&k0{ &SdDnBQ^("@q #` @1B4i@ aNȅ@[\B >e007V[N(vpyFe Gb/&|aHZj@""~ӎ)t ? $ EQ.սJ$C,l]A `8A o B C?8cyA @Nz|`:`~7-G|yQ AqA6OzPbZ`>~#8=./edGA2nrBYR@ W h'j4p'!k 00 MT RNF6̙ m` (7%ꑀ;PKl-OJPK6(AOEBPS/dcommon/index.gifGIF89a1޵ΥΥ{sc{BZs,@IM" AD B0 3.R~[D"0, ]ШpRNC  /& H&[%7TM/`vS+-+ q D go@" 4o'Uxcxcc&k/ qp zUm(UHDDJBGMԃ;PK(PK6(AOEBPS/dcommon/bookbig.gif +GIF89a$!!!)))111999BBBJJJRRRZZZccckkksss{{{skkB991)))!!B11))1!JB9B9!!cZ9ƭƽssk{ZZRccZRRJJJBBB9c!!ν)1)k{s絽ƌkssֽZccJRRBJJ{9BB)11)99!!))11!!k!JZ!)RcJccBcs)1c)JZ!BR!)BZ)99J!Rk9!c11B)Z{)9Bkc1kB9BZ!Z{9Rs)Jkksk9kB1s1Jk9Rƥc{k9s)Z{1k91)s1Rk)Jc1J!))BZ!1k{csc{)19B!)Bcsc{ksc{kZs!RkJkJkքc{9Zks{ck9R)Bks9R9R1J!)Z1B!)c)9)99BR19kksBBJcc{ccBBZ))9kk!!199c11ZBB{9!!R!!Z!!c))!!kR!!s!!BcksRZ1c9B)R91c1)Z!R9B9k1)RcZ{)!1B9JB9B)!)J9B!& Imported from GIF image: bookbig.gif,$!!!)))111999BBBJJJRRRZZZccckkksss{{{skkB991)))!!B11))1!JB9B9!!cZ9ƭƽssk{ZZRccZRRJJJBBB9c!!ν)1)k{s絽ƌkssֽZccJRRBJJ{9BB)11)99!!))11!!k!JZ!)RcJccBcs)1c)JZ!BR!)BZ)99J!Rk9!c11B)Z{)9Bkc1kB9BZ!Z{9Rs)Jkksk9kB1s1Jk9Rƥc{k9s)Z{1k91)s1Rk)Jc1J!))BZ!1k{csc{)19B!)Bcsc{ksc{kZs!RkJkJkքc{9Zks{ck9R)Bks9R9R1J!)Z1B!)c)9)99BR19kksBBJcc{ccBBZ))9kk!!199c11ZBB{9!!R!!Z!!c))!!kR!!s!!BcksRZ1c9B)R91c1)Z!R9B9k1)RcZ{)!1B9JB9B)!)J9BH`\Ȑ:pظа"A6DBH,V@Dڹ'G"v Æ ܥ;n;!;>xAܽ[G.\rQC wr}BŊQ A9ᾑ#5Y0VȒj0l-GqF>ZpM rb ;=.ސW-WѻWo ha!}~ْ ; t 53 :\ 4PcD,0 4*_l0K3-`l.j!c Aa|2L4/1C`@@md;(H*80L0L(h*҇҆o#N84pC (xO@ A)J6rVlF r  fry†$r_pl5xhA+@A=F rGU a 1х4s&H Bdzt x#H%Rr (Ѐ7P`#Rщ'x" #0`@~i `HA'Tk?3!$`-A@1l"P LhʖRG&8A`0DcBH sq@AXB4@&yQhPAppxCQ(rBW00@DP1E?@lP1%T` 0 WB~nQ@;PKGC PK6(AOEBPS/dcommon/rarrow.gif/GIF87a絵ƌֵƽ{{ss֜ƔZZ{{{{ZZssZZccJJJJRRBBJJJJ991111))!!{,@pH,Ȥrl:ШLlԸ NCqWEd)#34vwwpN|0yhX!'+-[F 'n5 H $/14w3% C .90" qF 7&E "D mnB|,c96) I @0BW{ᢦdN p!5"D`0 T 0-]ʜ$;PKJV^PK6(AOEBPS/dcommon/mix.gifkGIF89aZZZBBBJJJkkk999sss!!!111cccֽ{{{RRR)))猌ƭ{s{sks!,@@pH,B$ 8 t:<8 *'ntPP DQ@rIBJLNPTVEMOQUWfj^!  hhG H  kCúk_a Ǥ^ h`B BeH mm  #F` I lpǎ,p B J\Y!T\(dǏ!Gdˆ R53ټ R;iʲ)G=@-xn.4Y BuU(*BL0PX v`[D! | >!/;xP` (Jj"M6 ;PK枰pkPK6(AOEBPS/dcommon/doccd_epub.jsM /* Copyright 2006, 2012, Oracle and/or its affiliates. All rights reserved. Author: Robert Crews Version: 2012.3.17 */ function addLoadEvent(func) { var oldOnload = window.onload; if (typeof(window.onload) != "function") window.onload = func; else window.onload = function() { oldOnload(); func(); } } function compactLists() { var lists = []; var ul = document.getElementsByTagName("ul"); for (var i = 0; i < ul.length; i++) lists.push(ul[i]); var ol = document.getElementsByTagName("ol"); for (var i = 0; i < ol.length; i++) lists.push(ol[i]); for (var i = 0; i < lists.length; i++) { var collapsible = true, c = []; var li = lists[i].getElementsByTagName("li"); for (var j = 0; j < li.length; j++) { var p = li[j].getElementsByTagName("p"); if (p.length > 1) collapsible = false; for (var k = 0; k < p.length; k++) { if ( getTextContent(p[k]).split(" ").length > 12 ) collapsible = false; c.push(p[k]); } } if (collapsible) { for (var j = 0; j < c.length; j++) { c[j].style.margin = "0"; } } } function getTextContent(e) { if (e.textContent) return e.textContent; if (e.innerText) return e.innerText; } } addLoadEvent(compactLists); function processIndex() { try { if (!/\/index.htm(?:|#.*)$/.test(window.location.href)) return false; } catch(e) {} var shortcut = []; lastPrefix = ""; var dd = document.getElementsByTagName("dd"); for (var i = 0; i < dd.length; i++) { if (dd[i].className != 'l1ix') continue; var prefix = getTextContent(dd[i]).substring(0, 2).toUpperCase(); if (!prefix.match(/^([A-Z0-9]{2})/)) continue; if (prefix == lastPrefix) continue; dd[i].id = prefix; var s = document.createElement("a"); s.href = "#" + prefix; s.appendChild(document.createTextNode(prefix)); shortcut.push(s); lastPrefix = prefix; } var h2 = document.getElementsByTagName("h2"); for (var i = 0; i < h2.length; i++) { var nav = document.createElement("div"); nav.style.position = "relative"; nav.style.top = "-1.5ex"; nav.style.left = "1.5em"; nav.style.width = "90%"; while (shortcut[0] && shortcut[0].toString().charAt(shortcut[0].toString().length - 2) == getTextContent(h2[i])) { nav.appendChild(shortcut.shift()); nav.appendChild(document.createTextNode("\u00A0 ")); } h2[i].parentNode.insertBefore(nav, h2[i].nextSibling); } function getTextContent(e) { if (e.textContent) return e.textContent; if (e.innerText) return e.innerText; } } addLoadEvent(processIndex); PKo"nR M PK6(AOEBPS/dcommon/toc.gifGIF89a1ΥΥ{c{Z{JkJk1Rk,@IK% 0| eJB,K-1i']Bt9dz0&pZ1o'q(؟dQ=3S SZC8db f&3v2@VPsuk2Gsiw`"IzE%< C !.hC IQ 3o?39T ҍ;PKv I PK6(AOEBPS/dcommon/topnav.gifGIF89a1ֽ筽ޭƔkZZk{Bc{,@ ) l)-'KR$&84 SI) XF P8te NRtHPp;Q%Q@'#rR4P fSQ o0MX[) v + `i9gda/&L9i*1$#"%+ ( E' n7Ȇ(,҅(L@(Q$\x 8=6 'נ9tJ&"[Epljt p#ѣHb :f F`A =l|;&9lDP2ncH R `qtp!dȐYH›+?$4mBA9 i@@ ]@ꃤFxAD*^Ŵ#,(ε  $H}F.xf,BD Z;PK1FAPK6(AOEBPS/dcommon/bp_layout.css# @charset "utf-8"; /* bp_layout.css Copyright 2007, Oracle and/or its affiliates. All rights reserved. */ body { margin: 0ex; padding: 0ex; } h1 { display: none; } #FOOTER { border-top: #0d4988 solid 10px; background-color: inherit; color: #e4edf3; clear: both; } #FOOTER p { font-size: 80%; margin-top: 0em; margin-left: 1em; } #FOOTER a { background-color: inherit; color: gray; } #LEFTCOLUMN { float: left; width: 50%; } #RIGHTCOLUMN { float: right; width: 50%; clear: right; /* IE hack */ } #LEFTCOLUMN div.portlet { margin-left: 2ex; margin-right: 1ex; } #RIGHTCOLUMN div.portlet { margin-left: 1ex; margin-right: 2ex; } div.portlet { margin: 2ex 1ex; padding-left: 0.5em; padding-right: 0.5em; border: 1px #bcc solid; background-color: #f6f6ff; color: black; } div.portlet h2 { margin-top: 0.5ex; margin-bottom: 0ex; font-size: 110%; } div.portlet p { margin-top: 0ex; } div.portlet ul { list-style-type: none; padding-left: 0em; margin-left: 0em; /* IE Hack */ } div.portlet li { text-align: right; } div.portlet li cite { font-style: normal; float: left; } div.portlet li a { margin: 0px 0.2ex; padding: 0px 0.2ex; font-size: 95%; } #NAME { margin: 0em; padding: 0em; position: relative; top: 0.6ex; left: 10px; width: 80%; } #PRODUCT { font-size: 180%; } #LIBRARY { color: #0b3d73; background: inherit; font-size: 180%; font-family: serif; } #RELEASE { position: absolute; top: 28px; font-size: 80%; font-weight: bold; } #TOOLS { list-style-type: none; position: absolute; top: 1ex; right: 2em; margin: 0em; padding: 0em; background: inherit; color: black; } #TOOLS a { background: inherit; color: black; } #NAV { float: left; width: 96%; margin: 3ex 0em 0ex 0em; padding: 2ex 0em 0ex 4%; /* Avoiding horizontal scroll bars. */ list-style-type: none; background: transparent url(../gifs/nav_bg.gif) repeat-x bottom; } #NAV li { float: left; margin: 0ex 0.1em 0ex 0em; padding: 0ex 0em 0ex 0em; } #NAV li a { display: block; margin: 0em; padding: 3px 0.7em; border-top: 1px solid gray; border-right: 1px solid gray; border-bottom: none; border-left: 1px solid gray; background-color: #a6b3c8; color: #333; } #SUBNAV { float: right; width: 96%; margin: 0ex 0em 0ex 0em; padding: 0.1ex 4% 0.2ex 0em; /* Avoiding horizontal scroll bars. */ list-style-type: none; background-color: #0d4988; color: #e4edf3; } #SUBNAV li { float: right; } #SUBNAV li a { display: block; margin: 0em; padding: 0ex 0.5em; background-color: inherit; color: #e4edf3; } #SIMPLESEARCH { position: absolute; top: 5ex; right: 1em; } #CONTENT { clear: both; } #NAV a:hover, #PORTAL_1 #OVERVIEW a, #PORTAL_2 #OVERVIEW a, #PORTAL_3 #OVERVIEW a, #PORTAL_4 #ADMINISTRATION a, #PORTAL_5 #DEVELOPMENT a, #PORTAL_6 #DEVELOPMENT a, #PORTAL_7 #DEVELOPMENT a, #PORTAL_11 #INSTALLATION a, #PORTAL_15 #ADMINISTRATION a, #PORTAL_16 #ADMINISTRATION a { background-color: #0d4988; color: #e4edf3; padding-bottom: 4px; border-color: gray; } #SUBNAV a:hover, #PORTAL_2 #SEARCH a, #PORTAL_3 #BOOKS a, #PORTAL_6 #WAREHOUSING a, #PORTAL_7 #UNSTRUCTURED a, #PORTAL_15 #INTEGRATION a, #PORTAL_16 #GRID a { position: relative; top: 2px; background-color: white; color: #0a4e89; } PK3( # PK6(AOEBPS/dcommon/bookicon.gif:GIF87a!!!)))111999BBBJJJRRRZZZccckkksss{{{ޭ{{ZRRcZZRJJJBB)!!skRB9{sν{skskcZRJ1)!֭ƽ{ZZRccZJJBBB999111)JJ9BB1ZZB!!ﭵBJJ9BB!!))Jk{)1!)BRZJ{BsR!RRJsJ!J{s!JsBkks{RsB{J{c1RBs1ZB{9BJ9JZ!1BJRRs!9R!!9Z9!1)J19JJRk19R1Z)!1B9R1RB!)J!J1R)J119!9J91!9BkksBBJ119BBR!))9!!!JB1JJ!)19BJRZckތ1)1J9B,H*\hp >"p`ƒFF "a"E|ժOC&xCRz OBtX>XE*O>tdqAJ +,WxP!CYpQ HQzDHP)T njJM2ꔀJ2T0d#+I:<жk 'ꤱF AB @@nh Wz' H|-7f\A#yNR5 /PM09u UjćT|q~Yq@&0YZAPa`EzI /$AD Al!AAal 2H@$ PVAB&c*ؠ p @% p-`@b`uBa l&`3Ap8槖X~ vX$Eh`.JhAepA\"Bl, :Hk;PKx[?:PK6(AOEBPS/dcommon/conticon.gif^GIF87a!!!)))111999BBBJJJRRRZZZccckkksss{{{ZRR޽{{ssskkkcccZ991ccRZZBBJJZck)19ZcsBJZ19J!k{k)Z1RZs1!B)!J91{k{)J!B!B911)k{cs!1s!9)s!9!B!k)k1c!)Z!R{9BJcckZZcBBJ99B119{{!!)BBRBBZ!))999R99Z!!999c1!9!)19B1)!B9R,  oua\h2SYPa aowwxYi 9SwyyxxyYSd $'^qYȵYvh ч,/?g{н.J5fe{ڶyY#%/}‚e,Z|pAܠ `KYx,ĉ&@iX9|`p ]lR1khٜ'E 6ÅB0J;t X b RP(*MÄ!2cLhPC <0Ⴁ  $4!B 6lHC%<1e H 4p" L`P!/,m*1F`#D0D^!AO@..(``_؅QWK>_*OY0J@pw'tVh;PKp*c^PK6(AOEBPS/dcommon/blafdoc.cssL@charset "utf-8"; /* Copyright 2002, 2011, Oracle and/or its affiliates. All rights reserved. Author: Robert Crews Version: 2011.10.7 */ body { font-family: Tahoma, sans-serif; /* line-height: 125%; */ color: black; background-color: white; font-size: small; } * html body { /* http://www.info.com.ph/~etan/w3pantheon/style/modifiedsbmh.html */ font-size: x-small; /* for IE5.x/win */ f\ont-size: small; /* for other IE versions */ } h1 { font-size: 165%; font-weight: bold; border-bottom: 1px solid #ddd; width: 100%; } h2 { font-size: 152%; font-weight: bold; } h3 { font-size: 139%; font-weight: bold; } h4 { font-size: 126%; font-weight: bold; } h5 { font-size: 113%; font-weight: bold; display: inline; } h6 { font-size: 100%; font-weight: bold; font-style: italic; display: inline; } a:link { color: #039; background: inherit; } a:visited { color: #72007C; background: inherit; } a:hover { text-decoration: underline; } a img, img[usemap] { border-style: none; } code, pre, samp, tt { font-family: monospace; font-size: 110%; } caption { text-align: center; font-weight: bold; width: auto; } dt { font-weight: bold; } table { font-size: small; /* for ICEBrowser */ } td { vertical-align: top; } th { font-weight: bold; text-align: left; vertical-align: bottom; } ol ol { list-style-type: lower-alpha; } ol ol ol { list-style-type: lower-roman; } td p:first-child, td pre:first-child { margin-top: 0px; margin-bottom: 0px; } table.table-border { border-collapse: collapse; border-top: 1px solid #ccc; border-left: 1px solid #ccc; } table.table-border th { padding: 0.5ex 0.25em; color: black; background-color: #f7f7ea; border-right: 1px solid #ccc; border-bottom: 1px solid #ccc; } table.table-border td { padding: 0.5ex 0.25em; border-right: 1px solid #ccc; border-bottom: 1px solid #ccc; } span.gui-object, span.gui-object-action { font-weight: bold; } span.gui-object-title { } p.horizontal-rule { width: 100%; border: solid #cc9; border-width: 0px 0px 1px 0px; margin-bottom: 4ex; } div.zz-skip-header { display: none; } td.zz-nav-header-cell { text-align: left; font-size: 95%; width: 99%; color: black; background: inherit; font-weight: normal; vertical-align: top; margin-top: 0ex; padding-top: 0ex; } a.zz-nav-header-link { font-size: 95%; } td.zz-nav-button-cell { white-space: nowrap; text-align: center; width: 1%; vertical-align: top; padding-left: 4px; padding-right: 4px; margin-top: 0ex; padding-top: 0ex; } a.zz-nav-button-link { font-size: 90%; } div.zz-nav-footer-menu { width: 100%; text-align: center; margin-top: 2ex; margin-bottom: 4ex; } p.zz-legal-notice, a.zz-legal-notice-link { font-size: 85%; /* display: none; */ /* Uncomment to hide legal notice */ } /*************************************/ /* Begin DARB Formats */ /*************************************/ .bold, .codeinlinebold, .syntaxinlinebold, .term, .glossterm, .seghead, .glossaryterm, .keyword, .msg, .msgexplankw, .msgactionkw, .notep1, .xreftitlebold { font-weight: bold; } .italic, .codeinlineitalic, .syntaxinlineitalic, .variable, .xreftitleitalic { font-style: italic; } .bolditalic, .codeinlineboldital, .syntaxinlineboldital, .titleinfigure, .titleinexample, .titleintable, .titleinequation, .xreftitleboldital { font-weight: bold; font-style: italic; } .itemizedlisttitle, .orderedlisttitle, .segmentedlisttitle, .variablelisttitle { font-weight: bold; } .bridgehead, .titleinrefsubsect3 { font-weight: bold; } .titleinrefsubsect { font-size: 126%; font-weight: bold; } .titleinrefsubsect2 { font-size: 113%; font-weight: bold; } .subhead1 { display: block; font-size: 139%; font-weight: bold; } .subhead2 { display: block; font-weight: bold; } .subhead3 { font-weight: bold; } .underline { text-decoration: underline; } .superscript { vertical-align: super; } .subscript { vertical-align: sub; } .listofeft { border: none; } .betadraft, .alphabetanotice, .revenuerecognitionnotice { color: #e00; background: inherit; } .betadraftsubtitle { text-align: center; font-weight: bold; color: #e00; background: inherit; } .comment { color: #080; background: inherit; font-weight: bold; } .copyrightlogo { text-align: center; font-size: 85%; } .tocsubheader { list-style-type: none; } table.icons td { padding-left: 6px; padding-right: 6px; } .l1ix dd, dd dl.l2ix, dd dl.l3ix { margin-top: 0ex; margin-bottom: 0ex; } div.infoboxnote, div.infoboxnotewarn, div.infoboxnotealso { margin-top: 4ex; margin-right: 10%; margin-left: 10%; margin-bottom: 4ex; padding: 0.25em; border-top: 1pt solid gray; border-bottom: 1pt solid gray; } p.notep1 { margin-top: 0px; margin-bottom: 0px; } .tahiti-highlight-example { background: #ff9; text-decoration: inherit; } .tahiti-highlight-search { background: #9cf; text-decoration: inherit; } .tahiti-sidebar-heading { font-size: 110%; margin-bottom: 0px; padding-bottom: 0px; } /*************************************/ /* End DARB Formats */ /*************************************/ @media all { /* * * { line-height: 120%; } */ dd { margin-bottom: 2ex; } dl:first-child { margin-top: 2ex; } } @media print { body { font-size: 11pt; padding: 0px !important; } a:link, a:visited { color: black; background: inherit; } code, pre, samp, tt { font-size: 10pt; } #nav, #search_this_book, #comment_form, #comment_announcement, #flipNav, .noprint { display: none !important; } body#left-nav-present { overflow: visible !important; } } PKʍPK6(AOEBPS/dcommon/rightnav.gif&GIF89a1ֽ筽ޭƔkZZk{Bc{,@ ) l)- $CҠҀ ! D1 #:aS( c4B0 AC8 ְ9!%MLj Z * ctypJBa H t>#Sb(clhUԂ̗4DztSԙ9ZQҀEPEPEPEPEPEPEPM=iԍP Gii c*yF 1׆@\&o!QY00_rlgV;)DGhCq7~..p&1c:u֫{fI>fJL$}BBP?JRWc<^j+χ5b[hֿ- 5_j?POkeQ^hֿ1L^ H ?Qi?z?+_xɔŪ\썽O]χ>)xxV/s)e6MI7*ߊޛv֗2J,;~E4yi3[nI`Ѱe9@zXF*W +]7QJ$$=&`a۾?]N T䏟'X)Ɣkf:j |>NBWzYx0t!* _KkoTZ?K Gc+UyڹgNuh^iSo5{\ܹ3Yos}.>if FqR5\/TӮ#]HS0DKu{($"2xִ{SBJ8=}Y=.|Tsц2UЫ%.InaegKo z ݎ3ֹxxwM&2S%';+I',kW&-"_¿_ Vq^ܫ6pfT2RV A^6RKetto^[{w\jPZ@ޢN4/XN#\42j\(z'j =~-I#:q[Eh|X:sp* bifp$TspZ-}NM*B-bb&*xUr#*$M|QWY ~p~- fTED6O.#$m+t$˙H"Gk=t9r娮Y? CzE[/*-{c*[w~o_?%ƔxZ:/5𨴟q}/]22p qD\H"K]ZMKR&\C3zĽ[PJm]AS)Ia^km M@dК)fT[ijW*hnu Ͳiw/bkExG£@f?Zu.s0(<`0ֹoxOaDx\zT-^ѧʧ_1+CP/p[w 9~U^[U<[tĽwPv[yzD1W='u$Oeak[^ |Gk2xv#2?¹TkSݕ| rݞ[Vi _Kz*{\c(Ck_܏|?u jVڔ6f t?3nmZ6f%QAjJf9Rq _j7Z-y.pG$Xb]0')[_k;$̭?&"0FOew7 z-cIX岛;$u=\an$ zmrILu uٞ% _1xcUW%dtÀx885Y^gn;}ӭ)場QEQ@Q@Q@Q@Q@Q@!4xPm3w*]b`F_931˜[ן+(> E ly;<;MF-qst+}DH @YKlLmؤciN<|]IU)Lw(8t9FS(=>og<\Z~u_+X1ylsj'eՃ*U3`C!N9Q_WܱhKc93^ua>H ƕGk=8~e#_?{ǀe-[2ٔ7;=&K挑5zsLdx(e8#{1wS+ΝVkXq9>&yஏh$zq^0~/j@:/«Vnce$$uoPp}MC{$-akH@ɫ1O !8R9s5ԦYmϧ'OUṡ5T,!Ԛ+s#1Veo=[)g>#< s)ƽُA^䠮ωFUj(ǩ|N3Jڷ睁ϱuږZYGOTsI<&drav?A^_f׻B$,O__ԿC`it{6>G׈C~&$y؎v1q9Sc1fH[ѽ>,gG'0'@Vw,BO [#>ﱺg5ΒFVD%Yr:O5 Tu+O멃]ی38Ze}R&ѝ_xzc1DXgس;<,_,{ƽY'AS#oF.M#~cBuEx7G+Y)(5q+GCV;qF+CLQ)qEC&6z𿊘z}?&w=+)??&\g{;V??׻xGœdٿ׼-Nc')3K]N)iLTӿCdb7Q^a N sd>Fz[0S^s'Zi 77D}kWus ab~~H(>.fif9,~|Jk;YN3H8Y(t6Q݉k͇_÷Z+2߄&[ +Tr^藺97~c܎=[f1RrBǓ^kEMhxYVm<[џ6| kqbѱ| YA{G8p?\UM7Z66 g1U1igU69 u5Pƪ:VVZC=[@ҹ¨$kSmɳО\vFz~i3^a Osŧυ9Q}_3 όO{/wgoet39 vO2ea;Ύ7$U#?k+Ek&dpzbӱ+TaB0gN{[N7Gי}U7&@?>Fz~E!a@s ?'67XxO*!?qi]֏TQN@tI+\^s8l0)2k!!iW8F$(yOּT.k,/#1:}8uT˾+5=O/`IW G֯b.-<= HOm;~so~hW5+kS8s.zwE| ?4ӿw/K N 9?j(#0UT` Wzw}:_*9m>󑓀F?ELzv=8q:=WgJ`nDr Zе<ֹ](Q@Q@Q@Q@Q@Q@Q@Q@ 'IdC0EYJVcMty_~u+Sw-aO n<[YJgL#6i g5ЖDZ14cʝ!!\/M}/_AYR__>oC? _?7_G#RERW쏞KB}JxGSkǕA pƱơP m]hwB7U$Zq M95"3q1ioATߚ{g.t uu2k=;h#YB= fgS :TdLԃ!44mFK{Hrd^7oz|BVr<{)6AXգV»|>*/hS܏z͆OM=Εq (s|s׊LKQI :9NJ)P+!ʣoAF>+=@I}"x/}۠1aנc¹4emC:>p_xWKX` >R3_S½èųp3޺u3N e یbmͺ<_ mnݮ1Op?Gm)Qb%N585'%Ahs\6yw!"&Ɨ._wk)}GP;Z!#\"< *oƾ\)}N>"լ/~]Lg}pBG X?<zZ#x69S=6) jzx=y9O&>+e!!? ?s~k5Gʏ)?*ce7Ox~k5􇔾Q/e7/Ԑ#3OgNC0] ;_FiRl>Q.g>!%k#ú:Kn'&}?U@\pџPtp)v<{_i}Oվֲ3XIYIx~b<D?(=_JXH=bbi=Oh?_ C_O)}oW쏜? %Ƶ;-RYFi`wۭ{ϖZMtQ$"c_+ԃx1*0b;ԕ݋ESQEQEQEQEQEQEQEQEQEQZ(1F)h1K@XLRE&9P (bf{RӨ&)PEPEPbԴPGKZ(iإbn(:A%S0(-&)P+ ڎԴP11F)h&:LRmQ@Q@Š(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((PKje88PK6(AOEBPS/dcommon/help.gif!GIF89a1εֵ֜֜{kZsBc{,@ )sƠTQ$8(4ʔ%ŌCK$A HP`$h8ŒSd+ɡ\ H@%' 6M HO3SJM /:Zi[7 \( R9r ERI%  N=aq   qƦs *q-n/Sqj D XZ;PKއ{&!PK6(AOEBPS/advnc.htm Advanced Programming Techniques

15 Advanced Programming Techniques

This section provides information about advanced programming techniques including working with automatic data manipulation language, establishing database links, using collections, running background SQL, utilizing Web services, and managing user preferences.

This section contains the following topics:

About DML Locking

When automatic data manipulation language (DML) is used in Oracle Application Express to update or delete rows of a table, a transaction is initiated to first lock the row, verify if it has changed since it was displayed on the page, and then finally issue the actual UPDATE or DELETE statement for the row.

In some environments where locking of rows is prevalent, you may want to control the DML operation and determine if the DML operation:

  • waits indefinitely

  • fails immediately

  • waits for a specified period of time

About APEX_DML_LOCK_WAIT_TIME

You can set the value of an application substitution string, an application item, or a page item to APEX_DML_LOCK_WAIT_TIME to control the DML operation. The following values are supported:

  • If null (the default), results in the same behavior as previous versions of Oracle Application Express, that is, wait indefinitely.

  • If 0, fail immediately if the row is locked by another database session.

  • If > 0 and the row is locked, wait for the specified number of seconds.

When set in an application, the value for APEX_DML_LOCK_WAIT_TIME applies to all UPDATE and DELETE DML operations using Automatic DML in the entire application. To control a specific Automatic DML process, update the value of APEX_DML_LOCK_WAIT_TIME before the Automatic DML process and reset it after the Automatic DML process. Note that this does not affect updates and deletes using tabular forms.

About FSP_DML_LOCK_ROW

You can also set the value of an application substitution string, an application item, or a page item to FSP_DML_LOCK_ROW to control the DML operation. The following values are supported:

  • If the value is set to FALSE, then no SELECT FOR UPDATE will be issued.

  • If the value is anything other than FALSE, the default behavior of SELECT FOR UPDATE is performed when issuing an UPDATE or DELETE DML operation using Automatic DML.

Accessing Data with Database Links

Because the Workspace home page runs in an Oracle database, you have access to all distributed Oracle database capabilities. Typically, you perform distributed database operations using database links.

A database link is a schema object in one database that enables you to access objects on another database. Once you have created the database link you can access the remote objects by appending @dblink to the table or view name where dblink is the Database Link Name you specify in the Create Database Object Wizard.


Note:

By default, the CREATE DATABASE LINK system privilege is not granted to a provisioned workspace or database user. To use this feature, a DBA or administrator needs to grant this specific privilege to the database user in the user's workspace. See "Creating Database Links" in Oracle Database Administrator's Guide

To create a database link:

  1. On the Workspace home page, click SQL Workshop and then Object Browser.

    Object Browser appears.

  2. Click Create.

  3. Select Database Link and click Next.

  4. Follow the on-screen instructions.

    Note that Database Link names must conform to Oracle naming conventions and cannot contain spaces, or start with a number or underscore.

To view an existing a database link:

  1. On the Workspace home page, click SQL Workshop and then Object Browser.

    Object Browser appears.

  2. Select the object type Database Links at the top of the page.


See Also:

"Managing Database Objects with Object Browser" in Oracle Application Express SQL Workshop and Utilities Guide and "Database Links" in Oracle Database Administrator's Guide

Sending Email from an Application

This section describes how to send email from an Oracle Application Express application.

Topics in this section include:


Tip:

If you are running Oracle Application Express with Oracle Database 11g Release 1 (11.1), you must enable network services in order to send outbound email. See "Enabling Network Services in Oracle Database 11g"

About Configuring Oracle Application Express to Send Email

Before you can send email from an Application Builder application, you must:

  1. Log in to Oracle Application Express Administration Services and configure the email settings on the Instance Settings page. See in Oracle Application Express Administration Guide.

  2. If you are running Oracle Application Express with Oracle Database 11g release 1 (11.1), you must enable outbound mail. In Oracle Database 11g release 1 (11.1), the ability to interact with network services is disabled by default. See "Enabling Network Services in Oracle Database 11g".


Tip:

You can configure Oracle Application Express to automatically email users their login credentials when a new workspace request has been approved. To learn more, see "Specifying a Provisioning Mode"in Oracle Application Express Administration Guide.

Sending Email from an Application

You can send an email from an Application Builder application by calling the PL/SQL package APEX_MAIL. This package is built on top of the Oracle supplied UTL_SMTP package. Because of this dependence, in order to use APEX_MAIL, the UTL_SMTP package must be installed and functioning.


See Also:

Oracle Database PL/SQL Packages and Types Reference for more information about the UTL_SMTP package and "APEX_MAIL" in Oracle Application Express API Reference

APEX_MAIL contains three procedures for sending email:

  • Use APEX_MAIL.SEND to manually send an outbound email mess age from your application

  • Use APEX_MAIL.ADD_ATTACHMENT to send an outbound email message from an application as an attachment. APEX_MAIL.ADD_ATTACHMENT

  • Use APEX_MAIL.PUSH_QUEUE to deliver mail messages stored in APEX_MAIL_QUEUE

Oracle Application Express stores unsent email messages in a table named APEX_MAIL_QUEUE. You can deliver mail messages stored in this queue to the specified SMTP gateway by calling the procedure APEX_MAIL.PUSH_QUEUE.

Oracle Application Express logs successfully submitted messages in the table APEX_MAIL_LOG with the timestamp reflecting your server's local time.

The following UNIX/LINUX example demonstrates the use of the APEX_MAIL.PUSH_QUEUE procedure using a shell script.

SQLPLUS / <<EOF
APEX_MAIL.PUSH_QUEUE;
DISCONNECT
EXIT
EOF

Using Collections

Collections enable you to temporarily capture one or more nonscalar values. You can use collections to store rows and columns currently in session state so they can be accessed, manipulated, or processed during a user's specific session. You can think of a collection as a bucket in which you temporarily store and name rows of information.

The following are examples of when you might use collections:

  • When you are creating a data-entry wizard in which multiple rows of information first need to be collected within a logical transaction. You can use collections to temporarily store the contents of the multiple rows of information, before performing the final step in the wizard when both the physical and logical transactions are completed.

  • When your application includes an update page on which a user updates multiple detail rows on one page. The user can make many updates, apply these updates to a collection and then call a final process to apply the changes to the database.

  • When you are building a wizard where you are collecting an arbitrary number of attributes. At the end of the wizard, the user then performs a task that takes the information temporarily stored in the collection and applies it to the database.

Topics in this section include:

About the APEX_COLLECTION API

Every collection contains a named list of data elements (or members) which can have up to 50 character attributes (VARCHAR2(4000)), and one large character attribute (CLOB). You insert, update, and delete collection information using the PL/SQL API APEX_COLLECTION.

About Collection Naming

When you create a collection, you must give it a name that cannot exceed 255 characters. Note that collection names are not case-sensitive and will be converted to uppercase.

Once the collection is named, you can access the values in the collection by running a SQL query against the view APEX_COLLECTIONS.

Creating a Collection

Every collection contains a named list of data elements (or members) which can have up to 50 character attributes (VARCHAR2(4000)), and one large character attribute (CLOB). You use the following methods to create a collection:

  • CREATE_COLLECTION

  • CREATE_OR_TRUNCATE_COLLECTION

  • CREATE_COLLECTION_FROM_QUERY

  • CREATE_COLLECTION_FROM_QUERY_B

The CREATE_COLLECTION method raises an exception if the named collection exists, for example:

APEX_COLLECTION.CREATE_COLLECTION(
    p_collection_name => collection name );

The CREATE_OR_TRUNCATE_COLLECTION method creates a collection if the named collection does not exist. If the named collection exists, this method truncates it. Truncating a collection empties it, but leaves it in place, for example:

APEX_COLLECTION.CREATE_OR_TRUNCATE_COLLECTION(
    p_collection_name => collection name);

The CREATE_COLLECTION_FROM_QUERY method creates a collection and then populates it with the results of a specified query, for example:

APEX_COLLECTION.CREATE_COLLECTION_FROM_QUERY(
    p_collection_name => collection name,
    p_query           => your query ,
    p_generate_md5    => 'YES' or 'NO' );

The CREATE_COLLECTION_FROM_QUERY_B method also creates a collection and then populates it with the results of a specified query, for example:

APEX_COLLECTION.CREATE_COLLECTION_FROM_QUERY_B(
    p_collection_name => collection name,
    p_query           => your query );
   

The CREATE_COLLECTION_FROM_QUERY_B method offers significantly faster performance than the CREATE_COLLECTION_FROM_QUERY method by performing bulk SQL operations, but has the following limitations:

  • No column value in the select list of the query can be more than 2,000 bytes. If a row is encountered that has a column value of more than 2,000 bytes, an error will be raised during execution.

  • The MD5 checksum will not be computed for any members in the collection.

About the Parameter p_generate_md5

Use the p_generate_md5 flag to specify if the message digest of the data of the collection member should be computed. By default, this flag is set to NO. Use this parameter to check the MD5 of the collection member (that is, compare it with another member or see if a member has changed).


See Also:

"Determining Collection Status" for information about using the GET_MEMBER_MD5 function

Truncating a Collection

If you truncate a collection, you remove all members from the specified collection, but the named collection remains in place, for example:

APEX_COLLECTION.TRUNCATE_COLLECTION(
    p_collection_name => collection name );

Accessing a Collection

You can access the members of a collection by querying the database view APEX_COLLECTIONS. The APEX_COLLECTIONS view has the following definition:

COLLECTION_NAME   NOT NULL VARCHAR2(255)
SEQ_ID            NOT NULL NUMBER 
C001                       VARCHAR2(4000)
C002                       VARCHAR2(4000)
C003                       VARCHAR2(4000)   
C004                       VARCHAR2(4000)   
C005                       VARCHAR2(4000)  
...
C050                       VARCHAR2(4000)
CLOB001                    CLOB   
MD5_ORIGINAL               VARCHAR2(4000)  

Use the APEX_COLLECTIONS view in an application just as you would use any other table or view in an application, for example:

SELECT c001, c002, c003
   FROM APEX_collections
 WHERE collection_name = 'FIREARMS'

Deleting a Collection

If you delete a collection, you delete the collection and all of its members, for example:

APEX_COLLECTION.DELETE_COLLECTION (
    p_collection_name => collection name );

Be aware that if you do not delete a collection, it will eventually be deleted when the session is purged. For example:

Deleting All Collections for the Current Application

Use the DELETE_ALL_COLLECTIONS method to delete all collections defined in the current application, for example:

APEX_COLLECTION.DELETE_ALL_COLLECTIONS;

Deleting All Collections in the Current Session

Use the DELETE_ALL_COLLECTIONS_SESSION method to delete all collections defined in the current session., for example:

APEX_COLLECTION.DELETE_ALL_COLLECTIONS_SESSION;

Adding Members to a Collection

When data elements (or members) are added to a collection, they are assigned a unique sequence ID. As you add members to a collection, the sequence ID will change in increments of 1, with the newest members having the largest ID.

You add new members to a collection using the ADD_MEMBER function. Calling this function returns the sequence ID of the newly added member. The following example demonstrates how to use the ADD_MEMBER function.

APEX_COLLECTION.ADD_MEMBER(
    p_collection_name => collection name,
    p_c001          => [member attribute 1],
    p_c002          => [member attribute 2],
    p_c003          => [member attribute 3],
    p_c004          => [member attribute 4],
    p_c005          => [member attribute 5],
    p_c006          => [member attribute 6],
    p_c007          => [member attribute 7],
    ...
    p_c050          => [member attribute 50]);
    p_clob001       => [CLOB member attribute 1],
    p_generate_md5  => 'YES' or 'NO');    

You can also add new members (or an array of members) to a collection using the ADD_MEMBERS method, for example:

APEX_COLLECTION.ADD_MEMBERS(
    p_collection_name => collection name,
    p_c001          => member attribute array 1,
    p_c002          => member attribute array 2,
    p_c003          => member attribute array 3,
    p_c004          => member attribute array 4,
    p_c005          => member attribute array 5,
    p_c006          => member attribute array 6,
    p_c007          => member attribute array 7,
    ...
    p_c050          => member attribute array 50);
    p_generate_md5  => 'YES' or 'NO');

This method raises an error if the specified collection does not exist with the specified name of the current user and in the same session. Also any attribute exceeding 4,000 characters will be truncated to 4,000 characters. The number of members added is based on the number of elements in the first array.

About the Parameters p_generate_md5 and p_clob001

Use the p_generate_md5 flag to specify if the message digest of the data of the collection member should be computed. By default, this flag is set to NO. Use this parameter to check the MD5 of the collection member (that is, compare it with another member or see if a member has changed).

Use p_clob001 for collection member attributes which exceed 4,000 characters.


See Also:

"Determining Collection Status" for information about using the function GET_MEMBER_MD5

Updating Collection Members

You can update collection members by calling the UPDATE_MEMBER procedure and referencing the desired collection member by its sequence ID, for example:

APEX_COLLECTION.UPDATE_MEMBER (
    p_collection_name => collection name,
    p_seq             => member sequence number,
    p_c001            => member attribute 1,
    p_c002            => member attribute 2,
    p_c003            => member attribute 3,
    p_c004            => member attribute 4,
    p_c005            => member attribute 5,
    p_c006            => member attribute 6,
    p_c007            => member attribute 7,
    ...
    p_c050            => member attribute 50),
    p_clob001         => [CLOB member attribute 1];  

The UPDATE_MEMBER procedure replaces an entire collection member, not individual member attributes. This procedure causes an error if the named collection does not exist.

Use the p_clob001 parameter for collection member attributes which exceed 4,000 characters.

To update a single attribute of a collection member, use the UPDATE_MEMBER_ATTRIBUTE procedure, for example:

APEX_COLLECTION.UPDATE_MEMBER_ATTRIBUTE(
    p_collection_name       => collection_name,
    p_seq                   => member sequence number,
    p_attr_number           => member attribute number,
    p_attr_value            => member attribute value )
APEX_COLLECTION.UPDATE_MEMBER_ATTRIBUTE(
    p_collection_name        => collection_name,
    p_seq                    => member sequence number,
    p_clob_number            => CLOB member attribute number,
    p_clob_value             => CLOB member attribute value );

Calling the UPDATE_MEMBER_ATTRIBUTE procedure causes an error if the named collection does not exist.

Note that the only valid value for the p_clob_number parameter is 1.

Deleting Collection Members

You can delete a collection member by calling the DELETE_MEMBER procedure and referencing the desired collection member by its sequence ID, for example:

APEX_COLLECTION.DELETE_MEMBER(
    p_collection_name => collection name,
    p_seq             => member sequence number);

Note that this procedure leaves a gap in the sequence IDs in the specified collection. In addition, calling this procedure causes an error if the named collection does not exist.

You can also delete all members from a collection by when an attribute matches a specific value, for example:

APEX_COLLECTION.DELETE_MEMBERS(
    p_collection_name => collection name,
    p_attr_number     => number of attribute used to match for the specified
                         attribute value for deletion, 
    p_attr_value      => attribute value of the member attribute used to 
                         match for deletion);

Note that the DELETE_MEMBERS procedure also leaves a gap in the sequence IDs in the specified collection. This procedure causes an error if:

  • The named collection does not exist.

  • The specified attribute number is outside the range of 1 to 50, or not valid.

If the supplied attribute value is null, then all members of the named collection will be deleted where the attribute (specified by p_attr_number) is null.

Determining Collection Status

The p_generate_md5 parameter determines if the MD5 message digests are computed for each member of a collection. The collection status flag is set to FALSE immediately after you create a collection. If any operations are performed on the collection (such as add, update, truncate, and so on), this flag is set to TRUE.

You can reset this flag manually by calling RESET_COLLECTION_CHANGED, for example:

APEX_COLLECTION.RESET_COLLECTION_CHANGED (
    p_collection_name => collection name)

Once this flag has been reset, you can determine if a collection has changed by calling COLLECTION_HAS_CHANGED, for example:

l_changed := APEX_COLLECTION.COLLECTION_HAS_CHANGED(
  p_collection_name => collection_name);

When you add a new member to a collection, an MD5 message digest is computed against all 50 attributes and the CLOB attribute if the p_generated_md5 parameter is set to YES. You can access this value from the MD5_ORIGINAL column of the view APEX_COLLECTION. You can access the MD5 message digest for the current value of a specified collection member by using the function GET_MEMBER_MD5. For example:

APEX_COLLECTION.GET_MEMBER_MD5 (
    p_collection_name => collection name,
    p_seq             => member sequence number );
    RETURN VARCHAR2;

Merging Collections

You can merge members of a collection with values passed in a set of arrays. By using the p_init_query argument, you can create a collection from the supplied query.

Note that if the collection exists, the following occurs:

  • Rows in the collection not in the arrays will be deleted.

  • Rows in the collection and in the arrays will be updated.

  • Rows in the array and not in the collection will be inserted.

Any attribute value exceeding 4,000 characters will be truncated to 4,000 characters. Table 15-1 describes the available arguments you can use when merging collections.

Table 15-1 Available Arguments for Merging Collections

ArgumentDescription

p_collection_name

Name of the collection.

See Also: "About Collection Naming"

p_seq

Identifies the sequence number of the member to be merged.

p_c001

Array of first attribute values to be merged. Maximum length is 4,000 characters. If the maximum length is greater, it will be truncated to 4,000 characters.

The count of elements in the P_C001 PL/SQL table is used as the total number of items across all PL/SQL tables. For example, if P_C001.count = 2 and P_C002.count = 10, only 2 members will be merged. Note that if P_C001 is null, an application error will be raised.

p_c0xx

Attribute of XX attributes values to be merged. Maximum length is 4,000 characters. If the maximum length is greater, it will be truncated to 4,000 characters.

p_null_index

Use this argument to identify rows the merge function should ignore. This argument identifies an row as null. Null rows are automatically removed from the collection.

p_null_value

Use this argument with the p_null_index. Identifies the null value. If used this value cannot be null. A typical value for this argument is 0.

p_init_query

Use the query defined by this argument to create a collection if the collection does not exist.


Managing Collections

You can use the following utilities to manage collections.

Topics in this section include:

Obtaining a Member Count

Use COLLECTION_MEMBER_COUNT to return the total count of all members in a collection. Note that this count does not indicate the highest sequence in the collection, for example:

l_count := APEX_COLLECTION.COLLECTION_MEMBER_COUNT (
  p_collection_name => collection name );

Resequencing a Collection

Use RESEQUENCE_COLLECTION to resequence a collection to remove any gaps in sequence IDs while maintaining the same element order, for example:

APEX_COLLECTION.RESEQUENCE_COLLECTION (
   p_collection_name => collection name )
   

Verifying Whether a Collection Exists

Use COLLECTION_EXISTS to determine if a collection exists, for example:

l_exists := APEX_COLLECTION.COLLECTION_EXISTS  (
  p_collection_name => collection name );

Adjusting a Member Sequence ID

You can adjust the sequence ID of a specific member within a collection by moving the ID up or down. When you adjust a sequence ID, the specified ID is exchanged with another ID. For example, if you were to move the ID 2 up, 2 becomes 3, and 3 would become 2.

Use MOVE_MEMBER_UP to adjust a member sequence ID up by one. Alternately, use MOVE_MEMBER_DOWN to adjust a member sequence ID down by one, for example:

APEX_COLLECTION.MOVE_MEMBER_DOWN(
    p_collection_name => collection name,
    p_seq             => member sequence number);

Note that while using either of these methods an application error displays:

  • If the named collection does not exist for the current user in the current session

  • If the member specified by the p_seq sequence ID does not exist

However, an application error will not be returned if the specified member has the highest or lowest sequence ID in the collection (depending on if you are calling MOVE_MEMBER_UP or MOVE_MEMBER_DOWN).

Sorting Collection Members

Use the SORT_MEMBERS method to reorder members of a collection by the column number. This method sorts the collection by a particular column number and also reassigns the sequence IDs for each member to remove gaps, for example:

APEX_COLLECTION.SORT_MEMBERS(
    p_collection_name       => collection name,
    p_sort_on_column_number => column number to sort by);

Clearing Collection Session State

Clearing the session state of a collection removes the collection members. A shopping cart is a good example of when you might need to clear collection session state. When a user requests to empty the shopping cart and start again, you must clear the session state for a collection. You can remove session state of a collection by calling the TRUNCATE_COLLECTION method or by using f?p syntax.

Calling the TRUNCATE_COLLECTION method deletes the existing collection and then re-creates it, for example:

APEX_COLLECTION.TRUNCATE_COLLECTION(
    p_collection_name => collection name);

You can also use the sixth f?p syntax argument to clear session state, for example:

f?p=App:Page:Session::NO:collection name

Creating Custom Activity Reports Using APEX_ACTIVITY_LOG

The APEX_ACTIVITY_LOG view records all activity in a workspace, including developer activity and application run-time activity. You can use APEX_ACTIVITY_LOG to view to query all activity for the current workspace. For example, you can use this view to develop monitoring reports within a specific application to provide real-time performance statistics.

Table 15-2 describes the columns in the APEX_ACTIVITY_LOG view.

Table 15-2 Columns in APEX_ACTIVITY_LOG

ColumnTypeDescription

time_stamp

DATE

Date and time that activity was logged at the end of the page view.

component_type

VARCHAR2(255)

Reserved for future use.

component_name

VARCHAR2(255)

Reserved for future use.

component_attribute

VARCHAR2(4000)

Title of page.

information

VARCHAR2(4000)

Reserved for future use.

elap

NUMBER

Elapsed time of page view in seconds.

num_rows

NUMBER

Number of rows processed on page.

userid

VARCHAR2(255)

User ID performing page view.

ip_address

VARCHAR2(4000)

IP address of client.

user_agent

VARCHAR2(4000)

Web browser user agent of client.

flow_id

NUMBER

Application ID.

step_id

NUMBER

Page number.

session_id

NUMBER

Oracle Application Express session identifier.

sqlerrm

VARCHAR2(4000)

SQL Error message.

sqlerrm_component_type

VARCHAR2(255)

Reserved for future use.

sqlerrm_component_name

VARCHAR2(255)

Reserved for future use.


To conserve space in the activity log, only the first log entry of each unique session will contain the IP address and Web browser user agent.

The following example demonstrates how to create a report that displays the total number of page views and the average page view time in the past 24 hours for application 9529, and grouped by userid:

SELECT COUNT(*), AVG(elap), userid
    FROM APEX_ACTIVITY_LOG
 WHERE time_stamp > (SYSDATE-1)
   AND flow_id = 9529
GROUP BY userid

Keep in mind that logging of activity in an Oracle Application Express instance is rotated between two different log tables. Because of this, logging information is only as current as the oldest available entry in the logs. If you want to persist your application specific log information for all time, you must either copy the log information into your own application table or implement logging directly in your application.


See Also:

"Name" for information on enabling logging on the Edit Definition page

Running Background PL/SQL

You can use the APEX_PLSQL_JOB package to run PL/SQL code in the background of your application. This is an effective approach for managing long running operations that do not need to complete for a user to continue working with your application.

Topics in this section include:

Understanding the APEX_PLSQL_JOB Package

APEX_PLSQL_JOB is a wrapper package around DBMS_JOB functionality offered in the Oracle database. Note that the APEX_PLSQL_JOB package only exposes that functionality which is necessary to run PL/SQL in the background. The following is a description of the APEX_PLSQL_JOB package:

SQL> DESC APEX_PLSQL_JOB
FUNCTION JOBS_ARE_ENABLED RETURNS BOOLEAN
PROCEDURE PURGE_PROCESS
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 P_JOB                          NUMBER                  IN
FUNCTION SUBMIT_PROCESS RETURNS NUMBER
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 P_SQL                          VARCHAR2                IN
 P_WHEN                         VARCHAR2                IN     DEFAULT
 P_STATUS                       VARCHAR2                IN     DEFAULT
FUNCTION TIME_ELAPSED RETURNS NUMBER
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 P_JOB                          NUMBER                  IN
PROCEDURE UPDATE_JOB_STATUS
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 P_JOB                          NUMBER                  IN
 P_STATUS                       VARCHAR2                IN                         

Table 15-1 describes the functions available in the APEX_PLSQL_JOB package.

Table 15-3 APEX_PLSQL_JOB Package: Available Functions

Function or ProcedureDescription

SUBMIT_PROCESS

Use this procedure to submit background PL/SQL. This procedure returns a unique job number. Because you can use this job number as a reference point for other procedures and functions in this package, it may be useful to store it in your own schema.

UPDATE_JOB_STATUS

Call this procedure to update the status of the currently running job. This procedure is most effective when called from the submitted PL/SQL.

TIME_ELAPSED

Use this function to determine how much time has elapsed since the job was submitted.

JOBS_ARE_ENABLED

Call this function to determine whether the database is currently in a mode that supports submitting jobs to the APEX_PLSQL_JOB package.

PURGE_PROCESS

Call this procedure to clean up submitted jobs. Submitted jobs stay in the APEX_PLSQL_JOBS view until either Oracle Application Express cleans out those records, or you call PURGE_PROCESS to manually remove them.


You can view all jobs submitted to the APEX_PLSQL_JOB package using the APEX_PLSQL_JOBS view. The following is the description of APEX_PLSQL_JOBS view:

SQL> DESCRIBE APEX_PLSQL_JOBS
 Name                              Null?    Type
 --------------------------------- -------- ----------------------------
 ID                                         NUMBER
 JOB                                        NUMBER
 FLOW_ID                                    NUMBER
 OWNER                                      VARCHAR2(30)
 ENDUSER                                    VARCHAR2(30)
 CREATED                                    DATE
 MODIFIED                                   DATE
 STATUS                                     VARCHAR2(100)
 SYSTEM_STATUS                              VARCHAR2(4000)
 SYSTEM_MODIFIED                            DATE
 SECURITY_GROUP_ID                          NUMBER

Table 15-4 describes the columns available in APEX_PLSQL_JOBS view.

Table 15-4 APEX_PLSQL_JOBS View Columns

NameDescription

ID

A unique identifier for each row.

JOB

The job number assigned to each submitted PL/SQL job. The APEX_PLSQL_JOB.SUBMIT_PROCESS function returns this value. This is also the value you pass into other procedures and functions in the APEX_PLSQL_JOB package.

FLOW_ID

The application from which this job was submitted.

OWNER

The database schema that owns the application. This identifies what schema will parse this code when DBMS_JOB runs it.

ENDUSER

The end user (that is, who logged into the application) that caused this process to be submitted.

CREATED

The date when the job was submitted.

MODIFIED

The date when the status was modified.

STATUS

The user-defined status for this job. Calling APEX_PLSQL_JOB.UPDATE_JOB_STATUS updates this column.

SYSTEM_STATUS

The system defined status for this job.

SYSTEM_MODIFIED

The date when the system status was modified.

SECURITY_GROUP_ID

The unique ID assigned to your workspace. Developers can only see jobs submitted from their own workspace.



See Also:

APEX_PLSQL_JOBS in Oracle Application Express API Reference

About System Status Updates

Submitted jobs can contain any of the following system status settings:

  • SUBMITTED indicates the job has been submitted, but has not yet started. The DBMS_JOB does not guarantee immediate starting of jobs.

  • IN PROGRESS indicates that the DBMS_JOB has started the process.

  • COMPLETED indicates the job has finished.

  • BROKEN (sqlcode) sqlerrm indicates there was a problem in your job that resulted in an error. The SQL code and SQL error message for the error should be included in the system status. Review this information to determine what went wrong.

Using a Process to Implement Background PL/SQL

The following example runs a PL/SQL job in the background for testing and explanation:

001  BEGIN
002    FOR i IN 1 .. 100 LOOP
003      INSERT INTO emp(a,b) VALUES (:APP_JOB,i);
004      IF MOD(i,10) = 0 THEN
005        APEX_PLSQL_JOB.UPDATE_JOB_STATUS(
006          P_JOB     => :APP_JOB,
007          P_STATUS  => i || 'rows inserted');
008      END IF;
009      APEX_UTIL.PAUSE(2);
010    END LOOP;
011  END;

In this example, note that:

  • Lines 002 to 010 run a loop that inserts 100 records into the emp table.

  • APP_JOB is referenced as a bind variable inside the VALUES clause of the INSERT, and specified as the P_JOB parameter value in the call to UPDATE_JOB_STATUS.

  • APP_JOB represents the job number which will be assigned to this process as it is submitted to APEX_PLSQL_JOB. By specifying this reserved item inside your process code, it will be replaced for you at execution time with the actual job number.

  • Note that this example calls to UPDATE_JOB_STATUS every ten records, INSIDE the block of code. Normally, Oracle transaction rules dictate updates made inside code blocks will not be seen until the entire transaction is committed. The APEX_PLSQL_JOB.UPDATE_JOB_STATUS procedure, however, has been implemented in such a way that the update will happen regardless of whether the job succeeds or fails. This last point is important for two reasons:

    1. Even if your status shows "100 rows inserted," it does not mean the entire operation was successful. If an error occurred at the time the block of code tried to commit, the user_status column of APEX_PLSQL_JOBS would not be affected because status updates are committed separately.

    2. Updates are performed autonomously. You can view the job status before the job has completed. This gives you the ability to display status text about ongoing operations in the background as they are happening.

Implementing Web Services

Web services enable applications to interact with one another over the Web in a platform-neutral, language independent environment. In a typical Web services scenario, a business application sends a request to a service at a given URL by using the protocol over HTTP. The service receives the request, processes it, and returns a response. You can incorporate calls with external Web services in applications developed in Application Builder.

Web services are based on Simple Object Access Protocol (SOAP). SOAP is a World Wide Web Consortium (W3C) standard protocol for sending and receiving requests and responses across the Internet. SOAP messages can be sent back and forth between a service provider and a service user in SOAP envelopes.

SOAP offers two primary advantages:

  • SOAP is based on XML, and therefore easy to use.

  • SOAP messages are not blocked by firewalls because this protocol uses simple transport protocols, such as HTTP.


Tip:

If you are running Oracle Application Express with Oracle Database 11g Release 1 (11.1), you must enable network services in order to use Web services. See "Enabling Network Services in Oracle Database 11g"

Topics in this section include:


Note:

The SOAP 1.1 specification is a W3C note. (The W3C XML Protocol Working Group has been formed to create a standard that will supersede SOAP.)

For information about Simple Object Access Protocol (SOAP) 1.1 see:

http://www.w3.org/TR/SOAP/

Understanding Web Service References

To utilize Web services in Oracle Application Express, you create a Web service reference using a wizard. Web service references can be based either on a Web Services Description Language (WSDL) document or created manually by supplying information about the service.

When you create a Web service reference based on a WSDL, the wizard analyzes the WSDL and collects all the necessary information to create a valid SOAP message, including:

  • The URL used to post the SOAP request over HTTP(S)

  • A Universal Resource Identifier (URI) identifying the SOAP HTTP request

  • Operations of the Web Service

  • Input parameters for each operation

  • Output parameters for each operation

When you create a Web service reference manually, you supply the necessary information to create a valid SOAP request, including:

  • The URL used to post the SOAP request over HTTP(S)

  • A Universal Resource Identifier (URI) identifying the SOAP HTTP request

  • The SOAP envelope for the request, including any item substitutions

  • Optionally the name of a collection to store the response from the Web service

Accessing the Web Service References Page

You manage Web service references on the Web Service References page.

To access the Web Service References page:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

    Application Builder appears.

  3. Click Shared Components.

    The Shared Components page appears.

  4. Under Logic, click Web Service References.

    The Web Service References page appears.

Specifying an Application Proxy Server Address

If your environment requires a proxy server to access the Internet, you must specify a proxy server address on the Application Attributes page before you can create a Web service reference.

To specify a proxy address for an application:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

    Application home page appears.

  3. Click Shared Components.

  4. Under Application, click Definition.

  5. Under Name, enter the proxy server in the Proxy Server field.

  6. Click Apply Changes.

Working with SSL Enabled Web Services

Secure Sockets Layer (SSL) is an industry standard protocol that uses RSA public key cryptography with symmetric key cryptography to provide authentication, encryption, and data integrity.

If the Web service that you need to interact with is SSL-enabled (that is, https displays in the URL to the Web service), you must create a wallet. A wallet is a password-protected container that stores authentication and signing credentials (including private keys, certificates, and trusted certificates) needed by SSL.


See Also:

"Configuring Wallet Information" in Oracle Application Express Administration Guide

Creating a Web Service Reference Based on a WSDL

When you create a Web service reference based on a WSDL, you must decide how to locate the WSDL. You can locate a WSDL in two ways:

  • By searching a Universal Description, Discovery and Integration (UDDI) registry

  • by entering the URL to the WSDL document

A UDDI registry is a directory where businesses register their Web services.

Topics in this section include:

Creating a Web Service Reference by Searching a UDDI Registry

To create a Web service by searching a UDDI registry:

  1. Navigate to the Web Service References page. See "Accessing the Web Service References Page".

  2. Click Create.

  3. When prompted to search a UDDI registry to find a WSDL, click Yes.

  4. For UDDI Location you can either:

    • Enter a URL endpoint to a UDDI registry.

    • Click the List icon and select a UDDI registry.

  5. For Search, specify the following:

    1. Search Type - Specify whether to search for a business name or a service name. You cannot search for both.

    2. Name - Enter the business name or service name to search for. Use the percent (%) symbol as a wildcard character.

    3. Optionally indicate if the search should be case-sensitive or an exact match.

    4. Click Search.

    5. When the search results appear, make a selection and click Next.

    A summary page appears describing the selected Web service.

  6. Review your selection and click Next to continue.

    The URL to the WSDL document displays in the WSDL Location field.

  7. Click Finish.

The Web service reference is added to the Web Service References Repository.

Creating a Web Service Reference by Specifying a WSDL Document

To create a Web service by specifying a URL to a specific WSDL document:

  1. Navigate to the Web Service References page. See "Accessing the Web Service References Page".

  2. Click Create.

  3. When prompted to search a UDDI registry to find a WSDL, click No.

  4. In WSDL Location, enter the URL to the WSDL document.

  5. Click Finish.

The Web service reference is added to the Web Service References Repository.

Creating a Web Service Manually

To create a Web service reference manually:

  1. Navigate to the Web Service References page. See "Accessing the Web Service References Page".

  2. Click Create.

  3. When prompted to search a UDDI registry to find a WSDL, click No.

  4. From the Tasks list, click Create Web Service Reference Manually.

    The Create/Edit Web Service page appears.

  5. In Name, enter a name to identify the reference.

  6. Under Service Description:

    1. URL - Enter the URL endpoint of the Web service.

    2. Action - Enter the action of the Web service (optional).

    3. Proxy - Enter a proxy if you want to override the application proxy for this service.

    4. Basic Authentication - Choose whether the Web service requires authentication. Select Yes or No.

  7. For SOAP Envelop, enter the SOAP envelope for this request.

  8. For Store Response in Collection, enter the name of a collection to store the response (optional).

  9. Click Create.

The Web service reference is added to the Web Service References Repository.

Using the Web Service Reference Repository

Web service references are stored in the Web Service Reference Repository.

To access the Web Service References Repository:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

    Application Builder appears.

  3. Click Shared Components.

    The Shared Components page appears.

  4. Under Logic, click Web Service References.

    The Web Service Reference page appears.

    Use the Navigation bar at the top of the page to search for Web service references or change the page display. Available options include:

    • Web Service Reference - Enter a case insensitive query for the reference name and click Go. To view all Web service references, leave the field blank and click Go.

    • View - Select a display mode and click Go. Available options include:

      • Icons (the default) displays each Web service reference as a large icon. To edit a Web service reference, click the appropriate icon.

      • Details displays each Web service reference as a line in a report.

  5. Select Details from the View list and click Go.

  6. In Details view you can:

    • Edit a reference by clicking the reference name.

    • Test a reference by clicking the Run icon.

    • View details about a reference by clicking the View icon. Note that this option is not available for manually created Web service references.

Testing a Web Service Reference Created from a WSDL

After you have created a Web service reference, you can test it on the Test Web Service Reference page.

To test a Web service reference:

  1. Navigate to the Web Service References page. See "Accessing the Web Service References Page".

  2. From View, select Details.

  3. Click the Run icon adjacent to the Web Service reference name.

    The Test Web Service Reference page appears. The Web service name and URL endpoint display at the top of the page.

  4. From Operation, select an operation (that is, the method to be executed).

  5. Under Input Parameters, enter the appropriate value.

  6. Click Test.

    The message request and response appear at the bottom of the page.

Testing a Web Service Reference Created Manually

After you have created a Web service reference, you can test it on the Test Web Service Reference page.

To test a Web service reference:

  1. Navigate to the Web Service References page. See "Accessing the Web Service References Page".

  2. From View, select Details.

  3. Click the Run icon adjacent to the Web Service reference name.

    The Test Web Service Reference page appears. The Web service name and URL endpoint display at the top of the page.

  4. If required, enter the username and password under Basic Authentication.

  5. In SOAP Envelope text area, optionally edit the SOAP request envelope.

  6. Click Test.

    The message request and response appear at the bottom of the page.

Creating an Input Form and Report on a Web Service

The Create Form and Report on Web Service Wizard creates an input form, a submit button, and a report for displaying results. You can execute this wizard directly after creating the Web service reference from a WSDL, or by adding a page.

Use this wizard when you expect a nonscalar result from the Web service. The Amazon Web service is a good example. This Web service returns many results based on the search criteria entered in an input form.

Creating a Form and Report After Creating a Reference

To create a form and report after creating a Web Service Reference:

  1. Create the Web service reference. See "Creating a Web Service Reference Based on a WSDL".

  2. After the Web service reference has been added, select Create Form and Report on Web Service.

  3. For Choose Service and Operation:

    1. Web Service Reference - Select the Web service reference.

    2. Operation - Select the method to be executed.

  4. For Page and Region Attributes, review the displayed attributes. If the page you specify does not exist, the wizard creates the page for you.

  5. For Input Items:

    1. Identify which items to add to the form. To include an item, select Yes in the Create column. Otherwise, select No.

    2. If necessary, edit the item label.

  6. If applicable, specify the Item Names and Item Labels for basic authentication. Note that this step only appears if basic authentication was specified for this Web service reference when it was created.

  7. For Window Service Results:

    1. Temporary Result Set Name - Enter a name for the collection that stores the Web service result.

    2. Result Tree to Report On - Select the portion of the resulting XML document that contains the information you want to include in the report.

  8. For Result Parameters to Display, select the parameters to be included in the report.

  9. Click Finish.

Creating a Form and Report by Adding a New Page

If you have an existing Web service reference, you can create an input form and report by adding a new page.

To create a form and report by adding a new page:

  1. Create the Web service reference. See "Creating a Web Service Reference Based on a WSDL".

  2. Create a new page. See "Managing Pages in an Application".

    In the Create Page Wizard:

    1. Select Form.

    2. Select Form and Report on Web Service.

  3. For Choose Service and Operation:

    1. Web Service Reference - Select the Web service reference.

    2. Operation - Select the method to be executed.

  4. For Page and Region Attributes, review the page and region attributes. If the page you specify does not exist, the wizard creates the page for you.

  5. For Input Items:

    1. Identify which items to add to the form. To include an item, select Yes in the Create column. Otherwise, select No.

    2. If necessary, edit the item label.

  6. If applicable, specify the Item Names and Item Labels for basic authentication. Note that this step only appears if basic authentication was specified for this Web service reference when it was created.

  7. Follow the on-screen instructions.

  8. Click Finish.

Creating a Form on a Web Service

The Create Form on Web Service Wizard creates a form and a submit button. You can execute this wizard after creating the Web service reference from a WSDL, or from the Page Definition.

Use this wizard when you expect a scalar result from the Web service. A Web service that looks up a stock price is a good example because the input is a stock symbol and the output is the scalar value price.

Creating a Form After Creating a Reference

To create a form after creating a Web Service Reference:

  1. Create the Web service reference. See "Creating a Web Service Reference Based on a WSDL".

  2. After the Web service references has been added, select Create Form on Web Service.

  3. For Choose Service and Operation:

    1. Web Service Reference - Select the Web service reference.

    2. Operation - Select the method to be executed.

  4. For Identify Page and Region Attributes, review the page and region attributes. If the page you specify does not exist, the wizard creates the page for you.

  5. For Items for Input Parameters:

    1. Identify which items to add. To include an item, select Yes in the Create column. Otherwise, select No.

    2. If necessary, edit the item label.

  6. For Items for Output Parameters:

    1. Identify which items need to be added. To include an item, select Yes in the Create column. Otherwise, select No.

    2. If necessary, edit the item label.

  7. If applicable, specify the Item Names and Item Labels for basic authentication.

    Note that this step only appears if basic authentication was specified for this Web service reference when it was created.

  8. Click Finish.

Creating a Form by Adding a New Page

If you have an existing Web service reference created from a WSDL, you can create form by adding a new page.

To create a form by adding a new page:

  1. Create the Web service reference. See "Creating a Web Service Reference Based on a WSDL".

  2. Create a new page. See "Managing Pages in an Application".

    In the Create Page Wizard:

    1. Select Form.

    2. Select Form on Web Service.

  3. For Web Service Reference and Operation, select the Web service reference and operation (that is, the method to be executed).

  4. For Identify Page and Region Attributes, review the page and region attributes. If the page you specify does not exist, the wizard creates the page for you.

  5. For Items for Input Parameters:

    1. Identify which items need to be added. To include an item, select Yes in the Create column. Otherwise, select No.

    2. If applicable, specify the Item Names and Item Labels for basic authentication.

      Note that this step only appears if basic authentication was specified for this Web service reference when it was created.

  6. For Items for Output Parameters:

    1. Identify which items need to be added. To include an item, select Yes in the Create column. Otherwise, select No.

    2. If necessary, edit the item label.

  7. Click Finish.

Invoking a Web Service as a Process

You can also implement a Web service as a process on the page. Running the process submits the request to the service provider. You can then display the request results in report.

To invoke a Web service as a process:

  1. Create a page. See "Managing Pages in an Application".

    In the Create Page Wizard:

    1. Select Blank Page.

    2. When prompted to use tabs, select No.

  2. Navigate to the Page Definition. See "Accessing a Page Definition".

  3. Under Page Rendering, Processes, click the Create icon.

    The Create Page Processes Wizard appears.

  4. From the process category, select Web Services.

  5. Specify a process name, sequence, and processing point.

  6. Select the Web service reference.

    If the Web reference was created from a WSDL, perform the following additional steps.

  7. Select the Web service reference and operation (that is, the method to be executed).

  8. Define the process. You can store the results in a collection or in items on the page by selecting options under Web Service Output Parameters.

    1. To store the results in a collection:

      • For Store Result in, select Collection.

      • Enter a name for the collection in the value field.

    2. To store the results in items on the page:

      • For Store Result in, select Items.

      • Enter the appropriate items value in the fields provided.

  9. Click Create Process.

Displaying Web Service Results in a Report

To create a report in which to display Web Service request results:

  1. Navigate to the Page Definition. See "Accessing a Page Definition".

  2. Under Regions, click the Create icon.

    The Create Region Wizard appears.

  3. For the region type, select Report.

  4. For the report implementation, select Report on collection containing Web service result.On Identify Region Attributes, enter a region title and optionally edit the region attributes.

  5. Choose whether the Web reference was created manually or from a WSDL.

  6. If the Web service reference was created from a WSDL:

    1. For Web Service Reference and Operation, select a Web service reference and an operation (that is, the method to be executed).

    2. For Result Tree to Report On, select the portion of the resulting XML document that contains the information you want to include in the report.

    3. For Result Parameters:

      • In Temporary Result Set Name, enter a name for the collection that stores the Web service result.

      • Select and deselect the appropriate parameters.

  7. If the Web service reference was created manually:

    1. Select the Web service reference.

    2. Choose the SOAP style.

    3. Choose the message format.

    4. Enter the XPath expression to the node to report on.

    5. Enter the namespace for the SOAP response envelope and click Next.

    6. Enter the name of the collection where the response message is stored.

    7. Enter the names of the parameters that you want to be included in the report.

  8. Click Create SQL Report.

Editing a Web Service Process

After you create a process of type Web service on a Web service reference created from a WSDL, you can map input parameters to a static value (for example to pass a key) by editing the Web service process.

To edit a Web service process:

  1. Create a Web service process. See "Invoking a Web Service as a Process".

  2. Navigate to the Page Definition containing the Web service process.

  3. Select the process name.

    The Edit Page Process page appears.

  4. To map an input parameter to a static value:

    1. Scroll down to Web Service Input Parameters.

    2. Enter a value in the Value field, adjacent to the appropriate parameter name.

  5. Click Apply Changes.

Viewing a Web Service Reference History

The Web Services History displays changes to Web service references for the current application by application ID, Web service references name, developer, and date.

To view a history of Web service reference changes:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

    Application Builder appears.

  3. Click Shared Components.

    The Shared Components page appears.

  4. Under Logic, click Web Service References.

  5. Click History.


Note:

The History button only appears on the Web Service Reference page after you have created a Web service reference.

About BLOB Support in Forms and Reports

Starting with release 3.1, Oracle Application Express includes declarative BLOB support to enable developers to declaratively uploaded files in forms, and downloaded or display files in reports. BLOB display and download can also be authored procedurally using PL/SQL. This section describes how to upload, download and display files, and how to manage additional file attributes such as MIME type and file name that are important for proper management of files stored in BLOB columns. Using this functionality you can easily extend your Oracle Application Express applications to manage files including images, documents, videos, and so on.

Topics in this section include:

About BLOB in Forms

If you create a Form (either using the Create Application Wizard, create page of type Form - or Report and Form, or create region of type Form) or add an item to an existing form, any items whose source is a database column of type BLOB will result in an item of type File Browse. When the form is called for INSERT, the file selected by the user will be loaded into the BLOB column. When the form is called for update, a download link is displayed to the right of the Browse button. Users can use this link to download the file.

Populating the BLOB and Providing Download

The defaulted BLOB support does not give you all the information a typical application needs to effectively manage a BLOB. In addition to knowing that the column is a BLOB, more information about the file will provide a better experience for the end-user. To facilitate managing this additional information, the 'Source' attribute of an item has been extended to have additional components (in addition to DB_COLUMN):

PositionAttributeRequiredDescription
1Column containing BLOBYesCase sensitive name of column of type BLOB.
2MIME type ColumnNoCase sensitive column name used to store the MIME type.
3Filename ColumnNoCase sensitive column name used to store the filename of the BLOB. If null, the column name is used as the default when user downloads the file.
4Last Update ColumnNoCase sensitive column name used to store the last update date of the BLOB. If used, the HTTP header of the file download will indicate the date of last modification and browsers will be able to cache the BLOB. If not specified, the browser may not be able to cache files.
5Character Set ColumnNoCase sensitive column name used to store the character set of the BLOB. Most relevant for Asian languages which may need to maintain the character set encoding.
6Content DispositionNoSpecify inline or attachment. All other values ignored. attachment is the default, inline can only be respected if a MIME type is specified.
7Download TextNoString used for the download link. If nothing is provided, Download will be used. Note this will support substitutions (useful for translated applications).

Consider the following example:

RESUME:RESUME_MIMETYPE:RESUME_FILENAME:RESUME_LAST_UPDATE::attachment:Resume

If you have an item of type File Browse, whose source is Database Column that contains at least one colon (for example, RESUME:), you will see a link below the Source BLOB Download Format Mask. This popup assists in entering all the parameters necessary for the BLOB format.

At a minimum, you must specify the database BLOB column with at least one trailing colon (for example, RESUME:). This preserves compatibility with Oracle Application Express release 3.0.1.


Tip:

To see a real example, go to Sample Application, page 6 (Add/Modify Products), and review the item P6_PRODUCT_IMAGE. See "Running a Demonstration Application".

To provide this additional information, Oracle recommends you add additional columns to your base table to store and track the MIME type and file name attributes. You can accomplish this simply by extending your table, for example:

ALTER TABLE emp ADD 
   (ATTACH_MIMETYPE     VARCHAR2(255),
    ATTACH_FILENAME     VARCHAR2(255),
    ATTACH_LAST_UPDATE  DATE);

If you manually create a form, you can still take advantage of this feature. You simply use the format described within an item of type File (File Browse) on a page with a DML Process of type DML_PROCESS_ROW. This process will determine the table name and primary key columns.

Displaying the BLOB

If the BLOB you are working with is an image, you can display it in the form as well. See "Working With BLOBs Procedurally".

Removing the Image Reference

Because there is no set to NULL when using File Browse, if you need to provide a mechanism to remove an image reference, you must include a special Remove Image button to nullify the necessary columns. Consider the following example:

UPDATE demo_product_info
   SET product_image = NULL,
       MIMETYPE = NULL,
       FILENAME = NULL,
       IMAGE_LAST_UPDATE = NULL,
       CHARSET = NULL
 WHERE product_id = :P6_PRODUCT_ID;

Tip:

To see a real example, go to Sample Application, page 6 (Add/Modify Products), Delete Image process. See "Running a Demonstration Application".

About BLOB Support in Reports

Oracle Application Express includes BLOB support for both classic and interactive reports. If you use a wizard to create a report and include a column of type BLOB, basic support will be included. Additional information should be added after generation to make the download capability more user friendly.

Providing a Download Link

To facilitate the inclusion of a download link in a report, the report includes the selection of the length of the BLOB (for example, dbms_lob.getlength(RESUME)). If the length is 0, the BLOB is NULL and no download link is displayed. In the same way you specify a format mask for a date or number you can format a download link. The DOWNLOAD format is more complex however then other format masks in that you are required to specify at least three parameters, for example:

DOWNLOAD:EMP:RESUME:EMPNO

The parameters of the DOWNLOAD format are described in the following table:

PositionAttributeRequiredDescription
1DOWNLOADYesIdentifies the DOWNLOAD report format mask.
2Table NameYesCase sensitive name of table containing target column of type BLOB.
3Column containing BLOBYesCase sensitive name of column of type BLOB.
4Primary Key Column 1YesCase sensitive name of primary key column 1.
5Primary Key Column 2NoCase sensitive name of primary key column 2.
6MIME type ColumnNoCase sensitive column name used to store the MIME type.
7Filename ColumnNoCase sensitive column name used to store the filename of the BLOB. If NULL, the column name is used as the default when a user downloads the file.
8Last Update ColumnNoCase sensitive column name used to store the last update date of the BLOB. If used, the HTTP header of the file download indicates the date of last modification and Web browsers will be able to cache the BLOB. If not specified, the browser may not be able to cache files.
9Character Set ColumnNoCase sensitive column name used to store the character set of the BLOB. Most relevant for Asian languages which may need to maintain the character set encoding.
10Content DispositionNoSpecify inline or attachment. All other values ignored. If a MIME type is provided and the file is a type that can be displayed, the file will be displayed. If MIME type is not provided, or the file cannot be displayed inline, the user will be prompted to download.
11Download TextNoString used for the download link. If nothing provided, Download is used. Note that this will support substitutions (useful for translated applications).

Consider the following example:

DOWNLOAD:EMP:RESUME:EMPNO::RESUME_MIMETYPE:RESUME_FILENAME:RESUME_LAST_UPDATE::attachment:Resume

If you have a report column with a format mask that begins with DOWNLOAD:, you will see a link below the format 'BLOB Download Format Mask'. This popup assists in entering all the parameters necessary for the DOWNLOAD format.


Tip:

To see a real example, go to Sample Application, page 29 (Master Detail), Items for Order #&P29_ORDER_ID. region, Product Image column. See "Running a Demonstration Application".

Displaying the BLOB

If the BLOB you are working with is an image, you can display it in the report as well. To do this, you use the new report format mask of 'IMAGE'. Regardless of the MIME type, the report will always attempt to display the BLOB. If the BLOB cannot be rendered, a broken image will be displayed.

The parameters of the IMAGE format mask are described in the following table:

PositionAttributeRequiredDescription
1IMAGEYesIdentifies the IMAGE report format mask.
2Table NameYesCase sensitive name of table containing target column of type BLOB.
3Column containing BLOBYesCase sensitive name of column of type BLOB.
4Primary Key Column 1YesCase sensitive name of primary key column 1.
5Primary Key Column 2NoCase sensitive name of primary key column 2.
6MIME type ColumnNoCase sensitive column name used to store the MIME type.
7Filename ColumnNoNot used for IMAGE format but left in so that the format can easily be changed between IMAGE and DOWNLOAD.
8Last Update ColumnNoCase sensitive column name used to store the last update date of the BLOB. If used, the HTTP header of the file download indicates the date of last modification and Web browsers will be able to cache the BLOB. If not specified, the browser may not be able to cache files.
9Character Set ColumnNoNot used for IMAGE format but left in so that the format can easily be changed between IMAGE and DOWNLOAD.
10Content DispositionNoNot used for IMAGE format but left in so that the format can easily be changed between IMAGE and DOWNLOAD.
11Alt TextNoString used for the alt tag associated with the image.

Consider the following example:

IMAGE:EMP:RESUME:EMPNO::RESUME_MIMETYPE:RESUME_FILENAME:RESUME_LAST_UPDATE::attachment:Resume

If you have a report column with a format mask that begins with 'IMAGE:', you will see a link below the format 'BLOB Download Format Mask'. This popup assists in entering all the parameters necessary for the IMAGE format.

Working With BLOBs Procedurally

As an alternative to using the built-in methods of providing a download link, you can use the APEX_UTIL.GET_BLOB_FILE_SRC function. One advantage of this approach, is the ability to more specifically format the display of the image (with height and width tags). Please note that this approach is only valid if called from a valid Oracle Application Express session. Also, this method requires that the parameters that describe the BLOB to be listed as the format of a valid item within the application. That item is then referenced by the function.


See Also:

"GET_BLOB_FILE_SRC Function" in Oracle Application Express API Reference

PKt{PK6(AOEBPS/global.htm Managing Application Globalization

16 Managing Application Globalization

This section describes how to translate an application built in Application Builder.

This section contains the following topics:


See Also:

"Viewing Installed Translations" in Oracle Application Express Administration Guide

About Translating an Application and Globalization Support

You can develop applications in Application Builder that can run concurrently in different languages. A single Oracle database instance and Oracle Application Express can support multiple database sessions customized to support different languages.

In general, translating an application built in Application Builder involves the following steps:

  • Map the primary and target application IDs

  • Seed and export the text to a file for translation

  • Translate the text in the file

  • Apply the translated file

  • Publish the translated file

Topics in this section include:

About Language Identification

After you create an application, you specify a language preference on the Edit Globalization Attributes page. Then you select a primary application language and determine how the Application Express engine determines the application language. You can specify to have the application language based on the user's browser language preference, an application preference, or an item preference.

Rules for Translating Applications Built in Application Builder

Use the following rules to determine which translated version to use:

  • Look for an exact match between the user language preference and the language code of the translated application.

  • Look for a truncated match. That is, see if the language and locale exist. For example, if the user language preference is en-us and the translated version of en-us does not exist, look for a translated application that has the language code en.

  • Use the primary application language.

For example, suppose you create an application with the primary language of German, de, and you create a translated version of the application with a language code of en-us. Users accessing this application with a browser language of en-us execute the English en-us version of the application. Users accessing the application with a browser language of en-gb view the application in the application's primary language, that is, in German. For this example, you should create the translated English version using language code en to encompass all variations of en.

How Translated Applications Are Rendered

After Oracle Application Express determines the language for an application, the Application Express engine alters the database language for a specific page request. It then looks for a translated application in the appropriate language. If the Application Express engine finds that language, it renders the application using that definition. Otherwise, it renders the application in the base (or primary) application language.

Note that the text that displays within an application is not translated on the fly. Oracle Application Express dynamically collects page attributes from either a base language application definition or an alternative application definition.

About Translatable Components

When you build an application in Application Builder, you define a large number of declarative attributes such as field labels, region headings, page header text, and so on. Using the steps described in this section, you can make all the application definition attributes within your application translatable.

About Shortcuts that Support Translatable Messages

Application Builder includes two shortcut types that enable you to reference translatable messages:

  • Message. Use this shortcut to reference a translatable message at run time. Note that the name of the shortcut must match the corresponding message name. At run time, the name of the shortcut expands to the text of the translatable message for the current language.

  • Message with JavaScript Escaped Single Quotes. Use this shortcut to reference a shortcut inside of a JavaScript literal string and reference a translatable message at run time. This shortcut defines a text string. When the shortcut is referenced, it escapes the single quotation marks required for JavaScript.


See Also:

"Using Shortcuts"

About Messages

If your application includes PL/SQL regions or PL/SQL processes, you may must translate any generated HTML or text. You may also need to translate messages used in reports if your application uses a language that is not one of the ten languages into which Oracle Application Express is translated.

About Dynamic Translation Text Strings

Dynamic translations are used for database data that needs to be translated at run time. For example, you might use a dynamic translation to translate a list of values based on a database query. A dynamic translation consists of a translate-from language string, a language code, and a translate-to string. You can also use the APEX_LANG.LANG API to retrieve dynamic translations programmatically.

About Translating Region Titles

By default, page region titles are included in the generated translation file. However, you can mark a region title as not translatable.

To mark a region title as not translatable:

  1. Navigate to the Page Definition. See "Accessing a Page Definition".

  2. On the Page Definition, select the region title.

    The Edit Region page appears.

  3. Select the exclude title from translation check box.

About Translating Templates

By default, templates are not translatable, and therefore are not included in the generated translation file. Generally, templates do not and should not contain translatable text. However, if you must mark a template as translatable, select the Translatable check box on the Edit Page Template page.

To identify a template as translatable:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. On the Application home page, click Shared Components.

  4. Under User Interface, select Templates.

    The Templates page appears.

  5. Locate the template you want to edit and select the template name.

  6. Under Name, select Translatable.

You can include translatable text at the application-level by defining the translatable text using static substitution strings. Because application-level attributes are translated, any text defined as a static substitution string will be included in the generated translation file.

Specifying the Primary Language for an Application

Globalization attributes specify how the Application Express engine determines the primary language of an application.

To edit globalization attributes:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Click Shared Components.

  4. Under Globalization, click Edit Attributes.

  5. From Application Primary Language, select the language in which the application is being developed.

  6. From Application Language Derived From, specify how the Application Express engine determines (or derives) the application language. Available options are described in Table 16-1.

    Table 16-1 Application Language Derived From Options

    OptionDescription

    No NLS (Application not translated)

    Select this option if the application will not be translated.

    Use Application Primary Language

    Determines the application's primary language based on the Application Primary Language attribute. (See step 5.)

    Browser (use browser language preference)

    Determines the application's primary language based on the user's browser language preference.

    Application Preference (use FSP_LANGUAGE_PREFERENCE)

    Determines the application's primary language based on a value defined using the APEX_UTIL.SET_PREFERENCE API. Select this option to maintain the selected language preference across multiple logins.

    See Also: "SET_PREFERENCE Procedure" in Oracle Application Express API Reference

    Item Preference (use item containing preference)

    Determines the application's primary language based on an application-level item called FSP_LANGUAGE_PREFERENCE. Using this option requires Oracle Application Express to determine the appropriate language preference every time the user logs in.


Using Format Masks for Items

The Application Express engine applies globalization settings for each rendered page. This default behavior can impact the display of certain items such as numbers and dates.

For example, suppose your application determines the application language based on the user's browser language preference. If the Application Express engine determines the users's browser language preference is French, it displays dates and numbers in a format that conforms to French standards. You can override this default behavior and explicitly control how items display by applying a format mask. You apply a format mask by making a selection from the Display As list:

  • When you create the item

  • After you create the item by editing the item attributes

The following procedure describes how to edit item attributes for items having the source type of Database Column.

To edit item attributes:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. Select a page.

    The Page Definition appears.

  4. Under Items, select the item name.

    The Edit Page Item page appears.

  5. Under Name, make a selection from the Display As list.

  6. Under source, select or enter a format mask.

Translating Applications for Multibyte Languages

If your application needs to run in several languages simultaneously (such as Chinese and Japanese), consider configuring your database with a character set to support all of the languages. The same character set has to be configured in the corresponding database access descriptor (DAD) in mod_plsql. UTF8 and AL32UTF8 are the character sets you can use to support almost all languages around the world.

Understanding the Translation Process

To translate an application developed in Application Builder, you must map the primary and target language, seed and export text to a translation file, translate the text, apply the translation file, and publish the translated application.

Topics in this section include:

Step 1: Map the Target Language

The first step in translating an application is to map the primary and target application language. The primary application is the application to be translated. The target application is the resulting translated application.

To map the primary and target application language:

  1. Navigate to the Translate Application page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. Click Shared Components.

    4. Under Globalization, click Translate Application.

      The Translate Application page appears.

  2. Click Map your primary language application to a translated application.

    The Application Mappings page appears.

  3. Click Create.

  4. On the Translation Application Mapping page:

    • Translation Application - Enter a numeric application ID to identify the target application. The translated application ID must be an integer and cannot end in zero.

    • Translation Application Language Code - Select the language into which you are translating.

    • Image Directory - Enter the directory where the images currently reside.

      This attribute determines the virtual path for translated images. For example, if your primary language application had an image prefix of /i/, you could define additional virtual directories for other languages, such as /i/de/ for German or /i/es/ for Spanish.

      Note that this language specific image directory is typically not needed for most translated applications.

  5. Click Create.

Step 2: Seed and Export Text to a Translation File

The second step is to seed the translation table and then export the translation text to a translation file.

Topics in this section include:

Seeding Translatable Text

Seeding the translation copies all translatable text into the Translation Text repository. After you specify the language and seed the Translation Text, you can then generate and export an XLIFF file for translation.

The seeding process keeps your primary language application synchronized with the Translation Text repository. You should run the seed process any time your primary language application changes.

To seed translatable text:

  1. Navigate to the Translate Application page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. Click Shared Components.

    4. Under Globalization, click Translate Application.

      The Translate Application page appears.

  2. On the Translate Application page, select Seed and export the translation text of your application into a translation file.

  3. From Language Mapping, select the appropriate primary and target application ID map.

  4. Click Seed Translatable Text.

    The XLIFF Export page appears.


    Note:

    XML Localization Interchange File Format (XLIFF) is an XML-based format for exchanging localization data. For information about the XLIFF or to view the XLIFF specification, see:
    http://www.xliff.org
    

Exporting Text to a Translation File

After you have seeded translatable text, a status box displays at the top of the XLIFF Export page indicating the total number of attributes that may require translation, including the number of:

  • Existing updated attributes that may require translation

  • New attributes that may require translation

  • Purged attributes that no longer require translation

You can use this information to determine if you must export translatable text for an entire application or just a specific page.

The XLIFF Export page is divided into two sections. Use the upper section of the page to export translatable text for an entire application (that is, all pages, lists of values, messages, and so on). Use the lower section to export translatable text for a specific page.

Exporting Translatable Text for an Entire Application

To export translatable text for an entire application:

  1. Seed the translatable text. See "Seeding Translatable Text".

  2. Under Step 2, Export XLIFF:

    1. From Application, select the appropriate primary and target application ID map.

    2. Specify whether to include XLIFF target elements.

    3. Under Export, specify what translation text is included in your XLIFF file.

    4. Click Export XLIFF for Application.

  3. Follow the on-screen instructions.

Exporting Translatable Text for a Specific Page

To export translatable text for a specific page:

  1. Seed the translatable text as described in "Seeding Translatable Text".

  2. Under Export XLIFF for specific Page:

    1. From Application, select the appropriate primary and target application ID map.

    2. Specify whether to include XLIFF target elements.

    3. Under Export, specify what translation text is included in your XLIFF file.

    4. Click Export XLIFF for Page.

  3. Follow the on-screen instructions.

About Including XLIFF Target Elements

When Oracle Application Express generates an XLIFF document, each document contains multiple translation units. Each translation unit consists of a source element and a target element. The XLIFF document can be generated with both the source and target elements for each translation unit. You have the option of generating a file containing only source elements. The updated translations will be applied from the target elements of the translation units.

About Export

Use the options under Export to specify what translation text is included in your XLIFF file. Select All translatable elements to include all translation text for an application. In contrast, select Only those elements requiring translation to include only new elements that have not yet been translated. Only those elements requiring translation produces an XLIFF file containing new or modified translation units. Also, if translation units were intentionally not previously translated (that is, the source of the translation element equals the target of the translation element), those translation units will also be included in the file

Step 3: Translate the XLIFF File

After you export a translatable file to XLIFF format, you can translate it into the appropriate languages. Because XLIFF is an open standard XML file for exchanging translations, most translation vendors should support it. Oracle Application Express only supports XLIFF files encoded in UTF-8 character sets. In other words, it exports XLIFF files for translation in UTF-8 and assumes that the translated XLIFF files will be in the same character set.

Translation is a time-consuming task. Oracle Application Express supports incremental translation so that application development can be done in parallel with the translation. An XLIFF file can be translated and uploaded to Oracle Application Express even when only part of the XLIFF file is translated. For strings that have no translation in the corresponding translated application, Oracle Application Express uses the corresponding ones in the primary language.


See Also:

For more information about the XLIFF, or to view the XLIFF specification, see:
http://www.xliff.org

Step 4: Upload and Apply a Translated XLIFF Document and Publish the Application

After your XLIFF document has been translated, the next step is to upload and then apply it.

Topics in this section include:

Uploading a Translated XLIFF Document

To upload a translated XLIFF document:

  1. Navigate to the Translate Application page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. Click Shared Components.

    4. Under Globalization, click Translate Application.

      The Translate Application page appears.

  2. Click Apply your translation file and publish.

  3. Click Upload XLIFF.

  4. On the XLIFF Upload page:

    1. Specify a title.

    2. Enter a description.

    3. Click Browse and locate the file to be uploaded.

    4. Click Upload XLIFF File.

    The uploaded document appears in the XLIFF Files repository.

Applying an Uploaded XLIFF Document and Publishing an Application

After you upload an XLIFF document, the next step is to apply the XLIFF document and then publish the translated application. When you apply an XLIFF document, the Application Express engine parses the file and then updates the translation tables with the new translatable text.

Publishing your application creates a copy of the base language application, substituting the translated text strings from your translations table. This published application can then be used to render your application in alternate languages.

Remember that in order to run an application in an alternative language, you must run it with globalization settings that will cause an alternative language version to display. For example, if the language is derived from the browser language, you must set the browser language to the same language as the translated application.

To apply a translated XLIFF document and publish the application:

  1. Navigate to the Translate Application page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. Click Shared Components.

    4. Under Globalization, click Translate Application.

      The Translate Application page appears.

  2. Click Apply your translation file and publish.

  3. In the XLIFF Files repository, click the View icon next to the document you want to publish.

  4. From Apply to, select the appropriate primary and target application ID map.

  5. Click Apply XLIFF Translation File.

  6. Click Publish Application.

Deleting an Uploaded XLIFF Document

To delete an uploaded XLIFF document:

  1. Navigate to the Translate Application page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. Click Shared Components.

    4. Under Globalization, click Translate Application.

      The Translate Application page appears.

  2. On the Translate Application page, select Apply your translation file and publish.

  3. In the XLIFF Files repository, select the check box to the left of the document title.

  4. Click Delete Checked.

You should verify the existence of the translated application after it is published. Translated applications do not display in the Available Applications list on the Application Builder home page. Instead, use the Application Navigate list on the left side of the page.

Note that in order for a translated application to appear in Application Builder, you must make sure that you have correctly configured the application Globalization attributes.

Manually Editing a Translation

Once you have mapped the target language and seeded the translatable text, you manually edit a translation.

To manually edit a translation:

  1. Map the target language. See "Step 1: Map the Target Language".

  2. Seed the translatable text. See "Seeding Translatable Text".

  3. Navigate to the Translatable Text page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. Click Shared Components.

    4. Under Globalization, click Translate Application.

  4. From the Translation Utilities list, click Manually Edit Translations.

    The Translatable Text page appears. Use the Navigation bar at the top of the page to change the report display. Available options include:

    • Language Mappings - Select a language mapping and click Go.

    • Page - Enter a page number and click Go.

    • Translate - Enter a case insensitive query and click Go.

    • Display - Select the number of rows to display and click Go.

  5. To edit translatable text, click the Edit icon.

    The Translatable Text field appears.

  6. Edit the appropriate text and click Apply Changes.

Translating Messages

You may need to translate messages if your application:

  • Includes PL/SQL regions or PL/SQL processes or calls PL/SQL package, procedures, or function. If it does, you may need to translate the generated HTML.

  • Uses a language that is not one of the ten languages into which Oracle Application Express is translated. If it does, you may need to translate messages used in reports.

Topics in this section include:

Translating Messages Used in PL/SQL Procedures

If your application includes PL/SQL regions or PL/SQL processes or calls PL/SQL package, procedures, or functions, you may need to translate generated HTML. First, you define each message on the Translatable Messages page. Second, you use the APEX_LANG.MESSAGE API to translate the messages from PL/SQL stored procedures, functions, triggers, or packaged procedures and functions.

You create translatable messages on the Translate Messages page.

To define a new translation message:

  1. Navigate to the Translate Application page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. Click Shared Components.

    4. Under Globalization, click Text Messages.

  2. On the Translate Messages page, click Create.

  3. On Identify Text Message, specify the following:

    1. Name - Enter a name to identify the message.

    2. Language - Select the language for which the message would be used.

    3. Text - Enter the text to be returned when the text message is called.

      For example, you could define the message GREETING_MSG in English as:

      Good morning %0
      

      Or, you could define the message GREETING_MSG in German as:

      Guten Tag %0
      
  4. Click Create.

About the APEX_LANG.MESSAGE API

Use the APEX_LANG.MESSAGE API to translate text strings (or messages) generated from PL/SQL stored procedures, functions, triggers, packaged procedures, and functions.

Syntax

APEX_LANG.MESSAGE (
    p_name    IN    VARCHAR2 DEFAULT NULL,
    p0        IN    VARCHAR2 DEFAULT NULL,
    p1        IN    VARCHAR2 DEFAULT NULL,
    p2        IN    VARCHAR2 DEFAULT NULL,
    ...
    p9        IN    VARCHAR2 DEFAULT NULL,
    p_lang    IN    VARCHAR2 DEFAULT NULL)
    RETURN VARCHAR2;

Parameters

Table 16-2 describes the parameters available in the APEX_LANG.MESSAGE API.

Table 16-2 APEX_LANG.MESSAGE Parameters

ParameterDescription

p_name

Name of the message as defined in Oracle Application Express.

p0

...

p9

Dynamic substitution value: p0 corresponds to 0% in the message; p1 corresponds to 1% in the message; p2 corresponds to 2% in the message, and so on.

p_lang

Language code for the message to be retrieved. If not specified, Oracle Application Express uses the current language for the user as defined in the Application Language Derived From attribute.

See Also: "Specifying the Primary Language for an Application"


Example

The following example assumes you have defined a message called GREETING_MSG in your application in English as Good morning%0 and in German as Guten Tag%1. The following example demonstrates how you could invoke this message from PL/SQL:

BEGIN
    --
    -- Print the greeting
    --
    APEX_LANG.MESSAGE('GREETING_MSG', V('APP_USER'));
END;

How the p_lang attribute is defined depends on how the Application Express engine derives the Application Primary Language. For example, if you are running the application in German and the previous call is made to the APEX_LANG.MESSAGE API, the Application Express engine first looks for a message called GREETING_MSG with a LANG_CODE of de. If it does not find anything, then it will revert to the Application Primary Language attribute. If it still does not find anything, the Application Express engine looks for a message by this name with a language code of en-us.


See Also:

"Specifying the Primary Language for an Application" for information about the Application Primary Language attribute and APEX_LANG in the Oracle Application Express API Reference

Translating Messages Used Internally by Oracle Application Express

Oracle Application Express is translated into German, Spanish, French, Italian, Japanese, Korean, Brazilian Portuguese, Simplified Chinese, and Traditional Chinese. If your application uses a language that is not among the ten languages into which Oracle Application Express is translated, you must translate messages displayed by the Application Express reporting engine.

For example, if you develop a Russian application and want to include report messages, such as pagination, in Russian, you must translate the strings used in messages displayed in reports.

To translate messages:

  1. Navigate to the Translate Application page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. Click Shared Components.

    4. Under Globalization, click Text Messages.

  2. On the Translate Messages page, click Create.

  3. On Identify Text Message, specify the following:

    1. Name - Enter the name of each message that needs to be translated. See Table 16-3.

    2. Language - Select the language for which the message would be used.

    3. Text - Enter the text to be returned when the text message is called. If the English text message contains positional substitution values (for example, %0, %1), ensure that your defined message also contains the same named and number of positional substitution values.

  4. Click Create.

Table 16-3 lists the internal messages that require translation.

Table 16-3 Internal Messages Requiring Translation

Message NameEnglish Text

FLOW.SINGLE_VALIDATION_ERROR

1 error has occurred

FLOW.VALIDATION_ERROR

%0 errors have occurred

INVALID_CREDENTIALS

Invalid Login Credentials

OUT_OF_RANGE

Invalid set of rows requested, the source data of the report has been modified

PAGINATION.NEXT

Next

PAGINATION.NEXT_SET

Next Set

PAGINATION.PREVIOUS

Previous

PAGINATION.PREVIOUS_SET

Previous Set

REPORT_TOTAL

report total

RESET

reset pagination

SINCE_DAYS_AGO

%0 days ago

SINCE_HOURS_AGO

%0 hours ago

SINCE_MINUTES_AGO

%0 minutes ago

SINCE_MONTHS_AGO

%0 months ago

SINCE_SECONDS_AGO

%0 seconds ago

SINCE_WEEKS_AGO

%0 weeks ago

SINCE_YEARS_AGO

%0 years ago

TOTAL

Total

WWV_FLOW_UTILITIES.CAL

Calendar

WWV_FLOW_UTILITIES.CLOSE

Close

WWV_FLOW_UTILITIES.OK

Ok

WWV_RENDER_REPORT3.FOUND_BUT_NOT_DISPLAYED

Minimum row requested: %0, rows found but not displayed: %1

WWV_RENDER_REPORT3.SORT_BY_THIS_COLUMN

Sort by this column

WWV_RENDER_REPORT3.X_Y_OF_MORE_THAN_Z

row(s) %0 - %1 of more than %2

WWV_RENDER_REPORT3.X_Y_OF_Z

row(s)%0 - %1 of %2

WWV_RENDER_REPORT3.X_Y_OF_Z_2

%0 - %1 of %2


Table 16-4 lists the internal messages that require translation.

Table 16-4 Interactive Report Messages Requiring Translation

Message NameEnglish Text

APEXIR_3D

3D

APEXIR_ACTIONS_MENU

Actions Menu

APEXIR_ADD

Add

APEXIR_AGGREGATE

Aggregate

APEXIR_AGGREGATE_DESCRIPTION

Aggregates are displayed after each control break and at the end of the report.

APEXIR_AGGREGATION

Aggregation

APEXIR_AGG_AVG

Average

APEXIR_AGG_COUNT

Count

APEXIR_AGG_MAX

Maximum

APEXIR_AGG_MEDIAN

Median

APEXIR_AGG_MIN

Minimum

APEXIR_AGG_MODE

Mode

APEXIR_AGG_SUM

Sum

APEXIR_ALL

All

APEXIR_ALL_COLUMNS

All Columns

APEXIR_AND

and

APEXIR_APPLY

Apply

APEXIR_ASCENDING

Ascending

APEXIR_AS_OF

As of %0

APEXIR_BETWEEN

between

APEXIR_BGCOLOR

Background Color

APEXIR_BLUE

blue

APEXIR_BOTTOM

Bottom

APEXIR_CALENDAR

Calendar

APEXIR_CANCEL

Cancel

APEXIR_CATEGORY

Category

APEXIR_CELL

Cell

APEXIR_CHART

Chart

APEXIR_CHART_INITIALIZING

Initializing...

APEXIR_CHART_TYPE

Chart Type

APEXIR_CHOOSE_DOWNLOAD_FORMAT

Choose report download format

APEXIR_CLEAR

clear

APEXIR_COLUMN

Column

APEXIR_COLUMNS

Columns

APEXIR_COLUMN_HEADING

Column Heading

APEXIR_COLUMN_HEADING_MENU

Column Heading Menu

APEXIR_COLUMN_INFO

Column Information

APEXIR_COMPARISON_CONTAINS

contains

APEXIR_COMPARISON_DOESNOT_CONTAIN

does not contain

APEXIR_COMPARISON_IN

in

APEXIR_COMPARISON_ISNOT_IN_LAST

is not in the last

APEXIR_COMPARISON_ISNOT_IN_NEXT

is not in the next

APEXIR_COMPARISON_IS_IN_LAST

is in the last

APEXIR_COMPARISON_IS_IN_NEXT

is in the next

APEXIR_COMPARISON_IS_NOT_NULL

is not null

APEXIR_COMPARISON_IS_NULL

is null

APEXIR_COMPARISON_LIKE

like

APEXIR_COMPARISON_NOT_IN

not in

APEXIR_COMPARISON_NOT_LIKE

not like

APEXIR_COMPARISON_REGEXP_LIKE

matches regular expression

APEXIR_COMPUTATION

Computation

APEXIR_COMPUTATION_FOOTER

Create a computation using column aliases.

APEXIR_COMPUTATION_FOOTER_E1

(B+C)*100

APEXIR_COMPUTATION_FOOTER_E2

INITCAP(B)||', '||INITCAP(C)

APEXIR_COMPUTATION_FOOTER_E3

CASE WHEN A = 10 THEN B + C ELSE B END

APEXIR_COMPUTE

Compute

APEXIR_CONTROL_BREAK

Control Break

APEXIR_CONTROL_BREAKS

Control Breaks

APEXIR_DATA_AS_OF

Report data as of %0 minutes ago.

APEXIR_DATE

Date

APEXIR_DEFAULT

Default

APEXIR_DELETE

Delete

APEXIR_DELETE_CHECKED

Delete Checked

APEXIR_DELETE_CONFIRM

Would you like to delete these report settings?

APEXIR_DELETE_CONFIRM_JS_DIALOG

Would you like to perform this delete action?

APEXIR_DELETE_REPORT

Delete Report

APEXIR_DESCENDING

Descending

APEXIR_DESCRIPTION

Description

APEXIR_DETAIL_VIEW

Single Row View

APEXIR_DIRECTION

Direction

APEXIR_DISABLE

Disable

APEXIR_DISABLED

Disabled

APEXIR_DISPLAY

Display

APEXIR_DISPLAYED

Displayed

APEXIR_DISPLAYED_COLUMNS

Displayed Columns

APEXIR_DISPLAY_IN_REPORT

Display in Report

APEXIR_DOWN

Down

APEXIR_DOWNLOAD

Download

APEXIR_DO_NOT_AGGREGATE

- Do not aggregate -

APEXIR_DO_NOT_DISPLAY

Do Not Display

APEXIR_EDIT_CHART

Edit Chart Settings

APEXIR_EDIT_CHART2

Edit Chart

APEXIR_EDIT_FILTER

Edit Filter

APEXIR_EDIT_HIGHLIGHT

Edit Highlight

APEXIR_ENABLE

Enable

APEXIR_ENABLED

Enabled

APEXIR_ENABLE_DISABLE_ALT

Enable/Disable

APEXIR_ERROR

Error

APEXIR_EXAMPLES

Examples

APEXIR_EXAMPLES_WITH_COLON

Examples:

APEXIR_EXCLUDE_NULL

Exclude Null Values

APEXIR_EXPAND_COLLAPSE_ALT

Expand/Collapse

APEXIR_EXPRESSION

Expression

APEXIR_FILTER

Filter

APEXIR_FILTERS

Filters

APEXIR_FINDER_ALT

Select columns to search

APEXIR_FLASHBACK

Flashback

APEXIR_FLASHBACK_DESCRIPTION

A flashback query enables you to view the data as it existed at a previous point in time.

APEXIR_FLASHBACK_ERROR_MSG

Unable to perform flashback request

APEXIR_FORMAT_MASK

Format Mask

APEXIR_FUNCTION

Function

APEXIR_FUNCTIONS

Functions

APEXIR_GO

Go

APEXIR_GREEN

green

APEXIR_HCOLUMN

Horizontal Column

APEXIR_HELP

Help

APEXIR_HELP_01

An Interactive Report displays a predetermined set of columns. The report may be further customized with an initial filter clause, a default sort order, control breaks, highlighting, computations, aggregates and a chart. Each Interactive Report can then be further customized and the results can be viewed, or downloaded, and the report definition can be stored for later use.

<p/>

An Interactive Report can be customized in three ways: the search bar, actions menu and column heading menu.

APEXIR_HELP_ACTIONS_MENU

The actions menu is used to customize the display of your Interactive Report.

APEXIR_HELP_AGGREGATE

Aggregates are mathematical computations performed against a column. Aggregates are displayed after each control break and at the end of the report within the column they are defined.

<p/>

<ul><li><b>Aggregation</b> allows you to select a previously defined aggregation to edit.</li>

<li><b>Function</b> is the function to be performed (e.g. SUM, MIN).</li>

<li><b>Column</b> is used to select the column to apply the mathematical function to. Only numeric columns will be displayed.</li></ul>

APEXIR_HELP_AGGREGATE

Aggregates are mathematical computations performed against a column. Aggregates are displayed after each control break and at the end of the report within the column they are defined.<p/>

<p/>

<ul><li><b>Aggregation</b> allows you to select a previously defined aggregation to edit.</li>

<li><b>Function</b> is the function to be performed (e.g. SUM, MIN).</li>

<li><b>Column</b> is used to select the column to apply the mathematical function to. Only numeric columns will be displayed.</li></ul>

APEXIR_HELP_CHART

You can include one chart per Interactive Report. Once defined, you can switch between the chart and report views using links below the search bar.

<p/>

<ul><li><b>Chart Type</b> identifies the chart type to include. Select from horizontal bar, vertical bar, pie or line.</li>

<li><b>Label</b> allows you to select the column to be used as the label.</li>

<li><b>Axis Title for Label</b> is the title that will display on the axis associated with the column selected for Label. This is not available for pie chart.</li>

<li><b>Value</b> allows you to select the column to be used as the value. If your function is a COUNT, a Value does not need to be selected.</li>

<li><b>Axis Title for Value</b> is the title that will display on the axis associated with the column selected for Value. This is not available for pie chart.</li>

<li><b>Function</b> is an optional function to be performed on the column selected for Value.</li></ul>

APEXIR_HELP_COLUMN_HEADING_MENU

Clicking on any column heading exposes a column heading menu.

<p/>

<ul><li><b>Sort Ascending icon</b> sorts the report by the column in ascending order.</li>

<li><b>Sort Descending icon</b> sorts the report by the column in descending order.</li>

<li><b>Hide Column</b> hides the column.</li>

<li><b>Break Column</b> creates a break group on the column. This pulls the column out of the report as a master record.</li>

<li><b>Column Information</b> displays help text about the column, if available.</li>

<li><b>Text Area</b> is used to enter case insensitive search criteria (no need for wild cards). Entering a value will reduce the list of values at the bottom of the menu. You can then select a value from the bottom and the selected value will be created as a filter using '=' (e.g. column = 'ABC'). Alternatively, you can click the flashlight icon and the entered value will be created as a filter with the 'LIKE' modifier (e.g. column LIKE '%ABC%').<li><b>List of Unique Values</b> contains the first 500 unique values that meet your filters. If the column is a date, a list of date ranges is displayed instead. If you select a value, a filter will be created using '=' (e.g. column = 'ABC').</li></ul>

APEXIR_HELP_COMPUTE

Computations allow you to add computed columns to your report. These can be mathematical computations (e.g. NBR_HOURS/24) or standard Oracle functions applied to existing columns (some have been displayed for example, others, like TO_DATE, can also be used).

<p/>

<ul><li><b>Computation</b> allows you to select a previously defined computation to edit.</li>

<li><b>Column Heading</b> is the column heading for the new column.</li>

<li><b>Format Mask</b> is an Oracle format mask to be applied against the column (e.g. S9999).</li>

<li><b>Format Mask</b> is an Oracle format mask to be applied against the column (e.g. S9999).</li>

<li><b>Computation</b> is the computation to be performed. Within the computation, columns are referenced using the aliases displayed.</li>

</ul>

<p/>

Below computation, the columns in your query are displayed with their associated alias. Clicking on the column name or alias will write them into the Computation. Next to Columns is a Keypad. These are simply shortcuts of commonly used keys. On the far right are Functions.

<p/>

An example computation to display Total Compensation is:

<p/>

<pre>CASE WHEN A = 'SALES' THEN B + C ELSE B END</pre>

(where A is ORGANIZATION, B is SALARY and C is COMMISSION)

APEXIR_HELP_CONTROL_BREAK

Used to create a break group on one or several columns. This pulls the columns out of the Interactive Report and displays them as a master record.

APEXIR_HELP_DETAIL_VIEW

To view the details of a single row at a time, click the single row view icon on the row you want to view. If available, the single row view will always be the first column. Depending on the customization of the Interactive Report, the single row view may be the standard view or a custom page that may allow update.

APEXIR_HELP_DOWNLOAD

Allows the current result set to be downloaded. The download formats will differ depending upon your installation and report definition but may include CSV, XLS, PDF, or RTF.

APEXIR_HELP_FILTER

Used to add or modify the where clause on the query. You first select a column (it does not need to be one that is displayed), select from a list of standard Oracle operators (=, !=, not in, between), and enter an expression to compare against. The expression is case sensitive and you can use % as a wild card (for example, STATE_NAME like A%).

APEXIR_HELP_FLASHBACK

Performs a flashback query to allow you to view the data as it existed at a previous point in time. The default amount of time that you can flashback is 3 hours (or 180 minutes) but the actual amount will differ per database.

APEXIR_HELP_HIGHLIGHT

Highlighting allows you to define a filter. The rows that meet the filter are highlighted using the characteristics associated with the filter.

<p/>

<ul><li><b>Name</b> is used only for display.</li>

<li><b>Sequence</b> identifies the sequence in which the rules will be evaluated.</li>

<li><b>Enabled</b> identifies if the rule is enabled or disabled.</li>

<li><b>Highlight Type</b> identifies whether the Row or Cell should be highlighted. If Cell is selected, the column referenced in the Highlight Condition is highlighted.</li>

<li><b>Background Color</b> is the new color for the background of the highlighted area.</li>

<li><b>Text Color</b> is the new color for the text in the highlighted area.</li>

<li><b>Highlight Condition</b> defines your filter condition.</li></ul>

APEXIR_HELP_REPORT_SETTINGS

If you have customized your Interactive Report, the report settings will be displayed below the Search Bar and above the report. If you have saved customized reports, they will be shown as tabs. You can access your alternate views by clicking the tabs. Below the tabs are the report settings for the current report. This area can be collapsed and expanded using the icon on the left.

<p/>

For each report setting, you can:

<ul><li><b>Edit</b> by clicking the name.</li>

<li><b>Disable/Enable</b> by unchecking or checking the Enable/Disable check box. This is used to temporarily turn off and on the setting.</li>

<li><b>Remove</b> by click the Remove icon. This permanently removes the setting.</li></ul>

<p/>

If you have created a chart, you can toggle between the report and chart using the Report View and Chart View links shown on the right. If you are viewing the chart, you can also use the Edit Chart link to edit the chart settings.

APEXIR_HELP_RESET

Resets the report back to the default settings, removing any customizations that you have made.

APEXIR_HELP_SAVE_REPORT

Saves the customized report for future use. You provide a name and an optional description.

APEXIR_HELP_SEARCH_BAR

At the top of each report page is a search region. The region provides the following features:

<p/>

<ul><li><b>Select columns icon</b> allows you to identify which column to search (or all).</li>

<li><b>Text area</b> allows for case insensitive search criteria (no need for wild cards).</li>

<li><b>Rows</b> selects the number of records to display per page.</li>

<li><b>[Go] button</b> executes the search.</li>

<li><b>Actions Menu icon</b> displays the actions menu (discussed next).</li></ul>

<p/>

Please note that all features may not be available for each report.

APEXIR_HELP_SELECT_COLUMNS

Used to modify the columns displayed. The columns on the right are displayed. The columns on the left are hidden. You can reorder the displayed columns using the arrows on the far right. Computed columns are prefixed with <b>**</b>.

APEXIR_HELP_SORT

Used to change the column(s) to sort on and whether to sort ascending or descending. You can also specify how to handle nulls (use the default setting, always display them last or always display them first). The resulting sorting is displayed to the right of column headings in the report.

APEXIR_HIDE_COLUMN

Hide Column

APEXIR_HIGHLIGHT

Highlight

APEXIR_HIGHLIGHTS

Highlights

APEXIR_HIGHLIGHT_CONDITION

Highlight Condition

APEXIR_HIGHLIGHT_TYPE

Highlight Type

APEXIR_HIGHLIGHT_WHEN

Highlight When

APEXIR_INTERACTIVE_REPORT_HELP

Interactive Report Help

APEXIR_INVALID

Invalid

APEXIR_INVALID_COMPUTATION

Invalid computation expression. %0

APEXIR_KEYPAD

Keypad

APEXIR_LABEL

Label

APEXIR_LABEL_AXIS_TITLE

Axis Title for Label

APEXIR_LAST_DAY

Last Day

APEXIR_LAST_HOUR

Last Hour

APEXIR_LAST_MONTH

Last Month

APEXIR_LAST_WEEK

Last Week

APEXIR_LAST_X_DAYS

Last %0 Days

APEXIR_LAST_X_HOURS

Last %0 Hours

APEXIR_LAST_X_YEARS

Last %0 Years

APEXIR_LAST_YEAR

Last Year

APEXIR_LINE

Line

APEXIR_MAX_QUERY_COST

The query is estimated to exceed the maximum allowed resources. Please modify your report settings and try again.

APEXIR_MAX_ROW_CNT

This query returns more then %0 rows, please filter your data to ensure complete results.

APEXIR_MIN_AGO

%0 minutes ago

APEXIR_MORE_DATA

More Data

APEXIR_MOVE

Move

APEXIR_MOVE_ALL

Move All

APEXIR_NAME

Name

APEXIR_NEW_AGGREGATION

New Aggregation

APEXIR_NEW_CATEGORY

- New Category -

APEXIR_NEW_COMPUTATION

New Computation

APEXIR_NEXT

&gt;

APEXIR_NEXT_DAY

Next Day

APEXIR_NEXT_HOUR

Next Hour

APEXIR_NEXT_MONTH

Next Month

APEXIR_NEXT_WEEK

Next Week

APEXIR_NEXT_X_DAYS

Next %0 Days

APEXIR_NEXT_X_HOURS

Next %0 Hours

APEXIR_NEXT_X_YEARS

Next %0 Years

APEXIR_NEXT_YEAR

Next Year

APEXIR_NO

No

APEXIR_NONE

- None -

APEXIR_NO_AGGREGATION_DEFINED

No aggregation defined.

APEXIR_NO_COLUMN_INFO

No column information available.

APEXIR_NO_COMPUTATION_DEFINED

No computation defined.

APEXIR_NULLS_ALWAYS_FIRST

Nulls Always First

APEXIR_NULLS_ALWAYS_FIRST

Nulls Always First

APEXIR_NULLS_ALWAYS_LAST

Nulls Always Last

APEXIR_NULL_SORTING

Null Sorting

APEXIR_NUMERIC_FLASHBACK_TIME

Flashback time must be numeric.

APEXIR_NUMERIC_SEQUENCE

Sequence must be numeric.

APEXIR_OPERATOR

Operator

APEXIR_ORANGE

orange

APEXIR_OTHER

Other

APEXIR_PIE

Pie

APEXIR_PREVIOUS

&lt;

APEXIR_PUBLIC

Public

APEXIR_RED

red

APEXIR_REMOVE

Remove

APEXIR_REMOVE_AGGREGATE

Remove Aggregate

APEXIR_REMOVE_ALL

Remove All

APEXIR_REMOVE_CONTROL_BREAK

Remove Control Break

APEXIR_REMOVE_FILTER

Remove Filter

APEXIR_REMOVE_FLASHBACK

Remove Flashback

APEXIR_REMOVE_HIGHLIGHT

Remove Highlight

APEXIR_RENAME_REPORT

Rename Report

APEXIR_REPORT

Report

APEXIR_REPORT_SETTINGS

Report Settings

APEXIR_REPORT_VIEW

&lt; Report View

APEXIR_RESET

Reset

APEXIR_RESET_CONFIRM

Restore report to the default settings.

APEXIR_ROW

Row

APEXIR_ROWS

Rows

APEXIR_ROW_OF

Row %0 of %1

APEXIR_ROW_ORDER

Row Order

APEXIR_ROW_TEXT_CONTAINS

Row text contains

APEXIR_SAVE

Save

APEXIR_SAVED_REPORT

Saved Report

APEXIR_SAVED_REPORT_MSG

Saved Report = "%0"

APEXIR_SAVE_AS_DEFAULT

Save as Default

APEXIR_SAVE_DEFAULT_CONFIRM

The current report settings will be used as the default for all users.

APEXIR_SAVE_REPORT

Save Report

APEXIR_SEARCH_BAR

Search Bar

APEXIR_SELECT_CATEGORY

- Select Category -

APEXIR_SELECT_COLUMN

- Select Column -

APEXIR_SELECT_COLUMNS

Select Columns

APEXIR_SELECT_COLUMNS_FOOTER

Computed columns are prefixed with **.

APEXIR_SELECT_FUNCTION

- Select Function -

APEXIR_SELECT_VALUE

Select Value

APEXIR_SEQUENCE

Sequence

APEXIR_SORT

Sort

APEXIR_SORT_ASCENDING

Sort Ascending

APEXIR_SORT_DESCENDING

Sort Descending

APEXIR_SPACE_AS_IN_ONE_EMPTY_STRING

space

APEXIR_STATUS

Status

APEXIR_TEXT_COLOR

Text Color

APEXIR_TIME_DAYS

days

APEXIR_TIME_HOURS

hours

APEXIR_TIME_MINS

minutes

APEXIR_TIME_MONTHS

months

APEXIR_TIME_WEEKS

weeks

APEXIR_TIME_YEARS

years

APEXIR_TOP

Top

APEXIR_UNAUTHORIZED

Unauthorized

APEXIR_UNIQUE_COLUMN_HEADING

Column Heading must be unique.

APEXIR_UNIQUE_HIGHLIGHT_NAME

Highlight Name must be unique.

APEXIR_UNSUPPORTED_DATA_TYPE

unsupported data type

APEXIR_UP

Up

APEXIR_VALID_COLOR

Please enter a valid color.

APEXIR_VALID_FORMAT_MASK

Please enter a valid format mask.

APEXIR_VALUE

Value

APEXIR_VALUE_AXIS_TITLE

Axis Title for Value

APEXIR_VALUE_REQUIRED

Value Required

APEXIR_VCOLUMN

Vertical Column

APEXIR_VIEW_CHART

View Chart

APEXIR_VIEW_REPORT

View Report

APEXIR_WORKING_REPORT

Working Report

APEXIR_YELLOW

yellow

APEXIR_YES

Yes


Translating Data That Supports List of Values

You create a dynamic translation to translate dynamic pieces of data. For example, you might use a dynamic translation on a list of values based on a database query.

Dynamic translations differ from messages in that you query a specific string rather than a message name. You define dynamic translations on the Dynamic Translations page. You then use the APEX_LANG.LANG API to return the dynamic translation string identified by the p_primary_text_string parameter.

Defining a Dynamic Translation

You define dynamic translations on the Dynamic Translations page. A dynamic translation consists of a translate-from language string, a language code, and a translate-to string.

To define a dynamic translation:

  1. Navigate to the Translate Application page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. Click Shared Components.

    4. Under Globalization, click Translate Application.

  2. On the Translate Application page, select Optionally identify any data that needs to be dynamically translated to support SQL based lists of values.

  3. On the Dynamic Translations page, click Create and specify the following:

    1. Language - Select a target language.

    2. Translate From Text - Enter the source text to be translated.

    3. Translate To - Enter the translated text.

  4. Click Create.

APEX_LANG.LANG API

Syntax

APEX_LANG.LANG (
    p_primary_text_string    IN    VARCHAR2 DEFAULT NULL,
    p0                       IN    VARCHAR2 DEFAULT NULL,
    p1                       IN    VARCHAR2 DEFAULT NULL,
    p2                       IN    VARCHAR2 DEFAULT NULL,
    ...
    p9                       IN    VARCHAR2 DEFAULT NULL,
    p_primary_language       IN    VARCHAR2 DEFAULT NULL)
    RETURN VARCHAR2;

Parameters

Table 16-5 describes the parameters available in the APEX_LANG.LANG API.

Table 16-5 APEX_LANG.LANG Parameters

ParameterDescription

p_primary_string

Text string of the primary language. This will be the value of the Translate From Text in the dynamic translation.

p0

...

p9

Dynamic substitution value: p0 corresponds to 0% in the in the translation string; p1 corresponds to 1% in the translation string; p2 corresponds to 2% in the translation string, and so on.

p_primary_language

Language code for the message to be retrieved. If not specified, Oracle Application Express uses the current language for the user as defined in the Application Language Derived From attribute.

See Also: "Specifying the Primary Language for an Application"


Example

Suppose you have a table that defines all primary colors. You could define a dynamic message for each color and then apply the LANG function to the defined values in a query. For example:

SELECT APEX_LANG.LANG(color)
  FROM my_colors

If you were running the application in German, RED was a value for the color column in the my_colors table, and you defined the German word for red, the previous example would return ROT.

About Supported Globalization Codes

If you are building a multilingual application, it is important to understand how globalization codes affect the way in which your application runs. These codes are set automatically based on the application-level Globalization attributes you select.

NLS_LANGUAGE and NLS_TERRITORY determine the default presentation of numbers, dates, and currencies.

Table 16-6 describes the globalization codes in Oracle Application Express.

Table 16-6 Oracle Application Express Globalization Codes

Language NameLanguage CodeNLS_LANGUAGENLS_TERRITORY

Afrikaans

af

ENGLISH

SOUTH AFRICA

Arabic

ar

ARABIC

UNITED ARAB EMIRATES

Arabic (Algeria)

ar-dz

ARABIC

ALGERIA

Arabic (Bahrain)

ar-bh

ARABIC

BAHRAIN

Arabic (Egypt)

ar-eg

EGYPTIAN

EGYPT

Arabic (Iraq)

ar-iq

ARABIC

IRAQ

Arabic (Jordan)

ar-jo

ARABIC

JORDAN

Arabic (Kuwait)

ar-kw

ARABIC

KUWAIT

Arabic (Lebanon

ar-lb

ARABIC

LEBANNON

Arabic (Libya)

ar-ly

ARABIC

LIBYA

Arabic (Morocco)

ar-ma

ARABIC

MOROCCO

Arabic (Oman)

ar-om

ARABIC

OMAN

Arabic (Qatar)

ar-qa

ARABIC

QATAR

Arabic (Saudi Arabia)

ar-sa

ARABIC

SAUDI ARABIA

Arabic (Syria)

ar-sy

ARABIC

SYRIA

Arabic (Tunisia)

ar-tn

ARABIC

TUNISIA

Arabic (U.A.E.)

ar-ae

ARABIC

UNITED ARAB EMIRATES

Arabic (YEMEN)

ar-ye

ARABIC

YEMEN

Assamese

as

ASSAMESE

INDIA

Basque

eu

FRENCH

FRANCE

Belarusian

be

RUSSIAN

RUSSIA

Bengali

bn

BANGLA

BANGLADESH

Bulgarian

bg

BULGARIAN

BULGARIA

Catalan

ca

CATALAN

CATALONIA

Chinese

zh

SIMPLIFIED CHINESE

CHINA

Chinese (China)

zh-cn

SIMPLIFIED CHINESE

CHINA

Chinese (Hong Kong SAR)

zh-hk

TRADITIONAL CHINESE

HONG KONG

Chinese (Macau SAR)

zh-mo

TRADITIONAL CHINESE

HONG KONG

Chinese (Singapore)

zh-sg

SIMPLIFIED CHINESE

SINGAPORE

Chinese (Taiwan)

zh-tw

TRADITIONAL CHINESE

TAIWAN

Croatian

hr

CROATIAN

CROATIA

Czech

cs

CZECH

CZECH REPUBLIC

Danish

da

DANISH

DENMARK

Dutch (Belgium)

nl-be

DUTCH

BELGIUM

Dutch (Netherlands)

nl

DUTCH

THE NETHERLANDS

English

en

AMERICAN

AMERICA

English (Australia)

en-au

ENGLISH

AUSTRALIA

English (Belize)

en-bz

ENGLISH

UNITED KINGDOM

English (Canada)

en-ca

ENGLISH

CANADA

English (Ireland)

en-ie

ENGLISH

IRELAND

English (Jamaica)

en-jm

ENGLISH

UNITED KINGDOM

English (New Zealand)

en-nz

ENGLISH

NEW ZEALAND

English (Philippines)

en-ph

ENGLISH

PHILIPPINES

English (South Africa)

en-za

ENGLISH

SOUTH AFRICA

English (Trinidad)

en-tt

ENGLISH

UNITED KINGDOM

English (United Kingdom)

en-gb

ENGLISH

UNITED KINGDOM

English (United States)

en-us

AMERICAN

AMERICA

English (Zimbabwe)

en-zw

ENGLISH

UNITED KINGDOM

Estonian

et

ESTONIAN

ESTONIA

Faeroese

fo

ENGLISH

UNITED KINGDOM

Farsi

fa

ENGLISH

UNITED KINGDOM

Finnish

fi

FINNISH

FINLAND

French (Belgium)

fr-be

FRENCH

BELGIUM

French (Canada)

fr-ca

CANADIAN FRENCH

CANADA

French (France)

fr

FRENCH

FRANCE

French (Luxembourg)

fr-lu

FRENCH

LUXEMBOURG

French (Monaco)

fr-mc

FRENCH

FRANCE

French (Switzerland)

fr-ch

FRANCH

SWITZERLAND

FYRO Macedonian

mk

MACEDONIAN

FYR MACEDONIA

Gaelic

gd

ENGLISH

UNITED KINGDOM

Galician

gl

SPANISH

SPAIN

German (Austria)

de-at

GERMAN

AUSTRIA

German (Germany)

de

GERMAN

GERMANY

German (Liechtenstein)

de-li

GERMAN

GERMANY

German (Luxemgourg)

de-lu

GERMAN

LUXEMBOURG

German (Switzerland)

de-ch

GERMAN

SWITZERLAND

Greek

el

GREEK

GREECE

Gujarati

gu

GUJARATI

INDIA

Hebrew

he

HEBREW

ISRAEL

Hindi

hi

HINDI

INDIA

Hungarian

hu

HUNGARIAN

HUNGARY

Icelandic

is

ICELANDIC

ICELAND

Indonesian

id

INDONESIAN

INDONESIA

Italian (Italy)

it

ITALIAN

ITALY

Italian (Switzerland)

it-ch

ITALIAN

SWITZERLAND

Japanese

ja

JAPANESE

JAPAN

Kannada

kn

KANNADA

INDIA

Kazakh

kk

CYRILLIC KAZAKH

KAZAKHSTAN

Konkani

kok

KOREAN

KOREA

Korean

ko

KOREAN

KOREA

Kyrgyz

kz

RUSSIAN

RUSSIA

Latvian

lv

LATVIAN

LATVIA

Lithuanian

lt

LITHUANIAN

LITHUANIANA

Malay (Malaysia)

ms

MALAY

MALAYSIA

Malayalam

ml

MALAYALAM

INDIA

Maltese

mt

ENGLISH

UNITED KINGDOM

Marathi

mr

ENGLISH

INDIA

Nepali (India)

ne

ENGLISH

UNITED KINGDOM

Norwegian (Bokmal)

nb-no

NORWEGIAN

NORWAY

Norwegian (Bokmal)

no

NORWEGIAN

NORWAY

Norwegian (Nynorsk)

nn-no

NORWEGIAN

NORWAY

Oriya

or

ORIYA

INDIA

Polish

pl

POLISH

POLAND

Portuguese (Brazil)

pt-br

BRAZILIAN PORTUGUESE

BRAZIL

Portuguese (Portugal)

pt

PORTUGUESE

PORTUGAL

Punjabi

pa

PUNJABI

INDIA

Romanian

ro

ROMANIAN

ROMANIA

Russian

ru

RUSSIAN

RUSSIA

Russian (Moldova)

ru-md

RUSSIAN

RUSSIA

Serbia

sr

CYRILLIC SERBIAN

SERBIA AND MONTENEGRO

Slovak

sk

SLOVAK

SLOVAKIA

Slovenian

sl

SLOVENIAN

SLOVENIA

Spanish (Argentina)

es-ar

LATIN AMERICAN SPANISH

ARGENTINA

Spanish (Bolivia)

es-bo

LATIN AMERICAN SPANISH

ARGENTINA

Spanish (Chile)

es-cl

LATIN AMERICAN SPANISH

CHILE

Spanish (Columbia)

ec-co

LATIN AMERICAN SPANISH

COLUMBIA

Spanish (Costa Rica)

es-cr

LATIN AMERICAN SPANISH

COSTA RICA

Spanish (Dominican Republic)

es-do

LATIN AMERICAN SPANISH

PUERTO RICO

Spanish (Ecuador)

es-ec

LATIN AMERICAN SPANISH

ECUDOR

Spanish (El Salvador)

es-sv

LATIN AMERICAN SPANISH

EL SALVADOR

Spanish (Guatemala)

es-gt

LATIN AMERICAN SPANISH

GUATEMALA

Spanish (Honduras)

es-hn

LATIN AMERICAN SPANISH

GUATEMALA

Spanish (Mexico)

es-mx

MEXICAN SPANISH

MEXICO

Spanish (Nicaragua)

es-ni

LATIN AMERICAN SPANISH

Nicaragua

Spanish (Panama)

es-pa

LATIN AMERICAN SPANISH

Panama

Spanish (Paraguay)

es-py

LATIN AMERICAN SPANISH

ARGENTINA

Spanish (Peru)

es-pe

LATIN AMERICAN SPANISH

PERU

Spanish (Peurto Rico)

es-pr

LATIN AMERICAN SPANISH

PEURTO RICO

Spanish (Traditional Sort)

es

LATIN AMERICAN SPANISH

SPAIN

Spanish (United States)

es-us

LATIN AMERICAN SPANISH

AMERICAN

Spanish (Uruguay)

es-uy

LATIN AMERICAN SPANISH

ARGENTINA

Spanish (Venezuela)

es-ve

LATIN AMERICAN SPANISH

VENEZUELA

Swedish

sv

SWEDISH

SWEDEN

Swedish

sv-fi

SWEDISH

FINLAND

Tamil

ta

TAMIL

INDIA

Telugu

te

TELUGU

INDIA

Thai

th

THAI

THAILAND

Turkish

tr

TURKISH

TURKEY

Ukrainian

uk

UKRAINIAN

UKRAINE

Urdu

ur

ENGLISH

UNITED KINGDOM

Uzbek

uz

LATIN UZBEK

UZBEKISTAN

Vietnamese

vi

VIETNAMESE

VIETNAM

Zulu

zu

ENGLISH

UNITED KINGDOM


PKX>|PK6(A OEBPS/toc.htm Table of Contents

Contents

Title and Copyright Information

Preface

What's New in Oracle Application Express

1 Quick Start

2 Running a Demonstration Application

3 Application Builder Concepts

4 Using Application Builder

5 Working with Application Pages

6 Building an Application

7 Adding Application Components

8 Adding Navigation

9 Controlling Page Layout

10 Managing Themes and Templates

11 Managing User Interface Defaults

12 Debugging an Application

13 Managing Application Security

14 Deploying an Application

15 Advanced Programming Techniques

16 Managing Application Globalization

A Available Conditions

B Privileges Granted to PUBLIC

Index

PK( Adding Navigation

8 Adding Navigation

When you build an application, you can include different types of navigation controls, such as navigation bar entries, tabs, breadcrumbs, lists, and trees. This section describes how to implement navigation in your application.

Navigation controls are shared components, so you create the specific type of navigation control at the application level on the Shared Components page. After that, you can add them to any page within your application.

This section contains the following topics:

Creating Tabs

Tabs are an effective way to navigate users between pages of an application. You can create a tabbed application look by using parent tabs, standard tabs, and lists.

Application Builder includes two different types of tabs:

  • Standard tabs

    An application having only one level of tabs uses a standard tab set. A standard tab set is associated with a specific page and page number. You can use standard tabs to link users to a specific page.

  • Parent tabs

    A parent tab set functions as a container to hold a group of standard tabs. Parent tabs give users another level of navigation and a context (or sense of place) within the application. You can use parent tabs to link users to a specific URL associated with a specific page.

Topics in this section include:


Note:

When running the Create Application Wizard, you have the option of creating an application with tabs. The following procedures assume you have created an application that does not have any tabs.

About Template Support

Before you can create parent and standard tabs, you must check that your default template has positions defined for both standard and parent tabs using the appropriate substitution strings. You also must make sure you do not override this template at the page-level.


See Also:


About the Tabs Section of the Page Definition

You can create and edit tabs on the Page Definition. Tabs display under the Shared Components section.

Description of pg_def_tabs.gif follows
Description of the illustration pg_def_tabs.gif

You can temporarily hide all other Shared Components subsections by clicking the Tabs icon under the Shared Components title. To restore the view, click Show All. The Show All icon resembles an inverted triangle.

The following icons appear in the Tabs section:

  • Edit All. The Edit All icon resembles a small grid with a pencil on top of it. Use this icon to edit all tabs at once.

  • Create. The Create icon resembles a plus (+) sign overlapping a small page. Click this icon to create a new tab.

  • Reorder. The Reorder icon resembles light green down and up arrows. Click this icon to edit the label and location of tabs.

To edit a tab, click the tab name.

Using the Reorder Tabs Icon

You can quickly edit the label and location of tabs by clicking the Reorder Tabs icon. It appears in the Tabs section of the Page Definition. This icon resembles light green down and up arrows.

Description of reorder_tabs.gif follows
Description of the illustration reorder_tabs.gif

To edit tabs using the Reorder Tabs icon:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Under Tabs, click the Reorder Tabs icon.

    The Reorder Tabs page appears.

  3. Edit the appropriate information:

    1. Label - Enter a label for the tab.

    2. Page - Enter the page number that corresponds to the tab.

    3. Tab Also Current For - List other pages that also correspond to this tab. To enter multiple pages, enter a list of pages delimited by a comma. For example:

      11,12,13,14,29,14
      
  4. To change the order in which tabs display, click the up and down arrows in the far right column.

  5. Click Apply Changes.

About the Tabs Page

The Tabs page displays a graphical representation of the tabs defined in your application. You access the Tabs page from the Shared Components page, or by clicking the heading Tabs on the Page Definition.

How to Create a Tab

You create a parent tab or standard tab from the Tabs page.

To create a tab:

  1. Access the Tabs page:

    To access the Tabs page from the Shared Components page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. On the Application Builder home page, click Shared Components.

    4. Under Navigation, click Tabs.

    To access the Tabs page from a Page Definition:

    1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

    2. Under Shared Components, click the Create icon in the Tabs section.

  2. To create a tab:

    1. Click Add in the appropriate row:

      • Use the Add button in the upper row to add Parent tabs.

        Think of parent tabs as a container to hold standard tabs. For example, to add two levels of tabs, you first create a parent tab and then add standard tabs to it.

      • Use the Add button in the lower row to add Standard tabs.

      The Create Parent Tab or Create Standard Tab Wizard appears.

    2. Follow the on-screen instructions.

Editing Tabs

You can edit multiple tabs simultaneously. Also, for standard tabs, you can update tab properties, such as their labels and order sequence, by using the Standard Tab Tasks list.

Editing Multiple Tabs Simultaneously

You can edit multiple tabs simultaneously.

To edit multiple tabs simultaneously:

  1. Navigate to the Tabs page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. Click Shared Components.

    4. Under Navigation, click Tabs.

  2. Click one of the following buttons:

    • Edit Standard Tabs

    • Edit Parent Tabs

Using the Standard Tab Task List

The Standard Tab Task list displays on the right side of the Tabs page. You can access the links on this list to rename a standard tab set, resequence the display order, associate pages with a tab set, create a new standard tab, or create a new standard tab set.

To access the Standard Tab Task list:

  1. Navigate to the Tabs page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. Click Shared Components.

    4. Under Navigation, click Tabs.

  2. Make a selection from the Standard Tab Task list:

    • Rename Standard Tab Set

    • Resequence Display Order

    • Associate Page(s) with Selected Standard Tab

    • Create New Standard Tab

    • Create New Standard Tab Set

Accessing Tab Reports

You can view the Tab Utilization and Tab History reports by clicking the appropriate tab at the top of the Tab Manager page.

Standard Tab Utilization

Click Utilization to access the Standard Tab Utilization report. This report lists the standard tabs used in the current application.

Standard and Parent Tab History

Click History to view the Standard Tab History and Parent Tab History reports. These reports display a history of changes to tab attributes for the current application.

Creating Lists

A list is a shared collection of links. You add a list to a page by creating a region and specifying the region type as List. You control the appearance of a list through list templates.

Each list element has a display condition, which enables you to control when it displays. You can define a list element to be either current or non-current for a specific page. You further specify what current looks like using template attributes.

Description of list.gif follows
Description of the illustration list.gif

Topics in this section include:


See Also:

"Creating a New Template" and "List Templates" for information about altering list display

How To Create a List

To add a list to a page in your application, you must:

  1. Create the list using one of these methods:

    • Create a list from scratch by running the Create/Edit Lists Wizard from either the Shared Components page or Page Definition.

    • Copy an existing list. If the list contains list items or entries, the items are also copied.

  2. Add entries to the list:

    • Create list entries from scratch.

    • Copy a single list entry from the current list. This copies the list entry attributes.

    • Copy list entries from another list into the current one. This merges the two sets of list entries without changing the list whose entries are copied into the current one.

  3. Add the list to a page by creating a List region.

Topics in this section include:

Creating a List from Scratch

To create a list:

  1. Access the Create/Edit Lists Wizard:

    To access the wizard from the Shared Components page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. On the Application Builder home page, click Shared Components.

    4. Under Navigation, click Lists.

    5. Click Create.

    To access the wizard from a Page Definition:

    1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

    2. Under Shared Components, click the Create icon in the Lists section.

  2. In the Create/Edit Wizard:

    1. Name - Enter a name for the list.

    2. List Template - Select a list template.

    3. Build Option - If applicable, select a build option for this component. Build options are predefined settings that determine whether components within an application are enabled.

  3. Click Create.

Copying Lists

To copy a list:

  1. Access the Copy List Wizard:

    To access the wizard from the Shared Components page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. On the Application Builder home page, click Shared Components.

    4. Under Navigation, click Lists.

    5. Click Copy.

    To access the wizard from a Page Definition:

    1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

    2. Under Shared Components, click the Copy icon in the Lists section.

      The Copy icon appears only if a list exists for this page.

  2. In the Copy Wizard, select the location of the list to copy and click Next.

  3. If you selected List in another application, select the application and click Next.

  4. For Identify List, enter a name for the new list and click Copy.

For the list to appear on a page, you must add it to the page.

Adding List Entries and Sublists

Once your list is created, you must add entries to it. You can add list entries from scratch, copy one list entry within a list, or copy existing entries from one list to another.

You can also create hierarchical lists that contain sublists. To create a hierarchical list, you must:

  • Select a list template that supports hierarchical lists. To determine which list templates support hierarchical lists, look for templates having the naming convention "with Sublist."

  • Select a Parent List Item when you create each list entry.

Adding Entries or Sublists from Scratch

To add an entry or sublist from scratch:

  1. Navigate to the Lists page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. On the Application home page, click Shared Components.

    4. Under Navigation, select Lists.

      The Lists page appears.

  2. Select a list.

  3. Click Create List Entry.

    The Create/Edit List Entry page appears.

  4. Under Entry:

    1. Parent List Item - Identify the parent for this list entry. Use this attribute if you are creating a hierarchical list that will contain a sublist.

    2. Sequence - Indicate the order in which list entries appear.

    3. Image - Identify the file name for the image used to display this list entry. List templates control this attribute.

    4. Attributes - Identify the image attributes (such as width="12" height="12") for the list element image.

      Use the #LIST_LABEL# substitution string to reference the list label text. This substitution string allows for the title image attribute to be automatically set based on the value of the list label text. For example:

      title="#LIST_LABEL#"
      
    5. List Entry Label - Enter the label text for this link.

  5. Specify a target location.

    If the target location is a URL, specify the following:

    • Target is a - Select URL.

    • URL Target - Enter a URL. For example:

      http://www.yahoo.com
      

    If the target location is a page:

    1. Target Type - Select Page in this Application.

    2. Page - Specify the target page number.

      You can also select reset pagination for this page. Selecting this option causes the page to return to the first set of data meeting a user's new query.

      You can also select Printer Friendly. Selecting this option displays the target page using the application's Printer Friendly template. Printer friendly templates optimize a page for printing. "Changing the Default Templates in a Theme" and "Optimizing a Page for Printing".

    3. Request - Specify the request to be used.

    4. Clear Cache - Specify the page numbers on which to clear cache.

    5. To set session state (that is, give a listed item a value):

      • Set these items - Enter a comma-delimited list of item names for which you would like to set session state.

      • With these values - Enter a comma-delimited list of values for the items specified in the previous step.

        You can specify static values or substitution syntax (for example, &APP_ITEM_NAME.). Note that item values passed to f?p= in the URL cannot contain a colon. Additionally, item values cannot contain commas unless you enclose the entire value in backslashes (for example, \1234,56\).

  6. Under Current List Entry:

    1. List Entry Current for Pages Type - Specify when this list entry should be current based on the page type.

      List items can be current or non-current. Current list items use the current template; non-current list items use the non-current list item template. The actual condition and templates are defined in subsequent attributes.

    2. List Entry Current for Condition - Based on the selection above, define a condition to evaluate. When this condition is true, then the list item becomes current.

  7. To make the list entry conditional, specify the appropriate information under Conditions.

  8. Under Authorization, you can specify an authorization scheme.

    This authorization scheme must evaluate to TRUE in order for this component to be rendered or otherwise processed.

  9. Under Configuration, you can select a build option for this component.

    Build options are predefined settings that determine whether components within an application are enabled.

  10. Under Click Counting, you can specify if you want the list entries to be included in the click count.

    If this is a link to an external page, such as www.google.com, you can count clicks. For more information, see "COUNT_CLICK Procedure" in Oracle Application Express API Reference.

  11. To specify additional attributes, use the User Defined Attributes section. For example, the following adds a tabindex and accesskey.

    tabindex="15" accesskey="D"
    
  12. When you are finished defining list attributes, click Create or Create and Create Another.

Copying List Entries

To copy list entries:

  1. Navigate to the List Entries page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. On the Application home page, click Shared Components.

    4. Under Navigation, select Lists.

      The Lists page appears.

    5. On the Lists page, click the name of the list whose entries you want to copy.

      The List Entries page appears.

  2. To copy a single list entry that appears in the current list:

    1. Click the Copy icon in the in the row you want to copy. The Copy icon appears under the Copy column in the list.

      All the attributes of the selected list entry, such as image and parent, will be copied to the new entry.

    2. For Copy List Entry, enter the appropriate information and click Copy List Entry.

  3. To copy list entries from one list to another:

    1. Click Copy List Entries from one List to Another under the Tasks list on the right side of the page.

    2. For Identify Copy Target, select the target list where you want to add the entries and click Next.

    3. For Confirm List Entry Copy, click the Report of New Combined List to review the composite list.

    4. Click Copy List Entries.

Changing Parents of List Entries

To change the parent of list entries:

  1. Navigate to the List Entries page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. On the Application home page, click Shared Components.

    4. Under Navigation, select Lists.

      The Lists page appears.

    5. On the Lists page, click the name of the list whose entries you want to update.

      The List Entries page appears.

  2. From the Tasks list on the right, click Reparent List Entries within this List.

  3. On the Reparent List Entries page:

    1. Enter the appropriate information for List and Start With and click Go.

      You can use the Start With field to filter down a large, hierarchical list to pinpoint the entries you need to reparent. You can also use these fields to focus on a subset of a list you want to edit.

    2. For Reparent To, select the new parent for the list entries.

    3. Select the check boxes for the list entries you want to include.

    4. Click Reparent Checked Entries.

Removing Parent of Orphaned List Entries

An orphaned list entry is a list entry whose parent is no longer a member of the current list. When a list entry becomes orphaned, remove the parent entry.

To remove the parent of an orphaned list entry:

  1. Navigate to the List Entries page:

    1. On the Workspace home page, click the Application Builder icon.

    2. Select an application.

    3. On the Application home page, click Shared Components.

    4. Under Navigation, select Lists.

      The Lists page appears.

    5. On the Lists page, click the name of the list whose entries you want to update.

      The List Entries page appears.

  2. From the Tasks list on the right, click Manage Oprhaned List Entries.

  3. On the Manage Orphaned List Entries page:

    1. From the Show list, select Orphaned and click Go.

    2. Select the check boxes for the orphaned list entries.

    3. Click Remove Parent Entry.

Adding a List to a Page

Once you create a list and list entries, the next step is to add it to a page by creating a region and specifying the region type as List.


See Also:

"Creating a New Template" and "List Templates" for information about altering list display

To add a list to a page:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Under Regions, click the Create icon.

  3. For Region, select List as the region type and click Next.

  4. For Display Attributes, specify the appropriate information and click Next:

    • Title - Enter a title for the region. This title will display if the region template you choose displays the region title.

    • Region Template - Choose a template to control the look of the region.

    • Display Point - Identify a display point for this region.

      • Page Template Body - These positions are displayed where indicated by the #BODY# substitution string in the page template.

      • Page Template Region - These positions are controlled by page template substitution strings (#REGION_POSITION_01#..#REGION_POSITION_08#). Page template region positions enable exact placement of a region within a template.

    • Sequence - Specify the sequence for this component. The sequence determines the order of evaluation.

    • Column - Indicate the column where this region is to be displayed. A page can have multiple regions, which can be displayed in different columns. Note that this attribute only applies to regions that are displayed in a Page Template Body position.

  5. For Source, select the list you want to add.

  6. Click Create List Region.

Repeat these procedures for each page where you would like to add a list.

Editing a List

Once you create a list, you can edit it on the Lists page.

To edit a list:

  1. Navigate to the Lists page.

    From the Page Definition:

    1. Navigate to the Workspace home page.

    2. Click the Application Builder icon.

    3. Select an application.

    4. Select a page.

    5. Under Shared Components, click Edit All.

    From the Shared Components page:

    1. Navigate to the Workspace home page.

    2. Click the Application Builder icon.

    3. Select an application.

    4. On the Application home page, click Shared Components.

    5. Under Navigation, click Lists.

  2. On the Lists page, you can change the appearance of the page by making a selection from the View list:

    • Icons (the default) displays each list as a large icon. To edit a list, click the appropriate icon.

    • Details displays each list as a line in a report. To edit a list, click the list name.

  3. Select a list.

    The List Entries page appears.

  4. Select the appropriate list name.

    The Create/Edit List Entry page that appears is divided into sections. You can access these sections by scrolling down the page, or by clicking a navigation button at the top of the page. When you select a button at the top of the page, the selected section appears and all other sections are temporarily hidden. To view all sections of the page, click Show All.

  5. Edit the appropriate attributes.

  6. To learn more about a specific item on a page, click the item label.

    When Help is available, the item label changes to red when you pass your cursor over it and the cursor changes to an arrow and question mark. See "About Field-Level Help".

  7. Click Apply Changes.

Editing Multiple List Entries Simultaneously

You can edit multiple list entries simultaneously by clicking Grid Edit on the List Entries page.

To edit multiple list entries at once:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. On the Application Builder home page, click Shared Components.

  4. Under Navigation, click Lists.

    The Lists page appears.

  5. Select a list name.

    The List Entries page appears.

  6. Click Grid Edit.

  7. Edit the appropriate items and click Apply Changes.

Accessing List Reports

You can view the List Utilization by Page, Unused Lists, and List History reports by clicking the appropriate tab at the top of the Lists page.


Note:

The List Utilization, Unused Lists, and History buttons only appear after you create a list.

Utilization

Click List Utilization on the Lists page to access the Lists Utilization report. This report displays all lists included in the current application. From the report:

  • To edit list entries, select the list name.

  • To view the pages on which the list appears, click the number in the Pages column.

  • To view the template used with the list, click List Template Utilization. Then click the name to view or edit the list template.

Unused

Click Unused on the Lists page to identify lists that are not used in the current application.

History

Click History on the Lists page to view changes to list definitions and list entries by developer and date.

Creating Breadcrumbs

Breadcrumbs provide users with hierarchical navigation. A breadcrumb is a hierarchical list of links that display using templates. You can display a breadcrumb as a list of links or as a breadcrumb path.

Topics in this section include:

About Breadcrumbs

A breadcrumb trail indicates where the user is within the application from a hierarchical perspective. In addition, users can click a specific breadcrumb link to instantly view the page. You use breadcrumbs as a second level of navigation at the top of each page, complementing other user interface elements such as tabs and lists.

Description of menu.gif follows
Description of the illustration menu.gif

How to Create Breadcrumbs

You can create breadcrumbs while creating a page, or manually by running the Create Breadcrumb Wizard.

Topics in this section include:

Creating a Breadcrumb While Creating a Page

To create a breadcrumb while creating a page:

  1. Run the Create Page Wizard to add a new page. See "Managing Pages in an Application". You can access this wizard by:

    • Clicking Create Page on the Application home page

    • Clicking Create on the Page Definition

    • Clicking the Create link on the Developer toolbar

    During the wizard, a Breadcrumb list appears. The actual page on which this list displays depends upon the type of page you are creating.

  2. From the Breadcrumb list, select Breadcrumb.

    The Create Breadcrumb Entry form appears.

    Description of breadcrum_creage_pg.gif follows
    Description of the illustration breadcrum_creage_pg.gif

  3. In Entry Name, enter a name for the breadcrumb.

  4. For Parent Entry:

    • To specify a parent, select a parent page from the Select Parent Entry list.

    • If this breadcrumb does not have a parent, select No parent breadcrumb entry.

  5. Follow the on-screen instructions.

Creating a Breadcrumb Manually

To create breadcrumbs manually, you need to add a breadcrumb to each page in your application as follows:

  1. Create the breadcrumb by running the Create/Edit Breadcrumb Wizard from either the Shared Components page or the Page Definition.

  2. Add entries to it.

  3. Add the breadcrumb to a page by creating a region.

Creating Breadcrumbs from the Shared Components Page

To create breadcrumbs from the Shared Components page:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. On the Application Builder home page, click Shared Components.

  4. Under Navigation, click Breadcrumbs.

    The Breadcrumbs page appears.

  5. Click Create.

  6. Enter a name and click Create.

Creating Breadcrumbs from a Page Definition

To create breadcrumbs from a Page Definition:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Under Shared Components, scroll down to Breadcrumbs and click the Create icon.

  3. For Create, select Breadcrumb and click Next.

  4. Enter a name and click Create.

After you create a breadcrumb, you add entries to it.

Adding Breadcrumb Entries

To add a breadcrumb entry:

  1. Navigate to the Breadcrumbs page:

    1. Navigate to the Workspace home page.

    2. Click the Application Builder icon.

    3. Select an application.

    4. On the Application Builder home page, click Shared Components.

    5. Under Navigation, click Breadcrumbs.

      The Breadcrumbs page appears.

  2. Select a breadcrumb to add entries to.

  3. Click Create Breadcrumb Entry.

  4. Under Breadcrumb, specify the page where this breadcrumb entry will display.

  5. Under Entry:

    1. Sequence - Indicate the order in which breadcrumb entries appear.

    2. Parent Entry - Identify the parent of this entry.

    3. Short Name - Specify the short name of this entry (referenced in the breadcrumb template).

    4. Long Name - Specify the long name of this entry (referenced in the breadcrumb template).

  6. Under Target, specify the target location. The information that appears on the page depends on the branch type you selected:

    1. If the target location is a URL, specify the following:

      • Target is a - Select URL.

      • URL Target - Enter a URL. For example:

        http://www.yahoo.com
        
    2. If the target location is a page, specify the following:

      • Target is a - Select Page in this Application.

      • Page - Specify the target page number.

        You can also select reset pagination for this page. Selecting this option causes the page to return to the first set of data meeting a user's new query.

      • Request - Specify the request to be used.

      • Clear Cache - Specify the page numbers on which to clear cache.

    3. To set session state (that is, give a listed item a value):

      • Set these items - Enter a comma-delimited list of item names for which you would like to set session state.

      • With these values - Enter a comma-delimited list of values for the items your specified.

        You can specify static values or substitution syntax (for example, &APP_ITEM_NAME.). Note that item values passed to f?p= in the URL cannot contain a colon. Additionally, item values cannot contain commas unless you enclose the entire value in backslashes (for example, \1234,56\).

    4. Click Next.

  7. To make the breadcrumb conditional:

    1. Make a selection from the Condition Type list.

    2. Enter an expression in the fields provided.

  8. Under Authorization, you can specify an authorization scheme.

    This authorization scheme must evaluate to TRUE in order for this component to be rendered or otherwise processed.

  9. Under Configuration, you can select a build option for this component.

    Build options are predefined settings that determine whether components within an application are enabled.

  10. When you are finished defining menu attributes, click Create at the top of the page.

Repeat these procedures for each breadcrumb entry you need to create.

Adding a Breadcrumb Region

A region is an area on a page that serves as a container for content. Once you create a breadcrumb and a breadcrumb template, the next step is to create a region. Once you create a region, you can add a breadcrumb to a page.


See Also:

"Creating a New Template" and "Breadcrumb Templates" for information about changing menu display

To create a breadcrumb region:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Under Regions, click the Create icon.

    The Create Region Wizard appears. Note that each wizard page displays a series of blocks on the left, representing the sequence of steps. The highlighted block indicates the step you are performing.

  3. For the region type, select Breadcrumb and click Next.

  4. For Breadcrumb Container Region:

    1. Region Title - Enter a title for this region.

    2. Region Template - Select a region template.

    3. Display Point - Select a Display Point.

      Regions are organized by position (or Display Point). To determine the appropriate region position, click the flashlight icon. A graphical representation appears.

    4. Sequence - Enter a number for the sequence.

    5. Click Next.

  5. For Breadcrumb:

    1. Breadcrumb - Select the breadcrumb to be associated with this region.

    2. Breadcrumb Template - Select a template.

    3. Click Next.

  6. For Breadcrumb Entry, identify the breadcrumb entry used to identify this page:

    1. Breadcrumb Entry Label - Enter a label for the breadcrumb entry.

    2. Parent Entry - Select the appropriate hierarchical parent.

    3. Click Next.

  7. Click Finish.

Repeat these procedures for each page where you would like to add breadcrumb navigation.

About Creating Dynamic Breadcrumbs

To give users more exact context, you can include session state in breadcrumbs, making your breadcrumbs dynamic. For example, suppose a page in your application displays a list of orders for a particular company and you want to include the following breadcrumb:

Home > Orders > Orders for ACME Inc

In this example, ACME Inc not only indicates the page a user is on but also the navigation path. The Application Express engine stores the value of ACME Inc. in session state.

To create this type of dynamic menu, you must include a reference to a session state item in the breadcrumb's short name or long name. For example:

&COMPANY_NAME.

Editing Breadcrumbs

Once you create a breadcrumb, you can edit it on the Breadcrumbs page.

To edit a breadcrumb:

  1. Navigate to the Workspace home page.

  2. Click the Application Builder icon.

  3. Select an application.

  4. On the Application Builder home page, click Shared Components.

  5. Under Navigation, select Breadcrumbs.

    The Breadcrumbs page appears.

    You can change the appearance of the page by making a selection from the View list and clicking Go:

    • Icons (the default) displays each breadcrumb as a large icon. To edit a breadcrumb, click the icon.

    • Details displays each breadcrumb as a line in a report. To edit a breadcrumb, click the appropriate name.

  6. Select a breadcrumb.

  7. Select the appropriate breadcrumb entry name.

    The Create/Edit Breadcrumb Entry page appears.

  8. Edit the appropriate attributes.


    Tip:

    To learn more about a specific item on a page, click the item label. When Help is available, the item label changes to red when you pass your cursor over it and the cursor changes to an arrow and question mark. See "About Field-Level Help".

  9. (Optional) In the Breadcrumb Entry list on the right side of the page, you can select the Synchronize Breadcrumb With Page Name and Title option.

    Selecting this option makes changing the name of a page and breadcrumb a one-step process. The information you provide for breadcrumb names is used to update the referenced page name and title.

  10. Click Apply Changes.

About Navigation Alternatives

The Create/Edit Breadcrumb Entry page is divided into the following sections: Breadcrumb, Entry, Target, Conditions, Authorization and Configuration.

You can access these sections by scrolling down the page, or by clicking a navigation button at the top of the page. When you select a button at the top of the page, the selected section appears and all other sections are temporarily hidden. To view all sections of the page, click Show All.

Reparenting Breadcrumb Entries

You can select a new parent for selected breadcrumb entries on the Reparent Entries page.

To reparent breadcrumb entries:

  1. Navigate to the Breadcrumbs page:

    1. Navigate to the Workspace home page.

    2. Click the Application Builder icon.

    3. Select an application.

    4. On the Application Builder home page, click Shared Components.

    5. Under Navigation, select Breadcrumbs.

      The Breadcrumbs page appears.

  2. Select a breadcrumb.

    The Breadcrumb Entries page appears.

  3. From the Tasks list, click Reparent Entries within this Breadcrumb.

    The Reparent Entries page appears.

  4. Use the navigation bar to edit or filter the view:

    • Breadcrumb - Identify the breadcrumb you want to edit and click Go.

    • Start With - Make a selection to restrict your view to a subset of the breadcrumb hierarchy and click Go.

  5. From Reparent to, select the new parent.

  6. Select the breadcrumbs entries you want to move and click Reparent Checked Entries.

Accessing Breadcrumb Reports

You can view the Breadcrumb Utilization and Breadcrumb History reports by clicking the appropriate tab at the top of the Breadcrumbs page.


Note:

The Utilization and History buttons only appear after you create a breadcrumb.

To access the Breadcrumbs page:

  1. Navigate to the Workspace home page.

  2. Click the Application Builder icon.

  3. Select an application.

  4. On the Application Builder home page, click Shared Components.

  5. Under Navigation, select Breadcrumbs.

Breadcrumb Utilization Report

Click Utilization to access the Breadcrumb Utilization report. This report lists breadcrumbs by page. Click the page number to go to a specific page.

Breadcrumb History Report

Click History to view the Breadcrumb History report. This report lists recent changes to breadcrumbs.

Creating Trees

You can use a tree in your application to effectively communicate hierarchical or multiple level data.

Topics in this section include:

How To Create a Tree

To create a tree:

  1. Navigate to the Shared Components page:

    1. Navigate to the Workspace home page.

    2. Click the Application Builder icon.

    3. Select an application.

    4. On the Application Builder home page, click Shared Components.

  2. Under Navigation, click Trees.

    The Trees page appears.

  3. Click Create.

    The Create Tree Wizard appears. Note that each wizard page displays a series of blocks on the left, representing the sequence of steps. The highlighted block indicates the step you are performing.

  4. For Page Attributes, enter basic page information and click Next.

    To learn more about a specific item on a page, click the item label. A Help window appears with a description of the item or field.

  5. For Tab, specify how tabs should be implemented and click Next.

  6. For Tree Attributes:

    1. Tree Name - Enter a name.

    2. Default Expanded Levels - Specify the number of default expanded levels.

    3. Start Tree - Specify how you want to determine the starting point. This determines what point in the hierarchy you want to display.

      - Based on New Item with Popup List of Values - Select this option to set up an item containing a list of values. This option enables the user to determine the starting point to display by selecting an option for the list of values.

      - Based on a SQL Query - Select this option to write a query that dynamically finds the starting point of a hierarchy (the entry with no parent).

      - Static Value - Select this option to hard code the starting point.

    4. Click Next.

  7. For Tree Template, select a template and click Next.

  8. For Tree Start, specify a starting point and click Next. Depending on your Start Tree selection, enter either a query or a single value.

  9. For Expand/Collapse, select the buttons to include and click Next.

  10. For Table/View Owner, specify the owner of the table on which the tree will be based and click Next.

  11. For Table/View Name, specify the name of the table on which the tree will be based and click Next.

  12. A tree is based on a query and returns data that can be represented in a hierarchy. This hierarchy is determined by the relationship between ID and Parent ID values. Identify the column you want to use as the ID, the Parent ID, and specify the text that should appear on the leaf nodes.

    1. ID - Enter the column you want to use as the ID.

    2. Parent ID - Enter the Parent ID.

    3. Leaf Node Text - Specify the text that should appear on the leaf nodes.

    4. Link Option - Select Existing Application Item to make the leaf node text a link. If you select this option, specify a page to link to.

  13. Identify an optional where and order by clause to add to your query.

  14. Specify the display text for the Go button.

  15. Identify the page you want to branch to when the user clicks a button.

  16. Click Finish.

Editing a Tree

Once you create a tree, you can edit it on the Trees page.

To edit a tree:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. On the Application home page, click Shared Components.

  4. Under Navigation, select Trees.

    The Trees page appears.

  5. You can change the appearance of the page by making a selection from the View list:

    • Icons (the default) displays each tree as a large icon.

    • Details displays each tree as a line in a report.

  6. Select a tree.

    The Edit Tree page appears.

  7. Edit the appropriate attributes.

  8. To learn more about a specific item on a page, click the item label.

    When Help is available, the item label changes to red when you pass your cursor over it and the cursor changes to an arrow and question mark. See "About Field-Level Help".

  9. Click Apply Changes.

About Navigation Alternatives

The Edit Tree page is divided into the following sections: Name, Query, Before and After, Static Node Templates, Dynamic Templates, Node Text Templates, and Link Templates.

You can access these sections by scrolling down the page, or by clicking a navigation button at the top of the page. When you select a button at the top of the page, the selected section appears and all other sections are temporarily hidden. To view all sections of the page, click Show All.

Accessing Tree Reports

You can view the Trees Utilization and Tree History reports by clicking the appropriate tab at the top of the Trees page.


Note:

The Utilization and History buttons only appear after you have created a tree.

Tree Utilization

Click Utilization on the Trees page to access the Tree Utilization report. This report displays all trees included in the current application. To edit a tree, select the tree name.

Tree History

Click History on the Trees page to view changes to trees by developer and date.

Creating a Navigation Bar Entry

Navigation bar entries offer an easy way to move users between pages in an application. For example, a navigation entry enables you to display a link from an image or text. The associated page template determines the location of a navigation bar.

Topics in this section include:

About Navigation Bars

A navigation bar entry can be an image, text, or an image with text beneath it. You must supply the images and text to use in the navigation bar entries.

Description of nav_bar_2.gif follows
Description of the illustration nav_bar_2.gif

Navigation bars are different from other shared components in that you do not need to reference them on a page-by-page basis. If your page template includes the #NAVIGATION_BAR# substitution string, the Application Express engine automatically includes any defined navigation bars when it renders the page.

How to Create a Navigation Bar Entry

Before adding a navigation bar, you must create entries for the navigation bar. To do so, access the Navigation Bar page from either the Page Definition or from the Shared Components page.

To create a navigation bar entry:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Under Shared Components, scroll down to Navigation Bar.

  3. Under Navigation Bar, click the Create icon.

    The Create Navigation Bar Entry Wizard appears. Note that each wizard page displays a series of blocks on the left, representing the sequence of steps. The highlighted block indicates the step you are performing.

  4. For Attributes, specify the appropriate information:

    1. Sequence - Specify the order of evaluation for this component.


      Tip:

      To review the existing entries, click the Existing Navigation Bar Entries link at the bottom of the page.

    2. Alt Tag Text - Enter ALT text for navigation icons that are images. If you do not specify an image name, then this text displays.

    3. Icon Image Name - Enter an image name. For naming conventions, click the item label (Icon Image Name). This opens item-level help with a list of supported prefixes and examples of image names.

    4. Image Height - Define the height of the image in pixels.

    5. Width - Define the width of the image in pixels.

    6. Text - For text-only entries, enter the entry text. For images, you can also enter additional text to display with the image. This attribute can be translated.

    7. Click Next.

  5. For Target, specify the target location.

    1. If the target location is a URL, specify the following:

      • Target is a - Select URL.

      • URL Target - Enter a URL. For example:

        http://www.yahoo.com
        
    2. If the target location is a page, specify the following:

      • Target is a - Select Page in this Application.

      • Page - Specify the target page number.

        You can also select reset pagination for this page. Selecting this option causes the page to return to the first set of data meeting a user's new query.

        You can also select Printer Friendly. Selecting this option displays the target page using the application's Printer Friendly template. Printer friendly templates optimize a page for printing. "Changing the Default Templates in a Theme" and "Optimizing a Page for Printing".

      • Request - Specify the request to be used.

      • Clear Cache - Specify the page numbers on which to clear cache.

    3. To set session state (that is, give a listed item a value):

      • Set these items - Enter a comma-delimited list of item names for which you would like to set session state.

      • With these values - Enter a comma-delimited list of values for the items your specified.

        You can specify static values or substitution syntax (for example, &APP_ITEM_NAME.). Note that item values passed to f?p= in the URL cannot contain a colon. Additionally, item values cannot contain commas unless you enclose the entire value in backslashes (for example, \1234,56\).

    4. Click Next.

  6. To set a condition for displaying the navigation bar entry, specify the appropriate conditional information and click Create.


Tip:

In order for a navigation bar to appear, your page template must include the #NAVIGATION_BAR# substitution string. See"Supported Page Template Substitution Strings".

Editing a Navigation Bar Entry

Once you create a navigation bar entry, you can edit it on the Navigation Bar Entries page.

To edit a navigation bar entry:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. On the Application home page, click Shared Components.

  4. Under Navigation, click Navigation Bar Entries.

    The Navigation Bar Entries page appears. You can change the appearance of the page by making a selection from the View list and clicking Go. Available options include:

    • Icons (the default) displays each navigation bar entry as a large icon. To edit a navigation bar entry, click the icon.

    • Details displays each navigation bar as a line in a report. To edit a navigation bar, click the appropriate sequence number.

  5. Select a navigation bar entry.

    The Edit Navigation Bar Entry page appears.

    The Edit Navigation Bar Entry is divided into the following sections: Sequence, Subscription, Image Attributes, Target, Conditions, Authorization, Configuration, and Comments.

    You can access these sections by scrolling down the page, or by clicking a navigation button at the top of the page. When you select a button at the top of the page, the selected section appears and all other sections are temporarily hidden. To view all sections of the page, click Show All.

  6. Edit the appropriate attributes.

  7. To learn more about a specific item on a page, click the item label.

    When Help is available, the item label changes to red when you pass your cursor over it and the cursor changes to an arrow and question mark. See "About Field-Level Help".

  8. Click Apply Changes.

Editing Multiple Navigation Bar Entries Simultaneously

To edit multiple navigation bar entries simultaneously:

  1. On the Workspace home page, click the Application Builder icon.

  2. Select an application.

  3. On the Application home page, click Shared Components.

  4. Under Navigation, click Navigation Bar Entries.

    The Navigation Bar Entries page appears.

  5. Click Grid Edit at the top of the page.

  6. Edit the appropriate attributes and click Apply Changes.

Using the Reorder Navigation Bar Entries Icon

You can quickly change the order of navigation bar entries by clicking the Reorder Navigation Bar Entries icon on the Page Definition. This icon resembles light green down and up arrows.

Description of reorder_navbar.gif follows
Description of the illustration reorder_navbar.gif

To change the order of the navigation bar entries using the Reorder Tabs icon:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Under Navigation Bar, click the Reorder Navigation Bar Entries icon.

    The Reorder Navigation Bar Entries page appears.

  3. To change the order in which the entries display on this page, click the up and down arrows in the far right column or edit the numbers.

  4. Click Apply Changes.

Accessing Navigation Bar Entry Reports

You can view the Navigation Bar Entry Subscription and Navigation Bar Entry History reports by clicking the appropriate tab at the top of the Navigation Bar Entries page.


Note:

The Subscription and History buttons only appear after you create a navigation bar.

Navigation Bar Entry Subscription Report

Click Subscription to access the Subscribed NavBars report. This report displays subscribed navigation bar entries in your application.

Navigation Bar Entry History

Click History to view the Navigation Bar History report. This report lists recent changes to navigation bars.

Controlling Navigation Using Branches

A branch is an instruction to link to a specific page, procedure, or URL after a given page is submitted. For example, you can branch from page 1 to page 2 after page 1 is submitted.

You create a branch by running the Create Branch Wizard and specifying the branch point and branch type.

To create a branch:

  1. Navigate to the appropriate Page Definition. See "Accessing a Page Definition".

  2. Under Branches in the Page Processing column, click the Create icon.

  3. For Point and Type, select a branch point:

    • On Submit: Before Computation - Occurs before computations, validations, or processing. Use this option for a Cancel button.

    • On Submit: Before Validation - Occurs after computations, but before validations or processing. Typically not used. If a validation fails, page processing stops, a rollback is issued, and the page displays the error. Because of this default behavior, you do not need to create branches to accommodate validations. However, you might want to branch based on the result of a computation (for example, to the previous branch point).

    • On Submit: Before Processing - Occurs after computations and validations, but before processing. Use this option to branch based on a validated session state, but before performing any page processing.

    • On Submit: After Processing - Occurs after computations, validations, and processing. This option branches to a URL or page after performing computations, validations, and processing. When using this option, remember to sequence your branches if you have multiple branches for a given branch point.

    • On Load: Before Header - Occurs before a page is rendered. This option displays another page, instead of the current page, or redirects the user to another URL or procedure.

  4. Select a branch type and click Next.

  5. For Target, specify the target location. The information that appears on the page depends on the branch type you selected:

    1. If the target location is a URL, specify the following:

      • Target is a - Select URL.

      • URL Target - Enter a URL. For example:

        http://www.yahoo.com
        
    2. If the target location is a page, specify the following:

      • Target is a - Select Page in this Application.

      • Page - Specify the target page number.

        You can also select reset pagination for this page. Selecting this option causes the page to return to the first set of data meeting a user's query.

        You can also select include process success message. Selecting this option displays a message when a user submits a page and a branch is taken to another page. If you do not select this option, the message does not display because it is part of submitting the page, not displaying the next one.

      • Request - Specify the request to be used.

      • Clear Cache - Specify the page numbers on which to clear cache. Separate multiple entries with a comma.

    3. To set session state (that is, give a listed item a value):

      • Set these items - Enter a comma-delimited list of item names for which you would like to set session state.

      • With these values - Enter a comma-delimited list of values for the items your specified.

        You can specify static values or substitution syntax (for example, &APP_ITEM_NAME.). Note that item values passed to f?p= in the URL cannot contain a colon. Additionally, item values cannot contain commas unless you enclose the entire value in backslashes (for example, \1234,56\).

    4. Select save state before branching to clear cache and save session state before performing the redirect. See "About Saving State Before Branching".

    5. Click Next.

  6. Follow the on-screen instructions.

Creating a Branch on a Page with a Component that Submits

If you have a page with a component that submits, such as a Go button or select list with submit, note that you must create a branch that links back to that page. For example, suppose you have a page with a select list and a submit button. For processing to occur properly, you need to create a branch on the page that links back to the page.

About Saving State Before Branching

Consider selecting save state before branching if your branch is redirecting to a URL or returning a URL and passes clear cache directives or item names and item values in the resulting f?p URL. By default, this information is passed after the branch is taken, displaying any passed information in the URL.

Selecting save state before branching sets potentially sensitive information in session state before the branch redirect. This option improves application security by making URLs less susceptible to tampering and by exposing fewer item names, values, and indications of program logic.

Note that when you select save state before branching, the redirected URL no longer include clear cache or item name and item values. You can still view this information, by running your application in Debug mode. See "Accessing Debug Mode".

PK0NV`G`PK6(AOEBPS/what_new.htm{' What's New in Oracle Application Express

What's New in Oracle Application Express

This section describes new features available in Oracle Application Express Release 3.2 and points you to additional information.

This preface contains these topics:

Oracle Application Express Release 3.2 New Features

New features in Oracle Application Express, release 3.2 include:

  • Forms Conversion.

    Forms Conversion captures the design of existing Oracle Forms and automatically converts some components, primarily the user interface. Other components, such as complex triggers, must be manually converted post-generation..

    Moving to native HTML is not seamless and changes to the user interface are required to deliver optimal Web interactivity. This tool enables you to take advantage of Oracle Application Express dynamic HTML capabilities, including interactive reports. For further information see Oracle Application Express Migration Guide.

  • Improved Security.

    Security best practices for developing Web applications specify minimizing the exposed footprint, protecting the integrity of the session state, and ensuring that data being transmitted between the browser and the server cannot be compromised. To align with these best practices, Oracle Application Express, release 3.2 has improved security measures making it more declarative and powerful. Some key enhancements include the ability to:

    • Declaratively encrypt session state

    • Declaratively specify session timeouts for maximum idle time and maximum session duration

    • Create new password item types that enable users to enter passwords without ever saving them to session state.

    Other features designed to minimize the exposed footprint include reducing the privileges required by the Oracle Application Express database account, disabling the Database Monitor feature by default, and providing administrators the ability to require HTTPS for the administration and development suite applications. In addition, administrators can now restrict new or updated account passwords to those that have not previously been used for a specified duration and, for new installations, require that service administrator account passwords conform to a strong password policy.

    Oracle Application Express documentation has also been improved to provide you with more resources to build secure Web applications. These new features complement existing Oracle Application Express security features including flexible authentication, authorization schemes, URL tampering protection, and so on. For further information, see "Managing Application Security".

Highlights of Oracle Application Express Release 3.1

New features in Oracle Application Express, release 3.1 include:

  • Interactive Reporting Region.

    Interactive Reporting Regions enable end users to customize reports. Users can alter the layout of report data by choosing the columns they are interested in, applying filters, highlighting, and sorting. They can also define breaks, aggregations, different charts, and their own computations. Users can create multiple variations of the report and save them as named reports and download to various file formats including comma-delimited file (CSV) format, Microsoft Excel (XLS) format, Adobe Portable Document Format (PDF), and Microsoft Word Rich Text Format (RTF). See "Editing Interactive Reports" .

    For step-by-step instructions on building an example application that uses interactive reports, see "How to Build and Deploy an Issue Tracking Application" in Oracle Application Express Advanced Tutorials.

  • Optional Runtime-Only Installation.

    For testing and production instances, Oracle Application Express, release 3.1 supports the ability to install just a runtime version of Oracle Application Express. This minimizes the installed footprint and privileges. Scripts are also provided to remove or add the developer interface from an existing instance. This new feature improves application security since in a runtime instance developers cannot advertently update a production application. See "Managing a Runtime Environment" in Oracle Application Express Administration Guide.

  • Custom Themes.

    In addition to the default themes provided with Oracle Application Express, you can create your own customized themes. customized themes enable you to design a very specific look and feel to meet your corporate requirements and then publish this as a theme for all other applications to use. Two new standard themes have also been added. See "Managing Themes" and "Managing Themes for an Oracle Application Express Instance" in Oracle Application Express Administration Guide.

  • Documented JavaScript libraries.

    Oracle Application Express, release 3.1 includes the ability to suppress standard JavaScript and CSS files. All included JavaScript files are now compressed to improve page load time. This release also includes an improved framework for advanced Oracle Application Express developers to build and leverage custom Web 2.0 capabilities, improving performance and enabling developers to create more dynamic application widgets. See "JavaScript APIs" in Oracle Application Express API Reference.

  • Improved Security.

    This release includes a new Hidden and Protected item type. This item type greatly simplifies the developer's task of protecting item session state. This together with other minor improvements makes the default security functionality more robust within Oracle Application Express. See Table 6-2, "Available Item Types".

  • Enhanced Report Printing.

    Release 3.1 now includes XML as a download format and supports multiple SQL statements. See "Printing Report Regions".

  • Declarative BLOB Support.

    Declarative BLOB support enables files to be declaratively uploaded in forms, and downloaded or displayed using reports. BLOB display and download can also be authored procedurally using PL/SQL. See "About BLOB Support in Forms and Reports".

  • Application Builder refinements introduced with this release include:

    • The ability to define an Application Date Format

    • The ability to add a search region when creating a report

    • You can now include attachments with emails sent using the Application Express mail APIs

    • The previous 32K limit on data when creating an application on a spreadsheet has been removed

    • You can now create master detail reports in the Create Application Wizard

    • Master detail report implementation has been improved and refined

    • Support for declarative Media Type enables generation of pages of type other than 'text/html'

  • Simplified URLs Used During Branching.

    In this release, you can perform the clear cache and session state setting actions immediately before the branch in the same database session used to process the page submission. This results in less information being shown in the application URLs. This enhancement improves security by making URLs less susceptible to tampering and by exposing fewer item names, values, and indications of program logic. It also reduces the potential of URL encoding and character set problems.

    To use this feature, select the save state before branching check box on the Edit Branch page or when creating a new branch using the Create Branch wizard. See "Controlling Navigation Using Branches".

PK+'Lπ'{'PK 6(Aoa,mimetypePK6(AW|\W:iTunesMetadata.plistPK6(AYuMETA-INF/container.xmlPK6(A[pTOOEBPS/cover.htmPK6(ANqqOEBPS/bldr_pgs.htmPK6(A[Vc^zOEBPS/title.htmPK6(A)(OEBPS/start.htmPK6(As«kOEBPS/demo.htmPK6(A_ uOEBPS/deploy.htmPK6(AQuMMOEBPS/bldr.htmPK6(Ažd(IDDDOEBPS/preface.htmPK6(AY#IOEBPS/bldapp.htmPK6(Aw_\| $I OEBPS/sec.htmPK6(A^Gc%t t: OEBPS/index.htmPK6(A͑xwQOEBPS/condition.htmPK6(A-&y77'OEBPS/img/query_finder.gifPK6(Ao1,_OEBPS/img/bldr_hm_nav.gifPK6(Af//FoOEBPS/img/arch.gifPK6(Aaq(Y OEBPS/img/shared_comp_icon_2.gifPK6(A?P-W!R!OEBPS/img/ir_srch_col.gifPK6(ApV$$OEBPS/img/item_finder.gifPK6(A_Go j OEBPS/img/reorder_navbar.gifPK6(A/!U!P!OEBPS/img/ir_chart.gifPK6(A܍>:53OEBPS/img/pg_def_top.gifPK6(A%_ql3OEBPS/img/ir_filter.gifPK6(AiFOEBPS/img/condition.gifPK6(A?wV\OEBPS/img/int_rprt_att.gifPK6(Aa##55pOEBPS/img/ir_highlight_rpt.gifPK6(A aNAA'OEBPS/img/bldr_hm_top.gifPK6(AUXYT5OEBPS/img/breadcrum.gifPK6(Au1d _ OEBPS/img/find_icon.gifPK6(AC\XBB|OEBPS/img/image_finder.gifPK6(A{K;OEBPS/img/arch_epg.gifPK6(AKs,n,QOEBPS/img/lov_page.gifPK6(A)[Ot7o7e~OEBPS/img/rpt_classic.gifPK6(A** OEBPS/img/ir_select_col_rpt.gifPK6(A[H QOEBPS/img/lock_ico.gifPK6(A"\]a)\)~OEBPS/img/access_control_1.gifPK6(Az*+,OEBPS/img/d_toolbar.gifPK6(A[o/OEBPS/img/edit_all_item.gifPK6(A%fR4M4AOEBPS/img/nav_bar_2.gifPK6(A]yj-(UvOEBPS/img/ir_ctrl_break.gifPK6(AD@;˕OEBPS/img/sup_object_sum.gifPK6(Ab]UOEBPS/img/reorder_buttons.gifPK6(A`OEBPS/img/bc_menu.gifPK6(AS2H C [OEBPS/img/bldr_task_list.gifPK6(A1AeOEBPS/img/pg_def_items.gifPK6(A{vOEBPS/img/demo_obrws_srch.gifPK6(Am1m((OEBPS/img/plsql_finder.gifPK6(Aw  lg OEBPS/img/drag_drap_ico.gifPK6(A  .OEBPS/img/app_attribute_tabs.gifPK6(A?nEOEBPS/img/pg_def_copy_ico.gifPK6(AÚ##WLOEBPS/img/pages_finder.gifPK6(At1 :pOEBPS/img/appbldr_task_list.gifPK6(A8M{zOEBPS/img/page_processing.gifPK6(A_|wtOEBPS/img/app_bldr_home.gifPK6(Aұ9OEBPS/img/access_control_2.gifPK6(A6OEBPS/img/edit_all_button.gifPK6(AB^OEBPS/img/groups.gifPK6(AJ COEBPS/img/pg_def_edit_pg_att.gifPK6(A hOEBPS/img/new_menu.gifPK6(Ah-3OEBPS/img/download.gifPK6(AJ u<OEBPS/img/pg_def_editall_ico.gifPK6(A!G ddCOEBPS/img/help_window.gifPK6(A8sHHOEBPS/img/sampl_app_myorder.gifPK6(AȢ""OEBPS/img/menu.gifPK6(A/E!@!:OEBPS/img/ir_select_col.gifPK6(A!qH C 5OEBPS/img/search_bar.gifPK6(A#Ee4`4%V@OEBPS/img/ir_edit_srch_col_filter.gifPK6(AZ+l9 4 uOEBPS/img/hlp_item.gifPK6(AgjbLGOEBPS/img/d_toolbar_149.gifPK6(AŰ OEBPS/img/sec_attribute_tabs.gifPK6(ARM44fOEBPS/img/ir_compute.gifPK6(AoN`**yOEBPS/img/bldr_hm_pglist.gifPK6(AYH OEBPS/img/products_top.gifPK6(A\/k  OEBPS/img/ir_search_bar.gifPK6(AHI( 3OEBPS/img/pg_def_icons.gifPK6(AgzaaOEBPS/img/orders.gifPK6(A 3.OEBPS/img/run_ico_sm.gifPK6(AGA eOEBPS/img/pg_def_regions.gifPK6(A@fOEBPS/img/run_ico_green.gifPK6(AjX&S&OEBPS/img/css_finder.gifPK6(A%%ZUx5s5OEBPS/img/table_finder.gifPK6(Aϟ'B=!zOEBPS/img/breadcrum_creage_pg.gifPK6(AH`gjded OEBPS/img/ir_action_menu.gifPK6(AoxszOEBPS/img/find_icon_2.gifPK6(AQ((~{OEBPS/img/ir_sort.gifPK6(Av=)Yg#b#OEBPS/img/int_rprt_nav.gifPK6(AHL#^OEBPS/img/rprt_edit.gifPK6(An OEBPS/img/pg_att_nav.gifPK6(A}OEBPS/img/app_group.gifPK6(AFҲ  OEBPS/img/bldr_hm_ico.gifPK6(AK|PK{OEBPS/img/pg_def_buttons.gifPK6(AYL/OEBPS/img/edit_icon.gifPK6(AƑ"1OEBPS/img/hlp_ico.gifPK6(AϐRR%@OEBPS/img/sampl_app_plain.gifPK6(A;94OEBPS/img/shared_components.gifPK6(A*:QeG`GOEBPS/img/customer.gifPK6(Ah9DOEBPS/img/pg_def_tabs.gifPK6(AECog/b/YOEBPS/img/bldr_hm_type_list.gifPK6(Ab 2OEBPS/img/reorder_tabs.gifPK6(AX]E?EOEBPS/img/dev_comment_icon.gifPK6(A<"D_..pFOEBPS/img/ir_aggreg_rpt.gifPK6(A2% uOEBPS/img/list.gifPK6(A5NRIRzOEBPS/img/rpt_att.gifPK6(A{ OEBPS/img/shared_comp_icon.gifPK6(A!+$rmOEBPS/img/reorder_items.gifPK6(AoBAOEBPS/img/page_rendering.gifPK6(AAmOEBPS/img/pg_def_create_ico.gifPK6(AD!?!h OEBPS/img/pg_def_view_list.gifPK6(A,n%* *.OEBPS/img/ir_highlight.gifPK6(A8;upeYOEBPS/img/ir_aggreg.gifPK6(Ap?U nOEBPS/img/reorder_regions.gifPK6(ALE==|OEBPS/img/rpt_ir.gifPK6(Afo3.BOEBPS/img/comment_ico.gifPK6(A7SRROEBPS/img/products.gifPK6(A\'$$OEBPS/img/demo_data.gifPK6(A v??BOEBPS/img/int_rprt_col.gifPK6(A>:CCOEBPS/img/drag_drap_pg.gifPK6(Aoab]$OEBPS/img_text/appbldr_task_list.htmPK6(A 'c^$iOEBPS/img_text/shared_components.htmPK6(AjtTvhc%OEBPS/img_text/sec_attribute_tabs.htmPK6(A4/OEBPS/img_text/edit_icon.htmPK6(A<0(B=#WOEBPS/img_text/ir_highlight_rpt.htmPK6(AC>$OEBPS/img_text/sampl_app_myorder.htmPK6(AKc!OEBPS/img_text/bldr_hm_pglist.htmPK6(AOGB^OEBPS/img_text/drag_drap_pg.htmPK6(A,$"OEBPS/img_text/demo_obrws_srch.htmPK6(A!m>>9fOEBPS/img_text/lov_page.htmPK6(Aj0;6!OEBPS/img_text/sup_object_sum.htmPK6(AtLwOEBPS/img_text/rpt_ir.htmPK6(AEOEBPS/img_text/demo_data.htmPK6(A8OEBPS/img_text/rpt_att.htmPK6(AVV"?OEBPS/img_text/pg_def_copy_ico.htmPK6(Agi$&OEBPS/img_text/pg_def_create_ico.htmPK6(AH7vq%OEBPS/img_text/pg_def_editall_ico.htmPK6(APje OEBPS/img_text/ir_search_bar.htmPK6(AcBG OEBPS/img_text/app_bldr_home.htmPK6(AvrORM#OEBPS/img_text/pg_def_view_list.htmPK6(A)-mh}OEBPS/img_text/run_ico_sm.htmPK6(A:a͊kf 5OEBPS/img_text/edit_all_item.htmPK6(AАNOEBPS/img_text/condition.htmPK6(Az8]X!VROEBPS/img_text/page_rendering.htmPK6(A'A<VOEBPS/img_text/query_finder.htmPK6(A1~TO*YOEBPS/img_text/ir_edit_srch_col_filter.htmPK6(AAJZU%<]OEBPS/img_text/pg_def_edit_pg_att.htmPK6(A$ `OEBPS/img_text/reorder_items.htmPK6(AGmdOEBPS/img_text/list.htmPK6(A72hOEBPS/img_text/bldr_hm_ico.htmPK6(A4/ElOEBPS/img_text/ir_sort.htmPK6(A5oOEBPS/img_text/bc_menu.htmPK6(AHǯxtOEBPS/img_text/rpt_classic.htmPK6(A@heE@#_xOEBPS/img_text/access_control_2.htmPK6(A>9{OEBPS/img_text/css_finder.htmPK6(AWC> ~OEBPS/img_text/ir_ctrl_break.htmPK6(A)G<[VOEBPS/img_text/int_rprt_nav.htmPK6(A?ՕOEBPS/img_text/find_icon.htmPK6(A[!RPKيOEBPS/img_text/d_toolbar.htmPK6(A]MHsOEBPS/img_text/groups.htmPK6(A ^'$OEBPS/img_text/bldr_hm_type_list.htmPK6(AþTOEBPS/img_text/arch_epg.htmPK6(AY%$OEBPS/img_text/reorder_tabs.htmPK6(At.OEBPS/img_text/hlp_item.htmPK6(A69(kf!aOEBPS/img_text/ir_action_menu.htmPK6(A&OEBPS/img_text/breadcrum_creage_pg.htmPK6(A K-QJE%OEBPS/img_text/shared_comp_icon_2.htmPK6(A9OEBPS/img_text/ir_highlight.htmPK6(AwbOEBPS/img_text/products.htmPK6(AQQLOEBPS/img_text/pg_def_top.htmPK6(A]b{OEBPS/img_text/int_rprt_att.htmPK6(AҤV"OEBPS/img_text/reorder_buttons.htmPK6(AR!OEBPS/img_text/reorder_navbar.htmPK6(AȹC_Z" OEBPS/img_text/page_processing.htmPK6(A<50 OEBPS/img_text/run_ico_green.htmPK6(Ams83OEBPS/img_text/ir_filter.htmPK6(A?|OEBPS/img_text/hlp_ico.htmPK6(AU(IWR"bOEBPS/img_text/sampl_app_plain.htmPK6(Aq.GVQ! OEBPS/img_text/pg_def_buttons.htmPK6(A[/OJ#OEBPS/img_text/pg_def_tabs.htmPK6(Axe`I'OEBPS/img_text/rprt_edit.htmPK6(A'*OEBPS/img_text/customer.htmPK6(Af\=W0OEBPS/img_text/item_finder.htmPK6(AV9484OEBPS/img_text/plsql_finder.htmPK6(A&M;67OEBPS/img_text/ir_aggreg.htmPK6(A#h61C;OEBPS/img_text/ir_chart.htmPK6(A4WR!>OEBPS/img_text/bldr_task_list.htmPK6(AQLhBOEBPS/img_text/pg_def_items.htmPK6(A%7rFOEBPS/img_text/pages_finder.htmPK6(ADFf_Z%!JOEBPS/img_text/app_attribute_tabs.htmPK6(ALMHMOEBPS/img_text/download.htmPK6(A}T7HC#iQOEBPS/img_text/dev_comment_icon.htmPK6(Ak:c;6UOEBPS/img_text/image_finder.htmPK6(A9* XOEBPS/ui.htmPK6(A`qOEBPS/concept.htmPK6(AGjjK OEBPS/app_comp.htmPK6(A#@"%OEBPS/themes.htmPK6(A"z ??vY(OEBPS/debug.htmPK6(A]Y\]X Ә(OEBPS/toc.ncxPK6(A=(HPPk(OEBPS/ui_default.htmPK6(AA$t,('(F(OEBPS/priv_public.htmPK6(AFEq;1#)OEBPS/content.opfPK6(A_ /)OEBPS/dcommon/prodbig.gifPK6(AY@ )OEBPS/dcommon/doclib.gifPK6(ARݶrrٺ)OEBPS/dcommon/oracle-logo.jpgPK6(A-*OEBPS/dcommon/contbig.gifPK6(A3*OEBPS/dcommon/darbbook.cssPK6(AMά""!4*OEBPS/dcommon/O_signature_clr.JPGPK6(APz =W*OEBPS/dcommon/feedbck2.gifPK6(A-X*OEBPS/dcommon/feedback.gifPK6(Aː5_*OEBPS/dcommon/booklist.gifPK6(AN61 a*OEBPS/dcommon/cpyr.htmPK6(A!:3.s*OEBPS/dcommon/masterix.gifPK6(AeӺ1,u*OEBPS/dcommon/doccd.cssPK6(A7 xw*OEBPS/dcommon/larrow.gifPK6(A#y*OEBPS/dcommon/indxicon.gifPK6(AS'" |*OEBPS/dcommon/leftnav.gifPK6(Ahu,x}*OEBPS/dcommon/uarrow.gifPK6(Al-OJ*OEBPS/dcommon/oracle.gifPK6(A((*OEBPS/dcommon/index.gifPK6(AGC n*OEBPS/dcommon/bookbig.gifPK6(AJV^*OEBPS/dcommon/rarrow.gifPK6(A枰pk*OEBPS/dcommon/mix.gifPK6(Ao"nR M \*OEBPS/dcommon/doccd_epub.jsPK6(Av I *OEBPS/dcommon/toc.gifPK6(A r~$D*OEBPS/dcommon/topnav.gifPK6(A1FA*OEBPS/dcommon/prodicon.gifPK6(A3( # <*OEBPS/dcommon/bp_layout.cssPK6(Ax[?:*OEBPS/dcommon/bookicon.gifPK6(Ap*c^4*OEBPS/dcommon/conticon.gifPK6(Aʍ*OEBPS/dcommon/blafdoc.cssPK6(A+&*OEBPS/dcommon/rightnav.gifPK6(Aje88Q*OEBPS/dcommon/oracle-small.JPGPK6(Aއ{&!+OEBPS/dcommon/help.gifPK6(At{+OEBPS/advnc.htmPK6(AX>| -OEBPS/global.htmPK6(A(