We all know that forms personalization create a layer of customization on top of the standard Apps D2K Forms.
The Metadata related to forms personalizations is stored in tables FND Tables.
Please find a list of guidelines can be regarded as the best practices when it comes to doing forms personalizations in Oracle Apps.
In case you wish to see different examples of forms personalizations, then please visit link following links
An example for implementation of Oracle Forms Personalizations in HRMS
Comparison between CUSTOM.pll and Forms Personalization in Oracle
Anyway, lets have a look through some of the best practices for Forms Personalizations.
Global Variable Names
All the global variables defined must begin with XX.
This will ensure there is no conflict with global variables that are defined by Oracle’s development team.
FNDLOAD
You must always use FNDLOAD to transfer Forms Personalizations from one environment to another. However see below point too, which is very relevant to FNDLOAD
Decide a master environment
Decide a master environment onto which all the forms personalization will be entered prior to scripting & patching those personalization using
FNDLOAD.
If "Functional Team" makes changes to TST Environment and then the "Development Team" makes changes to DEV Environment for the same form, then, changes done to TST Environment will be lost when FNDLOAD extract from DEV is uploaded onto TST.
Usually developers make their personalization changes to DEV environment, Functional team makes their changes to TEST/UAT environments and Support team sometimes tends to make their FNDLOAD changes straight into production[ I mean without using FNDLOAD]. This is a bad practice. Do not make any Forms Personalization changes manually onto production.
Decide an environment onto which developers, functional personnel & support staff will manually key in their personalization.
Use this as a master environment to download the Forms Personalizations using FNDLOAD.
Tools Menu
To create new Tool Menus, always use MENU1-MENU15, as Oracle guarantees never to use these during development. Same is not true for SPECIAL Menus, as Oracle development may release a patch utilising the same SPECIALx as you may have personalized. MENU1..15 is available starting from 11.5.10 CU2 onwards
Remember the sequence
Keep in mind that “Forms Personalization†code fires prior to CUSTOM.pll code [in case you have the same form extended in both the places].
Use local variables when its usage is restricted to one single form
If a variable scope is limited to single form which is being personalized, then do not unnecessarily create a GLOBAL Variable.
Clear Global Variables once they have been used
Use global variables when you wish to integrate two different screens using Forms Personalizations. In other words global variable act like a bridge between two forms [of course apart from parameters]
Make sure you clear off the GLOBAL Variables after their usage is finished. This will ensure that screen works under normal scenarios too.
Before reporting a bug/SR in Forms via Metalink, reproduce the issue by disabling customizations
The Forms Personalizations can be disabled by turning the custom code off.
Before reporting any form related bug to Oracle, try reproducing the issue by turning Custom Code off

Identify the best possible triggers to use for personalizations
See this link that explains how to recognise the best trigger to trap for forms personalization.
Both forms personalization and CUSTOM.pll are fed the same set of triggers in Forms.
That’s all that I can think off. If you wish to share your experience of best practices, then please feel to add your experience in the comment section.
written by Vinay , October 31, 2007
I have gone thru the examples you have given on forms personalization.I got a request to personalize the form and I want to use the Type = "Builtin" and Builtin Type = "Create Record Group from Query" for that form personalization which you have given as an example in the link "http://oracle.anilpassi.com/forms-personalizations.html".But I could not find Bultin Type = "Create Record Group from Query". I am using 11.5.10.2 version of Oracle Apps.I checked in earlier version 11.5.8 also.But I could not find. May I know by using which version you have given that example and in which versions it is available?
Thanks
Vinay
written by Anjana Menon , November 09, 2007
How can I Enable/Disable Dff for a specific responsibility using Forms Personalization.
Thank You
Anjana
written by Mohammad Al-Masri , November 19, 2007
Thx
written by prasanta kumar mallick , November 26, 2007
its great job. moreover i am looking for job in Oracleapps technical consultant.
so can u guide to prepare myselfe as same
written by Arunakumari.v , February 26, 2008
written by Ashwini , May 09, 2008
I have a requirement to call a custom form from the Standard Requisitions form in Purchasing responsibility on clicking of the Approve Button using Form Personalization.
I'm trying to display all the distribution information on the custom form using the requisition_line_id from the standard Requisition form.
In the Standard Form on the Approve Button trigger I have written a Form Personalization builtin to launch the function. Here the function will be my custom function.
In the custom form, I have created a parameter like xx_requisition_line_id. The standard form is calling the custom form but not executing the query for the passed parameter value requisition_line_id.
Please help me out.
Thanks
Ashwini
written by Anil Passi- , May 09, 2008
Perhaps you need to execute the query
In FP, you can use built in of type DO_KEY('EXECUTE_QUERY')
Thanks,
Anil Passi
written by Ashwini , May 12, 2008
I tried using DO_KEY('EXECUTE_QUERY') in the FP but parameter value is not retrieving in the called form.
In the Standard Calling form FP I have done:
Conditions Tab
Trigger Event: When-New-Record-Instance
Trigger Object: PO_APPROVE
Actions Tab
Builtins: Seq:1 Launch a Function , Function_code: custom function name , Function_name: custom function name, Parameters: ${item.lines.requisition_line_id.value}
Builtins: Seq:2 Builtin
O_KEY('EXECUTE_QUERY') When I validate the seq 1 builtin it shows me the right requisition_line_id.
In the called Form(Custom Form)
I have created a parameter in the Function Creation form as :REQUISITION_LINE_ID
But the parameter which is fetched the value from FP in the standard form is not getting passed to the called form.
Please help me out.
Many Thanks in advance
Ashwini
written by Ashwini , May 12, 2008
It works now....
written by sonu , June 17, 2008
its vey urgent
Regards
sauah srivastava
written by Anil Passi- , June 17, 2008
Not sure what you mean by "joining newly"?
What is the business logic for that? You can certainly add a Where condition in FP before the Payroll field is made mandatory.
Thanks,
Anil
written by sonu , June 17, 2008
thanks and regards
saurabh srivastava
written by sonu , June 25, 2008
rgds
saurabh
written by Monique , June 25, 2008
I really need your help!
I need to disable the tabs on the Invoices Form, i already disabled 2 tabs (Holds and payments) but i can't disable Scheduled Payments and Prepayments tab (i get an error related to Tab Id)
What am i doing wrong?
Regards,
written by Hernán , July 14, 2008
Please let me know your comments.
Thank you
Hernán
written by Hernán , July 16, 2008
I will really appreciate your help on this as it is an urgent issue.
Thank you again.
Hernán
written by German Ernst Casaretto , August 21, 2008
I've been reading many of your posts about Oracle Apps and I found them very useful for my work.
We're having a problem with a Form Personalization to set an attribute of a flexfield to Null.
We're using the Person form and created a Personalization that should not allow the user to modify only 4 attributes within the flex field in this form. (Attributes 7,8,9 and 11).
I've created a condition that returns true when the user tries to save the PErson form and the values entered in any of these attributes are different form the original values. Up to now everything's ok.
In the Actions section, I created a Global Variable to save the original value of these attributes.
Then I set the modified attribute to its original value. LIke this:
Target Object: PERSON.ATTRIBUTE7
Property: VALUE
Value: =:global.XX_ATTRIBUTE7 (this is my global variable).
Actually this works fine, but there's one exception when the Attribute was originally set to NULL and the user tries to change its value to a not NULL one.
What happens here is that NULL is saved into the Global Variable and then it tries to set NULL in the Attribute. This gets an error message in the status bar and te Attribute remains with the modified value, not null.
So, there's any way to set an attribute within a flex field to NUll without re-setting the whole flex field?
Because what I thought is to save every original value of the flex field and then re-set the whole flex field with those original values, but I don't think it's very tidy...
I'd really appreciate you help on this.
Thanks,
German
written by PJ , October 07, 2008
Thanks,
PJ
written by Peter , October 10, 2008
written by Meeta , October 16, 2008
Can I do this via forms personalization?
Thanks.
written by Kavita Badhani , October 22, 2008
I have a question regarding the above Subject line.
I am not able to pass multiple parameters in form through personalization.
Kindly help
Thanks,
Kavita Badhani
written by Samia Razak , November 09, 2008
Thanks
written by Anil Passi- , November 09, 2008
Forms personalizations are stored in database, but not in XML format.
Given that you mentioned XML, I assume you refer to OA Framework personalizations.
Good luck if you are trying to document those 3000 Personalizations
Its like chasing a moving target.
If will be quicker and accurate to write some scripts on JDR Attributes, which prodouces Personalization documentation on the fly.
You can join the pages to the menus, and those to responsibility via tables, and document which personalization is effective to which screen, and what is changed.
If not for fusion being on horizon, I am sure Oracle would have produced a javadoc styled engine to document those personalizations.
Anyway, no matter how much manual documentation you do for personalization , it will be impossible to keep it accurate and upto-date.
Half information is dangerous as they say.
Single source of truth for personalization is MDS Repository in database, and no document can replace that.
Perhaps your organization should put procedures in place to ensure no one manually updates personalizations on production system.
Thanks,
Anil Passi
PS- Similar principles apply to Oracle Forms Personalizations as well
written by miki , February 05, 2009
Can yopu please explaine haw you solved the issue applied by Ashwini May last year.
An example specific for order organizer form will be appriciated.
Miki
written by Waquar Khan , May 06, 2009
mY problem is exactly the same as of German Ernst Casaretto , I need to update a DFF attrribute with NULL value through foprm personalizations, but this seems not achievable.
Can you please guide me through this.
It would be a great help.
Thanks
written by Damon Cool , May 27, 2009
written by Vives , June 03, 2009
My issue is that users has a lot of work when they do a batch receipt and have to check it out which receipt should not be on the list, and so they start looking for receipts and then uncheck them before format
So, my question is, can we uncheck some specific receipts automatically that have been selected before. I mean, i want to create a batch which transactions are between Jan/2009 and feb/2009 (due_date).....but i want to uncheck those one that their due_date is Gen-15. Could this be done.
I'll appreciate any kind of information.
Thank you!
Vives
written by Vives , June 03, 2009
Apollogize
written by aliceyy , June 16, 2009
1. Application Developer: DFF> Register> (To register the DFF)
2. Application Developer: DFF> Segments> (To define the DFF fields), assign Value Set to each segment (create a value set if you dont already have one).
3. Check the Security Enabled flag (enable Security for the value Set, use Tools>Examine to enter 'Y' if field is protected).
4. System Admistrator: Security> ValueSet> Define (Query the value set assigned to the DFF segment).
5. Enter security rule name.
6. Exclude everything.
7. Include nothing.
8. Assign the security rule to a responsibility.
9. Navigate to Form Personalization of the form:
Conditions=When-New-Form-Instance
Context>Level>Select Responsibility and assign to the same responsibility (if you dont do this, you can still enter the DFF just cannot save)
10. Now navigate to the DFF, you cannot enter any value there.
written by IndiraS , July 31, 2009
I have one problem similar to Ashwin's. We want to call a procedure with username as parameter whenever a new user is created or responsibility is changed/updated/added. I want to know the following things:
1) Which event should I use - I want to call procedure when 'Save' button is clicked.
2) I'm getting following error, when trying to call procedure with parameters(Kindly note that procedure call without parameter is working fine.
I did the following: Action Type : Builtin ,Builtin Type : Execute Procedure, Argument ='declare
BEGIN
user_resp_single_signon ;
END' -- This is running fine.
When I try to pass parameter as below:
='declare
BEGIN
user_resp_single_signon_p('Test');
END'
I get error :The string '=declare End' could not be evaluated because of error ORA-000923: FROM keyword not found where expected.
Pls help. This is urgent
written by Vinay kumar Datrak , August 08, 2009
When you enter the PO number into the Oracle, AP Invoice data entry screen , if the PO is fully billed we require a prompt to tell us at this point that one i have done
Now on the same screen one more req is there
The second prompt we want is when the tax amount from the invoice is entered , if this will over bill the PO, we require a prompt to tell us that it is Overbilled . This must happen before the invoice is committed to the system and the voucher number is created. We may also want to build in a 5% tolerance at this point
If the value entered (after tax – which will give you the net figure) is greater than the PO value then we want a prompt to I inform us of this………if tolerance then build in.
How can i acheive this second requirement
Which trigger to be written and how to build in this tolerance level
Thanks,
Vinay
written by Rakesh Jain , September 29, 2009
Please let me know If I am not making myself clear.
Any help is appreciated.
Thanks
Rakesh
written by MehulP53 , December 17, 2009
I am working on the custom web application for the Order Management module. Where users use the standard oracle forms to enter the header level details. To enter the line level details, they will use the custom web application which I am calling from the custom menu entry created under Actions menu. This custom web application is not developed in OAF, it is a stand alone web application.
The problem i m facing is that the lines created by the web application are not visible in the forms immediately as they are created in a different session.
I have created a local variable which gets set to TRUE when the menu entry is clicked and I want to use that local variable to reload the order when users goes to the lines block.
Is there an event which can requery the order? Can this be done using personalization?
Thanks,
Mehul
written by Nidhi , January 22, 2010
I have modified one LOV, below is the query modified by me
SELECT jpv.segment1,
jpv.po_release_id,
jpv.po_header_id,
jpv.release_num,
jpv.vendor_id,
jpv.vendor_site_id
FROM jai_57f4_po_v jpv,
JAI_PO_OSP_HDRS jpoh
where jpv.po_release_id = jpoh.oth_doc_id (+)
and jpv.vendor_id = jpoh.vendor_id (+)
and jpv.vendor_site_id = jpoh.vendor_site_id (+)
and jpv.po_header_id = jpoh.po_header_id (+)
I need to add one column and show it with existing columns (Segment1 or Release Num), but I execute following query, it gives error, let me know how can i concatenate form_number with any of them, segment1 or release num.
SELECT jpv.segment1,
jpv.po_release_id,
jpv.po_header_id,
jpv.release_num|| '-' || jpoh.form_number,
jpv.vendor_id,
jpv.vendor_site_id
FROM jai_57f4_po_v jpv,
JAI_PO_OSP_HDRS jpoh
where jpv.po_release_id = jpoh.oth_doc_id (+)
and jpv.vendor_id = jpoh.vendor_id (+)
and jpv.vendor_site_id = jpoh.vendor_site_id (+)
and jpv.po_header_id = jpoh.po_header_id (+)
Thanks
written by Vibha Pandey , May 27, 2010
written by JJ , June 08, 2010
I read ur post that we can do Disabling DFF thru Personalization and u suggested that
" Set the entire block non-updatable as soon as user navigates to DFF Field.Use Show custom events to see which trigger fires when user navigates DFF field."
I have tested this but its is not working as there is no event fires when we go to DFF field.
Pl suggest is there any other solution for this??
Joohi
written by JJ , June 08, 2010
Is there any possibility to disable a single tab(not the whole block) in tab canvas
Joohi
written by prasan , July 22, 2010
Suppose I have two context one is global context and other one was custom context. When Page opens for the first time it shows the global context.
When We select the custom context from the drop down it shows the corresponding segments of that context.
I just wanted to know hw to handle or capture that even of selecting the custom context.
Regards
Prasan
written by chrys , August 06, 2010
I'm working in Purchasing Form and one of the requirements is to check if the buyer entered is valid or not. I tried forms personalization using when-validate-button trigger, object trigger- PO_APPROVE and use this condition:
O_HEADERS.AGENT_ID IN ( SELECT emp.person_id
FROM per_all_people_f hr,
per_all_assignments_f emp
WHERE emp.person_id = hr.person_id
AND emp.primary_flag = 'Y'
AND emp.assignment_type = 'E'
AND hr.current_emp_or_apl_flag = 'Y'
AND hr.current_employee_flag = 'Y'
AND emp.effective_end_date
written by chrys , August 06, 2010
AND emp.effective_end_date
written by Joe Espinosa , March 10, 2011
I'm wondering if there is a way, through form personalization, for the comment (the paperclip icon) to display the comment when the form is accessed. This is within HRMS, when someone in HR brings up an employee's Assignment, the comment is displayed, instructing HR what to do for this employee because of special circumstances? I only want to the comment to display if the papf.comment_id IS NOT NULL.
thx
Joe Espinosa
HRIS Sys Admin
written by prasuna , June 16, 2011
I am facing a problem while making the fields as mandatory in the standard form 'Create Contact' in CRM module.
Actually the form behaves like ,after filling the first name or last name for a customer, the party number will be generating and saves the contact of a customer for a perticular Sevice id. But, my requirement is that i have to make two more fields phone number and email as mandatory.
I have done this using forms personalization. After making this also, if i have entered first name or last name only and clicking on the save button it is showing pop up as 'field must be entered' and generaing the party number and the form gets closed.
Here its just showing the pop up as filed must be entered but i m unable to enter the date .
After filing the mandatory fields only the party number should be generated. How to do this one?
Regards,
Prasuna.
written by Kalyanip , July 11, 2011
I have developed a custom form for one of my client. Of course this is my first form...
The form is working fine when it is independent. But according to the req. it should get invoke from the standard form.
my custom form should capture the Doc id value from the standar form and depending on that value it should display the value
in my custom form.
I have added the parameter for capturing the Doc Id..And added the form personalization in the stadard form also. When I click on validate the Doc id value is capturing and dispalying in the smal note...But it is not capturing in the custom form... I have written code in the pre-query trigger in the custom form.
Please help me in this issue. My work delivery is got stopped due to this issue. Please help me...
Thanks In Advance,
Kalyani Prema.
written by Anindya , November 07, 2011
A big fan :-). I've a requirement to insert some information in a custom table after the records in a form are saved. How can I achieve this?
Anindya
| < Prev | Next > |
|---|





I have a doubt in Personalisation.
I am currently doing the payment extract interface program for the bank. The point here is that the bank doesn't allow some characters which are considered as special characters like (#,$,%,^,*,&) etc..In most of the information like vendor name and invoice numbers they are using these characters.
In my interface program, i am removing this special characters and replacing it with space or ' ' symbol as prescribed by bank through translate command.
translate(VENDOR_NAME,'/!;"{}[]|=_*&^%$@~#',' ')
But i am planning to restrict them at the form level itself.
I tried using Personalisation with the condition.
:VNDR.VENDOR_NAME_MIR != translate(:VNDR.VENDOR_NAME_MIR,'/!;"{}[]|=_*&^%$@~#',' ')
In the Actions, I have given a message of type 'Error' and it is also firing.
My question is
Is there any possibility of giving
RAISE_FORM_TRIGGER_FAILURE OR
RAISE_APPLICATION_ERROR unless and until they delete/remove the special characters?
Please help me on this.
Regards
Santhosh