Вы находитесь на странице: 1из 316

Oracle iDS Forms:

Build Internet Applications II

Volume 1 • Instructor Guide

.......................................................................................

40034GC11
Production 1.1
June 2001
D33131
Author Copyright  Oracle Corporation, 2001. All rights reserved.

This documentation contains proprietary information of Oracle Corporation. It is


Ian Purvis
provided under a license agreement containing restrictions on use and disclosure
and is also protected by copyright law. Reverse engineering of the software is
prohibited. If this documentation is delivered to a U.S. Government Agency of the
Department of Defense, then it is delivered with Restricted Rights and the
Technical following legend is applicable:
Contributors and
Reviewers Restricted Rights Legend
Use, duplication or disclosure by the Government is subject to restrictions for
Cem Ayberkin commercial computer software and shall be deemed to be Restricted Rights
software under Federal law, as set forth in subparagraph (c) (1) (ii) of DFARS
Gunnar Bohrs
252.227-7013, Rights in Technical Data and Computer Software (October 1988).
Brian Boxx
This material or any portion of it may not be copied in any form or by any means
Libor Danek without the express prior written permission of the Worldwide Education Services
Laurent Dereac group of Oracle Corporation. Any other copying is a violation of copyright law and
Brain Fry may result in civil and/or criminal penalties.

Pam Gamer If this documentation is delivered to a U.S. Government Agency not within the
Department of Defense, then it is delivered with “Restricted Rights,” as defined in
Pascal Gibert
FAR 52.227-14, Rights in Data-General, including Alternate III (June 1987).
Thierry Guibert
The information in this document is subject to change without notice. If you find
Ellen Gravina any problems in the documentation, please report them in writing to Education
Norris Gray Products, Oracle Corporation, 500 Oracle Parkway, Box 659806, Redwood
Anthony Hargreaves Shores, CA 94065. Oracle Corporation does not warrant that this document is
error-free.
Ali Hiemstra
Oracle Developer, Oracle Server, and PL/SQL are trademarks or registered
Barry Hiern
trademarks of Oracle Corporation.
Ursula Hovy
All other products or company names are used for identification purposes only,
Sarah Jones and may be trademarks of their respective owners.
Jan Keuben
Aija Lehtonen
Regis Louis
Kenji Makita
Jayne Marlow
Sergei Pechersky
Milos Randak
Jonas Reborg
Bryan Roberts
Candace Stover
Hiroyuki Sugiyama
Laura Tejero
Jack Walsh

Publisher
Shane Mattimoe
Contents
.....................................................................................................................................................

Contents
Preface
Profile xv
Related Publications xvi
Typographic Conventions xvii

Introduction
Introduction I-2
Course Content I-3

Lesson 1: Creating a Menu Module


Introduction 1-3
Components of the Menu Module 1-5
The Default Menu 1-7
The Menu Editor 1-9
Creating a Menu Module 1-11
Module Properties 1-13
Menu Properties 1-15
Menu Item Properties 1-17
Menu Item Types 1-19
Menu Item Command Types 1-21
Implementing Menu Toolbars 1-23
Storing the Menu Module 1-25
Attaching the Menu Module 1-27
Pop-up Menus 1-29
Summary 1-31
Practice Overview: Lesson 1 1-33
Practice 1 1-34

Lesson 2: Managing Menu Modules


Introduction 2-3
Using PL/SQL in Menu Item Code 2-5
Useful Built-in Menu Subprograms 2-7

.....................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II iii
Contents
.....................................................................................................................................................

Showing and Hiding the Current Menu 2-9


Managing Menu Security 2-11
Defining Security Roles 2-13
Assigning Access to Menu Items 2-15
Summary 2-17
Practice Overview: Lesson 2 2-19
Practice 2 2-20

Lesson 3: Programming Function Keys


Introduction 3-3
Key Triggers 3-5
Defining Key Triggers 3-7
Characteristics of Key Triggers 3-9
Classification of Key Triggers 3-11
Using Key Triggers 3-15
Association with Other Interface Controls 3-17
Summary 3-19
Practice Overview: Lesson 3 3-21
Practice 3 3-22

Lesson 4: Responding to Mouse Events


Introduction 4-3
What Are Mouse Events? 4-5
Responding to Mouse Movement 4-7
Responding to Mouse Button Actions 4-11
Summary 4-15
Practice Overview: Lesson 4 4-17
Practice 4 4-18

Lesson 5: Controlling Windows and Canvases Programmatically


Introduction 5-3
Using Window-Interaction Triggers 5-5
Built-ins for Manipulating Windows 5-7
Built-ins for Manipulating Canvases 5-9

.....................................................................................................................................................
iv Oracle iDS Forms: Build Internet Applications II
Contents
.....................................................................................................................................................

Working with Tab-Style Canvases 5-11


Windows and Blocks 5-15
Manipulating Window Properties Programmatically 5-17
Closing Windows 5-19
Manipulating Windows in Web-Deployed Forms 5-21
Sizing Windows for Web-Deployed Forms 5-23
Display Large Data Blocks in a Window 5-25
Managing Images for Web-Deployed Forms 5-27
Summary 5-29
Practice Overview: Lesson 5 5-31
Practice 5 5-32

Lesson 6: Defining Data Sources


Introduction 6-3
Data Source Types 6-5
Basing a Data Block on a FROM Clause Query 6-7
Basing a Data Block on a Stored Procedure 6-9
Example of a Query Using a REF Cursor Procedure 6-11
Example of Query Using a Table of Records Procedure 6-13
Example of DML Using a Stored Procedure 6-15
Deciding Whether to Use a REF Cursor or a Table
of Records 6-17
Data Block Wizard 6-19
Data Block Properties 6-21
Data Source Guidelines 6-23
Summary 6-27
Practice Overview: Lesson 6 6-29
Practice 6 6-30

Lesson 7: Working with Oracle8i Objects in Form Builder


Introduction 7-3
What Are Object Types? 7-5
Review of Objects 7-7
Object REFs 7-9

.....................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II v
Contents
.....................................................................................................................................................

Supported Oracle8i Features 7-11


How Oracle Forms Developer Treats Objects 7-13
Object Type Displays 7-15
Creating Data Blocks Based on Oracle8i Objects 7-17
Selecting Object Table Columns 7-19
Selecting Object Column Attributes 7-21
Blocks with REF Lookups 7-23
The REF Column Value 7-25
LOVs for REFs 7-27
Summary 7-29
Practice Overview: Lesson 7 7-31
Practice 7 7-32

Lesson 8: Controlling Data Block Relationships


Introduction 8-3
Creating a Relation 8-5
Block Coordination 8-7
Coordinate Blocks Using REFs 8-9
Characteristics of Relation-Handling Triggers 8-11
Principles of Relation-Handling Code 8-13
Obtaining Relation-Handling Information 8-15
Implementing a Coordination-Type Toggle 8-17
Forcing a Commit Per Master 8-19
Summary 8-21
Practice Overview: Lesson 8 8-23
Practice 8 8-24

Lesson 9: Building Multiple Form Applications


Introduction 9-3
OPEN_FORM to Invoke Additional Forms 9-5
Closing Forms 9-7
Navigating Between Forms 9-9
Transaction Processing for Opened Forms 9-11
CALL_FORM to Invoke Additional Forms 9-13

.....................................................................................................................................................
vi Oracle iDS Forms: Build Internet Applications II
Contents
.....................................................................................................................................................

Transaction Processing for Called Forms 9-15


NEW_FORM to Invoke Additional Forms 9-19
Controlling Open Forms and Called Forms Together 9-21
Different Ways of Invoking Forms 9-23
Using Form Parameters 9-25
Parameter Lists 9-29
Creating and Manipulating Parameter Lists 9-31
Passing Data Between Forms 9-33
Summary 9-35
Practice Overview: Lesson 9 9-37
Practice 9 9-38

Lesson 10: Working with Record Groups


Introduction 10-3
Record Groups 10-5
Using Record Groups 10-7
Defining Record Groups at Design Time 10-9
Built-in Functions for Controlling Record Groups 10-11
Defining Query Record Groups Programmatically 10-17
Defining Nonquery Record Groups Programmatically 10-19
Manipulating Record Group Rows 10-21
Manipulating Selected Record Group Rows 10-23
Defining Global Record Groups 10-25
Manipulating List Items Programmatically 10-27
Implementing Dynamic List Items 10-29
Adding Values to Combo Boxes 10-31
Summary 10-33
Practice Overview: Lesson 10 10-35
Practice 10 10-36

Lesson 11: Using Reusable Components


Introduction 11-3
Reusable Components 11-5
Reusable Components List 11-7

.....................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II vii
Contents
.....................................................................................................................................................

The Calendar Class 11-11


Calendar Object Group Content 11-13
Built-in for Manipulating the Calendar 11-15
Summary 11-17
Practice Overview: Lesson 11 11-19
Practice 11 11-20

Lesson 12: Using Java with Web-Deployed Forms


Introduction 12-3
Java and Oracle Forms Developer 12-5
Java in Web-Deployed Forms 12-7
The Forms Applet 12-9
Defining Fonts for Web-Deployed Forms 12-11
Pluggable Java Components 12-13
What Is a Bean Area? 12-17
Hosting a JavaBean 12-19
How a JavaBean Communicates 12-21
Communicating with the JavaBean 12-23
Exploiting Oracle8i Features 12-25
How to Create JavaBeans 12-27
The Java Importer 12-29
The Java Importer Tool 12-31
Summary 12-33
Practice Overview: Lesson 12 12-35
Practice 12 12-36

Lesson 13: Using Server Features in Form Builder


Introduction 13-3
Using Oracle Database Server Functionality in Forms 13-5
Dealing with PL/SQL Code 13-7
PL/SQL8 Support 13-9
PL/SQL8 Scalar Data Types 13-11
Unsupported Oracle Forms Developer PL/SQL8 Features 13-13
Handling Errors Raised by the Oracle Database Server 13-15

.....................................................................................................................................................
viii Oracle iDS Forms: Build Internet Applications II
Contents
.....................................................................................................................................................

Performing DDL with FORMS_DDL 13-19


Using FORMS_DDL 13-21
Summary 13-23
Practice Overview: Lesson 13 13-25
Practice 13 13-26

Lesson 14: Applying Timers


Introduction 14-3
Timers 14-5
Handling Timer Expiration 14-7
Creating a Timer 14-9
Modifying a Timer 14-11
Deleting a Timer 14-13
Summary 14-15
Practice Overview: Lesson 14 14-17
Practice 14 14-18

Lesson 15: Including Charts and Reports


Introduction 15-3
Including Charts by Using the Chart Wizard 15-5
Chart Item Properties 15-11
Reporting Within Form Builder 15-13
Report Object Properties 15-15
Working with Reports 15-17
Summary 15-23
Practice Overview: Lesson 15 15-25
Practice 15 15-26

Appendix A: Practice Solutions


Practice 1 Solutions A-2
Practice 2 Solutions A-6
Practice 3 Solutions A-9
Practice 4 Solutions A-11
Practice 5 Solutions A-12

.....................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II ix
Contents
.....................................................................................................................................................

Practice 6 Solutions A-15


Practice 7 Solutions A-16
Practice 8 Solutions A-18
Practice 9 Solutions A-21
Practice 10 Solutions A-24
Practice 11 Solutions A-27
Practice 12 Solutions A-30
Practice 13 Solutions A-33
Practice 14 Solutions A-35
Practice 15 Solutions A-37

Appendix B: Table Descriptions and Data


Summit Sporting Goods Database Diagram B-2
S_CUSTOMER Description B-3
S_CUSTOMER Data B-4
S_DEPT Description and Data B-8
S_EMP Description B-9
S_EMP Data B-10
S_ITEM Description B-13
S_ITEM Data B-14
S_ORD Description and Data B-16
S_PRODUCT Description B-17
S_PRODUCT Data B-18
S_REGION Description and Data B-22
S_TITLE Description and Data B-23
Oracle8i Objects: Types, Tables B-24

Appendix C: Mouse Movement Events


Introduction C-2
Drag and Drop C-4
Summary C-6

Appendix D: Introduction to Oracle8i Object Features


Introduction D-3

.....................................................................................................................................................
x Oracle iDS Forms: Build Internet Applications II
Contents
.....................................................................................................................................................

New Oracle8i Data Types D-5


Object Types D-7
Creating Oracle8i Objects D-11
Object Columns D-13
Object Views D-15
INSTEAD-OF Triggers D-17
Referencing Objects D-19
Displaying Oracle8i Objects in the Object Navigator D-21
Summary D-29

Appendix E: Menu Run-Time Parameters


Introduction E-3
Substitution Parameters E-5
Defining a User-Named Substitution Parameter E-7
Substitution Parameter Built-ins E-9
Validating a Substitution Parameter Value E-11
Summary E-13

Appendix F: Handling Server-Side Errors


Introduction F-3
Obtaining the Cause of Declarative-Constraint Violations F-5
Customizing Oracle Server Error Messages F-7
Example Procedure for Handling Oracle Server Errors F-9
Summary F-13

Appendix G: EMP_PKG Package


Package Specification G-2
Package Body G-4

Appendix H: Working with ActiveX Controls


Introduction H-3
What Are VBX, OCX, and ActiveX Controls? H-5
Comparison of VBX, OCX, and ActiveX Controls H-7
ActiveX in Form Builder H-9
Implementing an ActiveX Control H-11

.....................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II xi
Contents
.....................................................................................................................................................

Inserting an ActiveX Control in an ActiveX Control Item H-13


Importing ActiveX Control Methods and Events Packages H-15
Setting and Getting ActiveX Control Properties H-17
Invoking ActiveX Control Methods H-21
Responding to ActiveX Control Events H-23
Handling Exceptions H-25
Registering an ActiveX Control H-27
Summary H-29

Appendix I: Using Oracle Server Roles at Run Time


Using Oracle Server Roles at Run Time I-3
Procedures for Managing Roles I-7

.....................................................................................................................................................
xii Oracle iDS Forms: Build Internet Applications II
Preface

.................................
Preface
.....................................................................................................................................................

Instructor Note
General course information for instructors:

PowerPoint Slides The slide show provides many builds to facilitate your
explanation. Of course, you can modify these builds if you prefer, depending
upon your familiarity with PowerPoint.
All slides include a small arrow at the bottom of the screen that is displayed
on the final build, so that you know when one slide finishes and the next
slide begins. On the last slide of a lesson the arrow points to the left instead
of the right.
If you modify a build, make sure that this arrow is the last object in the build
order.

Demonstrations A set of demonstrations is provided to help you with


your explanations. If there is more than one Web deployed demo form
module within a lesson, you can use the appropriate lesson Webmenu form
module to launch your demos.

Practice Sessions Students might want to view the form that they are
asked to produce in each question. Solution files of all forms are available in
the SOLNS directory.

.....................................................................................................................................................
xiv Oracle iDS Forms: Build Internet Applications II
Profile
.....................................................................................................................................................

Profile
Before You Begin This Course
Before you begin this course, you should have the following qualifications:
• Thorough knowledge of:
- Creating simple applications with Oracle Forms Developer Form
Builder
- Creating SQL query statements
• Working experience of:
- Creating PL/SQL constructs, including conditional statements,
procedures, and functions
- Creating PL/SQL stored (server) procedures and functions
• Knowledge of using a graphical user interface (GUI)
• Knowledge of using a Web browser, and downloading HTML pages
with a Uniform Resource Locator (URL)

Prerequisites
The following instructor-led training (ILT) course: Oracle 9iDS Forms:
Build Internet Applications I

Suggested Follow-up Courses


• Oracle 9iDS Reports: Build Internet Reports
• Oracle 9iAS Forms Services: Deploy Internet Applications

How This Course Is Organized


Oracle 9iDS Forms: Build Internet Applications II is an instructor-led
course featuring lectures and hands-on exercises. Online demonstrations and
written practices reinforce the concepts and skills introduced.

.....................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II xv
Preface
.....................................................................................................................................................

Related Publications
Oracle Publications
Title Part Number
Oracle Forms Developer and Oracle Reports Developer Guide- A73073-02
lines for Building Applications, Release 6i
Oracle Forms Developer Getting Started, Release 6i A73154-01
Oracle Forms Server Release 6i Patch 2: Deploying Forms Appli- A86202-01
cations to the Web with the Oracle Internet Application Server

Additional Publications
• read.me file
• relnotes.pdf file

.....................................................................................................................................................
xvi Oracle iDS Forms: Build Internet Applications II
Typographic Conventions
.....................................................................................................................................................

Typographic Conventions
Typographic Conventions in Text
Convention Element Example
Bold italic Glossary term (if The algorithm inserts the new key.
there is a glossary)
Caps and lowercase Buttons, Click the Executable button.
check boxes, Select the Can’t Delete Card check box.
triggers,
Assign a When-Validate-Item trigger . . .
windows
Open the Master Schedule window.
Courier new, Code output, Code output: debug.seti(’I’,300);
case sensitive directory names, Directory: bin (DOS), $FMHOME (UNIX)
(default is filenames,
Filename: Locate the init.ora file.
lowercase) passwords,
pathnames, Password: Use tiger as your password.
URLs, Pathname: Open c:\my_docs\projects
user input, URL: Go to http://www.oracle.com
usernames User input: Enter 300
Username: Log on as scott
Initial cap Graphics labels Customer address (but Oracle Payables)
(unless the term is a
proper noun)
Italic Emphasized words Do not save changes to the database.
and phrases, For further information, see Oracle7 Server
titles of books SQL Language Reference Manual.
and courses,
Enter user_id@us.oracle.com, where
variables
user_id is the name of the user.
Quotation marks Interface elements Select “Include a reusable module
with long names component” and click Finish.
that have only This subject is covered in Unit II, Lesson 3,
initial caps; lesson “Working with Objects.”
and chapter titles in
cross-references
Uppercase SQL column Use the SELECT command to view
names, commands, information stored in the LAST_NAME
functions, schemas, column of the EMP table.
table names

.....................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II xvii
Preface
.....................................................................................................................................................

Convention Element Example


Arrow Menu paths Select File—>Save.
Brackets Key names Press [Enter].
Commas Key sequences Press and release these keys one at a time:
[Alt], [F], [D]
Plus signs Key combinations Press and hold these keys simultaneously:
[Ctrl]+[Alt]+[Del]

Typographic Conventions in Code


Convention Element Example
Caps and lowercase Oracle Forms When-Validate-Item
triggers
Lowercase Column names, SELECT last_name
table names FROM s_emp;
Passwords DROP USER scott
IDENTIFIED BY tiger;
PL/SQL objects OG_ACTIVATE_LAYER
(OG_GET_LAYER (’prod_pie_layer’))
Lowercase italic Syntax variables CREATE ROLE role
Uppercase SQL commands SELECT userid
and functions FROM emp;

Typographic Conventions in Navigation Paths


This course uses simplified navigation paths, such as the following example, to direct
you through Oracle Applications.

(N) Invoice—>Entry—>Invoice Batches Summary (M) Query—>Find


(B) Approve

This simplified path translates to the following:


1 (N) From the Navigator window, select Invoice—>Entry—>Invoice Batches
Summary.
2 (M) From the menu bar, select Query—>Find.
3 (B) Click the Approve button.

N = Navigator, M = Menu, B = Button

.....................................................................................................................................................
xviii Oracle iDS Forms: Build Internet Applications II
................................

Introduction
Lesson I:
......................................................................................................................................................

Introduction
Aim of the Course
After completing this course, you should be able to do the following:
• Create, modify and attach menu documents to Oracle Forms
Developer Internet applications
• Ensure application security with Oracle8i database roles
• Code triggers that respond to function keys
• Respond to mouse movement and mouse button actions
• Manipulate windows and canvases
• Choose appropriate data sources for data blocks
• Work with Oracle8i objects in Form Builder
• Create and manage multiple Internet form applications
• Manage transaction processing in multiple Oracle Forms
Developer Internet applications
• Create and modify Record Groups programmatically
• Build forms with Reusable Components
• Enhance the User Interface with JavaBeans
• Manage Server side features
• Create Timers
• Include charts and reports in Oracle Forms Developer
Internet applications

......................................................................................................................................................
I-2 Oracle iDS Forms: Build Internet Applications II
Course Content
......................................................................................................................................................

Course Content
The lesson titles show the topics we cover in this course, and the usual
sequence of lessons. However, the daily schedule is an estimate, and may
vary for each class.

Day 1

Lesson
Number Lesson Name
1 Creating a Menu Module
2 Managing Menu Modules
3 Programming Function Keys
4 Responding to Mouse Events

Day 2

Lesson
Number Lesson Name
5 Controlling Windows and Canvases
Programmatically
6 Defining Data Sources
7 Working with Oracle8i Objects in Form Builder
8 Controlling Data Block Relationships
9 Building Multiple Form Applications

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II I-3
Lesson I:
......................................................................................................................................................

Day 3

Lesson
Number Lesson Name
10 Working with Record Groups
11 Using Reusable Components
12 Using Java with Web-Deployed Forms
13 Using Server Features in Form Builder
14 Applying Timers
15 Including Charts and Reports

......................................................................................................................................................
I-4 Oracle iDS Forms: Build Internet Applications II
................................

Creating a Menu Module


Lesson 1: Creating a Menu Module
......................................................................................................................................................

Objectives

After completing this lesson, you should


be able to do the following:
• Identify the components of a menu
• Create, save, and attach menu modules
• Set menu properties by using the
Property Palette
• Create menu toolbars
• Create pop-up menus

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Topic Timing
Lecture 50 minutes
Practice 40 minutes
Total 90 minutes

......................................................................................................................................................
1-2 Oracle iDS Forms: Build Internet Applications II
Introduction
......................................................................................................................................................

Introduction
Overview
By default, each form module uses the same menu structure, called the Default menu.
This lesson teaches you how to customize this menu and how to create your own menu
modules. You will also learn how to enhance your application by including menu
toolbars and pop-up menus.

Objectives
After completing this lesson, you should be able to do the following:
• Identify the different components of a menu module
• Create, save, and attach menu modules
• Set menu properties by using the Property Palette
• Create menu toolbars
• Create pop-up menus

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 1-3
Lesson 1: Creating a Menu Module
......................................................................................................................................................

Components of the Menu


Module
Menu item

Main Individual menu


menu
Menu toolbar
®

Copyright  Oracle Corporation, 2001. All rights reserved.

Hierarchical Structure of a Menu

Menu
module

Individual Menu Menu Individual


menu item item menu

Menu
Submenu
items

Menu
items

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Demonstration: Use orders.fmb to explain the components. Open the Default
menu, menudef.mmb, to illustrate the hierarchical structure of a menu.

......................................................................................................................................................
1-4 Oracle iDS Forms: Build Internet Applications II
Components of the Menu Module
......................................................................................................................................................

Components of the Menu Module


What Is a Menu Module?
A menu module is a hierarchically structured object that provides a quick and easy
method for operating your Forms application. Like the form module, the menu module
is one of the main components of an application.
Each menu module displays as a pull-down menu. A pull-down menu comprises a set
of options, displayed horizontally under the application window title. Each option can
represent a submenu or an action. Selecting a submenu displays a vertical list.
Selecting an action executes the action.

What Is a Menu?
A menu is a list of related options. Each option performs a different action. You can
create three menu types in Forms:
• Main menu:
- Displays horizontally in the menu bar
- Contains options (menu items) that are typically individual menus
• Individual menu: Displays vertically
• Submenu: Displays vertically and to the right of the menu item that
calls it

What Is a Menu Item?


A menu item is an option that you can choose from a menu. Each menu item has an
associated command that enables the user to perform an action.

What Is a Menu Toolbar?


A menu toolbar is a toolbar of iconified buttons that represent individual items from
your menu. For a menu module, you can have a vertical and a horizontal menu toolbar.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 1-5
Lesson 1: Creating a Menu Module
......................................................................................................................................................

Default Menu

Action Edit Query Block Record Field Help

Save Cut Enter Previous Previous Previous Help


Clear All Copy Execute Next Next Next Keys
Print Paste Cancel Clear Scroll Up Clear List
Print Edit Last Scroll Duplicate Display
Setup Display Criteria Down Error
Exit List Count Insert Debug
Hits Remove
Fetch Lock
Next Duplicate
Set Clear

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Open the Default menu (menudef.mmb), and show the menu items in the menu
editor.

......................................................................................................................................................
1-6 Oracle iDS Forms: Build Internet Applications II
The Default Menu
......................................................................................................................................................

The Default Menu


What Is the Default Menu?
The Default menu is not a separate menu module and is built in to every form module.
The Default menu includes standard commands for editing, navigating, and database
interaction, such as Action—>Save.
When you build a form module, it automatically uses the Default menu. The Default
menu is internal to Oracle Forms Developer. You can replace the Default menu with a
custom menu. A custom menu is stored in a separate module that has a suffix of .mmb.
A custom menu that is exactly the same as the Default menu, menudef.mmb, ships
with Oracle Developer Forms.

Examining the Default Menu


You can look at the structure of the Default menu by opening the file called
menudef.mmb. This file contains a menu module with an identical structure to that
of the Default menu. Once you have opened the menudef.mmb module, you can see
its objects in the Object Navigator.
You can see that the menu module consists of a main menu (starting point), menus,
and menu items.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 1-7
Lesson 1: Creating a Menu Module
......................................................................................................................................................

The Menu Editor

Display Create Create Switch


menu Down Right Orientation

Menu tab Expanded Collapsed


menu menu
®

Copyright  Oracle Corporation, 2001. All rights reserved.

Technical Note
By default, the Menu Editor displays a pull-down menu, with the
top-level menu displayed horizontally. If you are developing a full-screen menu, you
may want to display the top-level menu vertically, so that the display matches the way
your menu will appear at run time. To change the orientation, click the Switch
Orientation button.

Instructor Note
In the Menu Editor, the key sequences [Ctrl] + the down arrow and [Ctrl] + the right
arrow create, respectively, a menu item below and to the right of an existing object.
Use the Default menu (menudef.mmb) to show the Menu Editor functionalities.
Show the steps to move a menu or a menu item. Show the steps to copy a menu to
another level. Demonstrate that if you move a submenu to a parent item with the
Command Type property set to PL/SQL or Null, Form Builder displays an alert.

......................................................................................................................................................
1-8 Oracle iDS Forms: Build Internet Applications II
The Menu Editor
......................................................................................................................................................

The Menu Editor


What Is the Menu Editor?
The Menu Editor is a graphical design facility for laying out, modifying, and viewing
menu modules and their objects. Use the Menu Editor to carry out all of your menu
design work.

Two Ways to Display the Menu Editor


• Double-click the icon to the left of the menu module entry in the Object
Navigator.
• Select Tools—>Menu Editor.

Tools Specific to the Menu Editor Toolbar


You have seen the majority of the tools from the Menu Editor toolbar in the Layout
Editor; however, some are specific to the Menu Editor.

Tool Function
Display Determines the highest level menu that the Menu Editor displays. (Choose
Menu from all the menus in your menu module.)
Create Down Creates a new menu item below the currently active one
Create Right Creates a new menu item to the right of the currently active one
Switch Allows display of the top-level menu vertically or horizontally
Orientation

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 1-9
Lesson 1: Creating a Menu Module
......................................................................................................................................................

Creating a Menu Module

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Create the following menu:
File Edit Query
Save Clear Record Enter
Exit Clear Block Execute
Sort > By Order Id
By Order Date

......................................................................................................................................................
1-10 Oracle iDS Forms: Build Internet Applications II
Creating a Menu Module
......................................................................................................................................................

Creating a Menu Module


The first step when creating a menu is to define a new menu module by using the
Object Navigator. Once the module is created, you need to create menus and menu
items in the Menu Editor. When the Menu Editor is displayed, it shows a menu called
MAIN_MENU, with one item labeled New Item.

Creating a Main Menu from the Menu Editor


To create menu items for the Main menu, select New Item from the Menu Editor (it is
usually selected already).
1 Type a menu label to replace the default label.
2 Click the Create Right icon.
3 Type a new label to replace the default label.
4 Repeat steps 2 and 3 to add more items to the Main menu.
Note: The label is the text that is displayed for the menu item at run time. The label
may differ from the name, which you can use programmatically and which must
follow PL/SQL naming conventions.

Creating an Individual Menu


1 In the Main menu, select the parent item.
2 Click the Create Down icon.
3 Type a new label to replace the default label.
4 Repeat steps 2 and 3 to add more menu items to the current individual
menu.
Note: Forms places a shaded rectangle, or handle, to the left of the first menu item.
You can use it to move the menu along with all its items.

Creating a Submenu
1 Select the parent item on the individual menu.
2 Click the Create Right icon.
3 Replace the default label.
4 Select Menu—>Create Down to add another item to the submenu.
5 Replace the default label.
6 Repeat steps 4 and 5 to add more submenu items.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 1-11
Lesson 1: Creating a Menu Module
......................................................................................................................................................

Menu Module Properties

Main Menu
Menu Directory
Menu Filename
Startup Code
Share Library with Form

Use Security
Module Roles
®

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Do not spend a long time going through all the menu module properties; instead point
out that they are here for convenience. Also, context-sensitive help is available.

......................................................................................................................................................
1-12 Oracle iDS Forms: Build Internet Applications II
Module Properties
......................................................................................................................................................

Module Properties

Property Description
Main Menu Property that specifies the name of the individual menu in the module
that is the main or starting menu at run time
For a pull-down menu, the main menu is automatically set to the name
of the first menu that you create. Users cannot navigate above this
menu in the menu hierarchy.
Menu Directory Path used by Forms as a pointer to the directory for the run-time .mmx
file; only used by menu modules that are saved to the database
Menu Filename Filename used by Forms as a pointer to the run-time .mmx file; only
used by menu modules that are saved to the database
Startup Code PL/SQL code executed when a menu module is loaded in memory
Share Library Property that enables the loading into memory of a single copy of a PL/
with Form SQL library, if this is the library used by the form module and the menu
module
Use Security When set to Yes, this property enforces security at run time. (Set this
property to No to test the menu module without having to be a member
of any database role.)
Module Roles Property that displays the Menu Module Roles dialog box, where you
can list the roles assigned to the menu module. (Roles defined must be
assigned to individual menu items in the Menu Editor.)

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 1-13
Lesson 1: Creating a Menu Module
......................................................................................................................................................

Menu Properties

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
The Tear-Off property is available for the Motif window manager.

......................................................................................................................................................
1-14 Oracle iDS Forms: Build Internet Applications II
Menu Properties
......................................................................................................................................................

Menu Properties

Property Description
Tear-Off Menu Enables the menu to be dragged from the menu bar and repositioned
elsewhere on the screen (available only if your window manager
supports this feature)

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 1-15
Lesson 1: Creating a Menu Module
......................................................................................................................................................

Menu Item Properties

• Enabled • Menu Item Code


• Label • Submenu Name
• Menu Item Type • Keyboard
• Magic Item Accelerator
• Menu Item Radio • Icon in Menu
Group • Icon Filename
• Command Type

Copyright  Oracle Corporation, 2001. All rights reserved.

Technical Note
Radio menu items must belong to a radio group. All of the radio items for a radio
group must be contiguous on the same menu. Radio group names are internal names
that are not displayed at run time.

Instructor Note
The mappings of logical accelerator keys to physical device keys are defined in the
run-time resource file. You must edit the resource file in Oracle Terminal to change the
key mappings. You can also create additional accelerator keys in Oracle Terminal
(ACCELERATOR6, ACCELERATOR7, and so on), which you can then associate
with menu items in a menu module. If you wish to maintain key mapping for
Web-deployed forms, you will need to edit the FMRWEB.res file; this does not
require Oracle Terminal.
.

......................................................................................................................................................
1-16 Oracle iDS Forms: Build Internet Applications II
Menu Item Properties
......................................................................................................................................................

Menu Item Properties


Properties Specific to Menu Item
Menu Item Property Function
Enabled Specifies whether the menu item is an active and mouse
manipulatable (Inactive menu items are displayed in grey.)
Label Specifies the text that appears in the menu item
Menu Item Type Determines how this menu item displays (Choose from
Plain, Check, Radio, Separator, and Magic.)
Magic Item Specifies that one of the predefined menu items for custom
menus should be used
Menu Item Radio Group Determines which radio group this menu item belongs to
Command Type Determines the type of command that this menu item calls
(Choose from Null, Menu, PL/SQL, or SQL*Plus.)
Menu Item Code Specifies the command that this menu item invokes
Submenu Name Specifies the menu that this menu item invokes
Keyboard Accelerator Determines which logical function key is associated with
this menu item (Accelerator keys are named
ACCELERATOR1 through ACCELERATOR5.)
Icon in Menu Specifies if an icon is displayed in the menu item
Icon Name Specifies the name of the icon to display

Defining Menu Access Keys


Forms indicates an access key by underlining one special character in the menu item.
Users can then issue the menu item command by pressing a key combination such as
[Alt] + [character].

Specifying the Underline Character


Development Run Time
execute query execute query
eXecute query eXecute query
Exe&cute Query Execute Query
Execute &Query Execute Query

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 1-17
Lesson 1: Creating a Menu Module
......................................................................................................................................................

Menu Item Types

Plain
Check

Radio

Magic

Separator

Copyright  Oracle Corporation, 2001. All rights reserved.

Magic Items

• About • Paste
• Undo • Help
• Clear • Quit
• Copy • Window
• Cut

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
1-18 Oracle iDS Forms: Build Internet Applications II
Menu Item Types
......................................................................................................................................................

Menu Item Types


You can customize a menu by using different item types. In addition to plain menu
items, Form Builder supports four types of special menu items.

Choosing a Menu Item Type


Menu Item Type Description
Plain Creates a standard text menu item (This is the Default menu item type.)
Check Creates a menu item that has two possible states (Check menu item
functionality is defined using PL/SQL.)
Radio Creates a set of mutually exclusive buttons, each representing a differ-
ent action (To assign a radio item to a group, enter the name of the
group in the Menu Item Radio Group field in the Properties window.)
Separator Creates a separating horizontal line for grouping menu items
Magic Creates a menu item with predefined functionality

Magic Items
Some Magic menu items include default functionality. Because a Magic item
provides the standard actions of a graphical user interface (GUI), a copy or
paste action is already defined at the menu level. All you need to do is set the
item to the Magic type and define the desired action (standard or specific).
Magic Item Command Type Default Functionality?
About Any except Menu No. You must assign a command to these
Undo items to perform the desired function.
Clear Null Yes. These items perform the default
Copy operations indicated by their names.
Paste
Cut
Help Menu No. You must define a submenu to be
called by the Magic Help item, and you
must assign commands to the items on
that submenu.
Quit Null Yes. The Quit command, by default, exits
from the form after asking the user to
save any changes.
Window Null or Menu Yes. The window item invokes a default
submenu that lists all open windows.
Users can activate a window by selecting
it from the submenu.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 1-19
Lesson 1: Creating a Menu Module
......................................................................................................................................................

Menu Item Command Types

Null Does not issue a command

Menu Invokes a submenu

PL/SQL Executes a PL/SQL command

Plus Spawns a process to SQL*Plus

Form Backward compatibility

Macro Backward compatibility

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
1-20 Oracle iDS Forms: Build Internet Applications II
Menu Item Command Types
......................................................................................................................................................

Menu Item Command Types


Every menu item must have a valid command type. Most menu items execute PL/SQL
commands, so their command type is PL/SQL. However, if a menu item is composed
of submenus, the command type must be set to Menu. For example, all items on the
Main menu must have the command type set to Menu. In this case, the Menu Item
Code property is replaced by the Submenu Name property.

Choosing a Command Type


Command Type Description
Null Specifies that the menu item does not issue a command (The
NULL command is required for Separator menu items and
optional for all other types of items.)
Menu Invokes a submenu (Valid submenu name is the name of the
submenu to be invoked.)
PL/SQL (default) Executes a PL/SQL command (Valid menu item code is a PL/SQL
block, including calls to built-in and user-named
subprograms.)
Plus Specifies that the menu item code spawn a process to SQL*Plus.

Note: The command types of Form, Plus and Macro are available for backward
compatibility only.

Web Design Tip


If you invoke the HOST command with Web-deployed forms, the required process
will run on the Forms Services machine, not on the client. The client will not be able to
view or participate in that process.

Viewing Menu Item Commands


To view the menu item command associated with a menu item, you must take one of
the following actions:
• Double-click the icon to the left of the menu item entry in the Object
Navigator.
• Use the Menu Item Code or Submenu Name property in the Property
Palette.
• Right-click on the menu item in the Object Navigator or Menu Editor
and select PL/SQL Editor from the pop-up menu.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 1-21
Lesson 1: Creating a Menu Module
......................................................................................................................................................

Implementing Menu Toolbars

Toolbar as part of menu module:


• Contains only buttons corresponding to
menu items
• Is displayed above “normal” toolbars
• Executes the same code as menu items
• Is enabled and disabled, visible and
hidden, in synchronization with
corresponding menu item

Copyright  Oracle Corporation, 2001. All rights reserved.

Technical Note
For more flexible or complex requirements, use the existing Toolbar canvas in form
modules.

Instructor Note
The Default menu toolbar works very well; however, building your own menu and
menu toolbar is not so easy. For example, you have to create separator items for every
space that you require to group the items. Also, the menu toolbar icons appear in
exactly the same order as the menu options, which might not be what you want.
Demonstration: Use the menu that you created earlier, and set the properties to display
the Save option in a menu toolbar. Use the save.ico file.

......................................................................................................................................................
1-22 Oracle iDS Forms: Build Internet Applications II
Implementing Menu Toolbars
......................................................................................................................................................

Implementing Menu Toolbars


What Is a Menu Toolbar?
A menu toolbar is a set of iconic buttons that represent individual items from a menu.
When you create a custom form menu, you can specify that some of its items appear
on a menu toolbar.
You need to provide icons to represent the associated buttons on the menu toolbar. If
you use the default form menu, Form Builder attaches a default menu toolbar to your
form automatically.
Menu toolbars allow developers to easily provide toolbar shortcuts to menu
commands without duplicating code or effort.

Menu Toolbar Orientation


You can assign menu items to a horizontal or a vertical menu toolbar. Form Builder
locates a horizontal menu toolbar at the very top of a form (just beneath the pull-down
form menu.) A vertical menu toolbar appears at the far left of a form (to the left of any
existing toolbar canvas).

Creating a Menu Toolbar


To create a menu toolbar, you have to set up the following menu item properties.

Property Description
Visible in Horizontal Specifies that the menu item should appear (represented by an
Menu Toolbar icon) on the horizontal toolbar of a form
Visible in Vertical Specifies that the menu item should appear (represented by an
Menu Toolbar icon) on the vertical toolbar of a form
Icon Filename Specifies the name of the icon resource that you want to represent
the iconic button. For Web-deployed forms, this should be a GIF
file, otherwise use an ICO file.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 1-23
Lesson 1: Creating a Menu Module
......................................................................................................................................................

Menu Module Storage

Menu module definition:


• .mmb
• Stored in files or database tables
Menu module executable:
• .mmx
• Stored in files
Menu module text:
• .mmt
• Stored in files

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
1-24 Oracle iDS Forms: Build Internet Applications II
Storing the Menu Module
......................................................................................................................................................

Storing the Menu Module


Saving the Menu Module Definition
As with the form module, you can save your menu module definition to either of the
following storage formats.
Storage Format Description
File with .mmb Menu module binary file, a binary representation of the menu structure
extension that is portable between operating systems
Database table A table representation of the menu structure that is portable between
databases

You can save your menu module definition by either of the following actions:
• Clicking the Save icon in the Object Navigator
• Selecting File—>Save

Creating an Executable Version


Before you can use your customized menu module, you must create an executable
version. To do so, select File—>Administration—>Compile File.
The resulting file that you create has the .mmx extension. A menu module executable
file containing binary code is not portable between operating systems.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 1-25
Lesson 1: Creating a Menu Module
......................................................................................................................................................

Form Module Properties

Menu
module Specify
to use with that menu
this form module
module is stored
in the file
system

Copyright  Oracle Corporation, 2001. All rights reserved.

Technical Note
If you want to use the Default menu without the associated menu toolbar, replace the
value DEFAULT&SMARTBAR in the Menu Module property with DEFAULT only.

......................................................................................................................................................
1-26 Oracle iDS Forms: Build Internet Applications II
Attaching the Menu Module
......................................................................................................................................................

Attaching the Menu Module


To use your customized menu module, you must attach it to a form module. When you
attach a customized menu module to a form module, you are effectively replacing the
Default menu with your own menu module.

Attaching the Menu Module to the Form Module


1 Ensure that the menu module has been generated.
2 Select the form module to which you want to attach your menu.
3 Invoke the Property Palette for the form module.
4 Replace the value DEFAULT&SMARTBAR in the Menu Module
property with your menu module name.
5 Ensure that the Menu Source property has a value of:
a File, if the menu module is stored in the file system
b Database, if the menu module is stored in the database
6 Generate your form module.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 1-27
Lesson 1: Creating a Menu Module
......................................................................................................................................................

What Is a Pop-up Menu?

Menu that appears on the screen at the


location it was invoked
• Enables users to
access commonly used
functions easily
• Is accessed by pressing
the right mouse button
(Microsoft Windows and
Motif)

Copyright  Oracle Corporation, 2001. All rights reserved.

Incorporating Pop-up Menus

• Pop-up menus are:


– Top-level objects in the object navigator,
such as alerts or Data Blocks
– Built through the Property Palette or
Menu Editor
– Defined in a form module
– Associated with items and canvases
with a pop-up menu property
• Pre-Popup-Menu trigger provides
dynamic control

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Demonstration: Use customers.fmb to demonstrate the pop-up menu. Navigate to
the Comments item, and click the right mouse button.

......................................................................................................................................................
1-28 Oracle iDS Forms: Build Internet Applications II
Pop-up Menus
......................................................................................................................................................

Pop-up Menus
Pop-up menus are context-sensitive menus. You attach pop-up menus to an item or
canvas, and display them by right click on that item or canvas. Pop-up menus enable
end users to quickly access common functions and commands.
Pop-up menus are top-level objects in the Object Navigator (similar to alerts, blocks,
canvases, and so on) and belong to a form module, as opposed to form menus, which
belong to a separate menu module.
Items on a pop-up menu should be contextual to the menu’s associated objects. For
example, you would not include text-editing items on the pop-up menu for a two-digit
numeric item. However, you might include such items on the pop-up menu for a
multiline text item.

Incorporating Pop-up Menus


1 In the Object Navigator of a form, click the Pop-up Menus node, and
click the Create button on the toolbar.
Form Builder creates a pop-up menu and gives it a default name, such as MENU1.
2 In the Object Navigator or Menu Editor, create a main pop-up menu,
submenus (if any), and menu items.
3 Assign commands to the menu items. You can select plain text,
separators, check boxes, and option boxes for Menu items.
4 Attach the menu to items and canvases with a new Pop-up Menu
property.

Rules for Incorporating Pop-up Menus


• To show pop-up menus for a canvas, the mouse must be on the canvas
only.
• Pop-up menu items can be parents of submenus (if the platform allows
it), magic menu items, or separators.

Pre-Popup-Menu Trigger
You can use this trigger to add dynamic control at run time, prior to displaying the
menu. For example, you can use the trigger to identify the cursor context and navigate
to a different item if necessary.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 1-29
Lesson 1: Creating a Menu Module
......................................................................................................................................................

Summary

In this lesson, you should have learned to:


• Identify Menu module components
– The Default menu
– Menu properties
• Create a Menu module
• Associate Menu and form modules
• Create a Pop-up menu

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
1-30 Oracle iDS Forms: Build Internet Applications II
Summary
......................................................................................................................................................

Summary
In this lesson, you learned how to add, create, and customize menu modules.

The Menu Module Components


• Main menu
• Menu
• Menu item
• Menu toolbar

The Default Menu


• Automatically used with every form module
• Can be customized

Creating a Menu Module

Properties
• Menu module properties
• Menu properties
• Menu item properties

Implementing a Menu Toolbar

Menu Module Storage


• Database tables
• .mmb file extension
• .mmx file extension
• .mmt file extension

Menu Module and Form Module Association


Using the form module properties of Menu Module and Menu Source

Creating a Pop-up Menu


• Incorporate pop-up menus
• Rules to incorporate pop-up menus
• Pre-Popup-Menu trigger

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 1-31
Lesson 1: Creating a Menu Module
......................................................................................................................................................

Practice 1 Overview

This practice covers the following topics:


• Creating a simple menu module
• Incorporating some of the menu items
in the menu toolbar
• Compiling and attaching the menu to
the ORDERS form
• Creating a pop-up menu

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
The practice overview in this lesson and the ones that follow are provided only as
guides. Outline the practice in the level of detail appropriate for the course
participants.
For this lab, use the DO_KEY built-in. At this stage of the course, students do not yet
know this built-in. Explain it briefly and explain that it is covered in detail in Lesson 3.

......................................................................................................................................................
1-32 Oracle iDS Forms: Build Internet Applications II
Practice Overview: Lesson 1
......................................................................................................................................................

Practice Overview: Lesson 1


This practice guides you through creating a custom menu, a menu toolbar and
a pop-up menu.

Practice Contents
• Create a simple menu module
• Incorporate menu items in the menu toolbar
• Compile and attach a menu to a form
• Create a pop-up menu

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 1-33
Lesson 1: Creating a Menu Module
......................................................................................................................................................

Practice 1
1 Create a new menu module.
a Using the following screenshot as a guideline, create a new menu
module called M_SUMMITXX where XX is your student course
number.

• File Menu

Visible in
Menu Visible Horiz.
Item Command Menu Item in Menu Icon
Label Type Type Code Menu Toolbar Filename
Save Plain PL/SQL DO_KEY(’CO Yes Yes Save
MMIT_FORM’
);
Clear Plain PL/SQL DO_KEY(’ Yes Yes Abort
CLEAR_FORM
’);
Null1 Separator Null Yes Yes
Exit Plain PL/SQL DO_KEY( Yes Yes Exit
’EXIT_FORM
’);
Null2 Separator Null No Yes

......................................................................................................................................................
1-34 Oracle iDS Forms: Build Internet Applications II
Practice 1
......................................................................................................................................................

• Edit Menu

Visible in
Menu Magic Command Visible Horiz. Menu Icon
Label Item Type Item Type in Menu Toolbar Filename
Cut Magic Cut Null Yes Yes Cut
Copy Magic Copy Null Yes Yes Copy
Paste Magic Paste Null Yes Yes Paste
Null3 Separator Null No Yes

• Sort By Menu

Menu Menu Item


Item Radio Command
Menu Label Type Group Type Menu Item Code
Order Id Radio Order_By PL/SQL SET_BLOCK_PROPERTY(
’s_ord’, order_by,
’id’ ) ;
Customer Id Radio Order_By PL/SQL SET_BLOCK_PROPERTY(
’s_ord’, order_by,
’customer_id’ ) ;
Sales Rep Id Radio Order_By PL/SQL SET_BLOCK_PROPERTY(
’s_ord’, order_by,
’sales_rep_id’ ) ;

• Query Menu

Visible in
Menu Command Horiz. Menu Icon
Label Item Type Type Menu Item Code Toolbar Filename
Enter Plain PL/SQL DO_KEY(’ Yes query
Query ENTER_QUERY’);
eXe- Plain PL/SQL DO_KEY(’EXECUT Yes execute
cute E_QUERY’);
Query

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 1-35
Lesson 1: Creating a Menu Module
......................................................................................................................................................

Save as M_SUMMIT and compile the menu module.


b
c Attach the menu module to the ORDERS form.
d Save and compile the form module as ORDGXX where XX is your
student course number.
e Run and test your ORDERS form.
2 Add pop-up menus to the CUSTOMERS form.
a Open the CUSTOMERS form module. Save as CUSTGXX where
XX is your student course number.
b Copy the EDIT_MENU menu from your M_SUMMIT menu
module to your CUSTOMERS form. Attach this pop-up menu to the
Comments item.
c Save and compile the form module. Deploy your form to the Web to
test.

......................................................................................................................................................
1-36 Oracle iDS Forms: Build Internet Applications II
................................

Managing Menu Modules


Lesson 2: Managing Menu Modules
......................................................................................................................................................

Objectives

After completing this lesson, you should


be able to do the following:
• Control the menu programmatically
• Manage the interaction between the menu and
form documents
• Implement application security through
the menu

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Topic Timing
Lecture 40 minutes
Practice 30 minutes
Total 70 minutes

......................................................................................................................................................
2-2 Oracle iDS Forms: Build Internet Applications II
Introduction
......................................................................................................................................................

Introduction
Overview
In this lesson, you will learn how to modify menus dynamically, as well as
how to control application security through menu access.

Objectives
After completing this lesson, you should be able to do the following:
• Control the menu programmatically by using menu built-ins
• Implement menu security by using both database roles and the
appropriate built-ins

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 2-3
Lesson 2: Managing Menu Modules
......................................................................................................................................................

Using PL/SQL in Menu Item


Code

• Similar to PL/SQL code in form triggers


• You can share code between a form
module and a menu module by using
the following:
– Libraries
– User-defined triggers
– DO_KEY built-in

Copyright  Oracle Corporation, 2001. All rights reserved.

Using PL/SQL in Menu Item


Code

• Menu modules generated independently


• Restrictions:
– Cannot directly reference values of
form objects
– Must use NAME_IN built-in function
– Cannot use direct assignment for
form objects
– Must use COPY built-in procedure

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
The DO_KEY built-in is explained in the next lesson. Stress that it is very
important to use this built-in for generic coding.

......................................................................................................................................................
2-4 Oracle iDS Forms: Build Internet Applications II
Using PL/SQL in Menu Item Code
......................................................................................................................................................

Using PL/SQL in Menu Item Code


Using PL/SQL in Menu Item Commands
PL/SQL menu item commands are structurally similar to form triggers. In
addition to standard application functions such as navigation, validation, and
database interaction, you can use PL/SQL menu item commands to perform
any actions.

Sharing Code Between a Form Module and a Menu Module


You can share code between form modules and menu modules in three
ways:
• Setting up libraries and attaching them to the modules
• Creating user-defined triggers in the form module and calling them from
a standard trigger in a form module, or calling them from a menu item in
a menu module (Use EXECUTE_TRIGGER to fire the user-defined
trigger.)
• Using the DO_KEY built-in to fire the corresponding trigger or function
from a menu item

Restrictions
Menu modules are generated independently of form modules.
In PL/SQL command menu items:
• You cannot directly reference the value of form module objects.
• You must use the NAME_IN built-in function to determine the current
value of the object.
• You cannot use direct assignment to set the value of a form module
object.
• You must use the COPY built-in procedure.

Example
IF :s_emp.title = ’MANAGER’ THEN ...-- INCORRECT
IF NAME_IN(’s_emp.title’) = ’MANAGER’ THEN ... -- CORRECT
:s_product.name := ’PUMP’; -- INCORRECT
COPY(’PUMP’, ’s_product.name’); -- CORRECT

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 2-5
Lesson 2: Managing Menu Modules
......................................................................................................................................................

Built-ins for Setting and Getting


Menu Item Properties

• FIND_MENU_ITEM
• GET_MENU_ITEM_PROPERTY
• SET_MENU_ITEM_PROPERTY
• ITEM_ENABLED
• MENU_SHOW_KEYS

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Demonstration: Use m_summit.mmb file to show examples of these
built-ins.

......................................................................................................................................................
2-6 Oracle iDS Forms: Build Internet Applications II
Useful Built-in Menu Subprograms
......................................................................................................................................................

Useful Built-in Menu Subprograms


You can change certain menu characteristics dynamically at run time by
using built-in subprograms.
Using some of these subprograms, you can get or change menu item
properties. Using others, you can hide, display, or replace the current menu.

Setting and Getting Menu Item Properties


Built-in Description
FIND_MENU_ITEM This function gets the ID of a menu item. The receiving
variable must be declared as a menu item type.
GET_MENU_ITEM_PROPERTY This function returns the current value of the given
property for a specified menu item.
SET_MENU_ITEM_PROPERTY This procedure modifies the state of a menu-item-
specific characteristic.
ITEM_ENABLED This function returns the Boolean value TRUE when the
menu item is enabled and FALSE when the menu item is
disabled.
MENU_SHOW_KEYS This procedure displays the Keys screen for the menu
module at run time.

Example
This procedure finds the ID of a menu item before setting multiple properties.
DECLARE
mi_id MenuItem;
BEGIN
mi_id := Find_Menu_Item(’Preferences.AutoCommit’);
/* Determine the current checked state of the AutoCommit menu
checkbox item and toggle the checked state */
IF Get_Menu_Item_Property(mi_id,CHECKED) = ’TRUE’ THEN
Set_Menu_Item_Property(mi_id,CHECKED,PROPERTY_FALSE);
ELSE
Set_Menu_Item_Property(mi_id,CHECKED,PROPERTY_TRUE);
END IF;
END;

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 2-7
Lesson 2: Managing Menu Modules
......................................................................................................................................................

Built-ins for Showing and Hiding


the Current Menu

REPLACE_MENU
Character mode built-ins:
• HIDE_MENU
• SHOW_MENU
• MENU_REDISPLAY

Copyright  Oracle Corporation, 2001. All rights reserved.

Technical Note
REPLACE_MENU replaces the menu for all windows in the application. If
you are using CALL_FORM, REPLACE_MENU replaces the menu for
both the calling form and the called form with the specified menu.

......................................................................................................................................................
2-8 Oracle iDS Forms: Build Internet Applications II
Showing and Hiding the Current Menu
......................................................................................................................................................

Showing and Hiding the Current Menu


Built-in Description
REPLACE_MENU Replaces the current menu with a specific one, without mak-
ing it active (Use this procedure to modify the display style
and security.)
HIDE_MENU Hides the current menu
SHOW_MENU Displays the current menu without activating it
MENU_REDISPLAY Redraws the current menu on the screen

Example
Use a standard procedure to change which root menu in the current menu
application appears in the menu bar. A single menu application may have
multiple root menus, which an application can set dynamically at run time.
PROCEDURE Change_Root_To(root_menu_name VARCHAR2) IS
BEGIN
Replace_Menu(’MYAPPLSTD’, PULL_DOWN, root_menu_name);
END;

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 2-9
Lesson 2: Managing Menu Modules
......................................................................................................................................................

Managing Menu Security

• Defining security roles


• Choosing roles for the menu module
• Assigning access to menu items
• Setting the Use Security property

Copyright  Oracle Corporation, 2001. All rights reserved.

What Is a Role?

Users

Role

Privileges
®

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
2-10 Oracle iDS Forms: Build Internet Applications II
Managing Menu Security
......................................................................................................................................................

Managing Menu Security


What Is Menu Security?
Using menu security, you can set up access rights on menu items. You can
choose between two security policies for the users:
• Grant users access to all menu items in a module
• Grant users access only to specific menu items
When you want to deny a user access to a menu item, you can either hide the
item or disable it.

What Is a Role?
A role is a group of users sharing the same privileges. With Form Builder,
you can manage menu security through Oracle server roles.
When you create a role, you can grant access privileges to each item
individually. If access is granted only to some roles, only users belonging to
those roles can access those items.
Using this feature, you can deliver the same application for different kinds
of users.

Implementing Menu Security


First, define the different types of users who will use the menus, their
profiles, and their needs. Then follow the steps below:
1 Define security roles in the database.
2 Choose roles for the module in Form Builder.
3 Assign access to menu items.
4 Set the Use Security property.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 2-11
Lesson 2: Managing Menu Modules
......................................................................................................................................................

Menu Module Roles Window

Select Menu Module Roles:

Copyright  Oracle Corporation, 2001. All rights reserved.

Use Security Property

• Set to Yes to enforce security


• Set to No to ignore security: Enables the
developer to test the application

Copyright  Oracle Corporation, 2001. All rights reserved.

Technical Note
If Use Security is modified, you must recompile the menu module.

......................................................................................................................................................
2-12 Oracle iDS Forms: Build Internet Applications II
Defining Security Roles
......................................................................................................................................................

Defining Security Roles


Defining New Roles
Menu security is based on the Oracle server roles. You can create these using
SQL statements.
The following SQL commands implement roles.
Command Action
CREATE ROLE Creates a new role
GRANT Assigns the role to a user (This command allows you
to give a set of privileges to a user at one time.)
ALTER USER...DEFAULT ROLE Controls which role is assigned by default to users
when they connect to the database

Assigning Roles to the Menu Module


To associate a particular role with a menu item, you must define all the roles
used in that menu module:
1 In the Object Navigator, select the menu module.
2 In the Properties window, select the Menu Module Roles property.
3 Click More... to open the Menu Module Roles dialog box.
4 Enter the names of the roles that you want to choose for this menu
module.
5 Click OK to accept the roles list.
Note: The role must exist in the database.

Setting the Use Security Property


The Use Security property determines whether Form Builder should take
account of the specified roles at run time.
When Use Security is set to Yes, Forms enforces security.
When Use Security is set to No:
• Forms ignores security.
• Your users can access all menu items.
• You can test your application without being a member of all roles.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 2-13
Lesson 2: Managing Menu Modules
......................................................................................................................................................

Menu Item Roles Window

Select menu item roles:

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
You can manipulate roles dynamically at run time by using Form Builder.
For example, you can select views from the data dictionary to get
information about existing roles. Subprograms belonging to the
DBMS_SESSION package enable you to modify the roles that are used by
the menu module to enforce security. Tell students that if they want more
details about DBMS_SESSION, they can read Appendix I, “Using Oracle
Server Roles at Run Time.”

......................................................................................................................................................
2-14 Oracle iDS Forms: Build Internet Applications II
Assigning Access to Menu Items
......................................................................................................................................................

Assigning Access to Menu Items


After defining roles to use for the current menu module, you must specify
the role or the roles that will have access to each menu item.
1 Select the desired menu item in the Menu Editor or in the Object
Navigator.
2 Select the Item Roles property in the Properties window.
3 Click More... in the Menu Item Roles dialog box, which contains the
role names associated with the menu module.
4 Select the role in the list to assign a role to the selected menu item.
5 Set the Display without Privilege property to specify how Forms should
display the item if the current user does not have access to the item.
If set to Yes, the item is displayed disabled.
If set to No, the item is hidden completely.
Note: Roles assigned to an item are highlighted. All others are displayed as
usual. To assign the same roles to many items, select the items first by
“Shift-clicking” or “Control-clicking” in the Menu Editor or Object
Navigator, then select the roles through the Menu Item Roles property.
For additional information on how to manipulate Oracle server roles at run
time, see Appendix I, “Using Oracle Server Roles at Run Time.”

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 2-15
Lesson 2: Managing Menu Modules
......................................................................................................................................................

Summary

In this lesson, you should have learned to:


• Exploit Menu Built-ins
• Include PL/SQL in menu items
• Implement menu security

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
2-16 Oracle iDS Forms: Build Internet Applications II
Summary
......................................................................................................................................................

Summary
PL/SQL in Menu Item Commands
• Typical PL/SQL uses
• Restrictions for PL/SQL in menu item commands

Built-ins for Use with Menu Modules


• Showing and hiding the current menu:
- HIDE_MENU
- REPLACE_MENU
- SHOW_MENU
- MENU_REDISPLAY
• Getting and setting menu properties:
- FIND_MENU_ITEM
- GET_MENU_ITEM_PROPERTY
- SET_MENU_ITEM_PROPERTY

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 2-17
Lesson 2: Managing Menu Modules
......................................................................................................................................................

Practice 2 Overview

This practice covers the following topics:


• Enhancing the menu with a check
menu item
• Synchronizing the menu Display_Help
item with the form Help button
• Hiding irrelevant menu items
according to form context

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
The practice overview in this lesson and the ones that follow are provided
only as guides. Develop the practice with the level of detail appropriate for
the students. This lab uses a lot of PL/SQL code. Because this is not a
coding course, we provide the code. Take time to explain this practice so that
students understand the code that they will import.

......................................................................................................................................................
2-18 Oracle iDS Forms: Build Internet Applications II
Practice Overview: Lesson 2
......................................................................................................................................................

Practice Overview: Lesson 2


This practice guides you through enhancing custom menus for the ORDERS and
CUSTOMERS forms.

Practice Contents
• Add a check menu item.
• Enhance the menu so that the Display Help menu item is synchronized
with the ORDERS Help button. If the Help button is enabled, a
checkmark should appear next to the Display Help menu item.
• For the CUSTOMERS form, hide the menu items that are not relevant.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 2-19
Lesson 2: Managing Menu Modules
......................................................................................................................................................

Practice 2
1 Define a check menu item.
a Open your M_SUMMIT menu module and add a new menu item to
the Sort By menu; name it Display_Help.

Menu Label Menu Item Type Command Type


Display Help Check PL/SQL

b If Display_Help is selected, enable the ORDERS form toolbar HELP


button and set the toolbar canvas background color to grey.
If Display_Help is not selected, disable the ORDERS form toolbar
HELP button and set the toolbar canvas background color to red.
You can import the code from the pr2_1.txt file.
c Save and compile the menu module.
d Deploy your ORDERS form on the Web to test your menu.

2 Synchronize the menu module with the form.


a Write startup code for your M_SUMMIT menu module that
synchronizes the Display_Help menu item with the toolbar HELP
button. You can import the code from the pr2_2.txt file.
b Save and compile your menu module.
c Deploy your ORDERS form on the Web to test your menu.

3 Attach your M_SUMMIT menu to your CUSTOMERS form. The menu


item Sort_By is not relevant, and should not be visible to the user.
a Attach the menu module to your CUSTOMERS form.
b Modify the startup code of the M_SUMMIT menu module to hide
the SORT_BY menu when the CUSTOMERS form is opened. You
can import the code from the pr2_3.txt file to replace the
existing code. You may need to change the code to conform to the
exact names you gave to the Main Menu and its menu items. Also,
be sure the When-Button-Pressed trigger on the Orders button refers
to your Orders form.
c Save and compile the menu module.
d Deploy your CUSTOMERS form to the Web and test your
application. Execute a Query and click the Orders button to move to
the ORDERS form. Note that the Sort_By menu item is hidden when
the CUSTOMERS form is current, and is visible when the ORDERS
form is current.
4 With both the ORDERS and CUSTOMERS form modules, restore the
default menu, (DEFAULT&SMARTBAR).

......................................................................................................................................................
2-20 Oracle iDS Forms: Build Internet Applications II
................................

Programming
Function Keys
Lesson 3: Programming Function Keys
......................................................................................................................................................

Objectives

After completing this lesson, you should


be able to do the following:
• Define key triggers and their uses
• Program function keys
• Describe the characteristics of key triggers
• Classify key triggers
• Associate function keys with interface controls

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Topic Timing
Lecture 30 minutes
Practice 30 minutes
Total 60 minutes

......................................................................................................................................................
3-2 Oracle iDS Forms: Build Internet Applications II
Introduction
......................................................................................................................................................

Introduction
Overview
Form Builder enables you to redefine the actions of function keys. This
lesson shows you how to create key triggers to either intercept, or
supplement, the usual function key behavior with which your users navigate
the Oracle Forms Developer application.

Objectives
After completing this lesson, you should be able to do the following:
• Define key triggers and their uses
• Program function keys
• Classify key triggers
• Associate function keys with interface controls

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 3-3
Lesson 3: Programming Function Keys
......................................................................................................................................................

Key Triggers

What is a key trigger?


Example:
Using Key-Exit, display an alert and exit the
application if the user selects the “Yes” button.

SET_ALERT_PROPERTY(′question_alert
SET_ALERT_PROPERTY( ′question_alert′,′, ALERT_MESSAGE_TEXT,
ALERT_MESSAGE_TEXT,
′Do really want to leave the form? ′);
′Do you really want to leave the form?
you ′);
IF SHOW_ALERT(′question_alert
IF SHOW_ALERT( ′question_alert′)′) == ALERT_BUTTON1
ALERT_BUTTON1 THEN
THEN
EXIT_FORM; -- default functionality
EXIT_FORM; -- default functionality
END
END IF;
IF;

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
3-4 Oracle iDS Forms: Build Internet Applications II
Key Triggers
......................................................................................................................................................

Key Triggers
If you press a function key, Forms usually performs the default function
associated with that key. You can modify the standard functionality of a
function key by defining a key trigger for that function key.

What Is a Key Trigger?


A key trigger, like any other trigger, is a subprogram that is executed when a
certain event occurs. In the case of a key trigger, the event is pressing the
function key for which the trigger is defined. The trigger is usually named
after the event that causes it to fire. When the key trigger is defined for a
function key, the usual functionality of the key is replaced by the PL/SQL
text of the trigger. In this respect, key triggers resemble “on” triggers.

Example
The form level Key-Exit trigger below displays an alert asking the end user
if he or she wants to leave the form.
SET_ALERT_PROPERTY(’question_alert’, ALERT_MESSAGE_TEXT, ’Do
you really want to leave the form?’);
IF SHOW_ALERT(’question_alert’) = ALERT_BUTTON1 THEN
EXIT_FORM; -- default functionality
END IF;

Note: If you also want to execute the default functionality of the function
key, you must ensure that the key trigger includes the built-in function
associated with the key.

Example
The following form-level Key-Menu trigger disables [Block Menu] for a
form.
BEGIN
NULL;
END;

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 3-5
Lesson 3: Programming Function Keys
......................................................................................................................................................

Key Trigger Properties


and PL/SQL Editor

Display in “Keyboard Help”


“Keyboard Help” Text

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Demonstration: Use Orders2.fmb to demonstrate changing properties
for the Key-Duprec trigger at the form level.

......................................................................................................................................................
3-6 Oracle iDS Forms: Build Internet Applications II
Defining Key Triggers
......................................................................................................................................................

Defining Key Triggers


You define key triggers in the same way that you define any other trigger.
However, the following two properties in the Property Palette for triggers
only apply to key triggers.
Property Description
Display in Keyboard Help Specifies whether a key trigger description is displayed in the
run-time Keys Help window
Keyboard Help Text Specifies the text that is displayed in the run time Keys Help
window if the display in the Keyboard Help property is set to
Yes (If you want the default description to be
displayed, leave this property blank.)

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 3-7
Lesson 3: Programming Function Keys
......................................................................................................................................................

Characteristics of Key Triggers

• You cannot redefine all function keys with


key triggers.
• Key triggers are defined at all three levels.
• A key trigger can contain SELECT statements and
all built-ins.
• Key triggers can fire in Enter Query mode.

Copyright  Oracle Corporation, 2001. All rights reserved.

Characteristics of Key Triggers

Function Key Built-in Key Trigger

[Accept] COMMIT_FORM Key-Commit

[Clear Form] CLEAR_FORM Key-Clrfrm

[Create Record] CREATE_RECORD Key-Crerec

[Delete Record] DELETE_RECORD Key-Delrec

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
3-8 Oracle iDS Forms: Build Internet Applications II
Characteristics of Key Triggers
......................................................................................................................................................

Characteristics of Key Triggers


Rules of Key Triggers
• You cannot redefine all function keys with key triggers. Some keys are
handled by the terminal or window interface manager rather than by
Forms. Examples of such static function keys are [Clear Item], [Left],
[Right], and [Toggle Insert/Replace].
• You can define key triggers at all three levels: form, block, and item.
• You can use SELECT statements, restricted built-in functions, and
unrestricted built-ins.
• Key triggers can fire in Enter Query mode.
Note: You cannot use all built-ins in Enter Query mode.
If you do not redefine a function key, a built-in function performs its default
functionality when you press the key. Therefore, in most cases, a built-in
function and a key trigger are associated with a function key. The following
table gives some examples of this association.

Function Keys, Their Associated Built-in Functions, and Key Triggers


Function Key Built-in Function Key Trigger
[Accept] COMMIT_FORM Key-Commit
[Create Record] CREATE_RECORD Key-Crerec
[Delete Record] DELETE_RECORD Key-Delrec
[Duplicate Record] DUPLICATE_RECORD Key-Duprec
[Enter Query] ENTER_QUERY Key-Entqry
[Execute Query] EXECUTE_QUERY Key-Exeqry
[List] LIST_VALUES Key-Listval
[Next Item] NEXT_ITEM Key-Next-Item
[Down] DOWN Key-Down
[Next Record] NEXT_RECORD Key-Nxtrec
[Exit] EXIT_FORM Key-Exit

Note: This list is incomplete.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 3-9
Lesson 3: Programming Function Keys
......................................................................................................................................................

Classification of Key Triggers

• Function key triggers


• Key-Fn triggers and
Oracle Terminal
• Key-Others triggers
• Key mapping for
Web-deployed forms
is different to
Client Server

Copyright  Oracle Corporation, 2001. All rights reserved.

Technical Note
The function keys Fn do not necessarily map to F1, F2, F3, and so on.

......................................................................................................................................................
3-10 Oracle iDS Forms: Build Internet Applications II
Classification of Key Triggers
......................................................................................................................................................

Classification of Key Triggers


You can distinguish among different types of key triggers. Learning these
classifications will help you understand when to use key triggers.

Types of Key Triggers


Category Description
Function key triggers Key triggers that are associated with existing function keys
(They fire when the associated function key is pressed.)
Key-Fn triggers Key triggers that are associated with the logical Runtime keys
F0 through F9 (Before you can use these Key triggers, you or
the DBA must map these logical keys to physical keys or key
sequences. They fire when the associated physical key or key
sequence is pressed.)
Key-Others trigger A key trigger that is associated with all keys that can have key
triggers associated with them, but are not currently redefined by
a function key trigger at any level

Key Mapping
Key mapping is defined by a platform specific resource file. The key
definition file for the Microsoft Windows platform is FMRUSW.RES. You
should use Oracle Terminal to edit Client Server resource files. For Web
applications, you can edit the Java resource file, FMRWEB.RES, with any
suitable operating system editor.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 3-11
Lesson 3: Programming Function Keys
......................................................................................................................................................

Classification of Key Triggers

Mouse-event key triggers:


• Key-Next-Item • Key-Down
• Key-Prev-Item • Key-Scrup
• Key-Nxtrec • Key-Scrdown
• Key-Prvrec • Key-Nxtblk
• Key-Up • Key-Prvblk

Copyright  Oracle Corporation, 2001. All rights reserved.

Technical Note
Since mouse-event key triggers are not executed when the mouse is used to
initiate window interaction, you should not place code that needs to be
executed every time the window interaction occurs in a mouse-event key
trigger.

Instructor Note
Demonstration:
• Use Orders2.fmb to demonstrate preventing duplication of the
primary key by using the Key-Duprec trigger.
• Use the same demonstration to illustrate a call of a customized list of
values (LOV) form instead of the native Forms LOV, using Key-Listval.
To do this, click the product LOV button. Do not explain in detail the
code associated with this button; it is covered in a later lesson.

......................................................................................................................................................
3-12 Oracle iDS Forms: Build Internet Applications II
Classification of Key Triggers
......................................................................................................................................................

What Are Mouse-Event Key Triggers?


Mouse-event key triggers are function key triggers whose associated default
functionality can also be activated directly with the mouse.

Examples
• The Key-Nxtblk trigger is a mouse-event key trigger, because the
NEXT_BLOCK functionality can also be activated using the mouse by
clicking in the next block. In this case, a possible Key-Nxtblk trigger
will not fire.
• The Key-Exeqry trigger is not a mouse-event key trigger, because the
EXECUTE_QUERY functionality cannot be activated by simply
clicking the mouse. It can be activated by the mouse only if a trigger is
defined to fire as a result of the mouse action.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 3-13
Lesson 3: Programming Function Keys
......................................................................................................................................................

Using Key Triggers

• Adjust user interface


• Disable a (set of) function keys
• Replace or extend functionality of function keys
• Add additional function keys
• Be careful with Key-Others
• Do not use for validation

Copyright  Oracle Corporation, 2001. All rights reserved.

Specific Key Trigger Uses

• Call an LOV form


• Check for detail records before deleting a
master record
• Prevent duplication of the primary key
• Adjust toolbar buttons for Enter Query mode

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
3-14 Oracle iDS Forms: Build Internet Applications II
Using Key Triggers
......................................................................................................................................................

Using Key Triggers


You should use key triggers sparingly. Often you must define many key
triggers to trap a certain event completely. Mouse-event key triggers can be
circumvented with the mouse. Use key triggers only if you want to adjust the
default user interface.

Common Uses
• Disable function keys
• Replace or extend the default functionality of function keys
• Add additional keys for custom functions using Key-Fn triggers
• Disable a set of function keys using Key-Others

When Not to Use Key Triggers


• To perform validation; use validation triggers instead
• To amend navigation; use navigational triggers instead
• To perform data manipulation; use transactional triggers instead

Specific Key Trigger Uses


• Call a list of values (LOV) form instead of the native Forms LOV, using
Key-Listval
• Check if detail records exist before deleting a master record if the master
block and detail block are in separate forms, using Key-Delrec
• Prevent duplication of the primary key when duplicating a record, using
Key-Duprec
• Adjust behavior of toolbar buttons when Enter Query mode is entered or
left, using Key-Entqry

Technical Note
To determine if a Key-Others trigger applies to a function key, Forms looks
for associated key triggers at all levels. For example, if you define the
Key-Others trigger at the block level, it will not fire for those function keys
for which a key trigger is defined at the form level.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 3-15
Lesson 3: Programming Function Keys
......................................................................................................................................................

Association with Other


Interface Controls

Syntax: DO_KEY(built_in_name)
Example: To customize actions when a user
exits the form with [Exit Form], a button,
or a menu item:
1. Key-Exit

--
-- custom
custom actions
actions when
when user
user tries
tries to
to exit
exit
EXIT_FORM;
EXIT_FORM;
...
...

Copyright  Oracle Corporation, 2001. All rights reserved.

Association with Other


Interface Controls

2. In When-Button-Pressed and Menu item code:


DO_KEY(’EXIT_FORM’);
DO_KEY(’EXIT_FORM’);

• DO_KEY(’Key-Exit’) gives run-time


error
• Corresponding interface control
descriptions

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Demonstration: Use Orders2.fmb to demonstrate code for the
CONTROL.EXIT_BUTTON button. Also show the Key-Exit trigger at
form level.

......................................................................................................................................................
3-16 Oracle iDS Forms: Build Internet Applications II
Association with Other Interface Controls
......................................................................................................................................................

Association with Other Interface Controls


You can often activate the same functionality in various ways, such as by
pressing a function key, choosing a menu item, clicking a button, or
performing direct manipulation with the mouse. In this case, you want to
specify that the PL/SQL code be executed only once. You can use the built-
in function DO_KEY to accomplish this.

What Is DO_KEY?
DO_KEY is a built-in function that executes the key trigger that corresponds
to the built-in subprogram specified as its parameter. If no key trigger is
defined, the specified built-in is executed.

Syntax
DO_KEY(built_in_name)

Example
Exit a Form by clicking [Exit Form] or an Exit button, or by choosing a
menu item.
1 Define a Key-Exit trigger at form level.
2 Call DO_KEY by using:
a The When-Button-Pressed trigger on the associated Exit button
b The menu-item code for the menu item that exits the form using
DO_KEY(’EXIT_FORM’);

Interface Control Descriptions


If the same functionality is activated by various interface controls, you
should also make sure that the controls have the same descriptions.
Interface Control Property for Description Changeable at Run Time?
Function key Show keys description No
Menu item Menu-item label Yes
Button Button label Yes
Mouse event Not applicable Not applicable

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 3-17
Lesson 3: Programming Function Keys
......................................................................................................................................................

Summary

In this lesson, you should have learned to:


• Define key triggers in order to:
– Enhance keyboard functionality
– Replace keyboard key
• Provide consistent functionality between
Function keys, buttons, menu items, and
mouse events
• Display text in Keyboard Help
• Define Key-Fn, Key-Others, and mouse-event key
triggers

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
3-18 Oracle iDS Forms: Build Internet Applications II
Summary
......................................................................................................................................................

Summary
Understanding Key Triggers
• They fire when the associated function key is pressed.
• They are defined like any other trigger.
• Special properties are Display in Keyboard Help and Keyboard Help
Text.

Classification of Key Triggers


• Function key triggers
• Key-Fn triggers
• Key-Others
• Mouse-event key triggers

Uses of Key Triggers


• Disable function keys
• Replace or extend default behavior of function keys
• Add function keys using Key-Fn triggers
• Adjust set of function keys using Key-Others

Association with Other Interface Controls


• Function keys, buttons, menu items, mouse events
• Keys description, button label, menu-item label

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 3-19
Lesson 3: Programming Function Keys
......................................................................................................................................................

Practice 3 Overview

This practice covers the following topics:


• Enforcing consistent form run time
functionality by redefining [Exit Form]
• Changing the behavior of function keys by
replacing [Enter Query] with a custom query form

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
The practices include the use of CALL_FORM. Explain to the students that
is an alternative to OPEN_FORM, and will be covered in a later lesson.

......................................................................................................................................................
3-20 Oracle iDS Forms: Build Internet Applications II
Practice Overview: Lesson 3
......................................................................................................................................................

Practice Overview: Lesson 3


This practice guides you though redefining function keys with key triggers.

Practice Contents
• Use a key trigger to redefine [Exit Form] to provide consistent behavior
between Menu and form modules.
• Disable [Enter Query] mode, and replace with a custom query form.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 3-21
Lesson 3: Programming Function Keys
......................................................................................................................................................

Practice 3
1 Maintain consistent functionality in your form module by using key
triggers. Define a key trigger in your ORDERS form to give users
consistent functionality whenever they exit the form, either using the
menu or when the CONTROL.EXIT_BUTTON button is pressed.
a Redefine [Exit Form] in your ORDERS form so that an alert
message is displayed to users before allowing them to exit the form.
b Amend the entry in Keyboard Help to “Exit Orders” for the key
trigger.
c Save and compile your form. Deploy your form to the Web to test.
d Customize the Alert Text message in your key trigger and ensure that
it is displayed whenever the user exits the form using the
EXIT_BUTTON on the Control block.
e Save and compile your form module. Deploy to the Web and test
your form.

If you have time


2 Disable [Enter query] in your CUSTOMERS form by creating an
appropriate key trigger. Replace [Enter Query] functionality with a call
to the customized query form CUSTQUERY. This form allows the user
to select a CUSTOMER ID, a CUSTOMER NAME, or a SALES REP
ID. The user selections are returned to your CUSTOMER form using
global variables.
a Add the following code to your key trigger:
call_form(’custquery’,no_hide);
execute_query;
b The CUSTQUERY form will return three values, held in global
variables. The contents should be passed to your CUSTOMERS
form to allow the user to execute a restricted query. Use the
following global variables:
:global.custid;
:global.custname;
:global.repid;
c Define the global variables in your CUSTOMERS form to ensure
that the user can perform unrestricted queries.
d Save and compile your CUSTOMER form. Deploy your form to the
Web to test.

......................................................................................................................................................
3-22 Oracle iDS Forms: Build Internet Applications II
................................

Responding to Mouse
Events
Lesson 4: Responding to Mouse Events
......................................................................................................................................................

Objectives

After completing this lesson, you should be able do


the following:
• Define mouse events
• Cause a form module to respond to mouse
movement
• Cause a form module to respond to mouse
button actions

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Topic Timing
Lecture 30 minutes
Practice 20 minutes
Total 50 minutes

......................................................................................................................................................
4-2 Oracle iDS Forms: Build Internet Applications II
Introduction
......................................................................................................................................................

Introduction
Overview
The keyboard, menu, and mouse are the operator’s tools for interacting with
the Forms application. This lesson demonstrates how to write an application
that responds to mouse events.

Objectives
After completing this lesson, you should be able to do the following:
• Define mouse events
• Cause a form module to respond to mouse movement
• Cause a form module to respond to mouse button actions

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 4-3
Lesson 4: Responding to Mouse Events
......................................................................................................................................................

Mouse Events

• Point at which processing can be influenced


• Identified by:
– Mouse movement
– Mouse button action

Copyright  Oracle Corporation, 2001. All rights reserved.

Mouse Cursor Style

To change the cursor style dynamically:

SET_APPLICATION_PROPERTY(CURSOR_STYLE,
′value′);

DEFAULT GUI-specific arrow symbol


BUSY GUI-specific busy symbol
CROSSHAIR GUI-specific crosshair symbol
HELP GUI-specific help symbol
INSERTION GUI-specific insertion symbol

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Use mousecursor.fmb to demonstrate the mouse cursor styles. Remind
delegates to return the cursor style to DEFAULT after trigger failure.

......................................................................................................................................................
4-4 Oracle iDS Forms: Build Internet Applications II
What Are Mouse Events?
......................................................................................................................................................

What Are Mouse Events?


An event is a point at which Forms processing can be influenced. Every
object can have processing events with which you can associate PL/SQL
code (triggers).
A mouse event is an event that is identified by a mouse movement or a
mouse button action.

The Seven Mouse Events


The Forms mouse events is divided in two groups: mouse movement events
and mouse button action events.
The mouse movement events are:
• Entry into an item or canvas
• Exit from an item or canvas
• General movement
The events that correspond to mouse button actions are:
• Click
• Double-click
• Up
• Down

Mouse Cursor Style


Form Builder allows you to change dynamically the cursor style. Use the
following built-in to do it:
SET_APPLICATION_PROPERTY( CURSOR_STYLE, ’value’);
The valid settings for the cursor style property are:
• BUSY
• CROSSHAIR
• DEFAULT
• HELP
• INSERTION

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 4-5
Lesson 4: Responding to Mouse Events
......................................................................................................................................................

Mouse Movement Triggers

When-Mouse-Enter

When-Mouse-Leave

When-Mouse-Move

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Mouse movement and button trigger functionality in Web-deployed forms
can be provided by creating appropriate JavaBeans. Deployment of these
JavaBeans is covered in a later lesson; for the creation of JavaBeans,
students should be referred to an appropriate Java tool, such as Oracle
JDeveloper.
Demonstration
If they do not already exist, create and populate the EMP and DEPT tables
by running the UTLSAMPLE.SQL script.
Use mousewinner.fmb to demonstrate the operation of the When-
Mouse-Enter trigger.
Use mousevariables.fmb to demonstrate all the mouse triggers and
system variables.

......................................................................................................................................................
4-6 Oracle iDS Forms: Build Internet Applications II
Responding to Mouse Movement
......................................................................................................................................................

Responding to Mouse Movement


You can initiate an action whenever mouse movement occurs by defining
the mouse movement triggers.

The Three Mouse Movement Triggers


Trigger Use
When-Mouse-Enter Fires when the user moves the mouse into an
item or canvas-view
When-Mouse-Leave Fires when the user moves the mouse out of
an item or canvas-view
When-Mouse-Move Fires when the user moves the mouse within
an item or canvas-view

Uses of the Mouse Movement Triggers


• Use When-Mouse-Move in conjunction with the
SYSTEM.MOUSE_X_POS and SYSTEM.MOUSE_Y_POS system
variables to return the exact position of the mouse within an item.
• Use When-Mouse-Leave to update an item value without causing the
cursor to navigate out of the current item

Web Design Tip


If you define mouse movement triggers in client server applications, this
may adversely affect the performance of your form. This is because these
triggers have the potential to fire frequently. For this reason, you should use
them sparingly; in Web-deployed forms these triggers are disabled.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 4-7
Lesson 4: Responding to Mouse Events
......................................................................................................................................................

Mouse Position System Variables

2 7

6
3

Copyright  Oracle Corporation, 2001. All rights reserved.

1 MOUSE_FORM 5 MOUSE_RECORD_OFFSET
2 MOUSE_CANVAS 6 MOUSE_X_POS
3 MOUSE_ITEM 7 MOUSE_Y_POS
4 MOUSE_RECORD

Technical Note
The SYSTEM.MOUSE_FORM system variable is NULL if the platform is
not a GUI platform.

Instructor Note
Demonstration: Use mousevariables.fmb to demonstrate all the
mouse triggers and system variables.

......................................................................................................................................................
4-8 Oracle iDS Forms: Build Internet Applications II
Responding to Mouse Movement
......................................................................................................................................................

The Mouse Position System Variables


Use the following system variables to determine when the mouse has
moved, where it has moved from, and where it has moved to.
Variable Use
SYSTEM.MOUSE_FORM Identifies the form module that the mouse is
currently in
SYSTEM.MOUSE_CANVAS Identifies the canvas that the mouse is currently
on
SYSTEM.MOUSE_ITEM Identifies the item that the mouse is currently in
SYSTEM.MOUSE_RECORD Identifies the record number that the mouse is
currently in
SYSTEM.MOUSE_RECORD_OFFSET Identifies the number of the record that the mouse
is currently in, relative to the first visible record;
uses a 1-based index
SYSTEM.MOUSE_X_POS Identifies the x coordinate of the mouse’s current
position (If the mouse is positioned on a canvas,
the x coordinate is measured relative to the top
left corner of the canvas. If the mouse is in an
item, the x coordinate is measured relative to the
top left corner of the item.)
SYSTEM.MOUSE_Y_POS Identifies the y coordinate of the mouse’s current
position (If the mouse is positioned on a canvas,
the y coordinate is measured relative to the
top left corner of the canvas. If the mouse is in an
item, the y coordinate is measured relative to the
top left corner of the item.)

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 4-9
Lesson 4: Responding to Mouse Events
......................................................................................................................................................

Mouse Button Action Triggers

When-Mouse-Down

When-Mouse-Up

When-Mouse-Click
click

When-Mouse-Doubleclick
click click

Copyright  Oracle Corporation, 2001. All rights reserved.

Mouse Event Trigger Sequence

1. When-Mouse-Down

2. When-Mouse-Up

3. When-Mouse-Click

4. When-Mouse-Down

5. When-Mouse-Up

6. When-Mouse-Doubleclick
®

Copyright  Oracle Corporation, 2001. All rights reserved.

Technical Note
Click and double-click work only if the mouse stays on the item (or canvas)
throughout the down-up action.

......................................................................................................................................................
4-10 Oracle iDS Forms: Build Internet Applications II
Responding to Mouse Button Actions
......................................................................................................................................................

Responding to Mouse Button Actions


You can initiate an action whenever a mouse button action occurs by defining the mouse
button action triggers.

The Mouse Button Action Triggers


Trigger Use
When-Mouse-Down Initiates an action when the user presses the
mouse button down while the mouse is point-
ing to an item or a canvas
When-Mouse-Up Initiates an action when the user presses and
releases the mouse button while the mouse is
pointing to an item or a canvas
When-Mouse-Click Initiates an action when the user clicks on an
item or canvas
When-Mouse-Doubleclick Initiates an action when the user double-clicks
an item or canvas

Firing Sequence for Mouse Button Action Triggers


When you double-click an item or canvas, you are potentially causing the following
triggers to fire in the order in which they are listed. Similarly, when you click an item
or canvas, the triggers that precede the When-Mouse-Click trigger will fire.
• When-Mouse-Down
• When-Mouse-Up
• When-Mouse-Click
• When-Mouse-Down
• When-Mouse-Up
• When-Mouse-Doubleclick

Web Design Tip


When any mouse button action is initiated in a Web-deployed form, the Java
user interface refers to Forms Services to identify the appropriate mouse
button trigger. Even though you may not have defined the relevant mouse
button trigger, the user interface will generate this event if you have defined
at least one mouse button trigger in your form. You should therefore restrict
use of mouse button triggers.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 4-11
Lesson 4: Responding to Mouse Events
......................................................................................................................................................

Mouse Button Action


System Variables

SYSTEM.MOUSE_BUTTON_PRESSED

SYSTEM.MOUSE_BUTTON_MODIFIERS

Ctrl Alt

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
4-12 Oracle iDS Forms: Build Internet Applications II
Responding to Mouse Button Actions
......................................................................................................................................................

The Mouse Button System Variables


Use the following system variables to determine which mouse button was
pressed and which special key, if any, was used.
Variable Use
SYSTEM.MOUSE_BUTTON_PRESSED Identifies which mouse button was pressed
(values of 1–3, where 1 is the left mouse
button)
SYSTEM.MOUSE_BUTTON_MODIFIERS Identifies which special key was pressed to
modify the usual mouse button action
(possible values are Shift+,
Caps Lock+, Control+, Alt+,
Command+, Super+, and Hyper+)
If the operator holds down the [Ctrl] and [Shift] keys while pressing the
mouse button, SYSTEM.MOUSE_BUTTON_MODIFIERS contains the
value Shift+Control+.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 4-13
Lesson 4: Responding to Mouse Events
......................................................................................................................................................

Summary

In this lesson, you should have learned how to:


• Respond to mouse movement
– Mouse position system variables
– Mouse movement triggers
• Respond to mouse button actions
– Mouse button system variables
– Mouse button triggers

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
4-14 Oracle iDS Forms: Build Internet Applications II
Summary
......................................................................................................................................................

Summary
In this lesson, you saw how to write an application that responds to mouse
events.

Mouse Events
• Entry to a canvas or an item
• Exit from a canvas or an item
• Move the cursor
• Click
• Double-click
• Up
• Down
• Responding to mouse movement
• Mouse position system variables

Mouse Movement Triggers


• When-Mouse-Enter
• When-Mouse-Leave
• When-Mouse-Move

Responding to Mouse Button Actions


• Mouse button system variables
• Mouse button triggers
- When-Mouse-Click
- When-Mouse-Doubleclick
- When-Mouse-Up
- When-Mouse-Down

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 4-15
Lesson 4: Responding to Mouse Events
......................................................................................................................................................

Practice 4 Overview

This practice covers the following topics:


• Invoke an editor when the operator
double-clicks an item
• Redefine the mouse cursor style according
to context

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
4-16 Oracle iDS Forms: Build Internet Applications II
Practice Overview: Lesson 4
......................................................................................................................................................

Practice Overview: Lesson 4


This practice guides you through using mouse-event triggers and mouse
system variables.

Practice Contents
• Define a mouse-event trigger to invoke an editor on the
S_CUSTOMER.COMMENTS item.
• Modify the mouse cursor style whenever the ORDERS Help canvas is
displayed.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 4-17
Lesson 4: Responding to Mouse Events
......................................................................................................................................................

Practice 4
In this practice, you provide additional functionality in your forms by
defining mouse event triggers.

1 In your CUSTOMERS form, define a mouse event trigger on


S_CUSTOMER.COMMENTS that invokes the item’s editor when the
user double-clicks the item.
2 In your ORDERS form change the mouse cursor symbol to “busy” while
the HELP canvas is displayed.
a Ensure that the default symbol is restored whenever the user hides
the HELP canvas.
b The user can close the HELP canvas without pressing the
HIDEHELP button, by navigating to an item in another block. How
can you ensure that the mouse cursor is always restored?
c Save and compile your form modules. Deploy your forms to the Web
to test. You can call the ORDERS form from your CUSTOMERS
form.

......................................................................................................................................................
4-18 Oracle iDS Forms: Build Internet Applications II
................................

Controlling Windows
and Canvases
Programmatically
Lesson 5: Controlling Windows and Canvases Programmatically
......................................................................................................................................................

Objectives

After completing this lesson, you should


be able to do the following:
• Display a form document in multiple
windows
• Write code to interact with windows
• Manipulate windows programmatically
• Manipulate canvas views programmatically
• Control windows and canvases with
Web-deployed forms
• Display large data blocks in a window

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Topic Timing
Lecture 45 minutes
Practice 35 minutes
Total 80 minutes

......................................................................................................................................................
5-2 Oracle iDS Forms: Build Internet Applications II
Introduction
......................................................................................................................................................

Introduction
Overview
You should already be familiar with setting window and canvas properties at design
time. This lesson covers the triggers and built-ins that you can use to manage the
properties and behavior of windows and canvases at run time.

Objectives
After completing this lesson, you should be able to do the following:
• Display a form module in multiple windows
• Write code to interact with windows
• Manipulate windows programmatically
• Manipulate canvas views programmatically
• Control windows and canvases with Web-deployed forms
• Display large data blocks in a window

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 5-3
Lesson 5: Controlling Windows and Canvases Programmatically
......................................................................................................................................................

Using Window-Interaction Triggers

System Variable
:SYSTEM.EVENT_WINDOW

Trigger Use

When-Window-Activated Enforces navigation

When-Window-Deactivated Deactivates a window

When-Window-Closed Closes a window

When-Window-Resized Maintains visual


standards

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
5-4 Oracle iDS Forms: Build Internet Applications II
Using Window-Interaction Triggers
......................................................................................................................................................

Using Window-Interaction Triggers


You can use four window-interaction triggers to provide extra functionality whenever
a user interacts with a window. These triggers should be defined at the form level.
Trigger Characteristic
When-Window-Activated Fires when a window is made the active window (Note
that window activation can occur independently of navi-
gation.)
When-Window-Deactivated Fires when a user deactivates a window by setting the
input focus to another window
When-Window-Closed Fires when a user closes a window by using a window-
manager-specific Close command
When-Window-Resized Fires when a window is resized, either by the user or
through a trigger (It also fires at form startup, but not
when a window is made into an icon.)

The common uses for those triggers are the following:


Trigger Use
When-Window-Activated Captures initial settings of window properties; enforces
navigation to a particular item whenever the window is
activated
When-Window-Deactivated Deactivates a window
When-Window-Closed Closes a window programmatically
When-Window-Resized Maintains visual standards; captures window properties

Keeping Track of the Triggered Window


The SYSTEM.EVENT_WINDOW system variable contains the name of the last
window for which a window-interaction trigger fired. You can use this system variable
to perform different actions for different windows in your window-interaction triggers.
Note: Help with triggers is available by pressing [Ctrl] + [H] and selecting PL/SQL
Reference - Triggers.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 5-5
Lesson 5: Controlling Windows and Canvases Programmatically
......................................................................................................................................................

Built-ins for Manipulating


Windows

• FIND_WINDOW
• GET_WINDOW_PROPERTY
• SET_WINDOW_PROPERTY
• HIDE_WINDOW
• SHOW_WINDOW
• MOVE_WINDOW
• RESIZE_WINDOW

Copyright  Oracle Corporation, 2001. All rights reserved.

Technical Note
In Microsoft Windows, you can reference the multiple document interface
(MDI) application window with the FORMS_MDI_WINDOW constant.
FORMS_MDI_WINDOW is used with certain built-in functions and
procedures that relate to windows.
In Web-deployed forms, you can obtain similar functionality by setting
the Forms Applet WIDTH and HEIGHT parameters in the base HTML page.
Definition of these Form Applet parameters is covered later in this course.

......................................................................................................................................................
5-6 Oracle iDS Forms: Build Internet Applications II
Built-ins for Manipulating Windows
......................................................................................................................................................

Built-ins for Manipulating Windows


Built-in Description
FIND_WINDOW Returns the internal window ID (of data type
WINDOW) of a window with the given name
GET_WINDOW_PROPERTY Returns the current value of the specified
window property for the given window
SET_WINDOW_PROPERTY Sets the specified window property for the
given window to a specified value
HIDE_WINDOW Hides the window
SHOW_WINDOW Makes the window visible at the current or
specified display position
MOVE_WINDOW Moves the window to the location specified by
the given coordinates
RESIZE_WINDOW Changes the window to the specified width and
height

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 5-7
Lesson 5: Controlling Windows and Canvases Programmatically
......................................................................................................................................................

Built-ins for Manipulating


Canvases

• FIND_CANVAS
• GET_CANVAS_PROPERTY
• SET_CANVAS_PROPERTY
• FIND_VIEW
• GET_VIEW_PROPERTY
• SET_VIEW_PROPERTY
• HIDE_VIEW
• SHOW_VIEW
• REPLACE_CONTENT_VIEW
• SCROLL_VIEW
®

Copyright  Oracle Corporation, 2001. All rights reserved.

Technical Note
REPLACE_CONTENT_VIEW does not hide the stacked canvas already displayed
in the window. In contrast SHOW_VIEW and SET_VIEW_PROPERTY will display
the given canvas in front of any stacked canvas, if the canvas Visible property is set to
true.

Instructor Note
Point out that the GET_ built-ins are the most important ones when writing generic
code.
Use tab_page.fmb to demonstrate:
• The tab canvas system variables. Click any tab page
• How to enforce navigation when a user selects a tab page
• Clicking the TopMost Tab Page button to illustrate the
TOPMOST_TAB_PAGE argument
You can run this demonstration on the Web from winmenu.fmb.

......................................................................................................................................................
5-8 Oracle iDS Forms: Build Internet Applications II
Built-ins for Manipulating Canvases
......................................................................................................................................................

Built-ins for Manipulating Canvases


Built-in Description
FIND_CANVAS Returns the internal canvas ID (CANVAS data type)
of a canvas with the given name
GET_CANVAS_PROPERTY Returns the current value of the specified canvas prop-
erty for the given canvas
SET_CANVAS_PROPERTY Sets the specified canvas property for the given canvas
to a specified value
FIND_VIEW Returns the internal view ID (VIEWPORT data
type) of a canvas with the given name
GET_VIEW_PROPERTY Returns the current value of the specified view prop-
erty for the canvas
SET_VIEW_PROPERTY Sets the specified view property for the given canvas
to a specified value
HIDE_VIEW Hides the canvas
SHOW_VIEW Makes the given canvas visible at the current display
position
REPLACE_CONTENT_VIEW Replaces the content canvas currently displayed in the
window with the specified content canvas
SCROLL_VIEW Moves the view of a given canvas to a different posi-
tion on its canvas (does not move the window to a
different position on the screen)

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 5-9
Lesson 5: Controlling Windows and Canvases Programmatically
......................................................................................................................................................

Working with Tab-Style


Canvases

Page 1 click Page 2 Page 3

The When-Tab-Page-Changed trigger


fires when a user:

• Clicks a tab

• Uses either function key


• Next tab Page
Previous Next
• Previous Tab page Tab Page Tab Page

Copyright  Oracle Corporation, 2001. All rights reserved.

Working with Tab-Style Canvases

Tab canvas system variables:


• :SYSTEM.TAB_NEW_PAGE
• :SYSTEM.TAB_PREVIOUS_PAGE

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
The When-Tab-Page-Changed trigger does not fire if the end user presses [Next Item]
+ [Tab] to navigate from one field to another in the same block but on different tab
pages.

......................................................................................................................................................
5-10 Oracle iDS Forms: Build Internet Applications II
Working with Tab-Style Canvases
......................................................................................................................................................

Working with Tab-Style Canvases


When-Tab-Page-Changed Trigger
This form-level trigger fires when there is explicit item or mouse navigation from one
tab page to another in a tab canvas; in other words, when the user clicks a tab or
presses [Ctrl] + [PgUp] or [Ctrl] + [PgDown].
This trigger is very often used to perform actions when any tab page is changed during
item or mouse navigation; for example, to enable or disable items or to set default or
related item values.
Be aware that this trigger does not fire when the tab page is changed programmatically
and does not fire with implicit navigation.

Tab Canvases System Variables


Within the When-Tab-Page-Changed trigger, you can reference system variables to
determine where you are coming from and going to.
• :SYSTEM.TAB_NEW_PAGE returns the name of the tab page to which
you are going.
• :SYSTEM.TAB_PREVIOUS_PAGE returns the name of the tab page
from which you are coming.
These system variables return only the page name, not the canvas name, so you must
name all tab pages uniquely across the form if you need to be able to identify them
programmatically.

Technical Note
When you are changing to another tab page, the cursor does not automatically move to
a different item. To move the cursor you must include a GO_ITEM statement in the
When-Tab-Page-Changed trigger. This is intended functionality to allow users to view
other tab pages without navigating the cursor and therefore causing item navigation
and validation (as previously mentioned).

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 5-11
Lesson 5: Controlling Windows and Canvases Programmatically
......................................................................................................................................................

Working with Tab-Style


Canvases

• FIND_TAB_PAGE: Returns the tab page ID


• GET_TAB_PAGE_PROPERTY: Returns
the tab page label or the tab page canvas
• SET_TAB_PAGE_PROPERTY: Enables changing
of the tab page label

Copyright  Oracle Corporation, 2001. All rights reserved.

Other Arguments for Canvas


Built-Ins

• Identify the topmost tab page


• Bring a tab page to the top programmatically

If GET_CANVAS_PROPERTY(’custab’,
TOPMOST_TAB_PAGE)= ’Billing’ then
SET_CANVAS_PROPERTY(’custab’,
TOPMOST_TAB_PAGE,
’Address’);
end if;

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
TOPMOST_TAB_PAGE returns only the tab page name, and not the canvas name.
To set a property, you must concatenate the canvas name with the page name.

......................................................................................................................................................
5-12 Oracle iDS Forms: Build Internet Applications II
Working with Tab-Style Canvases
......................................................................................................................................................

Built-ins for Manipulating Tab-Style Canvases


Built-in Description
FIND_TAB_PAGE Searches the list of tab pages in a given tab canvas and
returns a tab page ID when it finds a valid tab page
with the given name (You must define a variable of
type TAB_PAGE to accept the return value.)
GET_TAB_PAGE_PROPERTY Returns property values (CANVAS_NAME,
ENABLED, LABEL, VISIBLE,
VISUAL_ATTRIBUTE) for a specified tab page
SET_TAB_PAGE_PROPERTY Sets the tab page properties (ENABLED, LABEL,
VISIBLE, VISUAL_ATTRIBUTE) of the specified
tab canvas page

Note: The tab page is named using the syntax “CanvasName.PageName.”

Example
DECLARE
tp_id Tab_Page;
BEGIN
tp_id := Find_Tab_Page(’Canvas2.TabPage1’);
IF Get_Tab_Page_Property(tp_id, enabled) =’FALSE’ THEN
Set_Tab_Page_Property(tp_id, enabled, property_true);
END IF;
END;

Other Arguments for Canvas Built-Ins


If you want to make a tab page the top-most on its underlying tab canvas, you can use
the built-in procedure SET_CANVAS_PROPERTY and set the canvas property
TOPMOST_TAB_PAGE. You can also get the top-most tab page by using the built-in
function GET_CANVAS_PROPERTY.
GET_CANVAS_PROPERTY(‘canvas_name’, TOPMOST_TAB_PAGE)
SET_CANVAS_PROPERTY(‘canvas_name’, TOPMOST_TAB_PAGE, page_name)
In the preceding syntax example, page_name is either a constant, in single quotes, or
a variable.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 5-13
Lesson 5: Controlling Windows and Canvases Programmatically
......................................................................................................................................................

Windows and Blocks


Active Nonactive
Window 1 window window
Block 1

Window 2
Block 2

Block 3
Cursor
location

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
5-14 Oracle iDS Forms: Build Internet Applications II
Windows and Blocks
......................................................................................................................................................

Windows and Blocks


Form Builder processes many events based on blocks (and items), which can be
completely independent of windows (and canvases). Keep in mind the following
characteristics of windows and blocks.

Connection Between Windows and Blocks


• A window can contain multiple canvases, and multiple items can be
located on a canvas.
• A block can contain multiple items, and an item is located on one and
only one canvas (except for null canvas items).
• A window can contain multiple blocks, and a block can be located on
several windows.
Note: In general, put blocks in separate windows. If blocks are closely related
(through a foreign-key relationship), put them in the same window.

Window Activation and Block Navigation


You can use the When-Window-Activated trigger to activate another window
automatically (see the Closing Windows example later in this lesson).

Transaction Management
During commit processing, Forms processes all base table blocks in
sequential order. Therefore, transaction management is block-based rather than
window-based. However, the user expects to interact with a form in a window-based
manner.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 5-15
Lesson 5: Controlling Windows and Canvases Programmatically
......................................................................................................................................................

Manipulating Window Properties


Programmatically

Maximizing MDI application window

SET_WINDOW_PROPERTY
SET_WINDOW_PROPERTY (forms_mdi_window,
(forms_mdi_window,
window_state,
window_state, maximize);
maximize);

Locating the Cursor window


GET_VIEW_PROPERTY
GET_VIEW_PROPERTY (GET_ITEM_PROPERTY(NAME_IN
(GET_ITEM_PROPERTY(NAME_IN
(′system.cursor_item′),
(′system.cursor_item′), item_canvas),
item_canvas),
window_name);
window_name);

Copyright  Oracle Corporation, 2001. All rights reserved.

Technical Note
You can also maximize the client server MDI window application with the
WINDOW_STATE command line parameter:
ifrun60.exe module=customer.fmx userid=my_name/my_password@my_database
window_state=maximize
You can switch from the MDI to the SDI window application by using the USESDI
command line parameter:
ifrun60.exe module=customer.fmx userid=my_name/my_password@my_database
usesdi=yes
With SDI window applications, you must size form module windows to allow for the
menu, menu toolbar, and console bar to display.

Instructor Note
Demonstration: Use window.fmb to demonstrate the two examples described
above. Show the When-New-Form-Instance trigger, which includes the code for
maximizing the MDI application window.
Show the GET_CURSOR_WINDOW program unit.

......................................................................................................................................................
5-16 Oracle iDS Forms: Build Internet Applications II
Manipulating Window Properties Programmatically
......................................................................................................................................................

Manipulating Window Properties Programmatically


You can use the window-interaction triggers and the built-ins for windows to
manipulate your windows (and the MDI application window on Microsoft Windows)
at run time.

Manipulating the Client Server MDI Application Window at Form Startup


The When-New-Form-Instance trigger below implements the following functionality:
• Maximizing the MDI application window
• Setting the window title of the MDI application window

The When-New-Form-Instance Trigger at Form Level


BEGIN
SET_WINDOW_PROPERTY(forms_mdi_window, window_state, maximize);
SET_WINDOW_PROPERTY(forms_mdi_window, title, ’Summit Sporting
Goods.’);
END;

Locating the Cursor Window


The cursor may be located in a nonactive window. In this case, you can use the
following GET_CURSOR_WINDOW function to find this window.
FUNCTION get_cursor_window
RETURN VARCHAR2
IS
BEGIN
RETURN (GET_VIEW_PROPERTY(GET_ITEM_PROPERTY(
NAME_IN(’system.cursor_item’),item_canvas),
window_name));
END;

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 5-17
Lesson 5: Controlling Windows and Canvases Programmatically
......................................................................................................................................................

Window with Close Option


on System Menu Box

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Demonstration: Use window.fmb to demonstrate to the Close option from either
the Microsoft or Java Windows System menu.

......................................................................................................................................................
5-18 Oracle iDS Forms: Build Internet Applications II
Closing Windows
......................................................................................................................................................

Closing Windows
Use the Microsoft Windows close button, or system-menu box, to provide the user
with a means for closing windows. There is no default behavior in Forms when a user
clicks on the close button, therefore you must define a When-Window-Closed trigger.
The following examples show a form based on departments and employees. The
department block and the employee block are located in separate windows. The form
level triggers When-Window-Closed and When-Window-Activated implement the
following functionality:
• Exiting from the form or hiding the window that is closed by the user
(Forms automatically activates another window.)
• Forcing navigation in the newly activated window
Note: The function GET_CURSOR_WINDOW, discussed in an earlier example, is
used here.

The When-Window-Closed Trigger at Form Level


BEGIN
IF :SYSTEM.EVENT_WINDOW = ’WINDOW1’ THEN
DO_KEY(’exit_form’);
ELSIF :SYSTEM.EVENT_WINDOW = ’WINDOW2’ THEN
HIDE_WINDOW(’window2’);
END IF;
END;

The When-Window-Activated Trigger at Form Level


BEGIN
IF :SYSTEM.EVENT_WINDOW = get_cursor_window THEN
RETURN;
ELSIF :SYSTEM.EVENT_WINDOW = ’WINDOW1’ THEN
GO_BLOCK(’s_dept’);
ELSIF :SYSTEM.EVENT_WINDOW = ’WINDOW2’ THEN
GO_BLOCK(’s_emp’);
END IF;
END;

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 5-19
Lesson 5: Controlling Windows and Canvases Programmatically
......................................................................................................................................................

Control Window Functionality


with Web-Deployed Forms

WIDTH=650
HEIGHT=400
usesdi=no

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
5-20 Oracle iDS Forms: Build Internet Applications II
Manipulating Windows in Web-Deployed Forms
......................................................................................................................................................

Manipulating Windows in Web-Deployed Forms


When you build Web-deployed forms, some run-time behavior is determined by
Forms Applet parameters that you define in the base HTML file. The Forms Applet
downloads and executes your application into an Applet area on the client browser.
The parameters allow you to select either MDI or SDI options for your application and
to define the size of the Applet area; this area is used as a frame for your forms
windows.
The following parameters affect the run time behavior of Web form windows:

Parameter Value Description


usesdi YES Runs as a SDI Application
usesdi NO Runs as a MDI Application
width integer Width of the Applet area, in pixels
height integer Height of the Applet area, in pixels

The base HTML file is downloaded when a user requests your forms application from
the Web server. It contains information that would otherwise be supplied with the
client server RUNFORM command.
Information on building the base HTML file is covered in the course Oracle 9iAS
Forms Services: Deploy Internet Applications.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 5-21
Lesson 5: Controlling Windows and Canvases Programmatically
......................................................................................................................................................

Running Web-Deployed Forms


in the Applet Window

usesdi=yes
separateFrame=true

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
5-22 Oracle iDS Forms: Build Internet Applications II
Sizing Windows for Web-Deployed Forms
......................................................................................................................................................

Sizing Windows for Web-Deployed Forms


Sizing the Applet Area
The size of the Applet area is determined by the WIDTH and HEIGHT parameters that
were passed to the Forms Applet. If you run the Forms Applet within a browser
HTML page, then the size of the Applet area cannot be changed at run time.
If it is running outside a browser HTML page, the Applet area will have its own
window; the user can resize this window. To run the Form Applet in a separate Applet
window, you can set the separateFrame parameter:

Parameter Value Description


separateFrame false Forms application runs in Applet area.
separateFrame true Forms application runs in a separate
window outside the browser.

If your form module canvases must be larger than the Applet window, then you should
either specify window scrollbars, or consider other Form Builder features such as Tab
canvases, Tree objects, and scrollable Stacked canvases. With these you can extend
the available canvas area within a form module without creating large canvases.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 5-23
Lesson 5: Controlling Windows and Canvases Programmatically
......................................................................................................................................................

Display Large Data Blocks


in a Window

Applet area WIDTH = 750


Customer Canvas WIDTH = 2000

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Use largeform.fmb to demonstrate the implementation of stacked canvases for
large records.
Use custwiz.fmb to demonstrate the implementation of wizards for large records.
The building of wizards is covered in a later lesson.
Use summitcust.fmb to demonstrate the implementation of hierarchical tree items
and tab canvases for large records.

......................................................................................................................................................
5-24 Oracle iDS Forms: Build Internet Applications II
Display Large Data Blocks in a Window
......................................................................................................................................................

Display Large Data Blocks in a Window


With stacked canvases, you can increase the canvas area within a form module,
without defining large form windows. To allow the user to view the entire contents of
large multiple records, you should place some of the text items on a scrollable canvas.
At run time, users can use the canvas scrollbar, or functionality provided by using the
SCROLL_VIEW built-in, to view their data.

Web Design Tip


When you design your base HTML file you can incorporate standard HTML features,
such as lines, tables, and frames. By placing the Form Applet within a specific frame,
you can give your Forms application a more integrated look and feel in your Web
page.
By deliberately sizing your form module window larger than the Applet area and by
preventing the user from moving or resizing the window, you can hide the window
title bar and frame from your Web users. This will enable you to present the form
application as an integral part of the HTML page.
For information on manipulating the base HTML file, attend the course Oracle 9iAS
Forms Services: Deploy Internet Applications.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 5-25
Lesson 5: Controlling Windows and Canvases Programmatically
......................................................................................................................................................

Managing Images
for Web-Deployed Forms

• Application images are specified outside the form


module
– Splash screens
– Background images
• Form Module images are specified within the form
– Image Items
– Boilerplate Images

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
5-26 Oracle iDS Forms: Build Internet Applications II
Managing Images for Web-Deployed Forms
......................................................................................................................................................

Managing Images for Web-Deployed Forms


You can display images with Form Builder in image items or as a boilerplate object on
a canvas. With Web-deployed forms you can also specify Splash and Background
images.
The splash screen is only displayed while the Forms Applet is downloaded. You can
customize the splash screen image by specifying the splashScreen parameter for the
Forms Applet.
Background images are displayed in the Applet area until the application is
terminated. You can display a background image by specifying the backGround
parameter for the Forms Applet.

Parameter Description
splashScreen Identifies the file containing image to be displayed
backGround Identifies the file containing image background

Web Design Tip


Minimize the use of background objects on your canvases. There is an overhead in
downloading images, boilerplate text, and graphics, which can adversely affect
performance in Web-deployed forms. Therefore you should try to:
• Use the Prompt item property instead of boilerplate text.
• Define only common boilerplate graphics such as rectangles and lines.
For further information on the performance of Web-deployed forms, see the course
Oracle 9iAS Forms Services: Deploy Internet Applications.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 5-27
Lesson 5: Controlling Windows and Canvases Programmatically
......................................................................................................................................................

Summary

In this lesson, you should have learned how to:


• Manage Window-interaction with
– SYSTEM.EVENT_WINDOW
– Window triggers
– Window Built-ins
• Manipulate canvases and tab canvases
with Built-ins

Copyright  Oracle Corporation, 2001. All rights reserved.

Summary

• Relate Windows to Data Blocks


– Multiple blocks correspond to multiple
windows.
– Window activation does not induce navigation.
– Transaction management is block-oriented.
• Manage Windows in Web-deployed forms
– MDI and SDI windows
– Sizing the Applet area
– Managing Images

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
5-28 Oracle iDS Forms: Build Internet Applications II
Summary
......................................................................................................................................................

Summary
Window-Interaction Triggers
• When-Window-Activated
• When-Window-Deactivated
• When-Window-Closed
• When-Window-Resized
Use the SYSTEM.EVENT_WINDOW system variable to keep track
of the triggered window.

Built-ins for Manipulating Windows


• Manipulating Windows
• Manipulating Canvases
• Manipulating Views

Windows and Blocks


• Windows may contain multiple blocks and blocks may be located
on several windows.
• Forms will not automatically navigate to an item located
in an activated window.
• Transaction management is block-oriented rather than
window-oriented.

Web-deployed Forms
• MDI and SDI windows
• Applet Areas
• Separate frames
• Display Large Data Blocks
• Splash Screens and Background Images

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 5-29
Lesson 5: Controlling Windows and Canvases Programmatically
......................................................................................................................................................

Practice 5 Overview

This practice covers the following topics:


• Building a multiple-window form
– Using window interaction triggers
– Using window and canvas-view built-ins
• Enhancing the tab canvas functionality by
– Customizing tab page navigation
– Disabling tab pages

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
5-30 Oracle iDS Forms: Build Internet Applications II
Practice Overview: Lesson 5
......................................................................................................................................................

Practice Overview: Lesson 5


This practice guides you through managing a multiple-window form and tab canvases
programmatically.

Practice Contents
• Build a multiple-window form and use the appropriate window
interaction triggers and built-ins to:
- Exit the form when in the primary content canvas window
- Navigate to the primary content canvas window when closing
another window in the form
- Enforce navigation between form windows
• Customize tab page navigation.
• Disable the Customers comment tab page when there is no data to
display.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 5-31
Lesson 5: Controlling Windows and Canvases Programmatically
......................................................................................................................................................

Practice 5
1 Manipulate a multiple-window form.
a In your ORDERS form module, ensure that the form is exited when a
user closes the Orders window using the window system menu box.
An alert should be displayed to users asking them to confirm that
they wish to leave the application.
b If a user closes the Inventory window through the system menu box,
ensure that the form remains open with the cursor positioned in the
Orders window.
c Whenever the user navigates between the Order and Inventory
windows, place the cursor in the first navigable item within the
current window.
d Save and compile your form. Deploy your form to the Web to test.

2 In your CUSTOMERS form module, define triggers to manage tab page


navigation.
a Using an appropriate trigger, disable the COMMENTS tab page
whenever the COMMENTS item contains no text.
b The trigger should fire whenever the user navigates to another
record.
c Whenever the user moves from one tab page to another, ensure that
the mouse cursor is placed in the first navigable field within the
page.
d Save and compile your form. Deploy your form to the Web to test.

If you have time


3 How can you ensure that the user is returned to the first navigable item
within a tab page after navigating from the last navigable item?

4 How can you enforce item navigation dynamically within a tab page?

......................................................................................................................................................
5-32 Oracle iDS Forms: Build Internet Applications II
................................

Defining Data Sources


Lesson 6: Defining Data Sources
......................................................................................................................................................

Objectives

After completing this lesson, you should be able to


do the following:
• Describe the various data source types
• Base a data block on a FROM clause query
• Describe the advantages of using a
FROM clause query

Copyright  Oracle Corporation, 2001. All rights reserved.

Objectives

After completing this lesson, you should be able to


do the following:
• Base a data block on a stored procedure
• Return a REF cursor from a stored procedure
• Return a table of records from a stored procedure
• Select the appropriate data source for a
data block

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Topic Timing
Lecture 40 minutes
Practice 30 minutes
Total 70 minutes

......................................................................................................................................................
6-2 Oracle iDS Forms: Build Internet Applications II
Introduction
......................................................................................................................................................

Introduction
Overview
This lesson introduces you to the different data source types that you can use
for data blocks. This lesson also provides you with some guidelines for
choosing the best data source for the job.

Objectives
After completing this lesson, you should be able to do the following:
• Describe the various data source types
• Base a data block on a FROM clause query
• Discuss the advantages of using a FROM clause query
• Base a data block on a stored procedure that returns a REF cursor
• Select the appropriate data source for a data block

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 6-3
Lesson 6: Defining Data Sources
......................................................................................................................................................

Data Source Types

Query DML

Table Table
FROM clause Company Name:
query
Company Code:
Stored Stored
procedure Balance: procedure
Transactional Transactional
trigger trigger

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
6-4 Oracle iDS Forms: Build Internet Applications II
Data Source Types
......................................................................................................................................................

Data Source Types


In the previous course, Oracle 9iDS Forms: Build Internet Applications I,
you learned that a data block had a base table that served as the data source
for both queries and DML operations. A base table is not the only source for
a data block, however, and you can specify the data source for the query
separately from DML.

Data Sources for Query Operations


For query operations, you can base your blocks on:
• Database tables or views
• Stored procedures
• Transactional triggers
• The FROM clause query (subquery)
You can also change the base table of a block dynamically at run time.

Data Sources for DML Operations


For DML operations, you can base your blocks on:
• Database tables or views
• Stored procedures
• Transactional triggers
A data block based on a stored procedure can return data from a REF cursor
or a PL/SQL table of records. If your data block has database-intensive
multiple validation lookup or derived fields, this method of partitioning
application logic onto the server can improve application performance.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 6-5
Lesson 6: Defining Data Sources
......................................................................................................................................................

Basing a Data Block


on a FROM Clause Query

SELECT...

FROM...

(SELECT...

FROM...

WHERE... WHERE...)

Copyright  Oracle Corporation, 2001. All rights reserved.

Why Use a FROM Clause Query?

Perform joins, lookups, and calculations on the


server (thus avoiding multiple network trips) without
having to define a view every time
• Improves developer productivity
• Reduces the burden on the DBA
• Improves performance

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Demonstration: Run the from_clause.sql and
from_clause3.sql scripts to illustrate a FROM clause query.

......................................................................................................................................................
6-6 Oracle iDS Forms: Build Internet Applications II
Basing a Data Block on a FROM Clause Query
......................................................................................................................................................

Basing a Data Block on a FROM Clause Query


You can use a FROM clause query as the data source for a data block. A
FROM clause query is a feature of the Oracle Server that enables you to nest
a SELECT statement in the FROM clause of a SELECT statement.
A FROM clause query is a valid query block data source, but it is not a valid
DML block data source. The value returned from a FROM clause query is a
subset of records from the original query.

Example
SELECT deptno, sal_total
FROM
( SELECT deptno, SUM(sal) sal_total
FROM emp
HAVING SUM(sal) > 5000
GROUP BY deptno
)
ORDER BY deptno ;

Why Use a FROM Clause Query?


FROM clause queries are used to perform:
• Joins
• Lookups
• Calculations
This is done without having to create a view on the server. FROM clauses
queries can also be used to prototype views and to increase performance.
Using a FROM clause query as a block data source is similar to using a view
based on an updatable join as a block data source. However, a FROM clause
query provides you with more control, because the presence of a DBA is not
required to define the view.
Note: The FROM clause query produces results that are identical to an
updatable join-view from the client side, but for which there is no defined
view on the server.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 6-7
Lesson 6: Defining Data Sources
......................................................................................................................................................

Basing a Data Block on a Stored


Procedure for Query Operations

Return data by way of:


• REF cursor
• A Table of records

Procedure Querying Data block

Empno Ename Job Hire date


Company Name:
1234 Jones Clerk 01-Jan-95 Company
Company Code:
1235 Smith Clerk 01-Jan-95 Company Name:
Code:
Balance:
1236 Adams Clerk Balance:
01-Jan-95
1237 Clark Clerk 01-Jan-95
®

Copyright  Oracle Corporation, 2001. All rights reserved.

Basing a Data Block on a Stored


Procedure for DML Operations

• Return data by way of a table of records

Procedure Updating Data block

Empno Ename Job Hire date


Company Name:
1234 Jones Clerk 01-Jan-95 Company
Company Code:
1235 Smith Clerk 01-Jan-95 Company Name:
Code:
Balance:
1236 Adams Clerk Balance:
01-Jan-95
1237 Clark Clerk 01-Jan-95
®

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
6-8 Oracle iDS Forms: Build Internet Applications II
Basing a Data Block on a Stored Procedure
......................................................................................................................................................

Basing a Data Block on a Stored Procedure


You can base a data block on a stored procedure. A stored procedure returns
data by using either a REF cursor or a table of records.

What Is a REF Cursor?


A REF cursor defines a SELECT statement that is the source of the records.
You can use this cursor to perform array fetches of SELECT statements
opened by a server-side procedure.
A REF cursor is a pointer to a server-side cursor variable. It is analogous to a
pointer in C in that it is an address to a location in memory. The stored
procedure returns a reference to a cursor that is open and populated by a
SELECT statement to be used as a block data source.
A stored procedure that uses a REF cursor can be used only as a query block
data source; it cannot be used as a DML block data source. Using a REF
cursor is ideal for queries that depend only on variations in SQL SELECT
statements and not PL/SQL.

What Is a Table of Records?


A table of records is a PL/SQL V2.3 variable that is essentially an array of
rows.
You can think of a table of records as an image of a table in memory. The
server-side procedure constructs this array, usually based on parameters
passed to it, and passes back the resulting “set” of records to a data block.
Forms treats the resulting table of records exactly as if it were fetching a
series of rows from a table.
Unlike a view or a REF cursor, you are not limited to what you can express
as a SQL SELECT statement. Anything you can code in PL/SQL is possible;
for example, a tree-walk that includes a join.
Using a table of records is extremely efficient in terms of the savings on
network traffic because it takes a single round-trip (from client to server) to
execute the stored procedure and a single round-trip to return the records.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 6-9
Lesson 6: Defining Data Sources
......................................................................................................................................................

Example of Query Using


a REF Cursor Procedure

Define a package specification with:


• The objects returned by the REF cursor
• The REF cursor
• The query procedure: Data returned
through the first argument (IN OUT)
Define a package body: Write the code for
the query procedure

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Demonstration: Edit the RefCurSpec.sql and RefCurBody.sql
scripts to show the code of a stored procedure using a REF cursor.

......................................................................................................................................................
6-10 Oracle iDS Forms: Build Internet Applications II
Example of a Query Using a REF Cursor Procedure
......................................................................................................................................................

Example of a Query Using a REF Cursor Procedure


This is an example of a stored procedure that returns a REF cursor as a block
data source. A package is used to group the related data types and
procedures logically.
-- Define Package Specification
PACKAGE emp_pkg IS
-- Defines the objects returned by the REF Cursor
TYPE emprec IS RECORD ( empno emp.empno%TYPE,
ename emp.ename%TYPE );

-- Defines the Ref Cursor


TYPE empcur IS REF CURSOR RETURN emprec;

-- Defines the procedure used for querying records


PROCEDURE empquery_refcur ( block_data IN OUT empcur,
p_deptno IN NUMBER);
END;

-- Defines Package Body


PACKAGE BODY emp_pkg IS
PROCEDURE empquery_refcur ( block_data IN OUT empcur,
p_deptno IN NUMBER)
IS
BEGIN
OPEN block_data FOR
SELECT empno, ename
FROM emp
WHERE deptno = NVL( p_deptno, deptno )
ORDER BY empno;
END;
END;

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 6-11
Lesson 6: Defining Data Sources
......................................................................................................................................................

Example of Query Using


a REF Cursor Procedure

Define a package specification with:


• The objects returned by the REF cursor
• The REF cursor
• The query procedure: Data returned
through the first argument (IN OUT)
Define a package body: Write the code for
the query procedure

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Demonstration: Edit the TorQuerySpec.sql and
TorQueryBody.sql scripts to show the code of a stored procedure using
a table of records.

......................................................................................................................................................
6-12 Oracle iDS Forms: Build Internet Applications II
Example of Query Using a Table of Records Procedure
......................................................................................................................................................

Example of Query Using a Table of Records Procedure


This is an example of a stored procedure that returns a table of records as a
block data source. A package is used to group the logically related data types
and procedures.
-- Define Package Specification
PACKAGE emp_pkg IS
-- Defines each row of the table
TYPE emprec IS RECORD ( empno emp.empno%TYPE,
ename emp.ename%TYPE );
-- Defines the Table of records
TYPE emptab IS TABLE OF emprec INDEX BY BINARY_INTEGER;
-- Defines the procedure used for querying records
PROCEDURE empquery_tab ( block_data IN OUT emptab,
p_deptno IN NUMBER );
END;
-- Defines Package Body
PACKAGE BODY emp_pkg IS
PROCEDURE empquery_tab ( block_data IN OUT emptab,
p_deptno IN NUMBER )
IS
i NUMBER;
CURSOR empsel IS
SELECT empno, ename
FROM emp
WHERE deptno = NVL( p_deptno, deptno );
BEGIN
OPEN empsel;
i := 1;
LOOP
FETCH empsel INTO block_data(i).empno,
block_data(i).ename;
EXIT WHEN empsel%NOTFOUND;
i := i + 1;
END LOOP;
END;
END;

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 6-13
Lesson 6: Defining Data Sources
......................................................................................................................................................

Example of DML Using


a Table of Records Procedure

Define a package specification with:


• The structure of each row of the table
• The table of records
• A procedure to insert rows
• A procedure to update rows
• A procedure to delete rows
• A procedure to lock rows
Define a package body by writing the code for
each DML procedure

Copyright  Oracle Corporation, 2001. All rights reserved.

Note
See Appendix F, “Handling Server-Side Errors” for code details.

Instructor Note
Demonstration: Edit the TorDMLSpec.sql and TorDMLBody.sql
scripts to demonstrate the code for a table of records in a stored procedure.

......................................................................................................................................................
6-14 Oracle iDS Forms: Build Internet Applications II
Example of DML Using a Stored Procedure
......................................................................................................................................................

Example of DML Using a Stored Procedure


This is an example of a stored procedure that inserts rows using a table of
records as a block data source. A package is used to group the logically
related data types and procedures. You should define procedures that update,
delete, and lock rows also.
-- Define Package Specification
PACKAGE emp_pkg IS
-- Defines each row of the table
TYPE emprec IS RECORD ( empno emp.empno%TYPE,
ename emp.ename%TYPE,
mgr emp.mgr%TYPE,
deptno emp.deptno%TYPE );
-- Defines the Table of records
TYPE emptab IS TABLE OF emprec INDEX BY BINARY_INTEGER;
-- Defines the procedure used for inserting records
PROCEDURE empinsert ( block_data IN emptab );
END;

-- Defines Package Body


PACKAGE BODY emp_pkg IS
PROCEDURE empinsert ( block_data IN emptab )
IS
i NUMBER;
cnt NUMBER;
BEGIN
cnt := block_data.count;
FOR i IN 1..cnt LOOP
INSERT INTO emp (empno, ename, mgr, deptno)
VALUES (block_data(i).empno, block_data(i).ename,
block_data(i).mgr, block_data(i).deptno);
END LOOP;
END;
END;

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 6-15
Lesson 6: Defining Data Sources
......................................................................................................................................................

Returning a REF Cursor

SQL
SELECT

Procedure

Query 1 2 REF cursor

REF cursor
3
Fetched rows
4
®

Copyright  Oracle Corporation, 2001. All rights reserved.

Returning a Table of Records

Any
PL/SQL
code
Procedure

Query 1 2 Cursor

Cursor
3
Table of records
4
®

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
6-16 Oracle iDS Forms: Build Internet Applications II
Deciding Whether to Use a REF Cursor or a Table of Records
......................................................................................................................................................

Deciding Whether to Use a REF Cursor or a Table


of Records
When deciding whether to use a REF cursor or a table of records, take into
account the following considerations.

Queries or DML on a Table


Executing queries or DML on a table takes one round trip per array size of
rows returned.

Queries with Stored Procedure Returning a REF Cursor


Executing queries using a stored procedure that returns a REF cursor takes
one round trip to execute the stored procedure(1, 2), plus one round trip
(3, 4) per array size of rows returned.

Queries or DML with Stored Procedure Using PL/SQL Tables of Records


Executing queries or DML with stored procedures using PL/SQL tables of
records takes one round trip to execute the stored procedure (1,2) plus one
round trip (3,4) for all the rows.

Performance Implications of REF Cursors or Table of Records


If you are dealing with a large number of rows, the disadvantage of PL/SQL
tables of records is that all the rows must be processed at once. For querying,
this means you might retrieve rows that the user does not need and never
displays.
• REF cursor: The number of records fetched depends on the Array Fetch
property value.
• Table of records: All records are fetched.
If you want to view all records, a table of records is more efficient. However,
if the table of records returns 10,000 records and you look only at 3, it is not
an efficient option. For querying and DML, you use an unnecessary amount
of memory because all the rows must be in memory at the same time.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 6-17
Lesson 6: Defining Data Sources
......................................................................................................................................................

Data Block Wizard

Use the Data Block Wizard to specify the following:


• Data source type
• Query procedure
• Insert procedure
• Update procedure
• Delete procedure
• Lock procedure

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Demonstration: If they do not already exist, create and populate the EMP
and DEPT tables using the UTLSample.sql file. Run the
TorDMLSpec.sql and TorDMLBody.sql scripts.
Create a new form module. Base the block on a stored procedure.
The query procedure is emp_pkg.empquery.
The insert procedure is emp_pkg.empinsert.
The update procedure is emp_pkg.empupdate.
The delete procedure is emp_pkg.empdelete.
The lock procedure is emp_pkg.emplock.

......................................................................................................................................................
6-18 Oracle iDS Forms: Build Internet Applications II
Data Block Wizard
......................................................................................................................................................

Data Block Wizard


The Data Block Wizard simplifies and automates the process of creating
blocks. You saw how to use it in the previous course, Oracle 9iDS Forms:
Build Internet Applications I.
Use the Data Block Wizard even if you want to create a data block based on
stored procedure. You just have to specify the following:

Property Description
Data source type Specifies if the data block is based on a table or a stored procedure
Query procedure Name of the procedure used to query rows
Insert procedure Name of the procedure used to insert rows
Update procedure Name of the procedure used to update rows
Delete procedure Name of the procedure used to delete rows
Lock procedure Name of the procedure used to lock rows

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 6-19
Lesson 6: Defining Data Sources
......................................................................................................................................................

Data Block Properties for Queries

Copyright  Oracle Corporation, 2001. All rights reserved.

Data Block Properties for DML

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Demonstration: Use the form created previously to illustrate these
properties.

......................................................................................................................................................
6-20 Oracle iDS Forms: Build Internet Applications II
Data Block Properties
......................................................................................................................................................

Data Block Properties


Data Block Properties for Queries

Property Description
Query Data Source Type Specifies the query data source type for the data block
Query Data Source Name Specifies the name of the block query data source.
(Used when the query data source type is Table, Sub-
query, or Procedure.)
Query Data Source Columns Specifies the names and data types of columns associ-
ated with the query data source. (Used when the query
data source type is Table, Subquery, or Procedure.)
Query Data Source Arguments Specifies the names, data types, and values of the argu-
ments that are to be passed to the procedure for query-
ing data (Used only if the query data source type is
Procedure.)

Data Block Properties for DML

Property Description
DML Data Target Type Specifies the DML data source type for the data block
DML Data Target Name Specifies the name of the DML data source for the data
block (Used only if the DML data target type is Table.)
(Insert, Update, Delete, Lock) Specifies the name of the procedure to be used (Used
Procedure Name only if the DML data target type is Procedure.)
(Insert, Update, Delete, Lock) Specifies the names and data types of the
Procedure Result Set Columns result set columns associated with the
procedure (Used only if the DML data
target type is Procedure.)
(Insert, Update, Delete, Lock) Specifies the names, data types, and values
Procedure Arguments of the arguments that are to be passed to the
procedure (Used only if DML data target
type is Procedure.)

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 6-21
Lesson 6: Defining Data Sources
......................................................................................................................................................

Data Source Guidelines

Base a data block on a FROM clause query to:


• Create a “dynamic” view
• Perform validation and DML on the
server side

Copyright  Oracle Corporation, 2001. All rights reserved.

Data Source Guidelines

Base a data block on a stored procedure to:


• Increase control and security
• Specify a SELECT statement at run time
• Query or update multiple tables
• Perform complex computations
• Perform validation and DML on the
server side

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Demonstration: Use the Stored Procedures demonstration to illustrate how
to use the same block to display data from different tables. Before the
demonstration, run the OrderSpec.sql and OrderBody.sql scripts.

......................................................................................................................................................
6-22 Oracle iDS Forms: Build Internet Applications II
Data Source Guidelines
......................................................................................................................................................

Data Source Guidelines


Using a FROM Clause Query
You base a data block on a FROM clause query to:
• Create a dynamic view
• Perform validation and DML on the server side

Using Stored Procedures


You base a data block on a stored procedure when you want to:
• Increase control and security
Using a stored procedure, you do not have to grant select access on the
table to the users, just EXECUTE privileges on the procedure.
• Specify a SELECT statement at run time
Using a REF cursor, if the logged-on user is a manager, open the cursor
as SELECT last_name, salary FROM s_emp; otherwise open
the cursor as SELECT last_name, null FROM s_emp.
• Base a block on multiple tables
Using a REF cursor and depending on some parameter to the procedure,
you could open the cursor either as SELECT * FROM open_orders
(current data) or as SELECT * FROM closed_orders (old data).
• Perform complex computations and decisions
Using a table of records, return the salary of all employees that you
manage, but NULL for the salary of other employees.
• Perform validation and DML on the server side
If your data block has multiple validation lookup or derived fields that
are database-intensive, this method of partitioning the application logic
onto the server can vastly improve the performance of applications.
• Encapsulate logic within a subprogram
• Reduce traffic through array processing, using a REF cursor

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 6-23
Lesson 6: Defining Data Sources
......................................................................................................................................................

Data Source Guidelines

Data Source Query DML

Table YES YES

View YES YES

FROM Clause YES NO

Proc-Ref Cur YES NO

Proc-Table Rec YES YES

Transac. Trigger YES YES

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
6-24 Oracle iDS Forms: Build Internet Applications II
Data Source Guidelines
......................................................................................................................................................

Data Source Type Restrictions


When deciding on a data block source, consider your requirements:
• Will the block be used only to query records?
• Will the block be used to perform inserts, updates, and deletes?
• Will the block be used to perform both query and DML?
To decide, you should also consider the functional restrictions for each data
source type:

Data Source Allows Query Allows DML


Table Yes Yes
View Yes Yes
FROM Clause Yes No
Procedure Using a REF Cursor Yes No
Procedure Using a Table of Records Yes Yes
Transactional Trigger Yes Yes

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 6-25
Lesson 6: Defining Data Sources
......................................................................................................................................................

Summary

In this lesson, you should have learned to:


• Base data blocks on new data sources:
– FROM clause query (query only)
– Stored procedure (query and DML)
• Exploit features of stored procedures:
– REF cursors
– Limited to a single SELECT statement
– Table of records
– Can be a complex procedure

Copyright  Oracle Corporation, 2001. All rights reserved.

Summary

• Use the Data Block Wizard to specify:


– Data source type
– Procedures for queries, updates,
deletes, and locking

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
6-26 Oracle iDS Forms: Build Internet Applications II
Summary
......................................................................................................................................................

Summary
New Data Sources
• Stored procedure (query and DML)
• FROM clause query (query only)

Stored Procedures Return


• REF cursors—limited to a single SELECT statement
• Table of records—can be a complex procedure

Using the Data Block Wizard


• Specify data source type
• Specify procedures for queries, updates, deletes, and locking

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 6-27
Lesson 6: Defining Data Sources
......................................................................................................................................................

Practice 6 Overview

This practice covers the following topics:


• Creating a package containing a stored
procedure to return a REF cursor
• Creating a data block based on a REF cursor
stored procedure

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
6-28 Oracle iDS Forms: Build Internet Applications II
Practice Overview: Lesson 6
......................................................................................................................................................

Practice Overview: Lesson 6


This practice guides you through creating a data block based on stored
procedures.

Practice Contents
• Create a package containing a stored procedure to return a REF Cursor
• Create a data block based on a stored procedure

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 6-29
Lesson 6: Defining Data Sources
......................................................................................................................................................

Practice 6
1 Create a server-side package containing a procedure to return a REF
cursor.
a Create the Orders_pkg package specification; you can import the
code from the pr6_1.txt file.
b Create the Orders_pkg package body; you can import the code from
the pr6_2.txt file.
c Examine the Orders_pkg package body to identify required
parameter values.

2 Open the ORDERREFCURSOR.fmb file and save as ORDREFXX where


XX is your student course number. This form contains a control block,
called CHOOSE, and a group of option buttons, which allows the user to
specify a parameter value to be passed to the REF cursor.
a Create a data block called SELECTION and base it on the REF
cursor procedure that you have just created.
b Pass the name of the radio group as the value for the P_VIEW
argument: ‘:choose.view_type’.
c In the layout editor, customize the canvas layout to ensure that
SELECTION items are displayed to the left of the option buttons
group.
d Save and compile your form. Deploy your form to the Web to test.

......................................................................................................................................................
6-30 Oracle iDS Forms: Build Internet Applications II
................................

Working with Oracle8i


Objects in Form Builder
Lesson 7: Working with Oracle8i Objects in Form Builder
......................................................................................................................................................

Objectives

After completing this lesson, you should


be able to:
• Recognize which object types are supported
• Describe how object types are
represented within Form Builder
• Create a block based on an object table
• Create a block based on a relation table
with an object or an REF column
• Populate a REF column with an LOV

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
7-2 Oracle iDS Forms: Build Internet Applications II
Introduction
......................................................................................................................................................

Introduction
Overview
This lesson reviews certain object features of Oracle8i and explains how
these objects are displayed in the Object Navigator.

Objectives
After completing this lesson, you should be able to do the following:
• Recognize which Oracle8i object types are supported
• Describe how Oracle8i objects are represented within Form Builder
• Create a block based on an object table
• Create a block based on a relational table with an object column or REF
column
• Populate a REF column with an LOV

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 7-3
Lesson 7: Working with Oracle8i Objects in Form Builder
......................................................................................................................................................

Object Types

Attributes

Ship

ORDER
Check po_no Cancel
status custinfo
line_items
amount

Hold
Methods

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
7-4 Oracle iDS Forms: Build Internet Applications II
What Are Object Types?
......................................................................................................................................................

What Are Object Types?


An object type is a user-defined composite data type. It is in some ways
similar to a record type, and in some ways similar to a package.
An object type is similar to a record type in that it is composed of one or
more subparts that are of predefined data types. Record types call these
subparts “fields,” but object types call these subparts “attributes.” Just as the
fields of a record type can be of other record types, the attributes of an object
type can be of other object types. Such an object type is called “nested.”
Object types are like record types in another sense: both of them must be
declared as types before the actual object or record can be declared.
An object type is also similar to a package. After an object is declared, its
attributes are similar to package variables. Like packages, object types can
contain procedures and functions. In object types, these subprograms are
known as “methods.”
As with packages, object types can be declared in two parts: a specification
and a body. Like package variables, attributes declared in the object type
specification are public and those declared in the body are private, and as
with package subprograms, all methods are defined in the package body, but
only those whose specification appears in the object type specification are
public methods.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 7-5
Lesson 7: Working with Oracle8i Objects in Form Builder
......................................................................................................................................................

Review of Objects

• Object tables
• Object columns
• Object views
• INSTEAD-OF triggers

DECLARE

BEGIN

EXCEPTION

END;

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
7-6 Oracle iDS Forms: Build Internet Applications II
Review of Objects
......................................................................................................................................................

Review of Objects
With an object type, you can create object tables, object columns, object
views, and INSTEAD-OF triggers.

Object Tables
After you have declared an object type, you can create objects based on the
type. One way to do this is to create a table whose rows are objects of that
object type. Rows in an object table are assigned object IDs (OIDs) and can
be referenced using a REF type.

Object Column
Another construct that can be based on an object type is an object column in
a relational table. In the object table, the rows of a table are objects. In a
relational table with an object column, the column is an object. The table
usually has standard columns, as well as one or more object columns. Object
columns are not assigned OIDs, and thus cannot be referenced using object
REF values.

Object View
An object view transforms the way a table appears to a user, without
changing the actual structure of the table. Object views make relational
tables look like object tables. Objects accessed through object views are
assigned OIDs, and can be referenced using object REFs.

INSTEAD OF Triggers
INSTEAD OF triggers provide a transparent way of modifying views that
cannot be modified directly through SQL DML statements (INSERT,
UPDATE, and DELETE). These triggers are called INSTEAD-OF triggers
because, unlike with other types of triggers, the Oracle server fires the
trigger instead of executing the triggering statement. The trigger performs
update, insert, or delete operations directly on the underlying tables.

Technical Note
The Database Trigger Editor includes the INSTEAD-OF triggering event.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 7-7
Lesson 7: Working with Oracle8i Objects in Form Builder
......................................................................................................................................................

References to Objects

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
7-8 Oracle iDS Forms: Build Internet Applications II
Object REFs
......................................................................................................................................................

Object REFs
When a row in an object table or object view is created, it is automatically
assigned a unique identifier called an object ID (OID). This OID value can
be stored in attributes of other objects, or columns of other tables. The stored
copy of the OID then becomes a pointer, or REF, to the original object.
(Object columns are not assigned OIDs and cannot be pointed to by a REF.)
In relational databases, primary key values are used to identify records
uniquely. In object-relational databases, OIDs provide an alternate method.
With relational tables, you can associate two records by storing the primary
key of one record in one of the columns (the foreign key column) of another.
In a similar way, you can associate two objects by storing the OID of one
object in an attribute of another, you can associate a row in a relational table
to an object by storing the OID of an object in a column of a relational table.
The attribute or column that holds the OID is of data type REF.
Remember, only the OID value for the object is stored in the table, not the
object itself.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 7-9
Lesson 7: Working with Oracle8i Objects in Form Builder
......................................................................................................................................................

Oracle8i in Oracle Forms

Supported Oracle8i features


• Large Objects: BLOB, CLOB, NCLOB, BFILE
• User-defined objects
– Object table
– Column object
– REF column
Unsupported Oracle8i features
• Collection types
• Stored procedures that return object values

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
7-10 Oracle iDS Forms: Build Internet Applications II
Supported Oracle8i Features
......................................................................................................................................................

Supported Oracle8i Features


A number of features provided in the Oracle8i Server are available in Oracle
Forms Developer. This allows greater scalability and performance in your
application.
Oracle adds support for the following Oracle8i data types:
• Large objects (LOBs): BLOB, CLOB, NCLOB, BFILE
• User-defined Oracle8i objects
• An object table, where the entire table is based on a single object type
(Oracle Forms Developer treats each column in an object table as an
individual data item.)
• A column object in an object or relational table, where the column is
based on an object type definition
• A REF column in an object or a relational table, where that column’s
values are pointers to rows in a separate object table

Unsupported Oracle8i Features


Not all Oracle8i features are currently supported by Oracle Forms
Developer. The major unsupported features are:
• Collection types, including nested tables and varying arrays
• Stored procedures that return object values

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 7-11
Lesson 7: Working with Oracle8i Objects in Form Builder
......................................................................................................................................................

How Oracle Forms Treats Objects

Object_A Object_A

Attr_A1 Attr_A1

Attr_A2

Object_B

Attr_B1 Attr_A2_B1

Attr_B2 Attr_A2_B2

Attr_A3 Attr_A3

Nested Objects Items in a Form

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
7-12 Oracle iDS Forms: Build Internet Applications II
How Oracle Forms Developer Treats Objects
......................................................................................................................................................

How Oracle Forms Developer Treats Objects


As you have learned, Oracle8i tables can contain objects. In its support for
the Oracle8i Server, Oracle Forms Developer allows you to access these
objects in an application.
A table itself can be based on an object (a table object), one or more of the
table columns can be based on an object (a column object), or one or more of
the tables’ columns can contain a reference to an object stored in another
table (REF column). Each of these objects can itself contain objects.
In these cases, the columns and attributes form a hierarchy among the
Oracle8i data types. However, Oracle Forms Developer has no hierarchy of
items. Each item lies directly below the block. Therefore, Oracle Forms
Developer must collapse the hierarchy before the columns and attributes are
mapped to items within a block. Both the hierarchy of the columns and
attributes and the “flattened” nature of the resulting items are represented in
Oracle Forms Developer’s displays and dialog boxes.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 7-13
Lesson 7: Working with Oracle8i Objects in Form Builder
......................................................................................................................................................

Object Display

Object Column

Object Table

Object REF

Object Type

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
7-14 Oracle iDS Forms: Build Internet Applications II
Object Type Displays
......................................................................................................................................................

Object Type Displays


The Object Navigator lists declared types under the Database Objects node,
along with tables, views, and other Oracle objects. The objects in the
screenshot are based on the following syntax:
-- type declaration
CREATE TYPE dept_type AS OBJECT
(id NUMBER,
name VARCHAR2(25),
region_id NUMBER(7) )
/

-- object table
CREATE TABLE oo_dept_table OF dept_type;

-- object column
CREATE TABLE rel_emp_table_ObjCol (
id NUMBER(7),
last_name VARCHAR2(25),
first_name VARCHAR2(25),
userid VARCHAR2(8),
start_date DATE, manager_id
NUMBER(7),
title VARCHAR2(25),
dept_id dept_type,
salary NUMBER(11,2),
commission_pct NUMBER(4,2) );

-- ref column
CREATE TABLE rel_emp_table_RefCol (
id NUMBER(7), last_name VARCHAR2(25),
first_name VARCHAR2(25), userid VARCHAR2(8),
start_date DATE, manager_id NUMBER(7), title
VARCHAR2(25), dept_id REF dept_type,
salary NUMBER(11,2),
commission_pct NUMBER(4,2) );

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 7-15
Lesson 7: Working with Oracle8i Objects in Form Builder
......................................................................................................................................................

Creating Data Blocks Based


on Oracle8i Objects

• Blocks based on object tables


• Blocks based on object columns
• Blocks with REF Lookups

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
7-16 Oracle iDS Forms: Build Internet Applications II
Creating Data Blocks Based on Oracle8i Objects
......................................................................................................................................................

Creating Data Blocks Based on Oracle8i Objects


Oracle Forms Developer enables you to create data blocks based on
Oracle8i objects. The Data Block Wizard has been enhanced to support
object tables. The fields of an object are displayed in a hierarchy underneath
the object column in the wizard’s Table page. Like objects in the Object
Navigator, you can expand or collapse the object columns in the display.
You can base a data block on:
• An object table
• A column object
• A REF column

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 7-17
Lesson 7: Working with Oracle8i Objects in Form Builder
......................................................................................................................................................

Blocks Based on Object Tables

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
7-18 Oracle iDS Forms: Build Internet Applications II
Selecting Object Table Columns
......................................................................................................................................................

Selecting Object Table Columns


You can create a data block based on a user-defined object table. In the Data
Block Wizard, you select object tables the same way you select relational
tables. In the wizard’s Table page, when you select an object table as the
data source, it is expanded and each of its components is displayed in the
Available Columns window. An outline format with indenting is used to
show each component of the object.
You select the type attributes the same way you select relational table
columns. Oracle Forms Developer treats each component in an object table
as a separate column, and allows you to select these columns individually.
The syntax below creates an object table based on an object type:
CREATE TYPE dept_type AS OBJECT
(id NUMBER,
name VARCHAR2(25),
region_id NUMBER(7) )
/

CREATE TABLE oo_dept_table OF dept_type


/
In the diagram, the wizard shows all the columns of the object table
OO_DEPT_TABLE (ID, NAME, REGION_ID). Select any or all as data
block items.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 7-19
Lesson 7: Working with Oracle8i Objects in Form Builder
......................................................................................................................................................

Blocks Based on Object Columns

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
7-20 Oracle iDS Forms: Build Internet Applications II
Selecting Object Column Attributes
......................................................................................................................................................

Selecting Object Column Attributes


If you base a block on an object or relational table with an object column,
the attributes of the object column appear indented beneath the name of the
object column in the Data Block Wizard. Oracle Forms Developer treats
each attribute as a separate column. You can select any combination of
columns or object column attributes. Once selected, they all “collapse” to
the same level as an item within the new block.
Data items selected from an object are given the default name
ColumnObjectName_ItemName. Selecting the object column name itself
has the effect of selecting all of the attributes of the object column.
The syntax below creates a table with an object column:
CREATE TYPE dept_type AS OBJECT
(id NUMBER,
name VARCHAR2(25),
region_id NUMBER(7) )
/

CREATE TABLE rel_emp_table_ObjCol (


id NUMBER(7),
last_name VARCHAR2(25),
first_name VARCHAR2(25),
userid VARCHAR2(8),
start_date DATE,
manager_id NUMBER(7),
title VARCHAR2(25),
dept_id dept_type,
salary NUMBER(11,2),
commission_pct NUMBER(4,2) );
In the diagram, the wizard displays ID, NAME, and REGION_ID as
columns you can select as data block items.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 7-21
Lesson 7: Working with Oracle8i Objects in Form Builder
......................................................................................................................................................

Blocks with REF Lookups

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
7-22 Oracle iDS Forms: Build Internet Applications II
Blocks with REF Lookups
......................................................................................................................................................

Blocks with REF Lookups


If you base a block on an object or relational table with a REF column, the
attributes of the object being referenced appear below the REF column in
the Available Columns window.
Once selected, the attributes of the REF column are made into items, just
like standard columns. However, the items based on REF column attributes
are created with a QUERY ONLY property value of “YES,” and INSERT
ALLOWED and UPDATE ALLOWED properties of “NO.”
The syntax below creates a table with a REF data type:
CREATE TYPE dept_type AS OBJECT
(id NUMBER,
name VARCHAR2(25),
region_id NUMBER(7) )
/
CREATE TABLE rel_emp_table_RefCol (
id NUMBER(7),
last_name VARCHAR2(25),
first_name VARCHAR2(25),
userid VARCHAR2(8),
start_date DATE,
manager_id NUMBER(7),
title VARCHAR2(25),
dept_id REF dept_type,
salary NUMBER(11,2),
commission_pct NUMBER(4,2) );
As seen in the diagram, the REF column name (DEPT_ID) appears twice in
the column selection list. It appears once as a heading for the referenced
object’s attributes and then again as a pointer. The column is selectable.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 7-23
Lesson 7: Working with Oracle8i Objects in Form Builder
......................................................................................................................................................

Using the REF Lookup Value

Select REF attribute columns: This causes the


columns to appear as data items at run-time.
Select the REF item itself:
• This causes the item to be placed on a Null canvas.
• The item does not appear at run time.
• The item is available for coding purposes.

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
7-24 Oracle iDS Forms: Build Internet Applications II
The REF Column Value
......................................................................................................................................................

The REF Column Value


The double listing of the REF column name affords you different choices.
As with a regular column object, you can select any or all of a REF’s
attribute columns. Selecting the first instance of the REF name in the
diagram on the previous page selects all its parts.
When you select one or more of the REF’s attribute columns, they appear as
normal data items in the data block at run time.
You can also select the REF itself, which is the second entry in the diagram
on the previous page. If the REF column itself is included in the block, it is
created as a nondisplay item and placed by default on the Null canvas.
Although the REF item does not appear on the canvas at run time, it is still
available for coding purposes.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 7-25
Lesson 7: Working with Oracle8i Objects in Form Builder
......................................................................................................................................................

LOVs for REFs

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
7-26 Oracle iDS Forms: Build Internet Applications II
LOVs for REFs
......................................................................................................................................................

LOVs for REFs


Users may use an LOV to select appropriate referenced values. The Data
Block Wizard presents the LOV for REF window, which enables you to
define an LOV.

How to Create the LOV


1 Select the REF desired.
2 For the REF selected, the wizard lists all the associated tables. Select the
table of your choice.
The wizard builds the LOV from the values in this table.
Note: The same LOV gets attached to all the lookup items associated with a
particular REF.
REFs are defined on object types, not on specific tables. Therefore, a REF
can point to multiple tables.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 7-27
Lesson 7: Working with Oracle8i Objects in Form Builder
......................................................................................................................................................

Summary

In this lesson, you should have learned how to:


• Identify supported Oracle8i object types
• Define data blocks based on object tables
• Define data blocks based on tables
with object columns or REF columns
• Populate REF columns with an LOV

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
7-28 Oracle iDS Forms: Build Internet Applications II
Summary
......................................................................................................................................................

Summary
• Oracle Forms Developer supports most, but not all, of the Oracle8i
object types.
• In Forms Builder, object types are displayed like columns, where
indentation shows the nesting of objects.
• Blocks can be based on object tables.
• Blocks based on object or relational tables can include object columns or
REF columns.
• REF columns can be populated with an LOV.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 7-29
Lesson 7: Working with Oracle8i Objects in Form Builder
......................................................................................................................................................

Practice 7 Overview

This practice covers the following topics:


• Creating a block based on a relational
table with an object column
• Creating a block based on a relational
table with a REF column
• Populating a REF column with an LOV

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
7-30 Oracle iDS Forms: Build Internet Applications II
Practice Overview: Lesson 7
......................................................................................................................................................

Practice Overview: Lesson 7


This practice guides you through creating data blocks based on Oracle8i
object tables.

Practice Contents
• Create a block based on a relational table with an object column
• Create a block based on a relational table with a REF column
• Populate a REF column with an LOV

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 7-31
Lesson 7: Working with Oracle8i Objects in Form Builder
......................................................................................................................................................

Practice 7
1 Create a data block based on a relational table with an object column.
a Create a form called OBJ_COLXX where XX is your student course
number.
b Using the Data Block Wizard, create a block based on the
REL_EMP_TABLE_OBJCOL relational table.
c Select the columns ID, FIRST_NAME, and LAST_NAME.
d Expand the object column DEPT_ID and select the attributes ID and
NAME. Note the names that are given to the new items.
e In the Layout Wizard, select all available items for display. Change
the prompt for item DEPT_ID to Department ID and
DEPT_ID_NAME to Department Name. Use a form layout.
f Save, compile, and test your form.

If you have time


2 Create a block based on a relational table with an REF column, and
specify an LOV to populate the REF column.
a Create a form called REF_COLXX where XX is your student course
number.
b Create a block based on the REL_EMP_TABLE_REFCOL
relational table.
c Select the columns ID, FIRST_NAME, and LAST_NAME.
d Select the DEPT_ID attributes ID and NAME.
e Create an LOV for the REF item DEPT_ID. Select the check box,
and select OO_DEPT_TABLE as the source for the LOV.
f In the Layout Wizard, select all available items for display.
g In the Object Navigator, identify the canvas with which item
DEPT_ID is associated.
h In the Object Navigator, check that an LOV and associated record
group have been created.
i Save, compile, and test the form.

......................................................................................................................................................
7-32 Oracle iDS Forms: Build Internet Applications II
................................

Controlling Data Block


Relationships
Lesson 8: Controlling Data Block Relationships
......................................................................................................................................................

Objectives

After completing this lesson, you should be able to


do the following:
• Define block coordination
• Coordinate data blocks by using REF relations
• Describe the characteristics and
principles of relation-handling code
• Implement a coordination-type toggle
• Force one commit per master record

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Topic Timing
Lecture 25 minutes
Practice 25 minutes
Total 50 minutes

......................................................................................................................................................
8-2 Oracle iDS Forms: Build Internet Applications II
Introduction
......................................................................................................................................................

Introduction
Overview
You have seen how form modules consist of data blocks based on related
tables. This lesson shows how you can modify the relationship between two
data blocks to affect the way in which deletes are handled and to what extent
the data blocks are coordinated at query time. Also, it explains how to create
relationships based on object REFs.

Objectives
After completing this lesson, you should be able to do the following:
• Define block coordination
• Coordinate data blocks by using REF relations
• Describe the characteristics and principles of relation-handling code
• Implement a coordination-type toggle
• Force one commit per master record

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 8-3
Lesson 8: Controlling Data Block Relationships
......................................................................................................................................................

Relations

• Logical objects that handle the relationship


between two blocks
• Created implicitly with a master-detail form module
• Created explicitly with the New Relation dialog box

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Demonstration: Use Orders3.fmb to demonstrate how to create
explicitly a relation between the S_ITEM and S_INVENTORY blocks.

......................................................................................................................................................
8-4 Oracle iDS Forms: Build Internet Applications II
Creating a Relation
......................................................................................................................................................

Creating a Relation
What Is a Relation?
A relation is a Form Builder object that handles the relationship between
two associated blocks.
You can create a relation either:
• Implicitly with a master-detail form module
• Explicitly in the Object Navigator

Implicit Relations
When you create a master-detail form module, a relation is automatically
created. This relation is named in the format masterblock_detailblock, for
example, S_ORD_S_ITEM.

Explicit Relations
If a relation is not established when default blocks are created, you can
create your own, either by setting the properties in the master block New
Relation dialog box, or by calling the reentrant wizard for the detail data
block. Like implicitly created relations, PL/SQL program units and triggers
are created automatically when you explicitly create a relation.

Instructor Note
The creation of explicit relations was covered in the Oracle 9iDS Forms:
Build Internet Applications I course. Use these pages to review the fact that
relations can be created implicitly or explicitly.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 8-5
Lesson 8: Controlling Data Block Relationships
......................................................................................................................................................

Block Coordination

• Coordination-causing event
• Block-coordination phases:
– Clear phase executed before change
of master record
– Populate phase executed after
change of master record
• Implementation of block coordination:
– The Copy Value from Item property
– Relation-handling triggers
– Relation-handling procedures

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Explain to students the importance of the Copy Value from Item property for
implementing block coordination.
Demonstration: Use Orders3.fmb to demonstrate the objects used to
implement a block coordination.

......................................................................................................................................................
8-6 Oracle iDS Forms: Build Internet Applications II
Block Coordination
......................................................................................................................................................

Block Coordination
To maintain a master-detail relationship, Forms coordinates the master and
detail blocks to ensure that only the detail records that belong to the current
master record are displayed.

Coordination-Causing Events
Any event that changes the master record is called a coordination-causing
event or a coordination operation. Forms automatically coordinates the
master and detail blocks again when you move to another master record.

Block Coordination Phases


Phase Description
Clear Forms clears all detail blocks before it navigates to the new master record.
Unsaved changes in detail blocks are deleted. If the Clear phase fails, Forms
stops coordination processing and does not navigate to the new master record.
Populate Forms queries all detail blocks after it has navigated to the new master record,
unless the coordination type is Deferred.

Implementation of Block Coordination


Forms implements block coordination through the following elements:
• The Copy Value from Item property on the foreign-key item in the detail
block, which specifies the corresponding primary-key item in the master
block
• Relation-handling triggers, which fire during the Clear and Populate
phases of block coordination
• Relation-handling procedures, which are called from relation-handling
triggers
Note: The elements above are controlled through the relation object.

Web Design Tip


You can reduce potential network traffic within Web-deployed forms by
specifying deferred coordination. By using relation-handling built-ins, you
can give users the run-time option of selecting either immediate or deferred
coordination.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 8-7
Lesson 8: Controlling Data Block Relationships
......................................................................................................................................................

Blocks with REF Relations

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
8-8 Oracle iDS Forms: Build Internet Applications II
Coordinate Blocks Using REFs
......................................................................................................................................................

Coordinate Blocks Using REFs


Many object-oriented languages implement master-detail relations by
storing in the detail data an internal identifier to the master data. This
internal identifier is known as a reference (REF). To support object-oriented
programming, the Data Block Wizard enables you to base the relation on a
REF rather than on a foreign key.
To create a master-detail relation based on a REF, the detail block must
contain the REF column. Create a master-detail form using REFs by doing
the following in the Data Block Wizard:
1 Create the master block and choose the columns you wish to include as
items in the block. Complete the Layout Wizard steps to finish creating
and laying out the master block.
2 Create the detail block. When you choose columns, you must choose the
REF column, because this value will be used to establish the
relationship. You should not choose the lookup columns, because doing
so causes the detail block to duplicate items that are already displayed in
the master block.
3 On the Master-Detail page of the wizard, click the Create Relationship
button. A dialog box appears listing all possible master blocks for the
relationship. Select the appropriate master block and click OK and then
Finish.
4 Complete the Layout Wizard steps to finish creating and laying out the
detail block.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 8-9
Lesson 8: Controlling Data Block Relationships
......................................................................................................................................................

Characteristics of
Relation-Handling Triggers

• On-Clear-Details: Implements the Clear phase


• On-Populate-Details: Implements the
Populate phase
• On-Check-Delete-Master: Implements the
restricted-delete rule
• Effect of trigger failure

Copyright  Oracle Corporation, 2001. All rights reserved.

Technical Note
Relation-handling triggers fire only if you have defined a corresponding
relation.

......................................................................................................................................................
8-10 Oracle iDS Forms: Build Internet Applications II
Characteristics of Relation-Handling Triggers
......................................................................................................................................................

Characteristics of Relation-Handling Triggers


Forms automatically creates and maintains relation-handling triggers to
implement block coordination and restricted-delete foreign-key rules.
Trigger Description
On-Clear-Details Fires when a coordination-causing event occurs in a
master block, before Forms navigates to the new master
record. This trigger implements the Clear phase and is
defined at the form level. If it fails, the coordination-
causing event is aborted.
On-Populate-Details Fires when a coordination-causing event occurs in a
master block, after Forms has navigated to the new master
record. However, this trigger fires only if an On-Clear-
Details trigger is also defined. This trigger implements
the Populate phase and is defined for each master block.
If it fails, it can cause the wrong detail records to be
displayed for the current master record.
On-Check-Delete-Master Fires when you attempt to delete the current master
record, before Forms deletes the record. If it fails, the
record deletion is aborted.

Note: If you specify a cascade-delete foreign-key rule for a relation, Form


Builder uses a Pre-Delete trigger to implement this rule. However, this is a
commit trigger, not a relation-handling trigger, and can also be used outside
the context of relations.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 8-11
Lesson 8: Controlling Data Block Relationships
......................................................................................................................................................

Principles of Relation-Handling Code

Three relation-handling procedures:


• CLEAR_ALL_MASTER_DETAILS
• QUERY_MASTER_DETAILS
• CHECK_PACKAGE_FAILURE
Adding your own code to relation-handling triggers:
• Forms adds comments around code.
• You add your own code before or after
these comments.

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
8-12 Oracle iDS Forms: Build Internet Applications II
Principles of Relation-Handling Code
......................................................................................................................................................

Principles of Relation-Handling Code


Forms automatically creates and maintains the PL/SQL code that is
executed in the relation-handling triggers. You can add your own code to
these triggers.

Three Relation-Handling Procedures


Procedure Called From
CLEAR_ALL_MASTER_DETAILS On-Clear-Details trigger defined on the form
level
QUERY_MASTER_DETAILS On-Populate-Details trigger defined for each
master block
CHECK_PACKAGE_FAILURE On-Populate-Details trigger and the previous
procedures

Note: The CLEAR_ALL_MASTER_DETAILS procedure gives you an


example of how to walk recursively through a hierarchical tree of blocks.

Adding Your Own Code to Relation-Handling Triggers


Forms adds comments around the PL/SQL code that it generates for relation
handling, for example:
--
-- Begin default relation program section
--
BEGIN
CLEAR_ALL_MASTER_DETAILS;
END;
--
-- End default relation program section
--
You can add PL/SQL code to relation-handling triggers before the “Begin
default relation program section” comment or after the “End default relation
program section” comment.
Note: Forms will not delete a relation-handling trigger to which you have
properly added PL/SQL code.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 8-13
Lesson 8: Controlling Data Block Relationships
......................................................................................................................................................

Obtaining Relation-Handling Information

System variables for relation handling:


• SYSTEM.MASTER_BLOCK
• SYSTEM.COORDINATION_OPERATION
Built-ins for relation handling:
• GET_FORM_PROPERTY
• GET/SET_BLOCK_PROPERTY
• GET/SET _RELATION_PROPERTY

Copyright  Oracle Corporation, 2001. All rights reserved.

Technical Note
You can use these system variables in the On-Clear-Details trigger only.
Assign their values to global variables to broaden the scope.

......................................................................................................................................................
8-14 Oracle iDS Forms: Build Internet Applications II
Obtaining Relation-Handling Information
......................................................................................................................................................

Obtaining Relation-Handling Information


You can use system variables and built-ins to obtain more information about
block coordination and relation properties. This is useful if you want to
modify the default relation-handling triggers.

System Variables for Relation Handling


Name Description
SYSTEM.MASTER_BLOCK Contains the name of the master block that
drives the current block coordination
SYSTEM.COORDINATION_OPERATION Contains the name of a block
coordination-causing event that occurred on
the driving master block (Value
examples of this system variable include
NEXT_RECORD, SCROLL_DOWN,
MOUSE, DELETE_RECORD, and
EXECUTE_QUERY.)

Built-ins for Relation Handling


Name Properties Concerning Relations
GET_FORM_PROPERTY FIRST_BLOCK,
LAST_BLOCK
GET_BLOCK_PROPERTY COORDINATION_STATUS(*),
NEXTBLOCK,
PREVIOUSBLOCK,
FIRST_DETAIL_RELATION,
FIRST_MASTER_RELATION
GET_RELATION_PROPERTY AUTOQUERY(*),
DEFERRED_COORDINATION(*),
MASTER_DELETES(*),
PREVENT_MASTERLESS_OPERATION(*),
DETAIL_NAME, MASTER_NAME,
NEXT_DETAIL_RELATION,
NEXT_MASTER_RELATION

(*): You can also set those properties using the Set-Relation-Property built-
in.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 8-15
Lesson 8: Controlling Data Block Relationships
......................................................................................................................................................

Implementing a
Coordination-Type Toggle

Define a procedure that toggles between


immediate and deferred coordination
• Use GET_BLOCK_PROPERTY to obtain
relation name.
• Use GET_RELATION_PROPERTY to
obtain current coordination type.
• Use SET_RELATION_PROPERTY to
switch to other coordination type.

Copyright  Oracle Corporation, 2001. All rights reserved.

Implementing a
Coordination-Type Toggle

Call this procedure from:


• When-Checkbox-Changed trigger
• Menu item of type Check

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Demonstration: Use Orders3.fmb to demonstrate the Coordination-
Type Toggle.
Select Query––>Deferred.

......................................................................................................................................................
8-16 Oracle iDS Forms: Build Internet Applications II
Implementing a Coordination-Type Toggle
......................................................................................................................................................

Implementing a Coordination-Type Toggle


You can use relation-handling built-ins to offer users the choice between
immediate and deferred coordination.
You can use this example procedure in a simple master-detail form and can
serve as a starting point for more complex situations; for example, you can
call this procedure from a When-Checkbox-Changed trigger on a check box
that represents the coordination type, or from a menu item of type Check.
PROCEDURE toggle_query_sync
(p_master_block in VARCHAR2)
IS
v_rel_name VARCHAR2(30);
v_rel_id RELATION;
BEGIN
v_rel_name := GET_BLOCK_PROPERTY(p_master_block,
first_master_relation);
IF v_rel_name IS NOT NULL THEN
v_rel_id := FIND_RELATION(v_rel_name);
IF GET_RELATION_PROPERTY(v_rel_id, deferred_coordination) =
’FALSE’ THEN
SET_RELATION_PROPERTY(v_rel_id,deferred_coordination,
property_true);
SET_RELATION_PROPERTY(v_rel_id,autoquery,property_true);
MESSAGE(’Query-synchronization mode: deferred.’);
ELSE
SET_RELATION_PROPERTY(v_rel_id,deferred_coordination,
property_false);
MESSAGE(’Query-synchronization mode: immediate.’);
END IF;
END IF;
END toggle_query_sync;
.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 8-17
Lesson 8: Controlling Data Block Relationships
......................................................................................................................................................

Forcing a Commit Per Master

Define a procedure that:


• Updates the commit status by
performing validation
• Checks the commit status of the master record
• Raises FORM_TRIGGER_FAILURE in
case of changes

Copyright  Oracle Corporation, 2001. All rights reserved.

Forcing a Commit Per Master

Call the procedure:


• In the On-Clear-Details trigger
• Before the “Begin default relation
program section” comment

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Demonstration: Use Mascmt.fmb to demonstrate Commit Per Master.

......................................................................................................................................................
8-18 Oracle iDS Forms: Build Internet Applications II
Forcing a Commit Per Master
......................................................................................................................................................

Forcing a Commit Per Master


In some cases, you must commit changes in master-detail forms before a
change of master record takes place, for example, when checking database-
level constraints, such as a mandatory relationship.
You must call the procedure below from the On-Clear-Details trigger before
the “Begin default relation program section” comment. Note that if the On-
Clear-Details trigger fails, the change of master record is aborted.
PROCEDURE check_master_change
IS
v_master_record NUMBER;
BEGIN
-- Force update of record status.
VALIDATE(record_scope);
IF FORM_SUCCESS THEN
-- Check if master record has been modified.
v_master_record :=
GET_BLOCK_PROPERTY(NAME_IN(’system.master_block’),
current_record);
IF GET_RECORD_PROPERTY(v_master_record,
NAME_IN(’system.master_block’),status)
IN (’INSERT’, ’CHANGED’) THEN
MESSAGE(’You must commit first before you go to another
master record.’);
RAISE form_trigger_failure;
END IF;
ELSE
-- Validation error.
RAISE form_trigger_failure;
END IF;
END check_master_change;

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 8-19
Lesson 8: Controlling Data Block Relationships
......................................................................................................................................................

Summary

In this lesson, you should have learned how to:


• Define Relation coordination properties
• Manage data block coordination
– Coordination-causing events change
the master record
– Clear and populate

Copyright  Oracle Corporation, 2001. All rights reserved.

Summary

• Obtain relation-handling information


– Identify characteristics of relation-handling
triggers
– Identify characteristics of relation-handling
procedures
• Coordinate data blocks with REF Elements

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
8-20 Oracle iDS Forms: Build Internet Applications II
Summary
......................................................................................................................................................

Summary
Creating Relations
• Implicitly, when you create a master-detail form module
• Explicitly, by creating the relation after the blocks have been created

Block Coordination
• Coordination-causing events cause a change of the master record.
• The two block-coordination phases are the Clear and Populate phases.
• Base coordination of blocks on REF values.

Elements Involved in the Implementation of Block Coordination


• The Copy Value from Item property
• Relation-handling triggers and procedures

Characteristics of Relation-Handling Triggers


• On-Clear-Details implements the Clear phase.
• On-Populate-Details implements the Populate phase.
• On-Check-Delete-Master implements restricted-delete rules.

Principles of Relation-Handling Code


• The three relation-handling procedures are
CLEAR_ALL_MASTER_DETAILS, QUERY_MASTER_DETAILS,
and CHECK_PACKAGE_FAILURE.
• Add your own code to relation-handling triggers before or after
comments generated by Forms.

Obtaining Relation-Handling Information


• There are two system variables for relation handling.
• You can use built-ins for relation handling to get relation names and to
get or set relation properties.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 8-21
Lesson 8: Controlling Data Block Relationships
......................................................................................................................................................

Practice 8 Overview

This practice covers the following topics:


• Examining and changing relation properties
• Implementing a coordination-type toggle for a
master-detail form
• Synchronize coordination-type toggle at form
startup

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
8-22 Oracle iDS Forms: Build Internet Applications II
Practice Overview: Lesson 8
......................................................................................................................................................

Practice Overview: Lesson 8


This practice guides you through choosing the appropriate user-initiated and
forms event triggers to implement the desired data block relation
functionality.

Practice Contents
• Examining and changing relation properties
• Using check boxes to implement a coordination-type toggle for a master-
detail form.
- The first check box should enable a user to toggle between
immediate coordination and deferred coordination.
- The second check box should enable a user to toggle between auto
query and no auto query in the detail block.
• Synchronizing the coordination-type toggle at form startup.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 8-23
Lesson 8: Controlling Data Block Relationships
......................................................................................................................................................

Practice 8
1 Open your ORDERS form and examine the properties of the relation
called S_ORD_S_ITEM.
a Note the deletion and coordination property values.
b Run the ORDERS form and test the way deletes are handled.
2 Implement a query coordination-type toggle.
a Add two check boxes to the control block with the following
properties:

Property Check Box 1 Check Box 2


Name IMMEDIATE AUTO_QUERY
Enabled Yes No
Label Immediate Auto Query
Value When Checked Y Y
Value When Unchecked N N
Check Box Mapping of CHECKED UNCHECKED
Other Value
Keyboard Navigable No No
Mouse Navigate No No
Data Type CHAR CHAR
Initial Value Y Y
DataBase Item No No
Canvas TOOLBAR TOOLBAR

b Use the Layout Editor to position the check boxes appropriately in


the Toolbar canvas.
c Make sure that the first check box enables a user to toggle between
immediate coordination and deferred coordination. You can import
the code from the pr8_1.txt file.
d Make sure that the second check box enables a user to toggle
between automatic query and no automatic query for the detail
block. This check box should be disabled if the other check box
indicates immediate coordination. You can import the code from the
pr8_2.txt file.
e Save, compile, and test your form.

......................................................................................................................................................
8-24 Oracle iDS Forms: Build Internet Applications II
Practice 8
......................................................................................................................................................

If you have time


3 Synchronize the check boxes at form startup.
a Open your ORDERS form module
b Create a procedure called SYNCHRONIZE_CHECKBOX. This
procedure synchronizes the IMMEDIATE and AUTO_QUERY
check boxes with the current default value. You can import the code
from the pr8_3.txt file.
c Call this procedure from the When-New-Form-Instance trigger.
d Save, compile, and test your module.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 8-25
Lesson 8: Controlling Data Block Relationships
......................................................................................................................................................

......................................................................................................................................................
8-26 Oracle iDS Forms: Build Internet Applications II
................................

Building Multiple Form


Applications
Lesson 9: Building Multiple Form Applications
......................................................................................................................................................

Objectives

After completing this lesson, you should be able to


do the following:
• Describe the different ways of invoking
additional forms
• Open, call, and close forms
• Navigate between Web-deployed
form modules

Copyright  Oracle Corporation, 2001. All rights reserved.

Objectives

After completing this lesson, you should be able to


do the following:
• Control opened forms and called forms
• Manage transaction processing for
opened forms and called forms
• Choose the most appropriate method
for invoking forms
• Pass form parameters

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Topic Timing
Lecture 45 minutes
Practice 45 minutes
Total 90 minutes

......................................................................................................................................................
9-2 Oracle iDS Forms: Build Internet Applications II
Introduction
......................................................................................................................................................

Introduction
Overview
You have already seen that Oracle Forms Developer applications frequently consist of
more than one form. This lesson revisits the topic of multiple form applications and
takes a deeper look into the ways in which one form module can invoke another and
the effects this has on transaction processing.

Objectives
After completing this lesson, you should be able to do the following:
• Describe the various ways of invoking additional form modules
• Open, call, and close form modules
• Navigate between Web-deployed form modules
• Control open form modules and called form modules
• Manage transaction processing for open and called form modules
• Choose the most appropriate method for invoking form modules
• Pass form parameters

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 9-3
Lesson 9: Building Multiple Form Applications
......................................................................................................................................................

OPEN_FORM to Invoke
Additional Forms

• Modeless
• Different transaction scopes

A B

OPEN_FORM(’form_name’,
OPEN_FORM(’form_name’, activate_mode,
activate_mode,
session_mode,
session_mode, data_mode,
data_mode, paramlist);
paramlist);

Copyright  Oracle Corporation, 2001. All rights reserved.

Characteristics of OPEN_FORM

• Restricted
• Not valid in Enter Query mode
• No savepoint issued
• Modeless with respect to other opened forms
• Session run time option: FORMS60_SESSION

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Explain that “different transaction scopes” refers to the SESSION/NO_SESSION
parameter of the OPEN_FORM built-in.

......................................................................................................................................................
9-4 Oracle iDS Forms: Build Internet Applications II
OPEN_FORM to Invoke Additional Forms
......................................................................................................................................................

OPEN_FORM to Invoke Additional Forms


This built-in procedure opens another form in a modeless fashion; that is, a user can
freely switch between open forms. You can open a form within the same transaction
scope or within a new transaction scope.

Syntax
OPEN_FORM(’form_name’, activate_mode, session_mode, data_mode,
paramlist);

Parameter Description
form_name The file holding the executable module
activate_mode Either ACTIVATE (the default) or NO_ACTIVATE
session_mode Either NO_SESSION (the default) or SESSION
data_mode Either NO_SHARE_LIBRARY_DATA (the default) or
SHARE_LIBRARY_DATA
paramlist Either the name (in quotes) or internal ID of a parameter list
(This argument is optional.)

Characteristics of OPEN_FORM
• Is a restricted procedure
• Causes opened form to be modeless
• Can start a new database session

Using Data Mode to Share PL/SQL Variable Data


You can use the data mode parameter to share PL/SQL variable data between forms.
Create a package that contains the PL/SQL variables to be shared, and place the
package in a library. Attach the library to all the forms that are to share the data. In the
OPEN_FORM command, set the data_mode parameter to
SHARE_LIBRARY_CODE. Any changes made by one form are visible to the other
forms. This method of sharing data between forms is preferable to global variables
because the PL/SQL variables benefit from PL/SQL’s strong typing and because PL/
SQL variables are stored and accessed more efficiently than global variables.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 9-5
Lesson 9: Building Multiple Form Applications
......................................................................................................................................................

Closing Forms

• CLOSE_FORM:
– form_name
– form_id
• Characteristics of CLOSE_FORM:
– Restricted
– Not valid in Enter-Query mode
– CLOSE_FORM or EXIT_FORM
– Cannot close a form that called
another form

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Demonstration: Use FormFirst.fmb, FormNext.fmb, and FormPost.fmb.
Run FormFirst on the Web and use the button toolbar to demonstrate use of
OPEN_FORM, CALL_FORM and NEW_FORM, post mode, parameter passing and
shared libraries.

Explanation for next page pair (Navigating between Forms):


• Use of NEXT_FORM stops the execution of subsequent statements in
the trigger or program unit.
• The When-New-Form-Instance trigger only fires on navigation into a
form when the form is initially started.
• The When-Window-Activated trigger should be used for synchronizing
forms in a multiple-form application.
Use dept.fmb to open or call emp.fmb in order to illustrate when the triggers fire.

......................................................................................................................................................
9-6 Oracle iDS Forms: Build Internet Applications II
Closing Forms
......................................................................................................................................................

Closing Forms
Syntax
CLOSE_FORM(form_name);
CLOSE_FORM(form_id);

Parameter Description
form_name The module name of the form (not the .fmx filename)
form_id The internal form module ID of the form (of type Form Module)

Characteristics of the CLOSE_FORM Procedure


• CLOSE_FORM is a restricted procedure that is not valid in Enter Query
mode.
• When the specified form is the current form, CLOSE_FORM is
equivalent to EXIT_FORM.
• You cannot close a form that has called another form with
CALL_FORM.

Web Design Tip


The Oracle Forms Developer application will continue if you attempt to exit your
Web-deployed form application by closing the browser window, while other browser
windows are still open. It will not terminate until the browser is also closed down. It is
recommended that users are always able to close their applications either with the
CLOSE_FORM or the EXIT_FORM commands. Applications that are not terminated
will continue until timed out by the Oracle Forms Server.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 9-7
Lesson 9: Building Multiple Form Applications
......................................................................................................................................................

Navigating Between Forms

Built-ins for navigation between forms:


• NEXT_FORM
• PREVIOUS_FORM
• GO_FORM

Copyright  Oracle Corporation, 2001. All rights reserved.

Navigating Between Forms

Navigation and validation aspects:


• Each open form has a current item.
• There is no validation when navigating
between forms.
• No triggers fire when navigating
between forms, except the When-Window-
Activated/Deactivated and
When-Form-Navigate triggers.
• Click the noncurrent item in the other form.

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
9-8 Oracle iDS Forms: Build Internet Applications II
Navigating Between Forms
......................................................................................................................................................

Navigating Between Forms


You can programmatically navigate between multiple forms that have been opened
with the OPEN_FORM built-in, just as you can navigate between blocks within one
form.

Built-ins for Navigation Between Forms


Built-in Description
NEXT_FORM Navigates to the open form with the next highest sequence number
(Forms are placed in sequence in the order that they were invoked
at run time.) If there is no form with a higher sequence number,
the built-in navigates to the form with the lowest sequence num-
ber.
PREVIOUS_FORM Navigates to the open form with the next lowest sequence number
(If there is no form with a lower sequence number, this built-in
navigates to the form with the highest sequence number.)
GO_FORM Navigates to the specified form (You can use the form-module
name or the form-module ID as the form specification.)

Navigation and Validation Aspects of Inter-form Navigation


• In a multiple-form application, each open form has one item that is the
current item for that form.
• When you are navigating between open forms, no validation occurs in
the starting form. When you return to the starting form and attempt to
navigate within that form, normal validation is enforced.
• When you are navigating between (current items of) open forms, no
triggers fire. The only exceptions are the When-Window-Activated,
When-Window-Deactivated, and When-Form-Navigate triggers. Even
the navigational triggers do not fire when you are navigating between
open forms.
• The triggers that typically fire when you navigate from the current item
to the target item will fire when you click a noncurrent item of an open
form. When this happens, navigational triggers also fire and validation
occurs as required.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 9-9
Lesson 9: Building Multiple Form Applications
......................................................................................................................................................

Opening Forms Within


the Same Session

• Commit processing in all forms within


the same session, in a certain order
• If error occurs, then focus set to
initiating form
• Messages per open form within the
same session
• CLEAR_FORM usually causes a
ROLLBACK statement

Copyright  Oracle Corporation, 2001. All rights reserved.

Opening Forms in Different Sessions

Connection
Runform Server

Session
®

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
9-10 Oracle iDS Forms: Build Internet Applications II
Transaction Processing for Opened Forms
......................................................................................................................................................

Transaction Processing for Opened Forms


Opening Forms Within the Same Session
At run time, Form Builder automatically establishes a single connection to the Oracle
server. By default, one database session is created for this connection. When you open
forms within the same session, consider these issues:
• If you issue a commit, all forms will be processed in the order in which
they were opened, starting with the current form.
• If an error occurs during commit processing, Form Builder sets the input
focus to the form that initiated the commit.
• Commit processing usually causes messages to occur for every open
form within the same session. Because Form Builder maintains a
message line per open form, a user may have to acknowledge messages
from noncurrent open forms. This could be confusing.
• If you issue a CLEAR_FORM command, Form Builder will usually
issue a ROLLBACK statement, which rolls back all the changes in the
database and releases all locks. However, noncurrent open forms are not
cleared.

Opening Forms in Different Sessions


The multiple-session feature of the Oracle server enables a single client to establish
multiple database sessions within a single connection. All Oracle server transaction
management and read-consistency features are implemented at the session level.
Therefore, commit processing, record locking, and read-consistency behavior for two
forms in different sessions is the same as it would be for two independent forms with
separate connections.
• You can turn the Session option on for all Runtime invocations by
setting the FORMS60_SESSION environment variable to True.
• Forms Runtime must be running with the Session option turned on when
you execute OPEN_FORM with the SESSION_MODE parameter set to
SESSION.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 9-11
Lesson 9: Building Multiple Form Applications
......................................................................................................................................................

CALL_FORM to Invoke
Additional Forms

• Modal
• Returns to calling form

A B

CALL_FORM(‘form_name’,
CALL_FORM(‘form_name’, display,
display,
switch_menu,
switch_menu, query_mode,
query_mode,
data_mode,
data_mode, paramlist);
paramlist);

Copyright  Oracle Corporation, 2001. All rights reserved.

Characteristics of CALL_FORM

• Unrestricted
• Valid in Enter Query mode
• Savepoint issued
• Modal with respect to calling form
• Does not cause navigation and validation
• Forms called from query-only form are
always query-only
• Exiting a called form

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Demonstration: Use FormFirst.fmb to call FormNext.fmb. Illustrate use of
HIDE, NO_HIDE, and QUERY_ONLY arguments
.

......................................................................................................................................................
9-12 Oracle iDS Forms: Build Internet Applications II
CALL_FORM to Invoke Additional Forms
......................................................................................................................................................

CALL_FORM to Invoke Additional Forms


This built-in procedure calls another form in a modal fashion with respect to the
calling form; that is, you cannot work in the calling form. When the called form is
exited, Form Builder returns to the calling form.

Syntax
CALL_FORM(’form_name’, display, switch_menu, query_mode,
data_mode, paramlist);

Parameter Description
form_name The file holding the executable form module
display Either HIDE (the default) or NO_HIDE (This defines whether the call-
ing form should be hidden from view while the called form is running.)
switch_menu Either NO_REPLACE (the default) or DO_REPLACE (This defines
whether the current menu module should be replaced by the default
menu of the called form.)
query_mode Either NO_QUERY_ONLY (the default) or QUERY_ONLY (This
defines whether the called form should run in Query Only mode.)
data_mode Either NO_SHARE_LIBRARY_DATA (the default) or
SHARE_LIBRARY_DATA
paramlist Either the name (in quotes) or internal ID of a parameter list
(This argument is optional.)

Characteristics of CALL_FORM
• Is valid in Enter Query mode
• Causes Forms to issue a savepoint
• Causes called form to be modal
• Does not cause navigation or validation in the initial form
• Can call a form in Query Only mode
• Propagates query-only parameter through all subsequent called forms
• Returns control to the calling form and resumes processing of the
PL/SQL code at the statement immediately following the calling
statement (This occurs when Forms exits the called form.)

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 9-13
Lesson 9: Building Multiple Form Applications
......................................................................................................................................................

Save Not Allowed


in Post-Only Mode Form

A calling form has unapplied changes.


Save not allowed.

Copyright  Oracle Corporation, 2001. All rights reserved.

Transaction Processing
for Called Forms

• Characteristics of Post-Only mode:


– Commit not allowed, only a post
– Full rollback not allowed, only a
rollback to savepoint
• Rollback behavior of called forms
• Call savepoints and post savepoints

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Demonstration: Use FormFirst.fmb to call FormPost.fmb in post only mode.

......................................................................................................................................................
9-14 Oracle iDS Forms: Build Internet Applications II
Transaction Processing for Called Forms
......................................................................................................................................................

Transaction Processing for Called Forms


If you call forms, you need to understand the commit and rollback processing between
the forms.

What Is Post-Only Mode?


When a calling form has pending updates or deletes that have not been explicitly
posted or committed, Form Builder runs the called form in
Post-Only mode. Additionally, any form called from a form running in
Post-Only mode is also in Post-Only mode. In Post-Only mode, you can submit DML
statements to the database, but you cannot commit the changes. You can only commit
the changes after you exit the form that is running in Post-Only mode.

Characteristics of Post-Only Mode If a form runs in Post-Only mode, Forms does


not allow certain commit processing operations to prevent losing locks in the calling
form.
• A commit is not allowed, only a post. In other words, the changes are
written to the database, but a commit statement is not issued. An error
message appears on the status line: “A calling form has unapplied
changes. Save not allowed.” If a user makes changes in the called form
and then exits from the form, Forms usually asks if the user wants to
apply (post), rather than Save (commit), the changes that were made.
• A full rollback is not allowed, only a rollback to savepoint.

Rollback Behavior of Called Forms


If a user exits from a called form, Form Builder issues a rollback to the call savepoint
that was set when the form was called. This means that all changes posted in the called
form are rolled back upon exit from the called form. This is because of the
EXIT_FORM built-in default arguments:
EXIT_FORM(ask_commit, to_savepoint);
Do not confuse call savepoints, which are set when a form is called or started, with
post savepoints, which are set at the start of a post.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 9-15
Lesson 9: Building Multiple Form Applications
......................................................................................................................................................

Transaction Processing
for Called Forms

• Examples of adjusting default


transaction processing:
• Key-Commit on form

IF
IF <form
<form called>
called> THEN
THEN
POST;
POST;
ELSE
ELSE
COMMIT_FORM;
COMMIT_FORM;
END
END IF;
IF;

Copyright  Oracle Corporation, 2001. All rights reserved.

Transaction Processing
for Called Forms

Key-Exit on form

IF <form called> THEN


EXIT_FORM(ASK_COMMIT,
EXIT_FORM NO_ROLLBACK);
ELSE
EXIT_FORM;
END IF;

Adjust labels of corresponding buttons and menu items

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
9-16 Oracle iDS Forms: Build Internet Applications II
Transaction Processing for Called Forms
......................................................................................................................................................

Adjusting Default Transaction Processing for Called Forms


The characteristics of Post-Only mode and the rollback behavior of called forms
require that you adjust default transaction processing as follows:
• Redefine [Commit] so that processing performs a post when the form is
called.
• Redefine [Exit] so that processing does not perform a rollback when the
form is called.
• You may want to adjust the labels of possible buttons and menu items
that correspond to [Commit] and [Exit].

Examples
Key-Commit trigger at form level:
BEGIN
IF GET_APPLICATION_PROPERTY(calling_form) is not null THEN
POST;
ELSE
COMMIT_FORM;
END IF;
END;
Key-Exit trigger at form level:
BEGIN
IF GET_APPLICATION_PROPERTY(calling_form) is not null THEN
EXIT_FORM(ask_commit, no_rollback);
ELSE
EXIT_FORM;
END IF;
END;

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 9-17
Lesson 9: Building Multiple Form Applications
......................................................................................................................................................

NEW_FORM to Invoke
Additional Forms

Replaces calling form

A B

NEW_FORM(’form_name’,
NEW_FORM(’form_name’, rollback_mode,
rollback_mode,
query_mode,
query_mode, data_mode,
data_mode,
paramlist);
paramlist);

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
9-18 Oracle iDS Forms: Build Internet Applications II
NEW_FORM to Invoke Additional Forms
......................................................................................................................................................

NEW_FORM to Invoke Additional Forms


This built-in procedure exits from the current form and executes the specified new
form. The new form completely replaces the current form.

Syntax
NEW_FORM(’form_name’, rollback_mode, query_mode, data_mode,
paramlist);

Parameter Description
form_name The file holding the executable form module
rollback_mode Either TO_SAVEPOINT (the default), NO_ROLLBACK, or
FULL_ROLLBACK
query_mode Either NO_QUERY_ONLY (the default) or QUERY_ONLY (This
defines whether the called form should run in Query Only mode.)
data_mode Either NO_SHARE_LIBRARY_DATA (the default) or
SHARE_LIBRARY_DATA
paramlist Either the name (in quotes) or internal ID of a parameter list
(This argument is optional.)

Web Design Tip


With small Web-deployed form modules, you can reduce the time to download your
applications from the server. You can easily link Form modules together by using the
OPEN_FORM and NEW_FORM built-ins. You can therefore provide users with all
the functionality that they require, when they need it.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 9-19
Lesson 9: Building Multiple Form Applications
......................................................................................................................................................

Controlling Opened
and Called Forms

Form A Form C Form D


OPEN_FORM
S.P.
CALL_FORM
CALL_FORM

Form B
OPEN_FORM
S.P. Form F
CALL_FORM

Form E
Form A+B+E = Call form stack
®

Copyright  Oracle Corporation, 2001. All rights reserved.

Technical Note
You can obtain information about the call form stack by using the
GET_APPLICATION_PROPERTY built-in with the CALLING_FORM parameter.

Instructor Note
The slide illustrates the restrictions on using OPEN_FORM and CALL_FORM.
In this scenario, Form A calls Form B, Form B then opens Form C, Form C then opens
Form D; and Form B then calls Form E.
• The call is not allowed to navigate to Forms A and B.
• The current call form stack consists of Forms A, B, and E.
• A form cannot be called from Form C and D.
• Changes in any form are rolled back to the savepoint (S.P.) that was set
when Form E was called.

......................................................................................................................................................
9-20 Oracle iDS Forms: Build Internet Applications II
Controlling Open Forms and Called Forms Together
......................................................................................................................................................

Controlling Open Forms and Called Forms Together


When you invoke multiple forms with OPEN_FORM and CALL_FORM in the same
application, you should be aware of certain restrictions.

Call Form Stack


When you call a form with CALL_FORM, the calling form is disabled until the
operator exits from the called form. However, a called form can in turn call other
forms. When successive forms are loaded by way of CALL_FORM in this way, the
resulting form hierarchy is known as the call form stack.

Restrictions on Using OPEN_FORM with CALL_FORM


• Navigation: Any attempt to navigate programmatically to a disabled
form in a call form stack is disallowed.
• Calling forms: An open form cannot execute the CALL_FORM built-in
if a call form stack has been initiated by another open form. In other
words, you can have only one call form stack per Runform session.
• Rollback: Forms issues a savepoint when calling a form with
CALL_FORM. Any subsequent rollback, in any form, rolls back only
the changes that were made since this savepoint.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 9-21
Lesson 9: Building Multiple Form Applications
......................................................................................................................................................

Different Ways of Invoking Forms

• When to use OPEN_FORM


• When to open a form in a new session
• When to use CALL_FORM
• When to use NEW_FORM

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
With use of WEB.SHOW_DOCUMENT you are able to navigate between opened
forms by using the browser BACK and FORWARD buttons. This command is covered
in a later lesson.

......................................................................................................................................................
9-22 Oracle iDS Forms: Build Internet Applications II
Different Ways of Invoking Forms
......................................................................................................................................................

Different Ways of Invoking Forms


When to Use OPEN_FORM
OPEN_FORM is the preferred method of invoking another form. Because open forms
are modeless, a user can freely switch between them. OPEN_FORM is most
appropriate for invoking forms from the application-system menu. A drawback of
OPEN_FORM is that it may be difficult to keep multiple open forms synchronized.
For example, you may want the current order in an ORDERS form always to belong to
the current customer in a CUSTOMERS form.

When to Open a Form in a New Session


Creating new sessions is usually appropriate for forms that manage transactions that
are logically independent. If the open forms act on tables that are closely related, data
manipulation of all those forms could be considered part of one transaction. Therefore,
the forms should be opened in the same session.
Note: You can also consider using CALL_FORM in this situation.

When to Use CALL_FORM


Use CALL_FORM if you want the invoked form to be modal. This is appropriate if
the invoked form is used to set data in the invoking form; for example, in the case of
an LOV form. Another reason may be that you want to make it easier to keep the
invoking and invoked forms synchronized.

When to Use NEW_FORM


The main advantage of this built-in is that it conserves memory because the invoked
form replaces the invoking form.

Web Design Tip


Additional forms may be opened within a Web-deployed form by using the built-in
WEB.SHOW_DOCUMENT. With this command you must specify a URL to call
another form. An additional Forms run-time session, however, will be generated.
In order to run many forms within one Web-deployed Forms run-time session, use
OPEN_FORM, CALL_FORM or NEW_FORM.
Calling forms will impose a burden on client and Web Server memory. If it is unlikely
that the user will return to the calling form, (such as a login form), use NEW_FORM.
If the user will continue to use the calling form, then OPEN_FORM will save the
startup delay and use of network resources that reloading the form would otherwise
incur.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 9-23
Lesson 9: Building Multiple Form Applications
......................................................................................................................................................

Using Form Parameters

• What is a form parameter?


• How to create a form parameter

Copyright  Oracle Corporation, 2001. All rights reserved.

Passing Values to a Form

Runform
Form B
command line
Design-time
parameters

Form A P1
P2
Run time
P3
OPEN_FORM
Parameter CALL_FORM
list NEW_FORM

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
9-24 Oracle iDS Forms: Build Internet Applications II
Using Form Parameters
......................................................................................................................................................

Using Form Parameters


What Is a Form Parameter?
Form parameters provide a mechanism for supplying values that a form requires at
startup. These parameters are form variables that you define at design time.

Creating a Form Parameter


1 In the Object Navigator, create a parameter.
2 In the Property Palette window for the parameter, set the desired values
for Name, Subclass Information, Parameter Data Type, Maximum
Length, Parameter Initial Value, and Comments.

Passing Parameter Values to a Form


You can start a form from the command line or invoke it from another form. In both
cases, you can specify values for form parameters.
• Specify the parameters on the Runtime command line.
• Programmatically assign the parameters to a parameter list and specify
the parameter list in the call to OPEN_FORM, CALL_FORM, or
NEW_FORM.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 9-25
Lesson 9: Building Multiple Form Applications
......................................................................................................................................................

Using Form Parameters

• Passing a form parameter at run time:

ifrun60 module=orditem userid=scott/tiger cus_id=202

• Referencing form parameters from


within a module:
– :PARAMETER.parameter_name
– ‘PARAMETER.parameter_name’

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Demonstration: Use FormFirst.fmb to demonstrate communication with Form
Parameters and also with Shared Libraries (Passvalues.pll). Switch toolbars in
FormFirst.fmb to open FormNext with parameters or shared library values.

......................................................................................................................................................
9-26 Oracle iDS Forms: Build Internet Applications II
Using Form Parameters
......................................................................................................................................................

Example
Pass a value for the CUS_ID form parameter to the ORDITEM form by way of the
Runtime command line. Note that MODULE and USERID are predefined command
line parameters.
ifrun60.exe module=orditem userid=scott/tiger cus_id=202

Referencing Form Parameters


You can reference form parameters in a way similar to how you would access Forms
variables.
• To reference the parameter contents, use bind-variable syntax:
:PARAMETER.parameter_name, where the reserved word
PARAMETER is the fixed part.
• To reference the parameter name, put the fully qualified name between
single quotation marks: ‘PARAMETER.parameter_name’

Example
Assign the value of the CUS_ID form parameter to the CUSTOMER_ID item in the
ORDER block.
:order.customer_id := :PARAMETER.cus_id;

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 9-27
Lesson 9: Building Multiple Form Applications
......................................................................................................................................................

Parameter Lists

Parameter
list

CUS_ID TEXT_PARAMETER ‘204’

ORDERS DATA_PARAMETER ‘RG_ORD’

OPEN_FORM( …, )

CALL_FORM( …, )

NEW_FORM( …, )
The default parameter list is DEFAULT
®

Copyright  Oracle Corporation, 2001. All rights reserved.

Technical Note
The parameters whose values are being passed must be defined in the called form at
design time. That is, the called form must be expecting a value for each of the
parameters included in the parameter list it receives from the calling form.

......................................................................................................................................................
9-28 Oracle iDS Forms: Build Internet Applications II
Parameter Lists
......................................................................................................................................................

Parameter Lists
One way to supply form parameter values is to specify a parameter list in the call to
the built-in that invokes the form.

What Is a Parameter List?


A parameter list is a named programmatic construct that lists parameter names (called
keys), their types, and their values. You can specify parameter lists in the calls to the
following built-ins:
• CALL_FORM
• OPEN_FORM
• NEW_FORM
• RUN_PRODUCT

Two Parameter Types


Type Description
Text Parameter A simple parameter with a scalar, noncomposite CHAR value.
You must use this type of parameter, unless you want to pass a
record group to another Oracle product.
Data Parameter A parameter whose value must always be the name of a record
group defined in the current form. Data parameters are used to
pass data to products invoked with the RUN_PRODUCT built-in.
You cannot pass data parameters to forms.

Default Parameter List


Each form includes a built-in parameter list named DEFAULT. The DEFAULT
parameter list contains all of the form parameters that were defined in the form at
design time. Like any other parameter list, the DEFAULT parameter list can be
specified in the call to the built-ins that can invoke a form.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 9-29
Lesson 9: Building Multiple Form Applications
......................................................................................................................................................

Creating and Manipulating


Parameter Lists

CREATE_PARAMETER_LIST
Name Key Type Value

CUS_ID TEXT_PARAMETER ‘204’

Parameter
ORDERS DATA_PARAMETER ‘RG_ORD’
list ID

ADD_PARAMETER
GET_PARAMETER_ATTR
DESTROY_PARAMETER_LIST SET_PARAMETER_ATTR
DELETE_PARAMETER
®

Copyright  Oracle Corporation, 2001. All rights reserved.

Technical Note
You cannot create a parameter list named DEFAULT or one that already exists. Use
GET_PARAMETER_LIST and ID_NULL to check whether a parameter list already
exists.

......................................................................................................................................................
9-30 Oracle iDS Forms: Build Internet Applications II
Creating and Manipulating Parameter Lists
......................................................................................................................................................

Creating and Manipulating Parameter Lists


You can programmatically create and manipulate parameter lists only by using the
following built-ins:
Built-in Description
CREATE_PARAMETER_LIST Creates a parameter list with the given name and
returns the ID of this parameter list
DESTROY_PARAMETER_LIST Deletes the given, programmatically created
parameter list (and all its parameters)
GET_PARAMETER_LIST Returns the internal parameter list ID (of type
PARAMLIST) of a parameter list with the given
name (This built-in is similar to the FIND_object
built-ins.)
ADD_PARAMETER Adds a parameter with a specified name (also
called key), type (TEXT_PARAMETER or
DATA_PARAMETER), and value (in CHAR for-
mat) to the given parameter list
DELETE_PARAMETER Deletes the parameter with the specified name
from the given parameter list
GET_PARAMETER_ATTR Gets the type and value of the parameter with the
specified name in the given parameter list
SET_PARAMETER_ATTR Sets the type and value of the parameter with the
specified name in the given parameter list

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 9-31
Lesson 9: Building Multiple Form Applications
......................................................................................................................................................

Passing Data Between Forms

1. If a parameter list exists, destroy it.


2. Create a parameter list.
3. Add a text parameter to a list with the value
of an item.
4. Open a form with this parameter list.
Form A Form B
Run time OPEN_FORM(*) Design-time
parameters parameters
P1 P1
P2 P2
P3 P3

Copyright  Oracle Corporation, 2001. All rights reserved.

Passing Data Between Forms

• Characteristics of form parameters:


– Can be used only as input parameters
– Have data type CHAR, NUMBER, or DATE
– CHAR parameter can be up to 64 K long
– Can be design-time objects
• Characteristics of global variables:
– Are programmatic constructs
– Have type CHAR(255)
– Are visible to all forms in the current
Runform session
®

Copyright  Oracle Corporation, 2001. All rights reserved.

Technical Note
Global variables are used more often than parameters for passing data between forms.

......................................................................................................................................................
9-32 Oracle iDS Forms: Build Internet Applications II
Passing Data Between Forms
......................................................................................................................................................

Passing Data Between Forms


You can pass data to other forms by using form parameters, as shown in the following
example. The next section compares this approach with the global variable approach.

Example
The When-Button-Pressed trigger on the CTL.OPEN_ORDITEM item:
DECLARE
v_pl_id PARAMLIST;
BEGIN
IF not ID_NULL(GET_PARAMETER_LIST(’cus’)) THEN
DESTROY_PARAMETER_LIST(’cus’);
END IF;
v_pl_id := CREATE_PARAMETER_LIST(’cus’);
ADD_PARAMETER(v_pl_id,’cus_id’,text_parameter,
TO_CHAR(:cus.id));
OPEN_FORM(’orditem’, activate, no_session,
no_share_library_data, ’cus’);
END;

Note: You must define the CUS_ID parameter in the ORDITEM form at design time,
because each run-time parameter must have a corresponding design-time parameter in
the target form.

Form Parameters and Global Variables


• Form parameters can be used only as input parameters; the invoked form
cannot return modified form-parameter values to the invoking form.
Therefore, global variables are the preferred method for communicating
between forms.
• Advantages of form parameters include:
- They have a data type of CHAR, NUMBER, or DATE.
- The length of a CHAR parameter can be up to 64 K.
- They can be design-time objects.
- Global variables are always programmatic constructs of type
CHAR(255). They are visible to all the forms in the current Runform
session.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 9-33
Lesson 9: Building Multiple Form Applications
......................................................................................................................................................

Summary

In this lesson, you should have learned how to:


• Open, call, and close forms:
– OPEN_FORM, CALL_FORM, and
CLOSE_FORM
– Multiple database sessions
• Navigate between forms:
– NEXT_FORM,
PREVIOUS_FORM, and GO_FORM
• Identify restrictions on the call form stack

Copyright  Oracle Corporation, 2001. All rights reserved.

Summary

• Manage Transaction processing in:


– Opened forms: Within same or
different sessions
– Called forms: Post-Only mode; a
rollback to savepoint
• Create form parameters and parameter lists
– Methods for parameter passing
– Referencing form parameters
– Text parameters and Data parameters
– Built-ins for parameter lists

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
9-34 Oracle iDS Forms: Build Internet Applications II
Summary
......................................................................................................................................................

Summary
The Three Built-ins for Invoking Forms
• OPEN_FORM
• CALL_FORM
• NEW_FORM

Opening, Calling, and Closing Forms


• OPEN_FORM
• CALL_FORM
• CLOSE_FORM

Built-ins for Navigation Between Forms


• NEXT_FORM
• PREVIOUS_FORM
• GO_FORM

Controlling Open Forms and Called Forms Together


Restrictions on the call form stack

Transaction Processing for Open Forms


Within the same session or different sessions

Transaction Processing for Called Forms


• Characteristics of Post-Only mode
• Rollback behavior of called forms: default rollback to savepoint

Using Form Parameters


• Passing parameter values to a form by way of Runform command line or
parameter list
• Referencing form parameters using PARAMETER.parameter_name

Using Parameter Lists


• The two parameter types: text parameters and data parameters
• The default parameter list named DEFAULT
• Built-ins for creating and manipulating parameter lists

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 9-35
Lesson 9: Building Multiple Form Applications
......................................................................................................................................................

Practice 9 Overview

This practice covers the following topics:


• Implementing a multiple form application by
calling SALESREP from CUSTOMERS
• Performing an automatic query on
the SALESREP form, based on the
Sales Rep ID value in the CUSTOMER form
• Ensuring that posted changes in
SALESREP are not rolled back
• Passing a parameter list from CUSTOMERS
to SALESREP

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
9-36 Oracle iDS Forms: Build Internet Applications II
Practice Overview: Lesson 9
......................................................................................................................................................

Practice Overview: Lesson 9


This practice guides you through managing several interacting forms within one
application.

Practice Contents
Implement a button on the CUSTOMER form to call the SALESREP form.
• Perform an automatic query on the SALESREP form based on the
current sales rep ID in the CUSTOMER form.
• Ensure that posted changes in the SALESREP form are not rolled back
on exit.
• Pass a parameter list from the CUSTOMERS form to the SALESREP
form.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 9-37
Lesson 9: Building Multiple Form Applications
......................................................................................................................................................

Practice 9
1 Create a multiple-form application by linking the CUSTOMERS and the
SALESREP forms. The SALESREP form provides a look up facility for
:S_CUSTOMER.SALES_REP_ID. It replaces the SALES_REP_LOV
list of values. Values are selected by mouse double click.
a Open SALESREP form and save as SALESREPXX where XX is
your student course number.
b In your CUSTOMERS form, modify the code in the
SALES_LOV_BUTTON When-Button-Pressed trigger to call the
SALESREP form.
c Ensure that the user can see, but not navigate to, your CUSTOMERS
form, while the SALESREP form is open.
d Update :S_CUSTOMER.SALES_REP_ID with the value selected
by the user in the SALESREP form. The selected Sales Rep ID is
returned in a GLOBAL variable called “salesrepid”. This variable
contains either a valid value or the text “NOT SELECTED”.
e Save and compile your form. Deploy your form to the Web to test.

2 Modify your multiple-form application to enable the SALESREP form


to be called in post mode only.
a Hide the CUSTOMERS form when the SALESREP form is
displayed.
b In the SALESREP form, ensure that whenever the form has been
opened by ‘CALL_FORM’, that a [Commit Form] performs a POST.
c Ensure that updates in SALESREP are not cleared when the user
exits the form.
d Save and compile your form. Deploy your form to the Web to test.

3 The SALESREP form displays a list of all employees; modify your


application to ensure that only Sales Representatives are displayed when
the form is called from CUSTOMERS.
a Create a parameter called ‘EVERYONE’ in the SALESREP form.
Specify a default value of ‘Y’.

......................................................................................................................................................
9-38 Oracle iDS Forms: Build Internet Applications II
Practice 9
......................................................................................................................................................

b Ensure that the SALESREP form will perform an unrestricted query


whenever the parameter value = ‘Y’. If the parameter value = ‘S’, a
restricted query should be performed, selecting only Sales
Representatives.
c In the CUSTOMERS form, pass the parameter value “S” to the
SALESREP form.
Create a parameter list called EMPS. Add the ‘EVERYONE’
parameter to the parameter list. The type of this parameter is
TEXT_PARAMETER, and it is initialized with the value “S”.
Pass the parameter list to the SALESREP form by using the
CALL_FORM built-in.
You can import the code from the pr9_1.txt file. Be sure to
change the name of the module in the CALL_FORM built-in.
d Save and compile your forms. Deploy your form to the Web to test.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 9-39
Lesson 9: Building Multiple Form Applications
......................................................................................................................................................

......................................................................................................................................................
9-40 Oracle iDS Forms: Build Internet Applications II
................................

Working with Record


Groups
Lesson 10: Working with Record Groups
......................................................................................................................................................

Objectives

After completing this lesson, you should be able to


do the following:
• Describe the record group object
• Use record groups
• Define record groups at design time
• Control record groups by using built-in functions
• Define query record groups programmatically
• Define nonquery record groups programmatically

Copyright  Oracle Corporation, 2001. All rights reserved.

Objectives

After completing this lesson, you should be able to


do the following:
• Manipulate record group rows
• Define lists of values (LOVs) programmatically
• Manipulate list items programmatically
• Implement dynamic list items
• Add values to combo boxes

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Topic Timing
Lecture 50 minutes
Practice 30 minutes
Total 80 minutes

......................................................................................................................................................
10-2 Oracle iDS Forms: Build Internet Applications II
Introduction
......................................................................................................................................................

Introduction
Overview
Record groups are useful constructs for storing structured data, and they can
be manipulated at run time. This lesson covers how to create, modify, and
delete record groups at design time and programmatically at run time. It also
covers how you apply record groups in useful ways, such as for dynamic list
items.

Objectives
After completing this lesson, you should be able to do the following:
• Describe the record group object
• Use record groups
• Define record groups at design time
• Control record groups by using built-in functions
• Define query record groups programmatically
• Define nonquery record groups programmatically
• Manipulate record group rows
• Define lists of values (LOVs) programmatically
• Manipulate list items programmatically
• Implement dynamic list items
• Add values to combo boxes

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 10-3
Lesson 10: Working with Record Groups
......................................................................................................................................................

Record Groups

Three record group types:

SOURCE Based on a Not Based on a


SELECT SELECT
TIME Statement Statement
Design Time QUERY STATIC

Run Time QUERY NON QUERY

Copyright  Oracle Corporation, 2001. All rights reserved.

Record Groups

Record groups and LOVs


• Forms implicitly creates query record groups.
• Use SET_LOV_PROPERTY to replace
default record group.

...
...
IF
IF Get_LOV_Property(lov_id,GROUP_NAME)
Get_LOV_Property(lov_id,GROUP_NAME) == ’GROUP1’
’GROUP1’
THEN
THEN
Set_LOV_Property(lov_id,GROUP_NAME,’GROUP2’);
Set_LOV_Property(lov_id,GROUP_NAME,’GROUP2’);
END
END IF;
IF;
...
...

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
10-4 Oracle iDS Forms: Build Internet Applications II
Record Groups
......................................................................................................................................................

Record Groups
What Is a Record Group?
A record group is an internal Forms data structure that is similar to a
database table. It can have columns of type CHAR, NUMBER, or DATE,
and its data is stored in rows. Record groups exist in local Forms memory,
rather than in the database.

Three Record Group Types


Type Description
Query Record Group A record group with an associated SELECT statement. The
columns in the record group derive their properties from the
columns in this SELECT statement. The rows in the record
group are the rows retrieved by this SELECT
statement. You can create this type of record group at design
time and at run time.
Nonquery Record Group A record group without an associated query. The columns and
rows of the record group are defined programmatically at
run time and can also be modified at run time.
Static Record Group A record group without an associated query. The columns and
rows of the record group are defined at design time and
cannot be modified programmatically at run-time.

Note: When you create a record group, you cannot specify its type
explicitly. The type is implied by when and how you create the record group.

Record Groups and LOVs


When you create a list of values (LOV) based on a query, Form Builder
implicitly creates a query record group. In this case, the columns and rows
of the record group are determined by the LOV SQL query statement. At
run time, you can call the SET_LOV_PROPERTY built-in function to
replace the default record group of an LOV with another one. Use the
GROUP_NAME property.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 10-5
Lesson 10: Working with Record Groups
......................................................................................................................................................

Uses for Record Groups

• Constructing dynamic SELECT statements


• Storing form-configuration information
• Communicating within a form
• Passing data to other forms
• Passing data to other Oracle products
• Populating or storing list items

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
10-6 Oracle iDS Forms: Build Internet Applications II
Using Record Groups
......................................................................................................................................................

Using Record Groups


Record groups are very powerful constructs offered by Oracle Forms
Developer. Some useful record group applications are listed below.

Constructing Dynamic SELECT Statements


The SELECT statement on which a query record group is based can be
constructed programmatically at run time. As a consequence, you can write
very generic program units; for example, accepting a table name as
parameter.

Storing Form-Configuration Information


Because a record group is a structured data type, you can use it as a
convenient means for storing information about the current form. Such
information may describe the way in which the form is set up or configured,
and is usually retrieved at form startup.

Communicating Within a Form


Because a record group is a structured data type, you can use it to exchange
related data within a form. For example, different program units or different
invocations of the same program unit might access the record group data.
This offers you an alternative to a set of scalar variables, such as help items
or global variables.

Passing Data to Other Forms


You can create a global record group at run time that is visible to all forms in
an application.

Passing Data to Other Oracle Products


You can use the RUN_PRODUCT built-in to pass data by way of a record
group to another Oracle product, specifically Report Builder and Graphics
Builder. This eliminates the need to perform a query again in the other
Oracle product if it has already been executed by Forms.

Populating or Storing List Items


You can transfer the values of a record group to a list item. Because the
record group may be based on a dynamically constructed SELECT
statement, this ability gives you the opportunity to create dynamic list items.
The data transfer is bidirectional; you can also transfer the values of a list
item to a record group. (This can be considered “storing” the list item.)

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 10-7
Lesson 10: Working with Record Groups
......................................................................................................................................................

Defining Record Groups


at Design Time

Copyright  Oracle Corporation, 2001. All rights reserved.

Column Specification and Record Group


Property Sheet

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Demonstration: Use rec_grp.fmb to demonstrate how you create
query record groups (CUSTOMER_ID) and static record groups
(STATIC_GROUP).

......................................................................................................................................................
10-8 Oracle iDS Forms: Build Internet Applications II
Defining Record Groups at Design Time
......................................................................................................................................................

Defining Record Groups at Design Time


Creating a Query Record Group
1 In the Object Navigator, create a record group.
Forms displays the New Record Group dialog box.
2 Click the Based on the Query Below... option button and then enter a
SELECT statement in the Query Text field.
3 Click OK.
Forms validates the SELECT statement and closes the dialog box.
Note: Use column aliases for expressions in the SELECT clause. Otherwise,
Forms generates an unreadable name for the corresponding column of the
record group.

Creating a Static Record Group


1 In the Object Navigator, create a record group.
Forms displays the New Record Group dialog box.
2 Click the Static Values radio button and then click OK.
Forms displays the Column Specification dialog box.
3 Enter the names of the columns in the Column Name list.
4 Specify the Data Type, Length, and Column Values properties for each
column.
Note that these properties apply to the column currently selected in the
Column Name list.
5 Click OK to accept the record group definition.

Modifying the SELECT Statement of a Query Record Group


1 In the Object Navigator, select the desired record group.
2 In the Properties window, call the Editor from the Record Group Query
property.
3 Modify the SELECT statement as desired and then click OK.

Modifying the Column Definitions of a Record Group


1 In the Object Navigator, select the desired record group.
2 In the Properties window, double-click the Column Specifications
property. Forms displays the Column Specification dialog box.
3 Select a column and modify its Data Type, Length, and Column Values
properties as desired and then click OK.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 10-9
Lesson 10: Working with Record Groups
......................................................................................................................................................

Creating and Deleting Record Groups

CREATE_GROUP CREATE_GROUP_FROM_QUERY

Name Name, Query

Record ID Name
Record
group ID group ID

DELETE_GROUP
®

Copyright  Oracle Corporation, 2001. All rights reserved.

Modifying the Structure

ADD_GROUP_ROW

Row No ID Name Address


1 201 Unisports
2
3 203 Delhi Sports
4 204 Womansport

DELETE_GROUP_ROW

ADD_GROUP_COLUMN

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Point out that CREATE_GROUP_FROM_QUERY does not populate the record
group. ADD_GROUP_ROW adds an empty row. Row No is an internal number.

......................................................................................................................................................
10-10 Oracle iDS Forms: Build Internet Applications II
Built-in Functions for Controlling Record Groups
......................................................................................................................................................

Built-in Functions for Controlling Record Groups


You can create and modify query and nonquery record groups
programmatically at run time by using the following built-in functions.

Creating and Deleting Record Groups


Built-in Function Description
CREATE_GROUP Creates a nonquery record group with the given
name and returns the ID of this record group
CREATE_GROUP_FROM_QUERY Creates a query record group with the given
name based on the given SELECT statement and
returns the ID of this record group (Note that
this built-in function does not populate the
record group.)
DELETE_GROUP Deletes the given, programmatically created
record group

Modifying the Structure of Record Groups


Built-in Function Description
ADD_GROUP_COLUMN Adds a column of the specified data type (and
column width for CHAR columns) to the given
record group and returns the ID of this group
column
ADD_GROUP_ROW Adds a row with the specified row number to the
given record group
DELETE_GROUP_ROW Deletes the specified row or all rows of the
given record group

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 10-11
Lesson 10: Working with Record Groups
......................................................................................................................................................

Populating Query Record Groups

SELECT ID, name


FROM s_customer
ID Name
201 Unisports
202 SImms Athletics
POPULATE_GROUP
203 Delhi Sports
204 Womansport (_WITH_QUERY)

Copyright  Oracle Corporation, 2001. All rights reserved.

Getting and Setting Record


Group Cell Values

ID Name

SET_GROUP_CHAR_CELL

GET_GROUP_NUMBER_CELL

Copyright  Oracle Corporation, 2001. All rights reserved.

Technical Note
POPULATE_GROUP built-in function returns 0 when population succeeds
and 1 if population does not succeed.

......................................................................................................................................................
10-12 Oracle iDS Forms: Build Internet Applications II
Built-in Functions for Controlling Record Groups
......................................................................................................................................................

Populating Record Groups


Built-in Function Description
POPULATE_GROUP Executes the query associated with the given
query record group and returns a number
indicating success or failure (The retrieved
rows replace any existing rows in the record
group.)
POPULATE_GROUP_WITH_QUERY Executes the specified SELECT statement for
the given record group and returns a number
indicating success or failure (The retrieved
rows replace any existing rows in the record
group.)
SET_GROUP_CHAR_CELL, Sets the value for the record group cell
SET_GROUP_DATE_CELL, identified by the given record group column
SET_GROUP_NUMBER_CELL and row number (The record group column
must be of data type VARCHAR2 or LONG,
DATE, or NUMBER, respectively.)

Note: You can convert a nonquery record group into a query record group
by using the POPULATE_GROUP_WITH_QUERY built-in function to
populate the nonquery record group.

Getting Record Group Cell Values


Built-in Function Description
GET_GROUP_CHAR_CELL, Returns the value for the record group cell
GET_GROUP_DATE_CELL, identified by the given record group column
GET_GROUP_NUMBER_CELL and row number (The record group column
must be of data type VARCHAR2 or LONG,
DATE, or NUMBER, respectively.)

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 10-13
Lesson 10: Working with Record Groups
......................................................................................................................................................

Processing Record Group Rows

GET_GROUP_SELECTION_COUNT

Selection No Row No ID Name


1 201 Unisports
1 2 202 Simms Athletics
3 203 Delhi Sports
2 4 204 Womansport

GET_
GROUP_
ROW_
SET_GROUP_SELECTION COUNT
GET_GROUP_SELECTION
®

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Explain the built-ins and describe how with SET_GROUP_SELECTION, if
you select rows 2 and 4, the associated selection numbers are 1 and 2.
Explain that the record group type (query, nonquery, static) and time of
creation (design time or run time) determine which built-in functions are
valid for a particular record group.

......................................................................................................................................................
10-14 Oracle iDS Forms: Build Internet Applications II
Built-in Functions for Controlling Record Groups
......................................................................................................................................................

Processing Record Group Rows


Built-in Function Description
GET_GROUP_ROW_COUNT Returns the number of rows in the given
record group
SET_GROUP_SELECTION Marks the specified row in the given record
group by associating a selection number with
the row
UNSET_GROUP_SELECTION Deselects the row with the specified row
number in the given record group
RESET_GROUP_SELECTION Deselects all selected rows in the given record
group
GET_GROUP_SELECTION_COUNT Returns the number of selected rows in the
given record group
GET_GROUP_SELECTION Returns the row number of the row with the
specified selection number of the given record
group

Finding Record Group Objects


Built-in Function Description
FIND_GROUP Returns the internal record group ID (of type RECORDGROUP)
of a record group with the given name (This function can also be
used for record groups created at design time.)
FIND_COLUMN Returns the internal group column ID (of type
GROUPCOLUMN) of a record group column with the given
name (Note that this name must include the record group name as
a prefix. This function can also be used for group columns created
at design time.)

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 10-15
Lesson 10: Working with Record Groups
......................................................................................................................................................

Defining Query Record Groups


Programmatically

Find record group

Yes ID NULL? No

Create group from query

Populate group

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Demonstration: Use rec_grp.fmb to demonstrate the code for creating
a query record group.
Use the procedure DEFINE_QUERY_RECORD_GROUP.

......................................................................................................................................................
10-16 Oracle iDS Forms: Build Internet Applications II
Defining Query Record Groups Programmatically
......................................................................................................................................................

Defining Query Record Groups Programmatically


The PL/SQL code below illustrates how you can create and populate a query
record group.
Note: The query record groups can also be defined at design time.
DECLARE
v_rg_id RECORDGROUP;
v_errcode NUMBER;
BEGIN
--Make sure that record group doesn’t already exist.
v_rg_id := FIND_GROUP(’customers’);
IF ID_NULL(v_rg_id) THEN
--Create query record group.
v_rg_id := CREATE_GROUP_FROM_QUERY(’customers’,
’SELECT id, name FROM s_customer ORDER BY id’);
END IF;
--Populate query record group with associated query.
v_errcode := POPULATE_GROUP(v_rg_id);
END;
You can replace the associated query of a query record group by calling the
POPULATE_GROUP_WITH_QUERY built-in function.
v_errcode := POPULATE_GROUP_WITH_QUERY(v_rg_id,
’SELECT id, name FROM s_customer
where region_id = 1 ORDER BY id’);

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 10-17
Lesson 10: Working with Record Groups
......................................................................................................................................................

Defining Nonquery Record Groups


Programmatically

Find record group

Yes ID NULL? No

Create group Delete group rows

Add group columns Find group columns

Add group row

Set group cell values

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Demonstration: Use rec_grp.fmb to demonstrate the code for creating
a nonquery record group.
Use the procedure DEFINE_NON_QUERY_RECORD_GROUP.

......................................................................................................................................................
10-18 Oracle iDS Forms: Build Internet Applications II
Defining Nonquery Record Groups Programmatically
......................................................................................................................................................

Defining Nonquery Record Groups Programmatically


The PL/SQL code below illustrates how you can create and populate a
nonquery record group. Note that you cannot define nonquery record groups
at design time.
DECLARE
v_rg_id RECORDGROUP;
v_gc1_id GROUPCOLUMN;
v_gc2_id GROUPCOLUMN;
BEGIN
--Make sure that record group doesn’t already exist.
v_rg_id := FIND_GROUP(’customers’);
IF ID_NULL(v_rg_id) THEN
--Create non-query record group.
v_rg_id := CREATE_GROUP(’customers’);
--Add NUMBER and CHAR group column to record group.
v_gc1_id := ADD_GROUP_COLUMN(v_rg_id,’id’,number_column);
v_gc2_id := ADD_GROUP_COLUMN(v_rg_id,’name’,char_column,50);
ELSE
--Delete all existing group rows.
DELETE_GROUP_ROW(v_rg_id,all_rows);
--Find ids of group columns for later use.
v_gc1_id := FIND_COLUMN(’customers.id’);
v_gc2_id := FIND_COLUMN(’customers.name’);
END IF;
--Add one group row to record group.
ADD_GROUP_ROW(v_rg_id,1);
--Fill r g cells of group row 1 with item values.
SET_GROUP_NUMBER_CELL(v_gc1_id,1,:cus.id);
SET_GROUP_CHAR_CELL(v_gc2_id,1,:cus.name);
END;
You can convert the nonquery record group into a query record group by
calling the POPULATE_GROUP_WITH_QUERY built-in function.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 10-19
Lesson 10: Working with Record Groups
......................................................................................................................................................

Manipulating Record Group Rows

Get number of group rows

Cell value=
For all given value
group Yes No
rows
Return row
number

Return NULL

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Demonstration: Use rec_grp.fmb to demonstrate the code for
manipulating record group rows. Use the GET_VALUE_GRPROW
function to show the code that you use to search for a specific value in a
record group.
Explain that this technique can be used with a combo box to determine
whether or not the value already exists in the record group.

......................................................................................................................................................
10-20 Oracle iDS Forms: Build Internet Applications II
Manipulating Record Group Rows
......................................................................................................................................................

Manipulating Record Group Rows


The function below illustrates how you can loop through all rows of a record
group.
FUNCTION get_value_grprow
/* Returns row number of group row that contains the
specified
value in the given group column.
Returns NULL if the value is not found. */
( p_rg_id in RECORDGROUP,p_gc_id in GROUPCOLUMN,
p_value in VARCHAR2)
RETURN number IS
v_grprow_count NUMBER;
BEGIN
v_grprow_count := GET_GROUP_ROW_COUNT(p_rg_id);
FOR v_grprow_no IN 1 .. v_grprow_count LOOP
IF GET_GROUP_CHAR_CELL(p_gc_id,v_grprow_no) = p_value THEN
RETURN(v_grprow_no);
END IF;
END LOOP;
RETURN(null);
END;

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 10-21
Lesson 10: Working with Record Groups
......................................................................................................................................................

Manipulating Selected Record Group


Rows

Get number of group rows

Row number
For all even?
group Yes No
rows
Mark row
as selected

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Demonstration: Use rec_grp.fmb to demonstrate the code for
manipulating selected record group rows.
Use the SELECT_EVEN_ROWS procedure to show the code for searching
for a specific row in a record group.
Use the GET_VALUE_GRPSEL function to show the code for looping
through the row in a record group.
Explain that the even number can be identified by using the MOD function.

......................................................................................................................................................
10-22 Oracle iDS Forms: Build Internet Applications II
Manipulating Selected Record Group Rows
......................................................................................................................................................

Manipulating Selected Record Group Rows


The following procedure illustrates how you can select the rows of a record
group.
PROCEDURE select_even_rows
--Marks all group rows with even row numbers as selected.
(p_rg_id in RECORDGROUP)
IS
v_grprow_count NUMBER;
BEGIN
v_grprow_count := GET_GROUP_ROW_COUNT(p_rg_id);
FOR v_grprow_no IN 1 .. v_grprow_count LOOP
IF MOD(v_grprow_no,2) = 0 THEN
SET_GROUP_SELECTION(p_rg_id,v_grprow_no);
END IF;
END LOOP;
END;
The function below illustrates how you can loop through all selected rows of
a record group.
FUNCTION get_value_grpsel
/* Returns selection number of selected group row
that contains the specified value in the given group
column. Returns NULL if the value is not found. */
(p_rg_id in RECORDGROUP
,p_gc_id in GROUPCOLUMN
,p_value in VARCHAR2)
RETURN NUMBER IS
v_grpsel_count NUMBER;
v_grprow_no NUMBER;
BEGIN
--Only loop through the selected group rows.
v_grpsel_count := GET_GROUP_SELECTION_COUNT(p_rg_id);
FOR v_grpsel_no IN 1 .. v_grpsel_count LOOP
--Get row number of selected row.
v_grprow_no := GET_GROUP_SELECTION(p_rg_id,v_grpsel_no);
IF GET_GROUP_CHAR_CELL(p_gc_id,v_grprow_no) = p_value THEN
RETURN(v_grpsel_no);
END IF;
END LOOP;
RETURN(null);
END;

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 10-23
Lesson 10: Working with Record Groups
......................................................................................................................................................

Defining Global Record Groups

• Record group visible to all forms in


an application
• “Scope” parameter
– FORM_SCOPE (default)
– GLOBAL_SCOPE

...CREATE_GROUP(group_name,
...CREATE_GROUP(group_name, scope);
scope);
...CREATE_GROUP_FROM_QUERY(group_name,
...CREATE_GROUP_FROM_QUERY(group_name,
query,
query, scope);
scope);

Copyright  Oracle Corporation, 2001. All rights reserved.

Technical Note
If a global record group is created from (or populated with) a query while
executing a Form A, and the query string contains bind variable references
that are local to A (:block.item or :PARAMETER.param), then when Form
A terminates execution, the global query record group is converted to a
global nonquery record group. The record group retains its data, but a
subsequent POPULATE_GROUP is considered an error.

Instructor Note
Demonstration: Use Orders2.fmb to demonstrate the use of a global
record group. Click the Product_Lov button to display a list of values form.
Using [Ctrl] + click, select the products that you want. Then click the OK
button. The products selected are returned by way of a global record group
to the ORDERS form. You can show the When-Mouse-Click trigger of the
lov_product form.

......................................................................................................................................................
10-24 Oracle iDS Forms: Build Internet Applications II
Defining Global Record Groups
......................................................................................................................................................

Defining Global Record Groups


A global record group allows creation at run time of record groups that are
visible to all forms in an application.

Scope Parameter
A “scope” parameter can be added to the CREATE_GROUP and
CREATE_GROUP_FROM_QUERY built-ins. The value for this scope can
be either:
• FORM_SCOPE
• GLOBAL_SCOPE
If you omit this parameter, the default is FORM_SCOPE.
Once created, a global record group persists for the remainder of the
application.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 10-25
Lesson 10: Working with Record Groups
......................................................................................................................................................

Manipulating List Items


Programmatically

• ADD_LIST_ELEMENT
• DELETE_LIST_ELEMENT
• CLEAR_LIST
• GET_LIST_ELEMENT_LABEL
• GET_LIST_ELEMENT_VALUE
• GET_LIST_ELEMENT_COUNT
• POPULATE_LIST
• RETRIEVE_LIST

Copyright  Oracle Corporation, 2001. All rights reserved.

Using a Record Group


with a List Item
Labels Values

POPULATE_LIST RETRIEVE_LIST

CHAR Column 1 CHAR Column 2

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
10-26 Oracle iDS Forms: Build Internet Applications II
Manipulating List Items Programmatically
......................................................................................................................................................

Manipulating List Items Programmatically


When you define a list item at design time, you specify the possible labels
and values on the Properties window. However, you can also manipulate list
items programmatically at run time by using built-in functions. Some of
these functions require the use of record groups.
Built-in Function Description
ADD_LIST_ELEMENT Adds a list element (label and value) at the speci-
fied position (index) to the given list item
CLEAR_LIST Clears all list elements from the given list item
(After clearing, the list item contains only the null
element.)
DELETE_LIST_ELEMENT Deletes the list element at the specified position
(index) from the given list item
GET_LIST_ELEMENT_COUNT Returns the number (in CHAR format) of list ele-
ments in the given list item, including list elements
with NULL values
GET_LIST_ELEMENT_LABEL Returns the label of the list element at the specified
position (index) in the given list item
GET_LIST_ELEMENT_VALUE Returns the value of the list element at the speci-
fied position (index) in the given list item
POPULATE_LIST Clears the given list item and populates the list
item with the values from the specified record
group
RETRIEVE_LIST Retrieves the list elements (labels and values) from
the given list item and stores them in the specified
record group

Using a Record Group with a List Item


You can transfer information between a list item and a record group by using
the POPULATE_LIST and RETRIEVE_LIST built-in functions. The record
group that is used as the second parameter for these functions must satisfy
these requirements:
• The record group must contain exactly two group columns of type
CHAR.
• The first group column must store the list element label.
• The second group column must store the list element value.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 10-27
Lesson 10: Working with Record Groups
......................................................................................................................................................

Implementing Dynamic List Items

Find record group

Yes ID NULL? No

Create group from query

Populate group

Yes Success? No

Populate list

Display first list label

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Demonstration: Use rec_grp.fmb to demonstrate the code of the
POPULATE_LIST_WITH_QUERY procedure.
Explain that the When-Create-Record trigger is used here because it is too
late to use the When-List-Changed trigger.
Another option is to use the When-Mouse-Down trigger.

......................................................................................................................................................
10-28 Oracle iDS Forms: Build Internet Applications II
Implementing Dynamic List Items
......................................................................................................................................................

Implementing Dynamic List Items


The procedure and trigger below illustrate how you can populate a list item
programmatically at run time using a given SELECT statement.
Note: The retrieved rows are transferred to the list item by way of a record
group.
PROCEDURE populate_list_with_query
--Populates the given list item with the specified query.
(p_list_item in VARCHAR2
,p_query in VARCHAR2)
IS
/* Name the record group after the list item (no
block prefix). */
cst_rg_name constant VARCHAR2(30) :=
GET_ITEM_PROPERTY(p_list_item,item_name);
v_rg_id RECORDGROUP;
BEGIN
v_rg_id := FIND_GROUP(cst_rg_name);
IF ID_NULL(v_rg_id) THEN
v_rg_id := CREATE_GROUP_FROM_QUERY(cst_rg_name,p_query);
END IF;
IF POPULATE_GROUP(v_rg_id) = 0 THEN
POPULATE_LIST(p_list_item,v_rg_id);
/* Force display of first list element label
in the list item. */
COPY(GET_LIST_ELEMENT_VALUE(p_list_item,1),p_list_item);
END IF;
END populate_list_with_query;

When-Create-Record on the ORD Block


BEGIN
POPULATE_LIST_WITH_QUERY(’ord.customer_id’,
’SELECT name, to_char(id) FROM s_customer ORDER BY name’);
END;
Note: In this example, the customer name is the (visible) list label and the
customer ID is the (actual) list value.

Technical Note
Because a base table list item must specify a value for either the Initial
property or the Mapping of Other Values property, the record group used to
dynamically populate a list item must also contain this value. Be sure the
record group query returns this value. For more information, see Note
1010798.6, available on MetaLink: http://www.metalink.oracle.com.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 10-29
Lesson 10: Working with Record Groups
......................................................................................................................................................

Adding Values to Combo Boxes

Get number of list elements

Element value=
For all Item value?
list Yes No
elements
Return

Add list element with item value

Copyright  Oracle Corporation, 2001. All rights reserved.

Instructor Note
Demonstration: Use rec_grp.fmb to demonstrate the code of the
ADD_COMBO_BOX_ELEMENT procedure.

......................................................................................................................................................
10-30 Oracle iDS Forms: Build Internet Applications II
Adding Values to Combo Boxes
......................................................................................................................................................

Adding Values to Combo Boxes


For a combo box, you can choose an existing value from the list, but also
type in a new value. The procedure and trigger below show how a new value
can be automatically added to the list of existing values of a combo box.
Note: The added list elements are lost when you exit from the form.
PROCEDURE add_combo_box_element
/* Adds a new list element at the end of the given combo-box list
if it is not already present in the combo-box list. */
(p_list_item in VARCHAR2)
IS
v_listel_count NUMBER;
BEGIN
/* First check if current list-item value is already present
in list. */
v_listel_count := GET_LIST_ELEMENT_COUNT(p_list_item);
FOR v_listel_idx IN 1 .. v_listel_count LOOP
IF GET_LIST_ELEMENT_VALUE(p_list_item, v_listel_idx)
= UPPER(NAME_IN(p_list_item)) THEN
RETURN;
END IF;
END LOOP;
/* Current list-item value not found in list;
add new list element at end of list. */
ADD_LIST_ELEMENT(p_list_item, v_listel_count + 1,
INITCAP(NAME_IN(p_list_item)),UPPER(NAME_IN(p_list_item)));
END;

When-Validate-Item on the ORD.PAYMENT_TYPE Item (Combo Box)


BEGIN
ADD_COMBO_BOX_ELEMENT(:SYSTEM.TRIGGER_ITEM);
END;

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 10-31
Lesson 10: Working with Record Groups
......................................................................................................................................................

Summary

In this lesson, you should have learned how to:


• Define design-time query and static
record groups
• Define run time query and nonquery
record groups
• Use Built-in functions for populating
record groups
• Define Global record groups

Copyright  Oracle Corporation, 2001. All rights reserved.

Summary

• Use record groups for:


– Constructing dynamic SELECT statements
– Storing or passing data
– Populating or storing list items
• Manipulate list items programmatically
– Built-in functions for list items

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
10-32 Oracle iDS Forms: Build Internet Applications II
Summary
......................................................................................................................................................

Summary
A record group is an internal Forms data structure that is similar to a
database table.

Three Record Group Types


• Query record group
• Non query record group
• Static record group

Defining Record Groups at Design Time


• Creating query and static record groups
• Modifying SELECT statements and column definitions of record groups

Built-ins for Controlling Record Groups


• Creating and deleting record groups
• Modifying the structure of record groups
• Populating record groups
• Getting record group cell values
• Processing record group rows
• Finding record group objects

Defining a Global Record Group


• Created at run time only
• Visible to all forms in an application
• Scope parameter

Uses for Record Groups


• Constructing dynamic SELECT statements
• Storing form configuration information
• Communicating within a form
• Passing data to other Oracle products
• Populating or storing list items

Manipulating List Items Programmatically


Built-in for list items

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 10-33
Lesson 10: Working with Record Groups
......................................................................................................................................................

Practice 10 Overview

This practice covers the following topics:


• Basing a dynamically populated list item
on a design-time query record group
• Basing a dynamically populated list item
on a run-time query record group

Copyright  Oracle Corporation, 2001. All rights reserved.

......................................................................................................................................................
10-34 Oracle iDS Forms: Build Internet Applications II
Practice Overview: Lesson 10
......................................................................................................................................................

Practice Overview: Lesson 10


This practice guides you through the creation of design-time and run-time
query record groups.

Practice Contents
• Convert a text item into a list item that is populated dynamically at run
time by a design-time query record group.
• Create a list item that is populated dynamically at run time by a run-time
query record group.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 10-35
Lesson 10: Working with Record Groups
......................................................................................................................................................

Practice 10
1 Create a dynamic list item populated from a design-time query record
group. The record group will hold region ID and the name of the
departments in the S_DEPT table.
a Open the Employees form. Save as EmpXX where XX is your student
course number. In the Object Navigator, create a record group named
DEPT_ID based on the query below:
SELECT name || ‘ in region ’ ||
TO_CHAR(region_id) Name,
TO_CHAR(id) Id
FROM s_dept
UNION
SELECT ‘none’ Name, ‘0’ Id from dual
ORDER BY 1
b Convert the text item DEPT_ID into a list item, with a Poplist style.
Resize the list item in the Layout Editor.
c Create one element in the list item. Specify a label of ‘Dummy’ and a
value of ‘0’. Set the Mapping of Other Values property to ‘0’.
d Create a procedure called POPULATE_DEPT_LIST. This procedure
will accept the list item name as an argument and populate the list
item dynamically at run time, using the design-time query record
group.
You can import the code from the pr10_1.txt file.
e Call the procedure each time a new record is created.
f Save and compile your form module to test.

If you have time


2 Replace the design-time query record group in the Employee form with
a run-time query-based record group.

......................................................................................................................................................
10-36 Oracle iDS Forms: Build Internet Applications II
Practice 10
......................................................................................................................................................

a Delete the DEPT_ID record group and remove the code from the
When-Create-Record trigger.
b Create a procedure called CREATE_DEPT_LIST which will
dynamically create a record group called QDEPT, if it does not
already exist. The procedure will also populate the record group by
using the query:
SELECT name ||TO_CHAR(region_id) Name,
TO_CHAR(id) Id
FROM s_dept
UNION
SELECT ‘none’ Name, to_char(0) Id
FROM dual
ORDER BY 1
c The procedure will also populate the list item S_EMP.DEPT_ID.
d You can import the procedure code from pr10_2.txt file.
e Call the procedure from the When-Create-Record trigger.
f Save and compile your form module to test.

......................................................................................................................................................
Oracle iDS Forms: Build Internet Applications II 10-37
Lesson 10: Working with Record Groups
......................................................................................................................................................

......................................................................................................................................................
10-38 Oracle iDS Forms: Build Internet Applications II

Вам также может понравиться