You are on page 1of 24

Oracle Database 11g: Introduction to SQL New

What you will learn:


In this course students learn the concepts of relational databases. This course provides the essential SQL skills that allow developers to write queries against single and multiple tables, manipulate data in tables, and create database objects. Students learn to control privileges at the object and system level. This course covers creating indexes and constraints, and altering existing schema objects. Students also learn how to create and query external tables. Students learn to use the advanced features of SQL in order to query and manipulate data within the database, use the dictionary views to retrieve metadata and create reports about their schema objects. Students also learn some of the date-time functions available in the Oracle Database. This course discusses how to use the regular expression support in SQL. In this course, students use Oracle SQL Developer as the main development tool. SQL*Plus is introduced as an optional development tool. Learn To:

Create reports of sorted and restricted data Run data manipulation statements (DML) to update data Control database access to specific objects Manage schema objects Manage objects with data dictionary views Retrieve row and column data from tables

Audience:

Forms Developer Data Warehouse Administrator Business Analysts Developer System Analysts Application Developers PL/SQL Develo

Prerequisites:

Required Prerequisites:

Familiarity with data processing concepts and techniques Data processing

Course Objectives:

Retrieve row and column data from tables with the SELECT statement Create reports of sorted and restricted data Employ SQL functions to generate and retrieve customized data Display data from multiple tables using the ANSI SQL 99 JOIN syntax Identify the major structural components of the Oracle Database 11g Create reports of aggregated data Write SELECT statements that include queries Run data manipulation statements (DML) to update data in the Oracle Database 11g Create tables to store data Utilize views to display and retrieve data Control database access to specific objects Manage schema objects Manage objects with data dictionary views Write multiple-column sub-queries Use scalar and correlated sub-queries Use the regular expression support in SQL

Course Topics:

Introducing Oracle Database 11g


List the features of Oracle Database 11g Discuss the basic design, theoretical and physical aspects of a relational database Categorize the different types of SQL statements Describe the data set used by the course Log onto the database using the SQL Developer environment Save queries to files and use script files in SQL Developer

Retrieving Data Using the SQL SELECT Statement


List the capabilities of SQL SELECT statements Generate a report of data from the output of a basic SELECT statement Select All Columns Select Specific Columns Use Column Heading Defaults Use Arithmetic Operators Understand Operator Precedence Learn the DESCRIBE command to display the table structure

Restricting and Sorting Data

Write queries that contain a WHERE clause to limit the output retrieved

List the comparison operators and logical operators that are used in a WHERE clause Describe the rules of precedence for comparison and logical operators Use character string literals in the WHERE clause Write queries that contain an ORDER BY clause sort the output of a SELECT statement Sort output in descending and ascending order

Using Single-Row Functions to Customize Output


Describe the differences between single row and multiple row functions Manipulate strings with character function in the SELECT and WHERE clauses Manipulate numbers with the ROUND, TRUNC and MOD functions Perform arithmetic with date data Manipulate dates with the date functions

Using Conversion Functions and Conditional Expressions


Describe implicit and explicit data type conversion Use the TO_CHAR, TO_NUMBER, and TO_DATE conversion functions Nest multiple functions Apply the NVL, NULLIF, and COALESCE functions to data Use conditional IF THEN ELSE logic in a SELECT statement

Reporting Aggregated Data Using the Group Functions


Use the aggregation functions in SELECT statements to produce meaningful reports Create queries that divide the data in groups by using the GROUP BY clause Create queries that exclude groups of date by using the HAVING clause

Displaying Data From Multiple Tables


Write SELECT statements to access data from more than one table View data that generally does not meet a join condition by using outer joins Join a table by using a self join

Using Sub-queries to Solve Queries


Describe the types of problem that sub-queries can solve Define sub-queries List the types of sub-queries

Write single-row and multiple-row sub-queries

Using the SET Operators


Describe the SET operators Use a SET operator to combine multiple queries into a single query Control the order of rows returned when using the SET operators

Manipulating Data

Describe each DML statement Insert rows into a table with the INSERT statement Use the UPDATE statement to change rows in a table Delete rows from a table with the DELETE statement Save and discard changes with the COMMIT and ROLLBACK statements Explain read consistency

Using DDL Statements to Create and Manage Tables


Categorize the main database objects Review the table structure List the data types available for columns Create a simple table Decipher how constraints can be created at table creation Describe how schema objects work

Creating Other Schema Objects


Create a simple and complex view Retrieve data from views Create, maintain, and use sequences Create and maintain indexes Create private and public synonyms

Controlling User Access


Differentiate system privileges from object privileges Grant privileges on tables View privileges in the data dictionary Grant roles Distinguish between privileges and roles

Managing Schema Objects

Add constraints

Create indexes Create indexes using the CREATE TABLE statement Create function-based indexes Drop columns and set column UNUSED Perform FLASHBACK operations Create and use external tables

Managing Objects with Data Dictionary Views


Explain the data dictionary Find table information Report on column information View constraint information Find view information Verify sequence information Understand synonyms Add comments

Manipulating Large Data Sets


Manipulate data using sub-queries Describe the features of multi-table inserts Use the different types of multi-table inserts Merge rows in a table Track the changes to data over a period of time

Managing Data in Different Time Zones


Use data types similar to DATE that store fractional seconds and track time zones Use data types that store the difference between two date-time values Practice using the multiple data-time functions for globalize applications

Retrieving Data Using Sub-queries


Write a multiple-column sub-query Use scalar sub-queries in SQL Solve problems with correlated sub-queries Update and delete rows using correlated sub-queries Use the EXISTS and NOT EXISTS operators Use the WITH clause

Regular Expression Support

List the benefits of using regular expressions

Use regular expressions to search for, match, and replace strings

Oracle Database 11g: Program with PL/SQL New


What you will learn:
This course introduces students to PL/SQL and helps them understand the benefits of this powerful programming language. Students learn to create PL/SQL blocks of application code that can be shared by multiple forms, reports, and data management applications. Students learn to create anonymous PL/SQL blocks as well as stored procedures and functions. Students learn to develop, execute, and manage PL\SQL stored program units such as procedures, functions, packages, and database triggers. Students also learn to manage PL/SQL subprograms, triggers, declaring identifiers and trapping exceptions. Students are introduced to the utilization of some of the Oracle-supplied packages. Students use Oracle SQL Developer to develop these program units. SQL*Plus and JDeveloper are introduced as optional tools. Learn to:

Conditionally control code flow (loops, control structures) Design and use PL/SQL packages to group and contain related constructs. Create triggers to solve business challenges. Use some of the Oracle supplied PL/SQL packages to generate screen output and file output. Create anonymous PL/SQL blocks of code. Declare PL/SQL Variables

Audience:

System Analysts PL/SQL Developer Forms Developer Application Developers Database Administrators Technical Consultant Portal Developer Developer

Prerequisites:

Required Prerequisites:

Oracle Database 11g: SQL Fundamentals I Oracle Database 11g: SQL Fundamentals II Oracle Database 11g: SQL Fundamentals II New Oracle Database 11g: SQL Fundamentals I New

Suggested Prerequisites:

Previous programming experience

Course Objectives:

Manage dependencies between PL/SQL subprograms Use conditional compilation to customize the functionality in a PL/SQL application without removing any source code Create and use stored procedures and functions Design and use PL/SQL packages to group and contain related constructs Create overloaded package subprograms for more flexibility Use the Oracle supplied PL/SQL packages to generate screen output, file output, and mail output Write dynamic SQL for more coding flexibility Describe the features and syntax of PL/SQL Use PL/SQL programming constructs and conditionally control code flow (loops, control structures, and explicit cursors) Handle runtime errors Describe stored procedures and functions Design PL/SQL code for predefined data types, local subprograms, additional pragmas and standardized constants and exceptions Create triggers to solve business challenges Design PL/SQL anonymous block that execute efficiently

Course Topics:

Introduction

Course Objectives Course Agenda Describing the Human Resources (HR) Schema PL/SQL development environments Available in this course Introduction to SQL Developer

Introduction to PL/SQL

PL/SQL Overview Benefits of PL/SQL Subprograms Overview of the Types of PL/SQL blocks Creating and Executing a Simple Anonymous Block Generating Output from a PL/SQL Block

Declaring PL/SQL Identifiers


Different Types of Identifiers in a PL/SQL subprogram Using the Declarative Section to Define Identifiers Storing Data in Variables Scalar Data Types %TYPE Attribute Bind Variables Using Sequences in PL/SQL Expressions

Writing Executable Statements


Describing Basic PL/SQL Block Syntax Guidelines Commenting Code SQL Functions in PL/SQL Data Type Conversion Nested Blocks Operators in PL/SQL

Interacting with the Oracle Server


Including SELECT Statements in PL/SQL to Retrieve data Manipulating Data in the Server Using PL/SQL The SQL Cursor concept Using SQL Cursor Attributes to Obtain Feedback on DML Saving and Discarding Transactions

Writing Control Structures


Conditional processing Using IF Statements Conditional processing Using CASE Statements Simple Loop Statement While Loop Statement For Loop Statement The Continue Statement

Working with Composite Data Types


Using PL/SQL Records Using the %ROWTYPE Attribute Inserting and Updating with PL/SQL Records INDEX BY Tables INDEX BY Table Methods INDEX BY Table of Records

Using Explicit Cursors


Understanding Explicit Cursors Declaring the Cursor Opening the Cursor Fetching data from the Cursor Closing the Cursor Cursor FOR loop Explicit Cursor Attributes FOR UPDATE Clause and WHERE CURRENT Clause

Handling Exceptions

Understanding Exceptions Handling Exceptions with PL/SQL Trapping Predefined Oracle Server Errors Trapping Non-Predefined Oracle Server Errors Trapping User-Defined Exceptions Propagate Exceptions RAISE_APPLICATION_ERROR Procedure

Creating Stored Procedures


Creating a Modularize and Layered Subprogram Design Modularizing Development With PL/SQL Blocks Understanding the PL/SQL Execution Environment The Benefits of Using PL/SQL Subprograms The Differences Between Anonymous Blocks and Subprograms Creating, Calling, and Removing Stored Procedures Using the CREATE Command and SQL Developer Using Procedures Parameters and Parameters Modes Viewing Procedures Information Using the Data Dictionary Views and SQL Developer

Creating Stored Functions


Creating, Calling, and Removing a Stored Function Using the CREATE Command and SQL Developer Identifying the Advantages of Using Stored Functions in SQL Statements Identify the steps to create a stored function Using User-Defined Functions in SQL Statements Restrictions When Calling Functions from SQL statements Controlling Side Effects When Calling Functions from SQL Expressions Viewing Functions Information

Creating Packages

Listing the Advantages of Packages Describing Packages The Components of a Package Developing a Package The Visibility of a Packages Components Creating the Package Specification and Body Using the SQL CREATE Statement and SQL Developer Invoking the Package Constructs Viewing the PL/SQL Source Code Using the Data Dictionary

Working With Packages


Overloading Subprograms in PL/SQL Using the STANDARD Package Using Forward Declarations to Solve Illegal Procedure Reference Using Package Functions in SQL and Restrictions Persistent State of Packages Persistent State of a Package Cursor Controlling Side Effects of PL/SQL Subprograms Using PL/SQL Tables of Records in Packages

Using Oracle-Supplied Packages in Application Development


Using Oracle-Supplied Packages Examples of Some of the Oracle-Supplied Packages How Does the DBMS_OUTPUT Package Work? Using the UTL_FILE Package to Interact With Operating System Files Using the UTL_MAIL Package Using the UTL_MAIL Subprograms

Using Dynamic SQL


The Execution Flow of SQL What is Dynamic SQL? Declaring Cursor Variables Dynamically Executing a PL/SQL Block Using Native Dynamic SQL to Compile PL/SQL Code Using DBMS_SQL Package Using DBMS_SQL with a Parameterized DML Statement Dynamic SQL Functional Completeness

Design Considerations for PL/SQL Code


Standardizing Constants and Exceptions Using Local Subprograms Using Autonomous Transactions Using the NOCOPY Compiler Hint Using the PARALLEL_ENABLE Hint Using the Cross-Session PL/SQL Function Result Cache Using the DETERMINISTIC Clause with Functions Using Bulk Binding to Improve Performance

Creating Triggers

Working With Triggers Identifying the Trigger Event Types and Body Business Application Scenarios for Implementing Triggers Creating DML Triggers Using the CREATE TRIGGER Statement and SQL Developer Identifying the Trigger Event Types, Body, and Firing (Timing) Statement Level Triggers Versus Row Level Triggers Creating Instead of and Disabled Triggers Managing, Testing, and Removing Triggers

Creating Compound, DDL, and Event Database Triggers


Working With Compound Triggers Identifying the Timing-Point Sections of a Table Compound Trigger Compound Trigger Structure for Tables and Views Using a Compound Trigger to Resolve the Mutating Table Error Comparing Database Triggers to Stored Procedures Creating Triggers on DDL Statements Creating Database-Event and System-Events Triggers System Privileges Required to Manage Triggers

Using the PL/SQL Compiler


Using the PL/SQL Compiler Using the Initialization Parameters for PL/SQL Compilation Using the New PL/SQL Compile Time Warnings Overview of PL/SQL Compile Time Warnings for Subprograms The Benefits of Compiler Warnings The PL/SQL Compile Time Warning Messages Categories Setting the Warning Messages Levels: Using SQL Developer, PLSQL_WARNINGS Initialization Parameter, and the DBMS_WARNING Package Subprograms Viewing the Compiler Warnings: Using SQL Developer, SQL*Plus, or the Data Dictionary Views

Managing PL/SQL Code


What Is Conditional Compilation and How Does it Work? Using Selection Directives Using Predefined and User-Defined Inquiry Directives The PLSQL_CCFLAGS Parameter and the Inquiry Directive Using Conditional Compilation Error Directives to Raise User-Defined Errors Using the DBMS_DB_VERSION Package Using DBMS_PREPROCESSOR Procedures to Print or Retrieve Source Text Obfuscating and Wrapping PL/SQL Code

Managing Dependencies

Overview of Schema Object Dependencies Querying Direct Object Dependencies Using the USER_DEPENDENCIES View Querying an Objects Status Invalidation of Dependent Objects Displaying Direct and Indirect Dependencies Fine-Grained Dependency Management in Oracle Database 11g Understanding Remote Dependencies Recompiling a PL/SQL Program Unit

Oracle Reports Developer 10g: Build Reports


What you will learn:
In this course, students learn how to design and build a variety of standard and custom Web and paper reports using Oracle Reports Developer (9.0.4.0.1). Working in the declarative environment of Reports Builder, students learn how to retrieve, display, and format data from any data source in numerous reporting styles and publish the output to any destination. During the course, students learn how to add dynamic content to a static Web page and publish reports to the Web. Students also learn how to customize more complex reports, embed graphical charts, and use OracleAS Reports Services to deploy your reports.

Audience:

Business Intelligence Developer Technical Consultant Reports Developer

Prerequisites:

Required Prerequisites:

Oracle Database 10g: SQL Fundamentals I Oracle Database 10g: PL/SQL Fundamentals Oracle Database 10g: Develop PL/SQL Program Units

Suggested Prerequisites:

XML: Introduction or equivalent familiarity with basic XML Oracle Database 10g: SQL Fundamentals II

Course Objectives:

Add dynamic data to an existing HTML page Use report parameters and customize a runtime parameter form Enhance reports using graphs and PL/SQL trigger code Maximize report performance using OracleAS Reports Services and tune reports Publish a report on the Web and build reports to run in various languages Manage report templates, create mailing labels and letters

Identify the main components in a report document and how they are related Identify the differences between Web and paper reports Identify standard report design styles and run existing reports to various output destinations Create and modify basic tabular reports and high quality Web reports Create other report styles such as break reports and matrix reports Create reports by accessing data from various data sources

Course Topics:

Introduction to Oracle Reports Developer


Business Intelligence Enterprise Reporting Oracle Reports Developer Oracle Database 10g Oracle Developer Suite 10g Oracle Application Server 10g OracleAS Reports Services OracleAS Reports Services Architecture for the Web

Designing and Running Reports


Understanding User Requirements Designing Reports Tabular Master-Detail Master with Two Details Matrix Retrieving and Sharing Data Running a Report

Working in Oracle Reports Developer


Reports Developer Executables Invoking Reports Builder Reports Builder Modules Report Data and Layout Reports Builder Components Object Navigator Report-Level Objects Data Model Objects

Creating a Paper Report


Report Module Components Building a Paper Report Viewing the Paper Report Output Saving the Report Definition Reentering the Wizard Creating Break Reports Break Report Labels Creating Mailing Labels and Letters

Enhancing a Basic Paper Report


What Is the Paper Design? The Paper Design Window Modifying a Report Aligning Columns Setting a Format Mask Manipulating Objects Modifying Visual Attributes Applying Conditional Formatting

Managing Report Templates


Using Report Templates Modifying a Template Customizing the Template Margin Customizing the Template Body Adding Web Links to a Template for Report HTML Output Predefining Your Own Templates Adding a Template Preview Image

Creating a Web Report


What Is JSP Technology? JSP Advantages Simple JSP Example Building a Web Report Using the Report Wizard Report Editor: Web Source View JSP Tags Web Source Example

Enhancing Reports Using the Data Model: Queries and Groups


The Data Model Objects Modifying Properties of a Query Applying Changes Changing the Group Structure Group Hierarchy Ordering Data in a Group Query Modifications Filtering Data in a Group

Enhancing Reports Using the Data Model: Data Sources


Data Source Types Pluggable Data Sources Using XML as a Data Source Document Type Definition File OLAP Data Source Using Text as a Data Source Using JDBC as a Data Source Using REF Cursor Queries

Enhancing Reports Using the Data Model: Creating Columns


Data Model Columns Maintaining Data Source Columns Producing File Content Output Creating a Column Creating Summary Columns Displaying Subtotals Displaying Percentages Creating a Formula Column

Enhancing Reports Using the Paper Layout


Viewing the Paper Layout Designing Multipanel Reports Printing Multipanel Reports Different Objects in the Paper Layout The Paper Layout Layers Report Processing Paper Layout Tools Report Bursting

Controlling the Paper Layout: Common Properties


Modifying Paper Layout Object Properties Common Layout Properties Sizing Objects Anchors Layout Object Relationships Pagination Icons in the Paper Layout Controlling Print Frequency Using Format Triggers

Controlling the Paper Layout: Specific Properties


Properties of a Repeating Frame Specifying Print Direction Controlling the Number of Records per Page Controlling Spacing Between Records Minimum Widow Records System Variables Valid Source Columns Displaying File Contents

Web Reporting

Comparing Static and Dynamic Reporting Adding Dynamic Content Creating a Report Block Invoking the Report Block Wizard Examining the Web Source Code rw:foreach Tag rw:field Tag Customizing Reports JSPs

Extending Functionality Using XML


Why Use XML Report Definitions? Creating XML Report Definitions Partial Report Definitions: Format Modification Example Partial Report Definitions: Format Exception Example Full Report Definition: Data Model Modification Example Running XML Report Definitions Debugging XML Report Definitions

Creating and Using Report Parameters


Creating User Parameters Referencing Parameters in a Report Query Using Bind References Using Lexical References Hints and Tips When Referencing Parameters Creating a List of Values Referencing System Parameters Building a Paper Parameter Form

Embedding a Graph in a Report


Adding a Graph to a Paper Report Adding a Graph to a Web Report Selecting the Graph Type Selecting the Graph Data Adding Options to the Graph Customizing Web Graphs The rw:graph Tag Customizing Graphs Using the Graph.XML File

Enhancing Matrix Reports


The Matrix Data Model The Matrix Paper Layout Creating Matrix Summaries Creating the Matrix Manually The Matrix with Group Data Model The Matrix with Group Layout Building a Nested Matrix Nested Matrix Paper Layout

Coding PL/SQL Triggers


Types of Triggers in Reports Trigger Code Using Report Triggers Using Data Model Triggers: PL/SQL Group Filter Using Data Model Triggers: Parameter Validation Using Layout Triggers Using Format Triggers Event-Based Reporting

Extending Functionality Using the SRW Package


Contents of the SRW Package Outputting Messages Executing a Nested Report Restricting Data Initializing Fields Creating a Table of Contents Performing DDL Statements Setting Format Attributes

Maximizing Performance Using OracleAS Reports Services


Running Reports Using OracleAS Reports Services Report Request Methods Oracle Application Server Components Enabling Single Sign-On Access Running the Web Layout: JSP Run-time Architecture Running the Paper Layout: Servlet Run-time Architecture Running a Paper Report on the Web Queue Manager

Building Reports: Efficiency Guidelines


Tuning Reports Performance Measurement Non SQL Data Sources Investigating the Data Model Investigating the Paper Layout Running the Report Different Development and Run-Time Environments Developing Reports to Run in Different GUIs

Oracle Forms Developer 10g: Build Internet Applications

What you will learn:


Leverage your investment by taking advantage of web technologies to easily and quickly construct sophisticated database forms and business logic with minimal effort. This course focuses on teaching students to use Oracle Forms Developer 10g (10.1.2.0.2) to rapidly build scalable, high-performance applications for the Internet. In this course students build, test, debug, and deploy interactive Internet applications. Working in a graphical user interface (GUI) environment, they develop an order entry application from the ground up. This application incorporates several advanced features that provide a rich user experience while implementing business rules. Learn To:

Customize forms with user input items such as check boxes, list items, radio groups, and Pluggable Java Components Integrate Java into Forms applications by using JavaBeans Control navigation, data access, validation, and transactions by creating event-related triggers Enable Forms applications running on the Web to access files and applications on the client computer Display Forms elements and data in multiple canvases and windows Deploy Forms applications to the Web

Audience:

Forms Developer Support Engineer Developer Technical Consultant Application Developers PL/SQL Developer

Prerequisites:

Required Prerequisites:

A good familiarity with Graphical User Interface (GUI) Working experience with the Web browser Oracle Database 10g: Introduction to SQL Oracle Database 10g: Program with PL/SQL Oracle Database 10g: Develop PL/SQL Program Units

Suggested Prerequisites:

Oracle Database 10g: Advanced PL/SQL

Course Objectives:

Create form modules, including components for database interaction and GUI controls Display form modules in multiple windows and use a variety of layout styles Test form modules in a Web browser Debug form modules in a 3-tier environment Implement triggers Reuse objects and code Link one form module to another

Course Topics:

Introducing Oracle Forms Developer and Forms Services


Grid Computing Oracle 10g Products Oracle Application Server 10g Architecture Benefits and Components of Oracle Developer Suite 10g Running a Forms Developer Application Working in the Forms Developer Environment

Creating Forms Modules


Creating a Basic Forms Module Creating a Master-Detail Forms Module Modifying the Data Block Modifying the Layout

Working with Data Blocks and Frames


Using the Property Palette Managing Object Properties Creating and Using Visual Attributes Controlling the Behavior and Appearance of Data Blocks Controlling Frame Properties Creating Control Blocks Deleting Data Blocks

Working with Input Items


Creating Text Items Controlling the Behavior and Appearance of Text Items Creating LOVs Defining Editors Creating Check Boxes Creating List Items Creating Radio Groups

Working with Non Input Items


Creating a Display Item Creating an Image Item Creating a Push Button Creating a Calculated Item Creating a Hierarchical Tree Item Creating a Bean Area Item

Working with Windows and Canvases


Overview of Windows and Canvases Displaying a Forms Module in Multiple Windows Creating a New Window Displaying a Forms Module on Multiple Layouts Creating a New Content Canvas Creating a New Stacked Canvas Creating a New Toolbar Canvas Creating a New Tab Canvas

Producing Triggers

Grouping Triggers into Categories Defining Trigger Components: Type, Code, and Scope Specifying Execution Hierarchy

Using the PL/SQL Editor Writing Trigger Code Using Variables and Built-ins Using the When-Button-Pressed and When-Window-Closed Triggers

Debugging Triggers

The Debugging Process The Debug Console Setting Breakpoints Debugging Tips Running a Form in Debug Mode Stepping through Code

Adding Functionality to Items


Coding Item Interaction Triggers Defining Functionality for Check Boxes Changing List Items at Run Time Displaying LOVs from Buttons Populating Image Items Populating and Displaying Hierarchical Trees Interacting with JavaBeans

Run-Time Messages and Alerts


Built-ins and Handling Errors Controlling System Messages The FORM_TRIGGER_FAILURE Exception Using Triggers to Intercept System Messages Creating and Controlling Alerts Handling Server Errors

Query Triggers

SELECT Statements Issued During Query Processing WHERE and ORDER BY Clauses and the ONETIME_WHERE Property Writing Query Triggers Query Array Processing Coding Triggers for Enter-Query Mode Overriding Default Query Processing Obtaining Query Information at Run Time

Validation

Validation Process Controlling Validation Using Properties Controlling Validation Using Triggers Performing Client-Side Validation with PJCs Tracking Validation Status Using Built-ins to Control When Validation Occurs

Navigation

Navigation Overview Understanding Internal Navigation Using Object Properties to Control Navigation Writing Navigation Triggers: When-New-

You might also like