Oracle Utilities Application Framework Software Development Kit
User Guide
Overview
Converted COBOL Programs
Development Environment
Overview
The App Server is the Development Environment
Development App Server is Local, Not Shared
Repository for Project
Components of the Software Development Kit
Project Development Database
Project Repository
Development Workstation
Directory Structure
The App Server Directory
Standard App Server Directory Structure
Additional Directories for Development
Java
Project Configuration Information
Pertinent Directories in the App Server
Client Directory
The Software Development Kit Client
Project Directories
Shortcuts Directory
Synchronizing with the Project Repository
Versions
Version Number
Compatibility with Products
Updates
Moving Up to a New Update
Moving Up to a New Version of a Product
Product Single Fixes
Build Server
Tailoring Your Oracle Utilities Application Implementation
Preserving Customer Changes
Tailoring Web Files
Tailoring the CM Java Application
Tailoring AppViewer
Tailoring Help
Positioning Custom Scripts
Replacing the Oracle Utilities Logo
Using the Implementation Version File
Tailoring XAI
Tailoring XML Schema
Tailoring Templates and User Exits
JUnit testing
Standard test cases
Testing Searches
Testing Maintenance Classes
Testing Add on Maintenance Class
Testing Change on Maintenance Class
Testing Delete on Maintenance Class
Test default actions on Maintenance Class
Testing Entity Page Maintenance Classes
Testing Add on Entity Page Maintenance Class
Testing Change on Entity Page Maintenance Class
The Comparisons
Test default actions on Entity Page Maintenance Class
Testing Business Entity Validation
Test handleChange / handleAdd / etc code
Testing for Warnings
Maintenance Classes
Entity tests
Technical Background
Technology Overview
Portability
Distribution
OUAF Web Services
SPL Service XML Metainfo Files
Example using Page Service
Example Using Search Service
Server Architecture Overview
Client Architecture Overview
Introduction
Client Architecture Discussion
SPL Client API
Overview
Client API Discussion
JavaScript Invocation Context
Data Representation and Localization
Core JavaScript Classes
CisModel
Data representation
Navigation
CisModel Instance Variables
Static methods
CisModel Instance Methods
DataElement
DataElement Instance Variables
DataElement Instance Methods
List
List Instance Variables
List Instance Methods
Free Functions
top.js
cis.js
Metadata Overview
Generated Tab Menu Metadata
Generated UI Program Component Metadata
Menu and Navigation Metadata
Table-Related Metadata
Maintenance Object Metadata
Defining Generator Tools Metadata
Setting up Fields
Fields - Main
Fields - Tables Using Field
Setting up Foreign Key References
FK References
Setting up Lookup Tables
Lookup Tables
Setting up Navigation Options
Navigation Option - Main
Setting up Services
Services
Setting up Tables
Tables - Main
Tables - Fields
Tables - Constraints
Tables - Referred by Constraints
Setting up Menus
Menus - Main
Menus - Menu Lines
Setting up Maintenance Objects
Maintenance Objects - Main
Maintenance Objects - Options
Maintenance Objects - Algorithms
Maintenance Object - Maintenance Object Tree
Development Process
Hooking into User Exits
Hooking into UI Javascript User Exits
Hooking into Java User Exits (interceptors)
Extending Business Entities
Extending the Business Interface
Extending the Specialization Interface
Creating New Business Entities
Specifying the Business Interface
Specifying the Specialization Interface
Extending Maintenance Classes
Maintenance extensions
Creating Business Components
Plugging in Algorithms
Creating Portals and Zones
Creating Background Processes
Testing Background Processes
Creating MOs and Maintenance Transactions
Building the Application Viewer
Creating Javadocs for CM Source Code
Generate CM Javadocs
Recreate the Javadoc Indices
Cookbook
Hooking into User Exits
Hooking into Maintenance Class User Exits
Maintenance extensions
Developing Maintenance Extensions
Hooking into UI Javascript User Exits
Miscellaneous How-To's
How Do I Control the Initial Focus Within Tab Pages/Grids/Search Pages?
How Do I Mark Fields that Won't Make the Model Dirty?
How Do I Control the Triggering of Defaults After a Search?
How Do I Avoid Automatically Setting Fields to Uppercase?
How Can I Force the Save Button to be Enabled?
How Can I Override the Processing After a Change/Add?
How Do I Prevent the System from Setting Focus to a Widget After an Error?
How Do I Prevent Attributes From Being Copied into New List Elements?
How Do I Customize New List Elements?
How Can I Get My Sequence Numbers to Default Properly on My List Grid?
How Do I Override the Tab Page Shown After an Error in a List (Grid/Scroll)?
How Do I Disregard Unwanted Criteria from a Search Triggered by a Search Button?
How Do I Disregard Unwanted Search Result Columns?
How Do I Format a Value Based on a Given Format?
Hooking into Java User Exits (interceptors)
Example
Maintaining General-Purpose Maintenance Classes
Maintaining MOs
Maintaining Maintenance Classes for MOs
List Maintenance Classes
Maintenance List Filters
List Maintenance Get More
Maintaining Maintenance Objects
Maintaining Database Meta-data
Maintaining Fields
Maintaining Tables
Maintaining Java Classes
Maintaining Business Entities
Business Entity Background
How Do I Create a New Business Entity Instance?
How Do I Change Values on an Existing Business Entity Instance?
How Do I Delete a Business Entity Instance?
Persistent Classes
Creating the Implementation Class
Developing Change Handlers
Creating the Change Handler Class
Testing the Change Handler Class
Validation Rules
The Rules
Custom Rules
Conditions
Change Handler Helpers for Maintenance Objects
BO-Based MO
Standard MO Log Table
Standard MO Log Parameter Table
Additional Validations
Maintaining Business Components
Creating Business Components
Component Replacement
Calling Components
Maintaining Maintenance Classes, including collections
Maintaining Services
Maintaining Foreign Key References
Maintaining Lookup Tables
Maintaining Navigation Keys
Maintaining Navigation Options
Maintaining User Interfaces
Maintaining Menus
Maintaining Application Security
Maintaining UI Components (Translation)
Flushing Server and Client Caches
User Language
Modifying Dialog Titles
Modifying Transaction Titles and Tab Labels
Modifying Field Labels on Pages
Modifying Button Labels
Modifying Messages
Plugging in Algorithms
Creating Algorithm Spot Implementation Class
Review Algorithm Spot Definition
Create Algorithm Component Implementation
Add Algorithm Type
Add Algorithm
Create References to New Algorithm
Maintaining Portals and Zones
Implementing Custom Zones
Key Dependence
Creating a New Zone
Zone Types
Zone Type Interfaces
Service Zone Type
Zone Metadata
Debugging
Simple Example: LinkValueGrid
XSLT File (/WEB-INF/xsl/linkValueGrid.xsl)
XML Meta Info
Another Example: accountFinancialHistory
XSLT File (/WEB-INF/xsl/accountFinancialHistory.xsl)
XML Metainfo
The Service Data Buffer
XSLT Debugging
HTML Standards
Maintaining Background Processes
Maintaining Background Processes Overview
Creating a BatchJob
The BatchJob Annotation
Creating JobWork
Declaring a ThreadWorker Class
Creating a ThreadWorker
Initializing ThreadWork
Executing a WorkUnit
Finalizing ThreadWork
Choosing a ThreadExecutionStrategy
Building the Application Viewer
Creating Table XMLs
Creating MO XMLs
Creating Algorithm XMLs
Extending Service XMLs
Creating Javadocs for CM Source Code
Upgrade JSP to XSLT
Create User Exit Files
Tree User Exit Changes
Change Template Code in Program Components
Create XML File with UI Meta-data
Delete the JSP Files
Log into the Application and Test
Utilities
Environment Batch Programs
displayEnvironment.bat
switchEnvironments.bat
createNewEnv.bat
Services
Batch Program setupSvcXMLPrompted.bat
Batch Program updateXMLMetaInfo.bat
Eclipse Tools/Wizards
Batch Program startEclipse.cmd
Annotation Editor
Project database information
Maintenance Object wizard
Upgrade JSP to XSLT
Batch Program convertTreePageExits.pl
convertTreePageExits Purpose
convertTreePageExits Description
convertTreePageExits Usage
Batch Program convertSubPanelExits.pl
convertSubPanelExits Purpose
convertSubPanelExits Description
convertSubPanelExits Usage
SQL Script changeTemplateCodesTTRAndPN.pl
changeTemplateCodesTTRAndPN Purpose
changeTemplateCodesTTRAndPN Description
Javadocs
Batch Program generateJavadoc.bat
Batch Program reindexJavadoc.bat
Developer Guide
Overview
Java Annotations
Public API
SQL Return Codes
Standard Business Methods
Business Entity Public Methods
Public Methods
Protected Methods
Data Transfer Object Methods
Id Methods
Maintenance Class Public Methods
UI Javascript User Exits
Client User Exit Flow
Read Page
Delete Page
Save Page
Refresh Page
Prepare Model for Add
Update Field
External User Exit Templates
Template Structure
Design Approach
Using the External User Exit Templates
Create an External User Exit
Find the Name of the JSP File
Determine the Base User Exit
Uncomment the Function and Add Code
Test Your Code
Field-level Security Client-Side User Exit Example
How-To
How Do I Control the Initial Focus Within Tab Pages/Grids/Search Pages?
How Do I Mark Fields that Won't Make the Model Dirty?
How Do I Control the Triggering of Defaults After a Search?
How Do I Avoid Automatically Setting Fields to Uppercase?
How Can I Force the Save Button to be Enabled?
How Can I Override the Processing After a Change/Add?
How Do I Prevent the System from Setting Focus to a Widget After an Error?
How Do I Prevent Attributes from Being Copied into New List Elements?
How Do I Customize New List Elements?
How Can I Get My Sequence Numbers to Default Properly on My List Grid?
How Do I Override the Tab Page Shown After an Error in a List (Grid/Scroll)?
How Do I Disregard Unwanted Criteria from a Search Triggered by a Search Button?
How Do I Disregard Unwanted Search Result Columns?
How Do I Format a Value Based on a Given Format?
Java User Exits (interceptors) Interfaces and Classes
IAddInterceptor Interface
PageBody aboutToAdd(RequestContext, PageBody)
void afterAdd(RequestContext, PageBody)
IChangeInterceptor Interface
PageBody aboutToChange(RequestContext, PageBody)
void afterChange(RequestContext, PageBody)
IDeleteInterceptor Interface
boolean aboutToDelete(RequestContext, PageBody)
void afterDelete(RequestContext, PageBody)
IReadInterceptor Interface
PageBody aboutToRead(RequestContext, PageHeader)
void afterRead(RequestContext, PageBody)
InterceptorError class
void setMessageNumber(BigInteger messageNumber)
void setMessageCategory(BigInteger messageCategory)
void setMessageParameters(List messageParameters)
void setMessageParameterTypeFlags(List messageParameterTypeFlags)
InterceptorWarning class
InterceptorWarning(ServerMessage warningMessage)
InterceptorWarning(List warningMessages)
void addWarningMessage(ServerMessage message)
RequestContext Methods
String getLanguageCode()
String getUserId()
Data Objects
PageHeader and PageBody Methods
Object get(String fieldName)
String getString(String fieldName)
boolean getBoolean(String fieldName)
BigInteger getBigInteger(String fieldName)
void put(String fieldName, Object value)
PageHeader
PageBody
ItemList getList(String name)
ItemList
ListHeader getHeader()
String getName()
List getList()
void setList(List list)
ListHeader
ListBody
String getActionFlag()
CMServiceConfig.xml structure
Application Logs
Logging within Business Logic
Configuring Logging at Runtime
Property Configuration
Trace Flags
Java Programming Standards
Rationale
Guidelines
Naming Standards
General guidelines
Entity Naming Guidelines
Collection Naming Guidelines
Class Name
Collection Name
Lookup Naming Guidelines
Special Cases
'Type' Entity Controlling Characteristics for 'Instance' Entities - Characteristic Controls
HQL Programming Standards
Examples
Union queries
Performance
Raw SQL
SQL Programming Standards
Composing SQL Statements
Prerequisite
Composing a SELECT Statement
General SELECT Statement Considerations
Selection List
Database-specific Features
Oracle
FROM Clause
WHERE Clause
General WHERE Clause Considerations
Use of Sub-Selects
Use of in Function
Use of Database Functions
Other
Sort Order
Grouping
Existence Checks
SQL statements to avoid
Decimal Delimiter
Testing SQL Statements
Result Data
Performance Testing - Oracle Only
Overview
What is an Explain Plan?
Generate the SQL's Explain Plan
Analyzing the Explain Plan
Access Methods
Common Issues to Be Aware of
Cartesian Product
Full Table Scan
Join Order
Nested Loops
Sort
More Extensive Performance Testing
SQL Development and Tuning Best Practices
Database Design
Database Object Standard
Naming Standards
Table
Columns
Indexes
Sequence
Trigger
Column Data Type and Constraints
User Define Code
System Assigned Identifier
Date/Time/Timestamp
Number
Fixed Length/Variable Length Character Columns
Null Constraints
Default Value Setting
Foreign Key Constraints
Standard Columns
Owner Flag
Version
System Table Guide
What are system tables?
Why the standard must be observed?
Guidelines for System Table Updates
Business Configuration Tables
Application Security and User Profile
Currency Code
DB Process
Display Profile
Installation Options
Language Code
To do priority and Role
Development and Implementation System Tables
Standards
Algorithm Type
Algorithm
Application Security
Batch Control
Business Object
Business Service
Characteristics
Data Area
Display Icon
Foreign Key Reference
Lookup
Map
Messages
Meta data - Table and Field
Meta data - Constraints
Meta data - Menu
Meta data - Program, Location and Services
Meta data - Maintenance Object
Meta data - Work Tables
Meta data - Search Object
Navigation Option
Portal and Zone
Sequence
Schema
Script
To do Type
XAI configuration
XAI Services
Oracle Utilities Application Framework only Tables
System Table List
Key Generation
Metadata for Key Generation
Extending the Application Viewer
Building Source Code Viewer Extension Information
Development Performance Guidelines
Object-Relational Mapping: Background
The ORM defers database calls for performance
ID Objects
Counting a collection
Avoid unnecessary work
ORM 'Navigation' is your friend
How to Pre-load Entities Using Fetch
Session Cache
Level 2 Cache Applicable for Batch
Flushing - COBOL and Save Points
Avoid Extra SQL
Prepared statement - use binding
Service Script vs. Java Services
Java Performance Patterns
Batch Performance
Commit Considerations
Clustered vs. Distributed Mode Performance: Clustered is Preferred
Light Business Objects
Data Explorer
Zone Configuration
Table Indices and SQL
UI Maps and BPAs
Diagnosing Performance Issues
Fiddler
OUAF 'Show Trace' button
Log Service times in spl_service.log
Optimization and Performance Profiling
Basic Logging
Timing code ('shootout'):
Using PerformanceTestResult helpers
Profiling
PerformanceTestHelper API
References and Additional Resources
Packaging Guide
CM Packaging Utilities Cookbook
App Server CM Packaging Overview
Developing Off-site
Off-site Process
On-site Process
Guidelines
App Server CM Packaging Tools
Post Install Setup
Using the extractCMSource.plx Utility
Display Usage
Extract From an App Server
Extract From Release/Patch Install Package
FW Utility to extract CM sources from Unix environments
Using the applyCM Utility
Using the create_CM_Release Utility
Using the create_CM_Patch Utility
Multi-CM Application Functionality
CM System Data Packaging Tools
CM System Data Packaging Overview
Extract Process
Upload Process
Tailoring Your Oracle Utilities Application Implementation
Preserving Customer Changes
Tailoring Web Files
Tailoring the CM Java Application
Tailoring AppViewer
Tailoring Help
Positioning Custom Scripts
Replacing the Oracle Utilities Logo
Using the Implementation Version File
Tailoring XAI
Tailoring XML Schema
Tailoring Templates and User Exits
Oracle Utilities Application Framework Software Development Kit
Tailoring Templates and User Exits