Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Agenda
Customer Forms Personalization presentation Forms Personalization form high level overview Forms Personalization expressions and sample message generation
Add/enable icons
Modify prompt/field title, remove fields, change entry order. Change default values, auto-fill or validate data based on business rules, make fields mandatory
Objects with prompts, titles or labels can be selected by their current on-screen text
But, textual values and conditions offer powerful capabilities if you do want to think like a developer
:block.fields (current form and system values) SQL functions/procedures server-side functions SELECT statements
All changes can be Applied or Validated immediately to see their effect All changes can be disabled at multiple levels
It is an Oracle Forms library, so you must use Oracle Developer to edit and generate it
CUSTOM .PLL can do more because it has complete access to all PL/SQL and SQL But Form Personalization can probably handle the vast majority of your changes. Form Personalizations, and changes to the CUSTOM .PLL library, can co-exist
FAQs
Validate All will test the existence of all object references in your Personalizations after applying a patch (but no substitute for regression testing). Available as part of the FND 11.5.10 minipack, patch 3262159 Separate APPCORE rollup patch 3358850 shortly after the release of 11.5.10 (since it contains a
significant amount of code from the FND 11.5.10 minipack, and we strongly encourage you to consider the minipack instead.)
SQL Statement:
PO_HEADERS.VENDOR_SITE_CODE
Scenario: Display some messages when the Supplier is entered: (Hi There, Vendor_ID, and # Open AP invoices)
Sending form sets variable/parameter to pass Receiving form gets variables/parameter Special1 Special15 Tools Menu Special16 Special30 Reports Menu
SPECIAL menus
Calling form passes right parameter(s)/value(s) Query Enter, set value, clear variable, Do query Go to Find Block, set value, clear variable, Next Block, Clear fields on Find block
3. Find Screen:
Set WHERE clause block, clear variable, execute query, reset WHERE clause
Abbreviations
WNFI WNII WNBI WNRI WHEN-NEW-FORM-INSTANCE WHEN-NEW-ITEM-INSTANCE WHEN-NEW-BLOCK-INSTANCE WHEN-NEW-RECORD-INSTANCE
WVR
WHEN-VALIDATE-RECORD
Enable Tools/Action/Reports menu option (and optional icon) for desired block(s) Save form field(s) to be passed in Global variable(s) Builtin FND_FUNCTION.EXECUTE (form) or FND_UTILITIES.OPEN_URL (web)
2. SPECIALnn:
A. B.
(QBE or WHERE Clause): Do_Key Enter_Query (Find Form): Go_Block find_block_name (unless form automatically starts in Find Screen/Block)
or
B.
Note: No .gif in icon name. Icon needs to reside in http://laXXXX.oracleads.com/OA_JAVA/oracle/apps/media/. See Presenters notes at end of presentation for HTML to view standard icons and names in directory (over 6100 gif files!).
Bug/Anomaly: When searching for a Function Name, use % to display all functions and then refine search with function name (e.g. %Suppl%)
VNDR.VENDOR_NAME
INITIAL VALUE: Create the Global if it doesnt exist, but leave current value alone if it does exist.
Behind the Scenes (Receiving Form) Supplier Form Personalizations utilizing the Find Form instead of QBE
Behind the Scenes (Receiving Form) Supplier Form Personalizations: Find Form
1. Initialize global variables (just in case they dont exist) 2. If global variable is not null go to Find Block 3. If global variable is not null and in Find Block set search field, clear global variable, do Next_Block, clear Fields on Find Block
VNDR_QF.VENDOR_NAME
Find Form sets the vendor number once the vendor name is set, so need to clear both!
WNII Event
Forms Personalizations then populates these based on Problem type
Set Owner Type (screen value and code) Set Owner (screen value and ID)
Requirement: Prevent access to the Bank Accounts tab for the user MFG
You can apply the same concept to prevent update to a field (but have the contents still visible): WNII@field, use Builtin Go_Item to go to next field (the Alterable property might also work)
FORMS_DDL Builtin
FORMS_DDL Builtin
FORMS_DDL Built in allows execution of a PL/SQL block:
2000 characters or less Difficult to pass parameters in, no bind variables, so must create a single concatenated string for statement that will be executed:
FORMS_DDL( 'Begin Update_Employee('||TO_CHAR(:emp.empno) ||'); End; ' );
Note: Building a string to execute requires use of || to include form/global variables and '' around the constant for the Hold Comment
procedure hrd_add_order_hold(i_HOLD_ID number ,i_HOLD_ENTITY varchar2 -- (O=Order, I=Item ) ,i_HOLD_ENTITY_id1 number -- (O=header_id , I=Inventory_item_id) ,i_HOLD_COMMENT varchar2 default null ,i_header_id number -- Order header id ,i_line_id number default null ) -- line id
Form/Global variables need to be concatenated into string that will be executed by FORMS_DDL. Watch constants that need to be surrounded by single quotes Results of PL/SQL block can be pushed onto a virtual stack within PL/SQL block Results can then be pulled off virtual stack in additional/next Action step HRD_STACK code for manipulating a private virtual stack is in presentation notes on another slide
Out:
Db Function or stored procedure with OUT parameters i.e.: stored_procedure(v_in ,v_results) hrd_stack_push(token,value) places value on a virtual stack labeled with token name
Note: Building a string to execute requires use of || to include form/global variables and '' around token constant RESULTS in hrd_stack_push()
hrd_stack_pull(token) pulls the value from a virtual stack labeled with token name (or returns null if doesnt exist)
Token/value pairs are stored or read/deleted in table under autonomous transactions (commits are independent of calling procedures)
Function form of HRD_STACK_PUSH (HRD_STACK_PUSH_F) useful for placing values on the stack with SELECT statements:
Requirement: If the item cannot be shipped to a specific state (hazardous materials), or if the Rep is not authorized to sell the item, place the line item on hold (and warn user)
B. If Item Restriction variable is not null, display returned message, clear item message C. If Rep Restriction, variable is not null, display returned message, clear rep message
Two stored procedures hrd_restricted_item and hrd_restricted_rep checks restrictions, generates appropriate message text and places order on hold
Stack procedure hrd_stack_push pushes messages onto stack for later retrieval
HRD_RESTRICTED_ITEM Function
create or replace function hrd_restricted_item( ) return varchar2 as begin select count(*) into v_count from MTL_ITEM_CATEGORIES_V where if v_count <> 0 then v_message := 'Due to EPA Regulations, this item cannot be shipped to the state of ' ||v_state||'. This line will be placed on HOLD.'; hrd_add_attachment( ); hrd_add_order_hold( ); end if; Performance tip: include a return(v_message); and rownum = 1 in WHERE clause end; /
Stack procedure hrd_stack_push pushes messages onto stack for later retrieval
Oops
Restrictions Checks are done as long as the Quantity field is null. What if the item is changed after the quantity has been entered? Each time user returns to Quantity field (as long as it is blank) the Restrictions Checks are performed (and the messages displayed) Since the Restrictions Checks add Order Holds and Attachments to the order, multiple Order Holds and multiple Attachments will be created! Only want check a if new line or item changed!
B. If Item Restriction variable is not null, display returned message, clear item message C. If Rep Restriction, variable is not null, display returned message, clear rep message
* Objections from the Flexfield Development Team noted.
Miscellaneous Stuff
Personalizations are made per function, not form. This means that in MFG and CRM where a few forms can launch with seemingly dozens of different functions, personalizations might need to be replicated. Make sure 'Close Other Forms' is unchecked in the Navigator form so the Personalization form doesn't keep closing as you test your changes. Real numbers should be entered with decimal point as the radix (canonical format), regardless of current NLS settings. If you hide a Tab page, you may need to change the navigation sequence of items before and after it to prevent it from popping open. Use the message type of 'Debug' to help you resolve issues. The context of 'Industry' is reserved for future use
Users Guide: Metalink note 279034.1 Viewlets and Powerpoints should soon be on the 11.5.10 TOI Center AppsTech on Global Exchange, Forms Personalization link (http://globalxchange.oraclecorp.com/appstech)
Test manually and use Show Custom Events to determine what the Form is really doing (maybe not what you think!) If you break a form, turn off Custom Code and fix Form Personalization The one consistency with Form coding is the inconsistency with Form coding! (especially with CRM)
Q U E S T I O N S A N S W E R S
The HTML attached in Presenters notes for this slide will display the standard icons available in the http://laXXXX.oracleads.com/OA_JAVA/oracle/apps/media/ directory. (Copy to Notepad , change instance reference in base href line to your instance, and save file with a .HTM extension)
The HTML attached in Presenters notes for this slide will display the standard icons available in the http://laXXXX.oracleads.com/OA_JAVA/oracle/apps/media/ directory. (Copy to Notepad, change instance reference in base href line to your instance, and save file with a .HTM extension)