When it comes to doing forms personalizations in Oracle's eBusiness Suite, it is good to follow certain guidelines.
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.
If you can add to the list, then feel free to do so by adding that in comment section of this article.
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[I think]
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.
Comments
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.
transl ate(VENDOR_NAME ,'/!;"{ 25;[]|=_*&^%$@~ #',' ')
But i am planning to restrict them at the form level itself.
I tried using Personalisation with the condition.
:VND R.VENDOR_NAME_M IR != translate(:VNDR .VENDOR_NAME_MI R,'/!;"{ 125;[]|=_*&^%$@ ~#',' ')
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_F ORM_TRIGGER_FAI LURE OR
RAISE_APPLIC ATION_ERROR unless and until they delete/remove the special characters?
Pl ease help me on this.
Regards
Santhosh
Sure, you can raise the exception, such that users are forced to rectify the issue.
Use the Action of type Builtin, with BuiltIntype RAISE FORM_TRIGGER_FAILURE
Thanks,
Anil Passi
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://www.goo gle.com/search? q=site:apps2fus ion.com+forms-p ersonalizations ".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?
Tha nks
Vinay
How can I Enable/Disable Dff for a specific responsibility using Forms Personalization .
Thank You
Anjana
Thx
its great job. moreover i am looking for job in Oracleapps technical consultant.
so can u guide to prepare myselfe as same
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_lin e_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_lin e_id. The standard form is calling the custom form but not executing the query for the passed parameter value requisition_lin e_id.
Please help me out.
Thanks
Ashwini
Perhaps you need to execute the query
In FP, you can use built in of type DO_KEY('EXECUTE _QUERY')
Thank s,
Anil Passi
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
Trigg er Object: PO_APPROVE
Acti ons Tab
Builtins: Seq:1 Launch a Function , Function_code: custom function name , Function_name: custom function name, Parameters: ${item.lines.re quisition_line_ id.value}
Built ins: Seq:2 Builtin:DO_KEY('EXECUTE _QUERY')
When I validate the seq 1 builtin it shows me the right requisition_lin e_id.
In the called Form(Custom Form)
I have created a parameter in the Function Creation form as :REQUISITION_LI NE_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
It works now....
its vey urgent
Regards
sauah srivastava
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.
Tha nks,
Anil
thanks and regards
saurabh srivastava
rgds
saurabh
This is a training portal, not a blog :)
Anyway, jokes apart, thanks for coming forward to contribute. I have emailed you the details.
Will register you as an author after your first article.
Cheer s
Anil
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,
Please let me know your comments.
Than k you
Hernán
You can't do that via forms personalization
Thanks
Anil
I will really appreciate your help on this as it is an urgent issue.
Thank you again.
Hernán
1. Set the entire block non-updatable as soon as user navigates to DFF Field
Most likely this will be called DF.
Use Show custom events to see which trigger fires when user navigates DFF field.
2. If the WHEN-NEW-RECORD fires, then trap that with condition :system.current _field='DF'
in this case, set the entire block to update allowed false
This will work, however you will then need to reset the block property as soon as user click on any non-dff field
Thanks,
Anil
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.
The n I set the modified attribute to its original value. LIke this:
Target Object: PERSON.ATTRIBUT E7
Property: VALUE
Value: =:global.XX_ATT RIBUTE7 (this is my global variable).
Act ually 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
Thanks,
P J
Can I do this via forms personalization ?
Thanks.
I have a question regarding the above Subject line.
I am not able to pass multiple parameters in form through personalization .
Kindly help
Thanks,
K avita Badhani
Thanks
Forms personalization s are stored in database, but not in XML format.
Given that you mentioned XML, I assume you refer to OA Framework personalization s.
Good luck if you are trying to document those 3000 Personalization s :)
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 personalization s.
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 personalization s on production system.
Thanks ,
Anil Passi
PS- Similar principles apply to Oracle Forms Personalization s as well
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.
Mi ki
mY problem is exactly the same as of German Ernst Casaretto , I need to update a DFF attrribute with NULL value through foprm personalization s, but this seems not achievable.
Can you please guide me through this.
It would be a great help.
Thanks
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.
Th ank you!
Vives
Apollogiz e
You can surely uncheck/check those checkboxes via Forms Personalization .
You can use do key - Next record as the action
See details in
docs.google.com/Doc?id=dcfd8fsc_62fdfvz9
Also- have a look at
apps2fusion.com/apps/apps/oracle-apps-articles/147-forms-personalizations
Thanks,
Anil Passi
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:
Condition s=When-New-Form -Instance
Conte xt>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.
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(Kind ly 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_singl e_signon ;
END' -- This is running fine.
When I try to pass parameter as below:
='declar e
BEGIN
user_resp_singl e_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
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
Whi ch trigger to be written and how to build in this tolerance level
Thanks,
Vinay
Please let me know If I am not making myself clear.
Any help is appreciated.
Thanks
Rakesh
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.
Th e 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,
Mehu l
I have modified one LOV, below is the query modified by me
SELECT jpv.segment1,
jpv.po_release_ id,
jpv.po_header_i d,
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_sit e_id (+)
and jpv.po_header_i d = 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_i d,
jpv.release_num || '-' || jpoh.form_numbe r,
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_sit e_id (+)
and jpv.po_header_i d = jpoh.po_header_ id (+)
Thanks
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
Is there any possibility to disable a single tab(not the whole block) in tab canvas
Joohi
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.
Regar ds
Prasan
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-b utton trigger, object trigger- PO_APPROVE and use this condition:
:PO_HEADERS.AG ENT_ID IN (
SELECT emp.person_id
FROM per_all_people_ f hr,
per_all_assignm ents_f emp
WHERE emp.person_id = hr.person_id
AND emp.primary_fla g = 'Y'
AND emp.assignment_ type = 'E'
AND hr.current_emp_ or_apl_flag = 'Y'
AND hr.current_empl oyee_flag = 'Y'
AND emp.effective_e nd_date
A ND emp.effective_e nd_date
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
I am facing a problem while making the fields as mandatory in the standard form 'Create Contact' in CRM module.
Actual ly 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.
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,
Kalyan i Prema.
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
I am able to call the form, but not able to pass a parameter to it.
I have created a menu for special45 and i am able to call the Define modifier form through 'Launch a Function' of type Builtin.
Now i want to pass a parameter from custom form (calling form ) to Standard Form (Called form).
Please help me on this issue.
Thanks in Advance.
Gurupr asad.
disable button depending upon particular field value
e.g..
Form Order Management Super user
Error Correction form
where ORDERS.ORDER_SO URCE_ID=20 for line button should be disabled else for all records it should be enable.
I am able to hide all the DFF attributes at invoice header workbench for a specific 'AP inquiry' responsibility . But how can I just hide any 1 attributes for a specific responsibility and remaining attributes can be seen. Is it possible.
Can some please advise.
Regards
Abhinav
Do you ever run into any internet browser compatibility problems?
A number of my blog audience have complained about my blog not operating correctly in Explorer but looks great
in Safari. Do you have any suggestions to help fix this issue?
parts for sale in a salvage garden it is a waste of their time and money.
However, this isn't the case. A lot of salvage yards are now operating to provide you with optimum satisfaction. These salvage yards are not a
storage facility for motor parts. Motor components like batteries, chassis, and other
can be bought in good operating condition.
My site has a lot of completely unique content I've either written myself or outsourced
but it appears a lot of it is popping it up all over the web without my authorization. Do you know any techniques to help prevent content from being
ripped off? I'd really appreciate it.
that how a user can understand it. So that's why this paragraph
is great. Thanks!
content
I am glad that you shared this helpful info with us.
Please keep us informed like this. Thank you for sharing.
keep it up.
few of the posts I realized it's new to me. Anyways, I'm certainly delighted I stumbled upon it and I'll be bookmarking it and checking back frequently!
RSS feed for comments to this post