Showing posts with label Form Personalisation. Show all posts
Showing posts with label Form Personalisation. Show all posts

July 29, 2015

Attachment Functionality



Attachment Functionality


About Attachments:
Attachment feature enables users to link files like images, word files, emails e.t.c to a particular form/function/record. Once you link a file to a form in oracle it will be saved on your server so that you can retrieve it easily when ever you want it.

Supported Formats:
You can link the following types.
·         File (word, pdf, excel, images)
·         Short Text (Notes)
·         Long Text (emails and long descriptions)
·         Webpage (intranet or internet pages)
Related Tables:
·         FND_ATTACHED_DOCS_FORM_VL
·         FND_ATTACHED_DOCUMENTS
·         FND_ATTACHMENT_BLK_ENTITIES
·         FND_ATTACHMENT_BLOCKS
·         FND_ATTACHMENT_FUNCTIONS
·         FND_ATTACHMENT_REPLICATION
·         FND_DM_FOLDERATTACHMENTEXT 
Enable Attachments
It can be better explained using an example so follow the below example to enable the attachment link in Payments Bank Screen from Account Payables
·         Define Entities
·         Define Attachment Functions
·         Using Attachments
Form Information
Navigation: Payables Manager à Setup à Payments à Banks
Short Name: APXSUMBA
Form Name: Set Up Bank Information
Block Name: BRANCHES
Primary Key: BANK_BRANCH_ID
Table Name: AP_BANK_BRANCHES

Define Entities:
Navigation: Application Developer ResponsibilityàAttachments à Document Entities
Attachments_Oracle_Applications

Create the new record

Table: AP_BANK_BRANCHES
Entity ID: AP_BANK_BRANCHES
Entity Name: AP_BANK_BRANCHES
Prompt: Banks
Application: Payables

Attachments_Oracle_Applications

Close the form.

Navigation: Application Developer à Attachments à Attachment Functions
Attachments_Oracle_Applications

Enter the following
Type: Form
Name: APXSUMBA
User Name: Set Up Bank Information
Session Context Field:
Enabled: Check

Attachments_Oracle_Applications


Save.

Click on Categories and assign Miscellaneous

Attachments_Oracle_Applications


Save.

Close Categories Form.
Attachments_Oracle_Applications

Click on Blocks

Block Name: BRANCHES
Method: Allow Change
Secured By: None
Context 1: BRANCHES.BANK_NAME
Context 2: BRANCHES.BANK_BRANCH_ID

Attachments_Oracle_Applications

Save Now.

Click Entities

Entity: AP_BANK_BRANCHES
Display Method: Main Entity
Privileges: Always
Primary Key Fields: BRANCHES.BANK_BRANCH_ID

Save and Close.

Use Attachments:
Navigation: Payable Manager >> Setup >> Banks
Oracle_Applications_Attachments
Click to open
Oracle_Applications_Attachments
Now Query any record. If you click on attachments now it will ask you to query any record. This is because attachments are stored at record level and not at form level. ofcourse you can attach documents at form level also for that while defining your Block you should not give your context fields and primary key.
Press F11 and then CTL+F11
Oracle_Applications_Attachments

Now Click on attachments ICON Oracle_Applications_Attachments
Oracle_Applications_Attachments
Enter Category as Miscellaneous and Data Type as Short Text. You can choose the data type as you need. and finally enter some text in the yellow area.
Save and Close the Attachments Form.
Now Query the same record in Banks Screen
You should see that paper clip icon changes to Oracle_Applications_Attachments
Click on it to see your attached Text.
Note: The attachments you saved for this bank can not accessed when you query another bank. Which means all your attachments are saved at record level. You can restrict this level to form, function or record level.

October 27, 2011

FOrmsPersonalization:To restrict a receipt method LOV for a responsibility

In Order Management Responsibility go to quick sales order menu
  • create a sales order
  • click on actions
  • Choose payments
  • form main menu go to help-diagnostics-custom code-personalize
1.Add a Sequence with description,

 

 
Under Condition ;
trigger event ; when_new_item_instance
Trigger_object ; blockname.filed-name(In which u need the personalization)
Condition:optional,can give any default values e.g:
Block_name.field_name=’Value’

 
e.g: WHEN-NEW-ITEM-INSTANCE;
OE_PAYMENTS.RECEIPT_METHOD:OE_PAYMENTS.PAYMENT_TYPE_CODE='CASH'
Under Level Choose the responsibility that you want to assign.


 

 

 

Now go to actions tab

 
2.The first sequence is built-in and the second sequence is property for a LOV
e.g:Seq 10
type;Builtin
In Builtin Type Choose;Create record group for query
Argument;Enter your query
NOTE:
1. If u r changing the existing record group the you need to check the exiting record group query and develop your query by choosing same columns and with your own condition appropriately.
2. U need to refer the the LOV that u r Personalizing.
Group Name;Give a custom name
E.g. query
**-For type Cash**
SELECT rm.NAME,rm.receipt_method_id
/*Have choosen the same columns as per the default LOV Record group query and changed the where clause as per my requirement*/
FROM
ar_receipt_methods rm,
oe_payments b,
ar_receipt_method_accounts_all rma,
fnd_lookup_values flv,
ce_bank_acct_uses_all cba
where
rm.receipt_method_id=b.receipt_method_id
AND rm.receipt_method_id = rma.receipt_method_id
AND flv.lookup_type like '%PAYMENT_METHODS%' --Existing LOV Name--
AND rma.remit_bank_acct_use_id = cba.bank_acct_use_id and
rma.org_id = cba.org_id
AND flv.enabled_flag = 'Y'
AND Flv.LOOKUP_CODE not IN('CCR')--Condition for Where Clause--
AND rm.receipt_method_id IN('2012')
GROUP BY rm.NAME,rm.receipt_method_id

 
3.Create property for the built-in type

 
My desp; Restrict Receipt Method for cash
Object_type;Cash

 
Target_Object;Payment_Methods
Property_name;Group Name
Value;Give the custom name that u have given for the Builtin Group Name

 
And ITS DONE !!!!
 

 

 

 

 

August 8, 2010

New Form Quick Review

New Form Development
Edit PRE‐FORM trigger at form level
FND_STANDARD.FORM_INFO('$Revision: 115.12 $', 'JP Media Form', 'JP','$Date: 2003/12/19 11:02 $', '$Author: appldev $');
app_standard.event('PRE-FORM');
app_window.set_window_position('MYWINDOW', 'FIRST_WINDOW');

Edit the program unit’s APP_CUSTOM body


if (wnd = 'MYWINDOW') then
app_window.close_first_window;
elsif (wnd = '') then
null;
elsif (wnd = '') then
null;
end if;


Application Application -> Register
Form Application-> Form
Function Application-> Function
Menu Application-> Menu
Responsibility Security->Responsibility ->Define
User Security-> User -> Define

WHO Columns

CREATED_BY  :NUMBER(15) NOT NULL Keeps track of which user created each row
Value:TO_NUMBER(FND_PROFILE.VALUE(’USER_ID’))
CREATION_DATE :DATE NOT NULL:Stores the date on which each row was created
LAST_UPDATED_BY :NUMBER(15) NOT NULL Keeps track of who last updated each row
Value:TO_NUMBER(FND_PROFILE.VALUE(’USER_ID’))
LAST_UPDATE_DATE: DATE NOT NULL:Stores the date on which each row was last updated
LAST_UPDATED_LOGIN :NUMBER(15):Provides access to Information about the operating system login of the user who last updated each row Value: TO_NUMBER(FND_PROFILE.VALUE(’LOGIN_ID’))

March 7, 2010

CUSTOM Package

The CUSTOM package contains the following functions and procedure:


 CUSTOM.ZOOM_AVAILABLE

 CUSTOM.STYLE

 CUSTOM.EVENT

CUSTOM.ZOOM_AVAILABLE

Summary: function custom.zoom_available return BOOLEAN;

Description:

If Zoom is available for this block, then return TRUE; otherwise return FALSE. Always test for the form and block name. Refer to the SYSTEM variables for form name and block name in your code and branch accordingly. The module name of your form must match the form file name. By default this routine must return FALSE.

Example:

The following example enables Zooms in the following places:

Form: FNDSCAUS, Block USER and
Form: FNDCPMCP, Block PROCESS
FUNCTION zoom_available RETURN BOOLEAN IS
form_name VARCHAR2(30) := NAME_IN(’system.current_form’);
block_name VARCHAR2(30) := NAME_IN(’system.cursor_block’);
BEGIN
IF (form_name = ’FNDSCAUS’ AND block_name = ’USER’) OR
(form_name = ’FNDCPMCP’ AND block_name = ’PROCESS’)THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
END zoom_available;

CUSTOM.STYLE


Summary: function custom.style(event_name varchar2) return integer;

Description:

This function allows you to determine the execution style for a product–specific event if custom execution styles are supported for that product–specific event (many product–specific events do not support custom execution styles).

You can choose to have your code execute before, after, or in place of the code provided in Oracle Applications. See the User’s Guide for your Oracle Applications product for a list of events that are available through this interface. Note that some product–specific events may not support all execution styles. CUSTOM.STYLE does not affect generic form events or Zoom. Any event that returns a style other than custom.standard must have corresponding code in custom.event which will be executed at the time specified.


The following package variables should be used as return values:

 custom.before
 custom.after
 custom.override
 custom.standard

By default this routine must return custom.standard (which means that there is no custom execution style code).

Attention:

Oracle Corporation reserves the right to pass additional values for event_name to this routine, so all code must be written to branch on the specific event_name passed.

Example:

The following example sets up the MY_PRICING_EVENT event to have the Override execution style.

Begin

if event_name = ’MY_PRICING_EVENT’ then
return custom.override;
else
return custom.standard;
end if;
end style;

CUSTOM.EVENT

Summary: procedure custom.event(event_name varchar2);

Description

This procedure allows you to execute your code at specific events. Always test for event name, then for form and block name within that event. Refer to the SYSTEM variables for form name and block name in your code and branch accordingly. The module name of your form must match the form file name. By default, this routine must perform ”null;”.

Attention:

Oracle Corporation reserves the right to pass additional values for event_name to this routine, so all code must be written to branch on the specific event_name passed.

Example:

The following example contains logic for a Zoom, a product–specific event, and a generic form event. The Zoom event opens a new session of a form and passes parameter values to the new session. The parameters already exist in the form being opened, and the form function has already been defined and added to the menu (without a prompt, so it does not appear in the Navigator).

procedure event(event_name varchar2) is
form_name varchar2(30) := name_in(’system.current_form’);
block_name varchar2(30) := name_in(’system.cursor_block’);
param_to_pass1 varchar2(255);
param_to_pass2 varchar2(255);
begin
if (event_name = ’ZOOM’) then
if (form_name = ’DEMXXEOR’ and block_name = ’ORDERS’) then
/* The Zoom event opens a new session of a form and
passes parameter values to the new session. The
parameters already exist in the form being opened:*/
param_to_pass1 := name_in(’ORDERS.order_id’);
param_to_pass2 := name_in(’ORDERS.customer_name’);
fnd_function.execute(FUNCTION_NAME=>’DEM_DEMXXEOR’,
OPEN_FLAG=>’Y’,
SESSION_FLAG=>’Y’,
OTHER_PARAMS=>’ORDER_ID=”’param_to_pass1’” CUSTOMER_NAME=”’param_to_pass2’”’);

/* all the extra single and double quotes account for any spaces that might be in the passed values */

end if;
elsif (event_name = ’MY_PRICING_EVENT’) then
/*For the product–specific event MY_PRICING_EVENT, call a custom pricing routine */
get_custom_pricing(’ORDERS.item_id’, ’ORDERS.price’);
elsif (event_name = ’WHEN–VALIDATE–RECORD’) then
if (form_name = ’APXVENDR’ and block_name = ’VENDOR’) then

/* In the WHEN–VALIDATE–RECORD event, force the value of a Vendor Name field to be in uppercase letters */

copy(upper(name_in(’VENDOR.NAME’)), ’VENDOR.NAME’);
end if;
else
null;
end if;
end event;
end custom;

Always use FND_FUNCTION.EXECUTE to open a new session of a form. Do not use CALL_FORM or OPEN_FORM. The form function must already be defined with Oracle Application Object Library and added to the menu (without a prompt, if you do not want it to appear in the Navigator).

When to Use the CUSTOM Library

When to Use the CUSTOM Library


There are several main cases for which you can code logic using the CUSTOM library. Each of these cases must be coded differently.

1. Zoom

The addition of user–invoked logic on a per–block basis. A Zoom typically consists of opening another form and (optionally) passing parameter values to the opened form through the Zoom logic.

2. Logic for generic events

Augment Oracle Applications logic for certain generic form events such as WHEN–NEW–FORM–INSTANCE or WHEN–VALIDATE–RECORD.

3. Logic for product–specific events

Augment or replace Oracle Applications logic for certain product–specific events that enforce business rules.

4. Custom entries for the Special menu

Add entries to the Special menu for Oracle Applications forms, such as an entry that opens a custom form.

5. Setting visual attributes

Use the CUSTOM library to change the visual attributes of Oracle Applications fields at runtime. Use the Oracle Forms built–in SET_VA_PROPERTY to set the properties of the CUSTOM1–CUSTOM5 visual attributes, and then use APP_ITEM_PROPERTY2.SET_PROPERTY to apply the visual attribute to an item at runtime.





To code Zooms into the CUSTOM library:

• Add a branch to the CUSTOM.ZOOM_AVAILABLE function that specifies the form and block where you want a user to be able to invoke Zoom.

• Add a branch to the CUSTOM.EVENT procedure for the ZOOM event. Inside that branch, specify the form and block where you want a user to be able to invoke Zoom. Add the logic you want to occur when the user invokes Zoom.

Supporting Multiple Zoom Events for a Block

As of Release 11i, Oracle Applications provides a referenced list of values (LOV) and corresponding referenced parameter for Zooms in all forms built using the TEMPLATE form (including custom forms). They are the following:

• List of values: APPCORE_ZOOM.

• Parameter: APPCORE_ZOOM_VALUE Use the LOV and parameter to provide users with an LOV where you have more than one Zoom from a particular block.

To code the Zoom LOV into the CUSTOM library:

In the CUSTOM library (within your ZOOM event code):

• Create a record group and populate it with names and values of available Zooms for the block.

• Attach the record group to the APPCORE_ZOOM LOV.

• Call show_lov to display the LOV to the user.

• If user picks a Zoom, the value is returned into the APPCORE_ZOOM_VALUE parameter in the form.

• Retrieve the parameter value and branch your Zoom code accordingly.

Custom.PLL

Customizing Oracle Applications with the CUSTOM Library


The CUSTOM library allows extension of Oracle Applications without modification of Oracle Applications code.
You can use the CUSTOM library for customizations such as Zoom (such as moving to another form and querying up specific records), enforcing business rules (for example, vendor name must be in uppercase letters), and disabling fields that do not apply for your site.

You write code in the CUSTOM library, within the procedure shells that are provided. All logic must branch based on the form and block for which you want it to run. Oracle Applications sends events to the CUSTOM library. Your custom code can take effect based on these events.

Attention:
The CUSTOM library is provided for the exclusive use of Oracle Applications customers. The Oracle Applications products do not supply any predefined logic in the CUSTOM library other than the procedure shells described here.

Writing Code for the CUSTOM Library

 The CUSTOM library is an Oracle Forms PL/SQL library. It allows you to take full advantage of all the capabilities of Oracle Forms Developer, and integrate your code directly with Oracle Applications without making changes to Oracle Applications code. The as–shipped CUSTOM library is located in the AU_TOP/resource directory (or platform equivalent).

 After you write code in the CUSTOM procedures, compile and generate the library using Oracle Forms. Then place this library into $AU_TOP/resource directory (or platform equivalent). Subsequent invocations of Oracle Applications will then run this new code.

 The specification of the CUSTOM package in the CUSTOM library cannot be changed in any way. You may add your own packages to the CUSTOM library, but any packages you add to this library must be sequenced after the CUSTOM package.

Coding Considerations and Restrictions

Be aware of the open form environment in which Oracle Applications operate. Also, each running form has its own database connection.

The following considerations and restrictions apply to the CUSTOM library and any libraries you attach to CUSTOM:

• You cannot use any SQL in the library. However, you can use a record group to issue SELECT statements, and you can use calls to stored procedures for any other DML operations such as updates, inserts, or deletes.

• Oracle Forms global variables in your code are visible to all running forms.

Attaching Other Libraries to the CUSTOM Library

You may attach other libraries to the CUSTOM library. However, you cannot attach the APPCORE library to CUSTOM because it would cause a recursion problem (because CUSTOM is attached to APPCORE).

As of Oracle Applications Release 11i, you may attach the APPCORE2 library to CUSTOM. The APPCORE2 library duplicates most APPCORE routines with the following packages:

• APP_ITEM_PROPERTY2
• APP_DATE2
• APP_SPECIAL2

These packages contain the same routines as the corresponding APPCORE packages.

Within the CUSTOM library, you are free to write almost any code supported by Oracle Forms Developer.

Attention:

To invoke another form, use the function security routines in the FND_FUNCTION package. Do not use the CALL_FORM built–in since the Oracle Applications libraries do not support it.

Events Passed to the CUSTOM Library:

The CUSTOM library receives two different kinds of events, generic and product–specific. Generic events are common to all the forms in Oracle Applications. These events are:

• WHEN–FORM–NAVIGATE
• WHEN–NEW–FORM–INSTANCE
• WHEN–NEW–BLOCK–INSTANCE
• WHEN–NEW–RECORD–INSTANCE
• WHEN–NEW–ITEM–INSTANCE
• WHEN–VALIDATE–RECORD
• SPECIALn (where n is a number between 1 and 45)
• ZOOM
• EXPORT
• KEY–Fn (where n is a number between 1 and 8)


March 6, 2010

Attaching a new Form

Login to SQL PLUS and then check for any table that is used in the application. If not then create a new table as required. In this case, we take the EMP table.

a. First Describe the table using the command DESC.

b. Then GRANT ALL Privileges to User APPS.

c. Connect as APPS in SQL *PLUS.

d. Create a Synonym EMP For this User.

e. Commit and exit SQL.

Now, we have a table EMP for the User APPS from the Schema SCOTT.
Now exit the SQL PLUS editor.
The next Step in the process is to create a TOP Directory.


TOP Directory is referred to a directory, which resides in the directory <$>:/ORACLE/PRODAPPL/

Where $ is the root directory where Oracle APPS is installed.

This Path is in itself called as ‘APPLTOP’.

In this case, we create a new top folder in the APPLTOP Directory. We name the folder as EMP_TOP.
The new folder looks like this :

Kindly note the path for the location of this folder, Its D:\Oracle\Prodappl


Now the next step is to create the Sub-Folders in our Top folder.

The following folders are required to be created inside the top folder.



These are Listed as below:


EMP_TOP\11.5.0\
Admin
Bin
Def
Forms -> US
Graphs
Help
HTML
Java
LIB
Log
MDS
MESG
OUT
Patch
Reports -> US
SQL
XML

The next step in this process is to register the created EMP_TOP Folder with APPS.

For this, Open the Environment File PROD.CMD (in Windows) or PROD.ENV (in LINUX).

The location of this file is in the APPL_TOP Folder.

To open it, Right Click on it and then Hit EDIT.

The File opens in a Notepad.



Once the file opens, search for the text “APPL_TOP”, the text will appear as below:


REM

REM APPL_TOP is the top-level directory for Oracle Applications.

REM

set APPL_TOP=D:\oracle\prodappl


In this file, just below the above text, we need to ‘SET’ our ‘TOP Folder’.

The Text to be added looks like this :



 Set EMP_TOP= D:\Oracle\Prodappl\EMP_TOP\11.5.0



Now the modified text in the Environment File looks like this:


REM

REM APPL_TOP is the top-level directory for Oracle Applications.

REM

set APPL_TOP=D:\oracle\prodappl

set EMP_TOP= D:\Oracle\Prodappl\EMP_TOP\11.5.0

________________________________________________________________________

Now Save and Close this File.

The next step is to Source this PROD.CMD file.

Sourcing: It is the process of running the ‘.CMD’ file in DOS Mode.

For doing this, get into command prompt and then go to

D:\Oracle\Prodappl\

Once in this screen, type as Prod.cmd. This will source the Prod.cmd file and bring into effect the changes that we made in it. It will set the EMP_TOP folder as the application top folder for our form.

To check whether the emp_top is set as application top folder, type in the command prompt as


CD %emp_top% and then hit enter.

This will take to the Emp_top Folder that was set in the Prod.cmd environment variable file. The screen for this looks as shown:


The next step is to register the EMP_TOP directory in our Registry.


Caution: => This step is needed only if the Operating System is Windows.

=> This step is not required for Linux Operating Systems.

 Always take a Backup of registry before modifying it, as it is the most

sensitive part of the Operating System. Any alteration may damage the entire

operating system



For doing this, Open the registry editor and then browse to

HKLM\Software\Oracle\Application\11.5.0\Context_name(Prod_dev210)

On the right hand side, we have to create a new string value by right clicking on it and then naming it as ‘EMP_TOP ‘ To that new string, we have to specify the value of ‘Emp_TOP’. The screen for doing this looks as below:
Once done, just click ‘OK’ to the screen

so this completes the modification of the registry and also the registration of our EMP_TOP folder with the windows Operating System.


Now close the registry editor.



The next step is to copy some of the required forms from a Source to our Emp_TOP folder.

We copy the APSTAND.fmb and Template.fmb files from D:\Oracle\prodappl\AU\11.5.0\forms\US and then place it in our folder at D:\Oracle\prodappl\EMP_TOP\11.5.0\forms\US

This step is supposed to be done every time we register our application top folder.



The next step is to copy all the *.pll files from the resource folder to another folder, but this is a One time process and does not require to be done every time we register our Application top folder.

Source: D:\Oracle\prodappl\AU\11.5.0\Resource

Destination: D:\Oracle\Prodora\8.0.6\forms60

Once copied, it marks the completion of this step.
The next step in the process is to create a form from the template that was copied on to our Application Top folder.


For doing this, open the Forms Builder and select the option of ‘Build a form based on a Template’.

The screen looks as below:

When the window opens, select the template and then open the Object Navigator.


It looks as shown below:

Save the form as Test form as soon as it opens.


Now follow the steps in the order as listed below:

 Delete the Child items pertaining to Object Groups.

 Delete the child items of Canvas.

 Delete the child items from Data Block.

Now, Open the Data Block and then use the Data Block Wizard to create a normal Form with the ‘EMP’ table.

In the Pre-Form Trigger, Change the ‘Template_form’ to Our form, that is, ‘test_form’ and also the ‘FND’ to our Top folder, that is, ‘EMP_TOP’ folder.

Save and Close it.

Now, navigate to Program Units and under that locate App_Custom(Package Body). In that select the First If Condition Block and then change every instance of ‘wnd=’ To “wnd=’BLOCKNAME’”

The actual code is as below:
if (wnd = '') then


app_window.close_first_window;

elsif (wnd = '') then

--defer relations

--close related windows

null;

elsif (wnd = '') then

--defer relations

--close related windows

null;

end if;

________________________________________________________________________



Now the modified code looks as shown below:



________________________________________________________________________

if (wnd = 'BLOCKNAME') then

app_window.close_first_window;

elsif (wnd = 'BLOCKNAME') then

--defer relations

--close related windows

null;

elsif (wnd = 'BLOCKNAME') then

--defer relations

--close related windows

null;

end if;

________________________________________________________________________



Now, Compile and then close the window.



Now, compile the form and then close it.

P.S. Do not run the form, it will give errors.

March 5, 2010

ENABLING/ DISABLING FIELDS

In Normal form, You can do it using the Property Palette.


Let us check this using Emp Table Form.

Let us Disable this Field.


If You Execute, You can see that EmpNO will be Disabled.


Enable Zoom

By default, the ZOOM button in the form will be kept disabled. If You need to enable this, You have to use CUSTOM.PLL.
You have to make modifications in the CUSTOM.PLL. Open it in the Forms Builder.

For this, we have to find the Form Name and Block Name.

To Find Form Name,
You will get a Pop-up window. You can get the Forms Name here.

Here the Form Name is OEXOEORD. There is an alternate way to find the Form Name. Click here to know that.


To Find Block Name,

It will ask for a password, Give APPS

You will get the Block Name here.
Now, Use these details in the CUSTOM.PLL.

Block Name is LINE


Now, Use these details in the CUSTOM.PLL.

 


After making modifications, Compile the Program. Short Cut Key : CTRL+SHIFT+K or ALT+M
Then, compile the File using CTRL + T. While compiling, Ensure that the application form was closed.
Now Open the Form and check. You can see that the ZOOM Button was enabled.

Form Personalisation

You can also refer the article given by Anil Passi. You can also refer the User Guide for the Complete reference. Also See Chapter 28[Page 735] in the Developer’s Guide.




Primarily there are two methods of extending Oracle Forms, and these are

CUSTOM.pll

FORMS Personalization



USE OF CUSTOM.PLL

Custom Library is used to customize and allows extension of oracle applications without changing the Oracle Application’s Code. The CUSTOM library is an Oracle Forms PL/SQL library.

If a company is opting for Oracle Applications, they will purchase the whole package. It will be common for all the industries. So, customization is required to suit that company.



Where it is Saved?

CUSTOM library is located in the AU_TOP/resource directory. CUSTOM.PLL file is stored in the AU[Application Utility] Top. The CUSTOM.PLX is also saved in the same path. If You are customizing the CUSTOM.PLL by copying it and pasting in other drives, the PLX file will also generated in the same path. Then You have to copy and paste it in the AU top.

D:\oracle\prodappl\au\11.5.0\resource\CUSTOM.PLL



Name : CUSTOM.pll, CUSTOM.plx

Path : D:\oracle\prodappl\au\11.5.0\resource



During execution of Oracle Applications first it will look for the ‘.PLX’ file, if it not found then it will search for ‘.PLL’ file.



We can also add custom packages to ‘custom.pll’. But we have to follow the naming conversion. The new package’s name should start with character that comes after ‘C’. (Usually start with ‘USER_’).



We can attach libraries to the custom package. We cannot attach APPCORE package, because CUSTOM is already attached to it (If we attach it will create recursion). But we can attach the following packages.



APPCORE2 : APP_ITEM_PROPERTY2

APP_DATE

APP_SPECIAL2



FNDSQF : FNDSQF provides Oracle Applications routines for function security (for opening forms), flexfields, and other utility routines. It’s a PLL attached to the CUSTOM.PLL file.



FND_FUNCTION : To call oracle forms



FND_MESSAGE : To display messages



Some of the common scenario where CUSTOM.pll can be used are:-

1. Enabling/Disabling the fields

2. Changing the List of Values in a LOV field at runtime.

3. Defaulting values

4. Additional record level validations

5. Navigation to other screens.

6. Enabling Special Menu





How and why does CUSTOM.pll work?

Every form in Oracle Apps is created using something called as TEMPLATE.fmb. But some of the modules like HRMS have their own HR Specific Templates[HRTEMPLT.fmb]. These template files have form level triggers that make call to CUSTOM.pll. The triggers that can be trapped using CUSTOM.pll in HRMS screen can be different than those which can be trapped for other module.



Commonly used events that are trapped using CUSTOM.pll are:-

ZOOM

WHEN-NEW-FORM-INSTANCE

WHEN-NEW-BLOCK-INSTANCE

WHEN-NEW-RECORD-INSTANCE

WHEN-NEW-ITEM-INSTANCE

WHEN-VALIDATE-RECORD





NOTE

Whenever You open the CUSTOM.PLL file, it is better to go to that path and open. If You double-click this, it will ask some option, navigate there also the same path.



DIFFERENCE BETWEEN PROGRAM UNITS AND ATTACHED LIBRARIES

Attached Libraries can be used across the libraries.

Program Units can be used for that particular Form Only.



CUSTOM Package

The CUSTOM package contains the following functions and procedure:

• CUSTOM.ZOOM_AVAILABLE

• CUSTOM.STYLE

• CUSTOM.EVENT



Note that this method may not be available in the future version of Oracle Applications.

How I Identified 45 Configuration Gaps in an Oracle HCM Implementation — A Structured Approach

During a recent Oracle Fusion HCM implementation, I led a gap analysis that surfaced 45 configuration issues between the client's legacy...