Enhance the User Experience with Form Personalizations
Jeff Lollar, Lucidity Consulting Group September 2007
Goals of this Presentation
Know what Form Personalizations are Develop the mindset that Form Personalizations can offer Creative Solutions Position to Implement Solutions with some Trial and Error Demonstrate several popular and “inspiring” Forms Personalizations
What are Personalizations
A means to build enhancements to Oracle Application Forms Execute an ACTION when a CONDITION is satisfied Form Personalizations, not Page/OAF Personalizations Substitute for the CUSTOM.pll (with limitations) Common Examples: Require Fields, Default Values, Pop Message Boxes,etc
Limitations of Form Personalizations
Not used by Pages/OAF (This is a different type of Personalization) Executed at Form Level (No impact on API’s or Table Validations) In most cases, only a few triggering events are available Limited Capabilities
Ex. Cannot add new items (fields, buttons, etc) to the form
How to Create a Personalization
1. 2. 3. 4. Access Setup Form Enter Condition Enter Action Save & Test
Access Setup Form
1. Navigate to the Form you wish to implement a Personalization for 2. HELP > DIAGNOSTIC > CUSTOM CODE > PERSONALIZE
Access Setup Form
Access Setup Form
Impacting System Options “Hide Diagnostics menu entry”
No – Diagnostics menu is accessible (access Forms Personalizations)
“Utilities:Diagnostics”
No – Must provide APPS password in order to access Diagnostics
Enter Condition
Provide the Condition that must be satisfied in order for the Action to take place The Header Triggering Event & Object Condition Statement Context
Enter Condition
Enter the Header
Use Sequence for Organization and controlling prioritization Enable or Disable
Provide a clear description
Apply at the Form or Function Level (A function is a particular instance of a form assigned to a Responsibility’s Menu)
Enter Condition
Triggering Event
WHEN-NEW-FORM-INSTANCE WHEN-NEW-BLOCK-INSTANCE WHEN-NEW-RECORD-INSTANCE WHEN-NEW-ITEM-INSTANCE WHEN-VALIDTE-RECORD MENU(N) – 1-15 SPECIAL(N) – 1-45
Triggering Object
Required depending on Triggering Event BLOCK.FIELD (validated)
Enter Condition
Condition Statement
If Condition evaluates to TRUE then Actions are processed. Can leverage SQL functions, operators, and bind variables Control if rule should be processed in Query-Mode
Test your condition using data in current form
Insert variables that reference attribute values of objects (items, windows, globals, ets)
Helps with inserting Bind Variables (BLOCK.ITEM)
Enter Condition
Context Region
Restrict Personalization to a particular User Responsibility Industry (reserved for future per Metalink Doc Id 395117.1)
Example of restricting by user
Enter Action
Enter Action
This is WHAT the Personalization does Four Basic Types
1. 2. 3. 4. Property Message Builtin Menu
Sequence that Actions take order Enable for a particular language
Select Type. This determines fields presented in region on the right.
Enable or Disable
Enter Action
Property
Set a Value for a particular Property on a Particular Object. Ex. Make “Payment Terms” field required.
Example: Item, Block, Window, Canvas, etc Based on Object Type Selected, identify particular Object
The Property of the Object that will be edited. Example: Displayed, Value, Prompt, etc
The new value to assign to the property. SQL may be used here
Enter Action
Message
Message Type
Show – A message with an “OK” button Hint –Message Line (lower left corner) Error – Aborts after message box Debug – only if “Show Debug Messages” is checked Warn – Aborts if user selects “Cancel”
Message Text
SQL Bind Variables
Enter Action
Builtin
Launch SRS Form – Open the “Submit Concurrent Request” form Launch a Function – Open a registered application function such as those assigned to responsibility menus. Launch a URL DO_KEY – Perform form actions, such as Clear Block, Duplicate Record, etc Execute a Procedure – Call a procedure and pass arguments GO_ITEM – Move to a particular item within the form GO_BLOCK – Move to the first item of a particular block within the form FORMS_DDL – (Data Dictionary Language) Always issues an implicit Commit. Raise FORM_TRIGGER_FAILURE EXECUTE_TRIGGER – Execute a trigger that is within the form SYNCHRONIZE – Synchronize Client and middle-tier Call Custom Library – Call an Event within the CUSTOM.pll
Enter Action
Menu
Create Menu Options Under Toolbar Headings Requires additional personalization at What the user condition of Selection will see
Assigned to an Unique Option Control in what blocks Menu Option is enabled
Display or not a line above Menu Option
Save & Test
1. Save Work 2. Close Form Being Personalized 3. Reopen & Test
Demonstration
Several Form Personalizations Ranging from Simple to Advanced For each:
Identify the Personalization Functionality Leveraged Walkthrough the Setups
Examples
Hide the “Online” button on the Release Form Pop a Customer Specific Message when entering SO for Customer Open a Customers Address in a Google Map
More Examples
Control a Users Discounting Privileges Open the “Item Supply/Demand” form from the Sales Order and pass parameters Print the AR Invoice from within the Sales Order Form
Hide “Online” button on Release Form
Demonstrate Set Property Value Simple! A Great Example of an Easy Personalization that is Very Effective!
Hide “Online” button on Release Form
Before
After
Hide “Online” button on Release Form
Header
Condition
Accept Default
Hide “Online” button on Release Form
Actions
•Type = Property •Object Type = Item •Target Object = RELEASE.ONLINE •Property Name = DISPLAYED •Value = False
Pop Customer Specific Msg at OE
SQL-based Condition Pop a Message Box SQL-based Message Insert ‘Get’ Expression
Pop Customer Specific Msg at OE
Customer Master
Sales Order Form
Pop Customer Specific Msg at OE
Condition
•Trigger Event = WHEN-NEW-ITEM-INSTANCE •Trigger Object = ORDER.SOLD_TO •Condition = (select attribute6 from hz_cust_accounts where cust_account_id=${item.order.sold_to_org_id.value}) is not null
Pop Customer Specific Msg at OE
Actions
•Type = Message •Message Type = Show •Message Text = =select attribute6 from hz_cust_accounts where cust_account_id=${item.order.sold_to_org_id.value}
Pop Customer Address in a Web Map
Create a Menu Option Launch From a Menu Option Launch SQL-based URL Insert ‘Get’ Expression Requires Two Personalization Records
Create Menu Option Launch URL
Pop Customer Address in a Web Map
Sales Order Form
Customer Address In Google Map
Pop Customer Address in a Web Map
Header - Creating Menu Option
Condition - Creating Menu Option
Accept Default
Pop Customer Address in a Web Map
Actions - Creating Menu Option
•Type – Menu •Menu Entry – MENU1 •Menu Label – Map It! (or any name you prefer)
Pop Customer Address in a Web Map
Header – Launch URL
Condition – Launch URL
•Trigger Event = MENU1 •Condition = ${item.order.ship_to_address1.value} IS NOT NULL
Pop Customer Address in a Web Map
Actions – Launch URL
•Trigger Event = Builtin •Builtin Type = Launch a URL •Argument = =SELECT ('http://maps.google.com/maps?f=q&hl=en&geocode=&q='||${item.order.sh ip_to_address1_mir.value}||','||${item.order.ship_to_address5_mir2.value}) FROM DUAL
Control a Users Discounting Privileges
Message Box Call Package to create Message Text Launch Multiple Actions “Raise Form_Trigger_Failure” Builtin Utilize PL/SQL package in Condition Insert ‘Get’ Expression
Control a Users Discounting Privileges
Assign Discount Limit to Custom System Option
Validate if User’s Discount of List Price is within her/his Limit
Control a Users Discounting Privileges
Condition
•Trigger Event = WHEN-VALIDATE-RECORD •Trigger Object = LINE •Condition = (1 (${item.line.unit_selling_price.value}/${item.line.unit_list_price.value})) > (XXLCG_FORMS_PERSON_UTIL_PKG.get_discount_limit(FND_GLOBAL.USER_I D)/100)
Control a Users Discounting Privileges
Actions
•Trigger Event = Message •Message Type = Error •Message Text = =SELECT 'You do not have the permission to apply a discount greater than ' || XXLCG_FORMS_PERSON_UTIL_PKG.get_discount_limit(FND_GLOBAL.USE R_ID) || '% to the original list price of '||TO_CHAR(${item.line.unit_list_price_mir.value},'$9,999,999.99')|| '. Please contact your sales manager if the discount must be applied.' FROM DUAL
Control a Users Discounting Privileges
Actions
•Trigger Event = Builtin •Builtin Type = RAISE FORM_TRIGGER_FAILURE
Open Supply/Demand Form from SO
Launch Form Built-In Passing Form Parameters Create Menu Option Launch From Menu Option Insert ‘Get’ Expression
Open Supply/Demand Form from SO
From Sales Order Tools Menu, select “Open Item Demand”
Supply/Demand Form opens passing item already queried on Sales Order Line
Open Supply/Demand Form from SO
Condition - Creating Menu Option
Accept Default
Actions - Creating Menu Option
•Type = Menu •Menu Entry = MENU3 •Menu Label = Open Item Demand (or whatever you choose) •Enabled in Block(s) = LINE
Open Supply/Demand Form from SO
Condition – Launching Form
Trigger Event = MENU3
Open Supply/Demand Form from SO
Actions – Launching Form
•Type = Builtin •Builtin Type = Launch a Function •Function Code = INV_INVDVDSD •Parameters = =SELECT 'ITEM_NUMBER='||${item.line.inventory_item.value}||' ORG_ID = '||${item.line.ship_from_org_id.value} FROM DUAL
Print AR Invoice from the Sales Order
“Launch SRS Form” Builtin Global Parameters Create Menu Option Launch From Menu Option Requires Three Personalizations
1. Create Menu Option 2. Launch SRS Form 3. Default Parameters in SRS Form
Print AR Invoice from the Sales Order
From Sales Order form, Select TOOLS > PRINT AR INVOICE
The AR Invoice SRS form will open with the Invoice Number defaulted
Print AR Invoice from the Sales Order
Header - Creating Menu Option
Condition - Creating Menu Option
Accept Default
Print AR Invoice from the Sales Order
Actions - Creating Menu Option
•Type – Menu •Menu Entry – MENU2 •Menu Label – Print AR Invoice (or any name you prefer)
Print AR Invoice from the Sales Order
Header – Launch SRS Form
Condition - Launch SRS Form
Trigger Event – MENU2 Condition (XXLCG_FORMS_PERSON_UTIL_PKG.get_line_invoice_num(${item.line.line_id.v alue}) IS NOT NULL)
Print AR Invoice from the Sales Order
Actions – Launch SRS Form
•Type – Property •Object Type – Global Variable •Target Object – XX_PRINT_AR_INV_PARAM_VAR (or what value you chose) •Property Name – VALUE •Value - =SELECT 'Transaction Number...'||XXLCG_FORMS_PERSON_UTIL_PKG.get_line_invoice_num(${item.l ine.line_id.value})||'.'||XXLCG_FORMS_PERSON_UTIL_PKG.get_line_invoice_nu m(${item.line.line_id.value})||'......No.' FROM dual
Print AR Invoice from the Sales Order
Actions – Launch SRS Form
•Type – Builtin •Builtin Type – Launch SRS Form •Program Name – Invoice Print Selected Invoices (select the desired request)
Print AR Invoice from the Sales Order
Header – Default Parameters in SRS Form
Condition - Default Parameters in SRS Form
•Trigger Event – WHEN-NEW-ITEM-INSTANCE •Trigger Object – WORK_ORDER.PARAMETERS •Condition - (${item.work_order.user_concurrent_program_name.value} = 'Invoice Print Selected Invoices') AND (${global.xx_print_ar_inv_param_var.value} IS NOT NULL)
Print AR Invoice from the Sales Order
Actions – Default Parameters in SRS Form
•Type – Property •Object Type – Item •Target Object – WORK_ORDER.PARAMETERS •Property Name – VALUE •Value - =SELECT nvl(${global.XX_PRINT_AR_INV_PARAM_VAR.value},${item.work_order.para meters.value}) FROM dual
In Conclusion…
Form Personalizations provide the means to easily extend your forms with minimal technical development Goes beyond requiring fields and popping message boxes Get out there and try enhancing your users’ experience
Additional Information
“Form Personalizations in Oracle Applications (Release 12) “ Metalink Doc Id: 395117.1 “Information About the Oracle Applications Form Personalization Feature in 11i “ Metalink Doc Id: 279034.1 Metalink in general www.oaug.org Google web search for “Oracle Form Personalization”
Q&A
Contact Information
Jeff Lollar Lucidity Consulting Group jlollar@luciditycg.com www.luciditycg.com