f Get Oracle Apps Traning Here: October 2006

This work is licensed under a Creative Commons -NonCommercial 2.5 License.



Tuesday, October 31, 2006

Oracle Apps Forms Customization - Step by Step approach

A new article has been added that explains the steps required to customize forms in Oracle Applications.

This article can be linked from here


Hope you are enjoying the Training Articles on Oracle Applications.

Your feedback is precious in improving the quality of training information being published here.

Monday, October 30, 2006

Setting up your PC for Oracle Apps Development

Dear readers,

A new article has been added, that explains the various things you need to do on your PC to set it up for Oracle Apps Development.


The article can be accessed via this link.


Thanks,
Anil Passi

Sunday, October 29, 2006

Training Articles on Descriptive Flexfields added

Two articles on Descriptive Flexfields have been added accessed from following links:-

Basics of Descriptive Flexfields in Oracle Applications, with example

Step by Step approach for Context Sensitive Descriptive Flexfields in Oracle Apps

Thursday, October 26, 2006

Difference between Lookups and Value Sets

I hope you have read the previous articles on Value Sets and also on Lookups.

It is important for the learners to read things in Sequence. Hence you may decide to browse through the Training Index Page.

Difference 1
Value sets can be attached to parameters of a concurrent program, whereas Lookups can't.

Difference 2
Certain types of Lookups are maintainable by the users too, for example HR Users will maintain "Ethnic Minority" lookups. Value Sets are almost never maintained by end users, with the exception of GL Flexfield codes. Value sets are usually maintained by System Administrators.

Difference 3
Value sets can contain values that are a result of an SQL Statement.
Hence it is possible to make Value Set list of values dynamic.
On the contrary, Lookup Codes are Static list of values.

Here comes the end of another simple article...

Thanks,
Anil Passi

Article on Lookups Training in Oracle Apps

Dear all,

The most simplest article thus far in this series has now been added. This article happens to be for Lookups in Oracle apps, and can be accessed by clicking here


Thanks
Anil

Wednesday, October 25, 2006

New Oracle Apps Training Articles Added

The training index has now been updated with three further articles....

What is a Concurrent Program

What is concurrent Manager

What is a Value set

Friday, October 20, 2006

Oracle Forms Functions Menus and their relationship

Every screen we develop delivers a business functionality of sorts. Notice the word functionality.
Hence the word function or call it "Form Function" is related to Oracle Forms.

You all know that a form is nothing but a screen from where users can enter or retrieve(query) existing data.

Qns: In Oracle why do we have a form and then also a Form Function? Isn't just having a Screen/Form just good enough?
Ans: What if, for the same form, you wish to provide slightly different functionalities depending upon which menu is clicked to invoke that form??

Question: Are there any examples?
Answer: Lets assume the following

There are two responsibilities
------------------------------
Payables Manager responsibility
Payables clerk responsibility

There is one form for invoices
------------------------------
Payables invoice screen

Our requirement
-------------------------------
If invoice screen is invoked from Payables Manager Responsibility, then at startup of the screen we want to provide a "Search Window", so that manager can search for the invoices to review

If the invoice screen is invoked from "Payables Clerk Responsibility", then at startup of the screen we want to provide "Invoice Data Entry window", so that clerk can begin entering the invoices.

The form will have following code within it in when-new-form-instance.
If :parameter.invoice_mode='MANAGER' then
Go_block(lfind_invoices')
Elsif :parameter.invoice_mode='CLERK' then
GO_BLOCK('invoice_header'),
End if;

Question: From above example it appears that form function will be passing parameter named invoice_mode to the form?
Answer. Correct in this case.
So that we understand how things hang together.
Invoice form is attached to a Form Function, when defining the Form Function we pass parameters to it. Then this Form Function is attached to the Menu, and it is the Menu that gets attached to responsibility.

Question : Oh dear,are the form functions all about parameters?
Answer: Parameters is the main feature of Form Functions. But there are others too.
As you know from previous training lessons, each form will be located in a specific directory on Unix box. For example, Purchasing Form executables will be in $PO_TOP/foms/US
And account payables form executables will be located in $AP_TOP/forms/US.

Did you wonder how Oracle will know to look for a payables form executable in AP_TOP and not in PO_TOP??
Oracle will think like this...hmm user clicked on a menu, what is the form function for this menu...hmm it is InvoiceReview....ok...what is the application assigned to the for form function...oh...its ap(account payables) application...right....what is the base path for this application...rite..it is AP_TOP...lets then run the fmx file from ap_top/forms/us


Screenshots for examples
A. Go to application developer click on menu /application/form
Define you form...remember, oracle will expect an executable of .fmx for this name

Click on menu /application/function
Define your two functions, invoice review, invoice entry, pass them parameters as below.

Login to Oracle Apps , and select responsibility "Application Developer"
Navigate the menu "Form"
Define the Form as below
Now, lets define the function







Do you wish to know the name of form that has approx 600 functions defined in oracle apps? To find the answer, click on interview questions link.

Wednesday, October 18, 2006

Oracle Apps Training Testing Environments

In every implementation, there are always more than one environments in Oracle Apps.

The rule of thumb states that below environment are a must:-
1. Development environment, where developers usually have System Administrator responsibility and also the apps password. If not System Administrator then at least they should have access to "Application Developer" responsibility.

2. Testing environment
Developers usually do not and must not have apps password to this environment . This is where users sign-off customizations or even setup changes.

3. Production environment
This is where the business runs

Optional environments:-

CRP environment
Conference room pilot environment is where usually implementation team gets buying to their product offering from user community, during implementation. This environment is usually used for sign off during new implementations.

Patching environment
This is where all new Oracle Patches are sanity tested.

Support environment
This environment is exclusive to support staff. This environment is usually the most frequently cloned environment in Oracle Apps site that has gone live. Frequent cloning helps the Oracle Applications support staff to reproduce production issues


Migration Environment
This is where repeated data migration can take place before migration code gets frozen and ready for UAT.

User Training Environment
Some clients mix this with the CRP itself. But post-goLive of APPS, when rolling out new module, an environment like this comes handy.

You as a developer do not need to worry about these environments, as your focus will be on Development Environment only.

Now some notes:-
1. There can be more than one development environment at any implementation site, when different big modules are being implemented, all having different timelines. However, the changes to each environment are UAT'ed on a common Test environment.
2. The development to production cycle is.... Developer does development & unit testing on Development Environment, and their code gets promoted to User Testing environment. Following this, the changes get applied to Production environment.
3. The changes done to "development environment" must be scripted in all cases where possible. As a thumb rule, everything except for Functional Configuration can be scripted. You may be intersted in FNDLOAD Link

Oracle Apps Deployment Training

When you are a fresh new Oracle Apps developer, your fundamental question is...where to find the piece of code that you are being asked to customize?
Before I begin to explain you this, first some fundamentals.

1. You will most likely find that any implementation of oracle apps will involve at least two machines, i.e. Database tier and then at least one web tier.

2. Oracle thought very logically to decide which executable runs on database tier and which on web/forms tier(also known as mid-tier).
Any executable that has intense database operations is stored at database tier. To give you some examples.... sql files, oracle report java concurrent programs, sql*loader are all deployed in database tier of Oracle Applications.

3. Any executable that has intense UI operations is deployed at forms tier. Examples are Oracle Forms fmx files, jsp files, pll/plx etc.

Qns: The above sounds good in most cases, but what if you have to build a form that has intense database processing.
Ans: Well the form will still be deployed in the mid-tier, otherwise your form will never be run. However, for such forms, you must handle most of the database processing within pl/sql packages. The api's that you build in pl/sql must have well defined parameters.
I am saddened to see that some apps programmers write tons of sql code/DMLs inside the oracle forms triggers. In this era of high speed networks, such aproach may be justified to an extent, but what if some other developer desires to use validations developed for your form in other areas of apps.? Hence building pl/sql api's is the preferred approach.

Qns: Why do we have multiple middle tiers for one database.
Ans: Most implementations install multiple mid-tiers to distribute the user load. The user requests are first sent to a load balancer switch, this switch the decides which middle tier to use. Hence, if one server has 1000 user cpacity, then you can have 5mid tiers to handle 5000 concurrent users.

Qns: That's fine for the theory, but how do multiple mid-tiers impact my forms deployment?
Ans: You will need to deploy your forms file to each middle tier machine (unles shared APPL_TOP) has been implemented.

Qns: Where do I pick the fmb files delivered by oracle?
Ans: These are picked from $AU_TOP/forms/us

Qns: Where do I deploy the fmx file on mid tier, assuming a purchasing screen has been customized.
Ans: This will be deployed at $XXPO_TOP/forms/us
Basically by deployment I mean that fmx file will be copied to xxpo_top/forms/us
Have you read the previous article on applications?

Qns: Where do I deploy a pl/sql package?
Ans: All of the pl/sql packages are installed in apps schema.
This includes your custom packages and also oracle delivered packages.

Qns: Ehere do we create the database views?
Ans: Views will be created in apps schema too.

Qns: How do I generate fmx, should this be done on pc or on the mid tier?
Ans: This must always be done on the mid tier
For example use below steps
Step 1
FORMS60_PATH=$FORMS60_PATH:$AU_TOP/forms/US

Step 2
export FORMS60_PATH

Step 3
cd $XXPO_TOP/forms/US

Step 4 ----Below in one single line
f60gen module=XXPOSCREEN.fmb userid=apps/apps module_type=form batch=no compile_all=special


Qns:I have deployed the form at $XXPO_TOP but I can't run it,I get message can not find form
Ans: Firstly find out the application to which this form is registered against. In reality the forms are attached to form functions and it is the form function that is attached to an application


Qns: How can I generate CUSTOM.pll or any other Forms Library
Ans:
----Below statements in one single line
cd $AU_TOP/resource
f60gen module=$AU_TOP/resource/CUSTOM.pll userid=apps/apps output_file=./CUSTOM.plx module_type=LIBRARY

f60gen module=$AU_TOP/resource/XX_POENT.pll userid=apps/apps output_file=./XX_POENT.plx module_type=LIBRARY

Qns: All the above sounds good, but how on earth do I connect to Mid Tier to generate forms
Ans: For Mid-Tier server, you will be provided with a Unix Username & Password. Before you start moaning, let me clarify that I assume that hosting o/s will be Unix. As soon as you logon to your mid-tier, your environment should automatically be setup based on scripts within .profile file. To know whether your environment has been setup on Unix box, do the below:
echo $FND_TOP
If the above returns blank, then it means you need to contact your DBAs to find out why environment variables are not being populated on your sign-on to Unix
...Ditto for DB Tier

Please let me know if you have any questions.

Thanks,
Anil Passi

Monday, October 16, 2006

Applications in Oracle Apps

In this training chapter I will explain what Application means, in Oracles context.

As a thumbrule, for one module there is one single application.

Uptill 8 years ago, it was mandatory for each table to be registered against an Application in Oracle Financials; but now such a relation no longer exist.

Oracle is a mixture of various applications like Payables, General Ledger, Payroll, Human Resources, manufacturing. You can call these modules, but officially these are called applications. Hence the name Oracle Applications(i think)

Is there a relation between application and table:-
Indirectly/logically there is, as the table is owned by a specific schema, and then a schema is related to an Application( though logically, as this relation is not enforced by the System).

What precautions do I take when creating a new table in oracle apps:-
Ans: Find out from DBA's the schema in which your custom tables are meant to be created. Create the desired table in custom schema. Note: If your custom table will support multi-org, then its name must finish with _all and also it must have a integer column named org_id

Qns: For an Oracle Apps developer, what else must be the consideration with respect to Application.
Ans: I will jump the training ship to explain this. In case you do not understand, then wait for the training lesson on concurrent programs.
a. Each program has an executable. For example reports have rdf, sql*plus has .sql file, forms has .fmx, Unix Shell Script has .prog(in apps) & D2k libraries have .plx
b. When you register an executable with Oracle Apps, you must then register this against an Application.
c. Each application is mapped to a specific path,say to a directory in unix box. For example, Applicaton XXPO (that holds PO Customizations) may map to /home/oracle/apps/appl/po
d. Say you have developed/customized a report for PO Module. Assume your report executable name is XXPOPRINT.rdf . If you register this executable with XXPO applicaton, then this rdf must be copied/ftp'ed to /home/oracle/apps/appl/po
e. When running this report in Oracle Apps, oracle will ask below series of questions to itself
I see that user is running XXPOPRINT.rdf, which applicaton is this report registered against? Oh well, it is XXPO application, then where is the directory location where I can expect to find this file? Oh ok, application definition of XXPO is mapped to /home/oracle/apps/appl/po (as per application definition), hence lets pick the rdf from /home/oracle/apps/appl/po/reports/US
Here lies the significance of applicaton in oracle apps.


Now some notes:-
1. Profile options can be defined at application level too.
2. All the Forms & Reports are attached to an Application.
3. Each application has a base path, which effectively is also the Environment variable on operating system.

The below image can be clicked to see how applications are defined in Oracle Apps. One needs to navigate to System Administrator responsibilotu. and select Menu /Application/Register.
As a developer, it is not your responsibility to define this, however I suggest that you understand this well.

Friday, October 13, 2006

ORG_ID and Multi Org In Oracle Apps

In this Oracle Apps training article, we will learn about org_id. I hope that you have read and understood the significance of profile options that we discussed in the earlier chapter.

Before I tell you what is org_id, lets do some questions & answers:-

Why do we need org_id
In any global company, there will be different company locations that are autonomous in their back office operations. For example, lets take the example of a gaming company named GameGold Inc that has operations in both UK and France.

Please note the following carefully:-
1. This company(GameGold Inc) has offices in both London and Paris
2. UK has different taxation rules that France, and hence different tax codes are defined for these countries.
3.GameGold Inc has implemented Oracle Apps in single instance(one common Oracle Apps database for both UK & France).
4. When "UK order entry" or "UK Payables" user logs into Oracle Apps, they do not wish to see tax codes for their French sister company. This is important because French tax codes are not applicable to UK business.
5. Given the single database instance of GameGold Inc, there is just one table that holds list of taxes. Lets assume that the name of the Oracle table is ap_tax_codes_all
6. Lets assume there are two records in this table.
Record 1 tax code -"FRVAT"
Record 2 tax code - "UKVAT"
7. Lets further assume that there are two responsibilities
Responsibility 1 - "French order entry".
Responsibility 2 - "UK order entry"
8. Now, users in France are assigned responsibility 1 - "French order entry"
9. Users in UK will be using responsibility named "UK order entry"
10. In the Order Entry screen, there is a field named Tax Code(or VAT Code).
11. To the French user, from the vat field in screen, in list of values UKVAT must not be visible.
12. Also, the "French order entry" user should only be able to select "FRVAT" in the tax field.
13. Similarly, UK order entry user, that uses responsibility "UK Order Entry", only "UKVAT" should be pickable.

How can all this be achieved, without any hard coding in the screen.
Well....the answer is org_id

ORG_ID/Multi-Org/Operating Unit are the terminologies that get used interchangeably.


In brief steps, first the setup required to support this....
The screenshots are at the bottom of the article

1. You will be defining two organizations in apps named "French operations" and "UK Operations". This can be done by using organization definition screen.
2. In Oracle Apps, an organization can be classified as HRMS Org, or Inventory Warehouse Org, or Business Group, Operating Unit Org or much more types. Remember, Organization type is just a mean of tagging a flag to an organization definition.
3. The two organizations we define here will be of type operating unit. I will be using words org_Id & operating unit interchangeably.
4. Lets say, uk org has an internal organization_I'd =101
And french org has orgid =102.


Qns: How will you establish a relation betwee uk responsibility and uk organization.
Ans: By setting profile option MO : Operating unit to a value of UK Org, against uk order entry responsibility

Qns: How will the system know that UKVAT belongs to uk org?
Ans: In VAT code entry screen(where Tax Codes will be entered), following insert will be done
Insert into ap_vat_codes_all values(:screenblock.vatfield, fnd_profile.value('org_id').
Alternately, use USERENV('CLIENT_INFO')

Next question, when displaying VAT Codes in LOV, will oracle do: select * from ap_vat_codes_all where org_id=fnd_profile.value('ORG_ID')?
Answer: almost yes.

Oracle will do the following
1. At the tme of inserting data into multi-org table, it will do insert into (vatcode,org_id) ....
2. Creates a view in apps as below
Create or replace view ap_vat_codes as Select * from ap_vat_codes_all where org_id = fnd_profile.value('ORG_ID')
3. In the lov, select * from ap_vat_codes ,

If the above doesn't make sense, then keep reading.

May be quick revesion is necessary:_
1. In multi org environment(like uk + france in one db), each Multi-Org Table will have a column named org_id. Tables like invoices are org sensitive, because UK has no purpose to see and modify french invoices. Hence a invoice table is a candidate for ORG_ID column.
By doing so, UK Responsibities will filter just UK Invoices. This is possible because in Apps, Invoice screens will use ap_invoices in their query and not AP_INVOICES_ALL.
2. Vendor Sites/Locations are partitined too, because UK will place its ordersfrom dell.co.uk whereas france will raise orders from dell.co.fr. These are called vendor sites in Oracle Terminology.
3.
Any table that is mutli-org (has column named org_id), then such table name will end with _all
4. For each _all table , Oracle provides a correspondong view without _all. For examples create or replace view xx_invoices as select * from xx_invoices_all where org_id=fnd _profile.value('org_id').
5. At the time of inserting records in such table, org_id column will always be populated.
6. If you ever wish to report across all operating units, then select from _all table.
7. _all object in APPS will be a synonym to the corresponding _all table in actual schema. For example po_headers_all in apps schema is a synonym for po_headers_all in PO schema.
8. When you connect to SQL*Plus do the below
connect apps/apps@dbapps ;
--assuming 101 is French Org Id
execute dbms_application_info.set_client_info ( 101 );
select tax_code from ap_tax_codes ;
---Returns FRVAT


--assuming 102 is UKOrg Id
execute dbms_application_info.set_client_info ( 102 );
select tax_code from ap_tax_codes ;
---Returns UKVAT


Now some screenshots














Thanks,
Anil Passi

Wednesday, October 11, 2006

Profile Options Examples Screenshots

You have reached this page from Profile Options Training Article

Firstly, lets define the responsibility for Clerk, as we discussed in Article.

Next, lets define the sales manager responsibility, as we discussed in Article.


Lets define user JOHN, that is Clerk



And also, lets define user SMITH ( Sales manager )

Now, we need to define the profile option for discount, hence go to responsibility "Application Developer"

When you click on menu "Profile" above, you will then see below screen for defining profile option. Please note that the "Name" field is the short name of profile option, and it is this name used in API call to FND_PROFILE.value


Now, after having defined a profile option, its time to assign these to JOHN & SMITH.
Hence go to responsibility "System Administrator"



Click on Menu Profile/System, as below

The profile option assignment screen looks like below. Enter JOHN in USER, OEPASSI% in Profile, to select profile named "OEPASSI Maximum Discount Allowed"

Assign a value of 5 to the user.


Click on torch, to return to search screen as below


and this time we will assign value of 15 against user SMITH.

OK, what if we have too many clerks, we can also simply assign profile value to Responsibility of Clerk. Doing so, all the users that use this responsibility, will inherit profile option value against Responsibility.




Assign 5% max discount for Clerks

Now, lets select Sales Manager responsibility in profile screen

Search on this...as below......

Assign value 15% to Sales Manager responsibility.



That's it for setup.
Any questions? leave your question by click on link Leave Comment for this article

Thanks
Anil Passi

Tuesday, October 10, 2006

What are Profile Options in Oracle Apps ?

Profile Options provide flexibility to Oracle Apps. They are a key component of Oracle Applications, hence these much be understood properly. I will be taking multiple examples here to explain what profile options mean. I will also try to explain by stepping into Oracle shoes "How will you design a program that is flexible", by using Profile Options.

Following that, if you still have questions regarding profile options, then leave a comment and I promise to respond. For the learners of Oracle Apps, understanding profile options is mandatory.

What is profile option?
The profile option acts like a Global Variable in Oracle.

Why does Oracle provide profile options?
These are provided to keep the application flexible. The business rules in various countries and various companies can be different. Hence the profile options are delivered by Oracle in such a manner to avoid hard-coding of logic, and to let the implementation team at site decide the values of those variables.

For screenshots of below listed examples in this article, please click this link

Enough definitions, give me some scenarios where profile options are used by Oracle....
1. There are profile options which can turn the debugging on, to generate debug messages. Say one of 1000 users reports a problem, and hence you wish to enable debugging against just that specific user. In this case you can “Turn On” the debugging profile option "again that specific user".
2. There are profile options that control which user can give discount to their customers at the time of data entry. You can set profile option "Discount Allowed" to a value of either Yes or No against each Order Entry user.
3. Lets assume an Organization has department D1 and D2. Managers of both the Departments have "HRMS Employee View" responsibility. But you do not want Manager of D2 to be able to see the list of Employees in Organization D1. Hence you can set a profile option against the username of each of these users. The value assigned to such profile option will be "Name of the Organization" for which they can see the employees. Of course, the SQL in screen that displays list of employees will filter off the data based on “logged in users profile option value”.


Let’s take an example. Let’s assume you are a developer in Oracle Corporation building a screen in ERP. Let us further assume that you are developing an Order Entry screen.
Assume that business requirements for your development work is:-
1. Screen should be flexible to ensure that different users of the screen can give different levels of discounts. For example, a clerk Order Entry User can give no more than 5% discount. But Sales Manager can enter an Order with 15% discount.
2. There should not be any hard-coding regarding the maximum permissible discount.
3. In the screen there will be a discount field.
4. When the discount value is entered in discount field, an error will be raised if user violates the maximum permissible discount.

Here is how Oracle will code this screen
1. They will define a profile option named "OEPASSI Maximum Discount Allowed".
2. The short name of this profile option is "OEPASSI_MAX_DISCOUNT"
2. In the when-validate-item of the discount field(assuming Oracle Forms), following code will be written
IF :oe_line_block.discount_value > fnd_profile.value('OEPASSI_MAX_DISCOUNT')
THEN
message(
'You can’t give discount more than '
|| fnd_profile.value('OEPASSI_MAX_DISCOUNT') || '%' ) ;
raise form_trigger_failure ;-- I mean raise error after showing message
END IF ;

Here is how, the client implementing Oracle Order Entry will configure their system.
1. Navigate to System administration and click on system profile menu.
2. For Clerk User(JOHN), set value of profile "OEPASSI Maximum Discount Allowed" to 5
For Sales Manager User(SMITH), set value of profile "OEPASSI Maximum Discount Allowed" to 15


Question: This sounds good, but what if you have 500 Order Entry Clerks and 100 Order Entry Sales Managers? Do we have to assign profile option values to each 600 users?
Answer : Well, in this case, each Clerk will be assigned Responsibility named say “XX Order Entry Clerk Responsibility”
Each Sales Manager will be assigned Responsibility named say “XX Order Entry Sales Manager Responsibility”
In this case, you can assign a profile option value to both these responsibilities.
“XX Order Entry Clerk Responsibility” will have a value 5% assigned against it. However, “XX Order Entry Sales Manager Responsibility” will have a profile option value of 15% assigned.
In the when-validate-item of the discount field, following code will then be written
IF :oe_line_block.discount_value > fnd_profile.value('OEPASSI_MAX_DISCOUNT')
THEN
message(
'You can’t give discount more than '
|| fnd_profile.value('OEPASSI_MAX_DISCOUNT') || '%' ) ;
raise form_trigger_failure ;-- I mean raise error after showing message
END IF ;

Please note that our coding style does not change even though the profile option is now being assigned against responsibility. The reason is that API fnd_profile.value will follow logic similar to below.
Does Profile option value exist against User?
--Yes: Use the profile option value defined against the user.
--No: Does Profile option value exist against Responsibility
-----Yes: Use the profile option value defined against the current responsibility in which user has logged into.
-----No: Use the profile option value defined against Site level.

For screenshots of examples in this article, please refer this link

What are Profile Options in Oracle Apps ?

This article is under edit. Real life like examples and screenshots remain to be added.

Profile Options provide flexibility to Oracle Apps. They are a key component of Oracle Applications, hence these much be understood clearly. I will be taking multiple examples here to explain what profile options mean. I will also try to explain by stepping into Oracle shoes "How will you design a program that is flexible".

Following that, if you still have questions regarding profile options, then leave a comment and I promise to respond. For a learner of Oracle Apps, this step is a must and not be skipped.

What is profile option?
The profile option acts like a Global Variable in Oracle.

Why does Oracle provide profile options?
These are provided to keep the application flexible. The business rules in different countries and
different companies can be different. Hence, the profile options are delivered by Oracle in such a manner to avoid hardcoding of logic, and to let the implementation team at site decide the values of those variables.


Give me some scenarios where profile options are used by Oracle
1. There are profile options which can turn the debugging on. Say one out of 1000 user reports a problem, and hence you wish to enable debugging against that specific user. In this case you can Turn On the debugging profile option "Again that user".
2. There are profile options that control which user can give discount to their customers at the time of data entry. You can set profile option "Discount Allowed" to a value of either Yes or No against each Order Entry user.
3. Lets assume an Organization has department D1 and D2. Managers of both the Departments have "HRMS Employee View" responsibility. But you do not want Manager of D2 to be able to see the list of Employees in Organization D1. Hence you can set a profile option against the username of each of these users. The value assigned to such profile option will be "Name of the Organization" for which they can see the employees.

Lets take a example. Lets assume you are a developer in Oracle Corporation building a screen in ERP. Let us say you are developing an Order Entry screen.
The requirements are:-
1. Screen should be flexible to ensure that different users can give upto different discounts. For example, a clerk Order Entry User can give no more than 5% discount. But Sales Manager can enter an Order with 15% discount.
2. There should not be any hardcoding regarding the maximum permissible discount.
3. In the screen there will be a discount field.
4. When the discount value is entered inn discount field, an error will be raised if user violates the maximum permissible discount.

Here is how Oracle will code this screen(link will be provided for screenshots)
1. They will define a profile option named "OEPASSI Maximum Discount Allowed".
2. The short name of this profile option is "OEPASSI_MAX_DISCOUNT"
2. In the when-validate-item of the discount field(assuming oracle forms), following code will be written
IF :oe_line_block.discount_value > fnd_profile.value('OEPASSI_MAX_DISCOUNT')
THEN
message(
'You cant give discount more than '
|| fnd_profile.value('OEPASSI_MAX_DISCOUNT') || '%' ) ;
raise form_trigger_failure ;-- i mean raise error after showing message
END IF ;


Here is how, the client implementing Order Entry will configure their system.
Navigate to System administration and click on profile menu.
for Clerk User(JOHN), set value of profile "OEPASSI Maximum Discount Allowed" to 5
For Sales Manager User(SMITH), set value of profile "OEPASSI Maximum Discount Allowed" to 15

Why call it Apps and not Oracle ERP ?

Ever wondered why is Oracle’s eBusiness Suite nicknamed apps?

Is it just the short name of Oracle Applications? Possibly yes, however this question is an excuse for me to explain to you the evolution of APPS schema.

I started working in Oracle Financials 9 years ago. Those days each module had its own database schema(which we still have). However, a purchasing user (until version 10.6) used to connect to PO schema (by the virtue of the screen being a PO screen).

Hence, if a report or screen of AR ( Oracle Receivables ) module wanted to access a table named PO_HEADERS_ALL, they would then use notation PO.PO_HEADERS_ALL

However, now we have several database schemas(in most cases one schema per module).

The tables are still owned by their respective schema, but now we have a central schema named APPS. Oracle ERP simply connects to APPS database schema for all its operations(with a couple of exceptions that are best ignored for now).

Hence, if Oracle wants to create anew table named PO_HEADERS_ALL, they will do the following

Step 1. Connect to po/po@XX_DEVDB
Create table PO_HEADERS_ALL ( ...all columns here )

Step2. Grant all on po_headers_all to apps ;

Step 3. connect to apps/apps@XX_DEVDB
Create or replace synonym PO_HEADERS_ALL for PO.PO_HEADERS_ALL


By following the above steps, as you can see, APPS schema is able to access PO_HEADERS_ALL without the notation po.po_headers_all


In Oracle ERP, now we have 100s of schemas, example po, ar, ap, gl etc.

But the screens, reports, workflows etc in Oracle Applications connect to APPS schema only. Just like saying, ALL ROADS LEAD TO ROME. Here, all schema lead to APPS.

Hence if you have a pseudo report that joins ap_invoices_all table( in AP schema) to PO_HEADERS_ALL table( in AP schema), you will simply need to do the below once connected to APPS.

Selelct 'x’ from po_headers_all p, ap_invoices_all a where a.po_Id = p.po_Id

Note, prior to version 10.6(of Oracle ERP –not database version), one had to do
Selelct 'x’ from PO.po_headers_all p, AP.ap_invoices_all a where a.po_Id = p.po_Id

Note: To keep matters simple, I haven’t considered org_Id in this example.
Org_Id will be covered in one of the following chapters ( have a look at index).

Moral of the Story is:-
All the pl/sql packages will be created in APPS Schema
All the views will be created in APPS Schema
For each table in individual schema, there will exist one synonym in APPS schema
Tables are not created in APPS schema.
Every implementation has at least 1 custom schema, where custom tables are created.
For each custom table created by you, you will need to create a Synonym in APPS schema
As a developer, you will either connect to APPS Schema or to the custom schema where you will create new tables.

Some notes:-
Custom tables are generally required in Oracle ERP because:-
1. You wish to create a custom screens ( your own screen to capture some info) for a functionality that is not delivered by Oracle
2. Pre-Interface tables ( Interface will certainly be discussed in one of the latter chapters)
3. Temp processing
4. Staging of data for third party extract interfaces….and much more

Monday, October 09, 2006

What happens when you login to Apps?

Firstly and surely there is a URL for oracle applications that is structured possibly in below format, although it can vary from version of apps.
http://machinename:portnumber/OA_HTML/US/ICXINDEX.htm
http://machinename:portnumber /oa_servlets/AppsLogin

When you join an Oracle Apps development team for an employer, you will first be given URL of the development environment.

In any Oracle Apps implementation project (assuming it has gone live), there are minimum of three environments, each with different URL's and different database instances.

These are:-
---------------
Development environment
Testing environment
Production environment

You will most probably, as a techie, be given url,username ad password of the development environment.

What happens when you login(no advanced info here):-
--------------------------------------
A. Your login gets authenticated against a table named fnd_user for your username and password. The screen below is where username and password defined. This screen is called user definition screen. Only system administrators have access to this screen.

B. As you can see above, this username xxpassi is attached to two responsibilities (this will be discussed in details in latter training lesson). It is this assignment to the responsibility that controls what a logged in person can do and can't do. In layman’s words, a responsibility is a group of menu.


C. When you successfully login you will see below screens.

This screen below will prompt you to change your password, to a value different than that assigned by System Administrator.








Click on either of the above Responsibility Names, will initiate Oracle Apps( Note: You might be prompted to install jinitiator…..just keep clicking OK…OK for all Jinitiator messages). Effectively, what I mean to say is that you do not need to download jinitiator from anywhere; Oracle will do this automatically (provided your DBA’s got this cofig’ed) for you during your first logon attempt from the PC. Once your jInitiator gets installed








Hurray, we have logged into apps.

Some notes on advanced info (beginners may ignore this):
Oracle internally uses a login named GUEST, prior to invoking validation of actual username. Some people regard this as a security threat, but it isn’t. Your DBA’s can change the “guest” password from its default value after installation.

Oracle uses a DB User account named applsyspub to which it first connects during validation of LOGIN. This user account has very restricted privileges and has access to below objects (primarily for authentication purposes):-
FND_APPLICATION
FND_UNSUCCESSFUL_LOGINS
FND_SESSIONS
FND_PRODUCT_INSTALLATIONS
FND_PRODUCT_GROUPS
FND_MESSAGES
FND_LANGUAGES_TL
FND_APPLICATION_TL
FND_APPLICATION_VL
FND_LANGUAGES_VL
FND_SIGNON
FND_PUB_MESSAGE
FND_WEBFILEPUB
FND_DISCONNECTED
FND_MESSAGE
FND_SECURITY_PKG
FND_LOOKUPS

Sunday, October 08, 2006

Oracle Apps Training Index

Please find the list of Oracle Apps Training Articles that are being covered by this blog.

Also, I am currently finalizing the list of Training lessons that will be covered. This list will change based upon the requests/suggestions that I will receive. As and when the corresponding Article gets posted, the article below will then appear hyperlinked.

You may suggest changes to the below schedule by emailing me or by dropping a comment to this article.

Training Articles listed below will published on this blog:-
Note: The articles already published appear with a URL below

1. What happens when you login to Oracle Apps
2. Why is it called apps
3. What is a profile option?
4. What is org_id. Why is it important.
5. Relationship between Applications and Modules
6. Where to find/deploy the code (Forms tier/Middle tier or DB Tier)
7. The testing cycle in Oracle Apps
8. Difference between forms and form functions and menu
9. What is a Concurrent Program
10. What is concurrent Manager
11. What is a Value set
11a. Different types of Value Sets
12. What is a lookup in oracle apps
13. How does lookup differ from Value Sets
14. What is a flexfield, and give example of simple Descriptive Flexfield.
15. How to make context sensitive descriptive flexfields ( step by step)
16. Setting up your PC for development environment
17. Oracle FormsD2k Basic Concepts (Thanks Rakesh)
18. Your Oracle forms customization steps
19. Your first custom form from scratch
20. Your first report customization
21. Your first custom report from scratch
22. Your first pl/sql concurrent program from scratch
23. Your first java concurrent program from scratch
24. Workflow training
25. Your first data migration program
26. Key Flexfields. What are they and why are they used
27. Oracle Self service : Important profile options
28. How did oracle's self service evolve, a brief history
29. How to do Personalizations in Oracle Self Service
30. How to export and import self service personalizations from one environment to another
31. How to debug programs oracle applications
32. Troubleshooting tips for investigating issues in Oracle Apps
33. How to make menu for specific concurrent programs.

I do not wish to re-invent the wheel, hence if I come across an article on the web that already has any of the above training material, then a link will be published. You as a reader should also feel free to provide me a URL that I can link onto, provided that article is of good quality.

Prerequisites for Technical Oracle Apps Training

This blog is an effort to help you become a technical Oracle Apps consultant. In this blog, I will publish articles on Oracle Applications training right from the very basics.

In my case, 10 years ago, I first took training in some programming languages like C,C++,VB, & of course Oracle. The good thing that came out was that I realised all programming languages have a commonality, i.e logic. But logic iwas the thing I feared the most, I never knew I could do it. At university, I had always bunked my Fortran and Unix lessons simply because of the logic phobia I had in my mind. Anyway, eventually I learnt Oracle SQL-PL/SQL, Forms and Reports. The bottom line is, keep your fears aside and take the dive and get started with the learning path.

Please note the pre-requisites. Kindly note that you can't jump onto becoming an Oracle Apps Technical Career path without having learnt the prerequisites that will form the base of Oracle Apps Development work.

Pre-requisites
------------------
1. Learn SQL and PL/SQL.
Firstly learn SQL. I think this link for w3schools will get you started from the very basics. You may also install Oracle Lite from technet and practice some SQL. Just the basic SQL with couple of joins and couple of where classes is good enough to get started. When learning SQL, try to imagine/visualize the scanning and filtering of records that Oracle will be performing behind the scenes.

2. Learn D2k. More importantly Oracle Forms 6.0 and Reports 2.5/3.0. All you need to learn are the fundamentals at this stage. You should be able to created a Master Detail block based form that calls from PL/SQL and one pll. For Oracle Reports, you must try to develop a report from scratch that has at least two queries with one link joining the two. You should also know things like formula column, b4 report & after param triggers.

3. It is good to know some Java Programming, however, knowledge of java has not yet become mandatory for Oracle Apps Technical Consultants. Ditto for XML and HTML. If you are a beginner, then don’t bother to learn Java right now. Java can be learnt in parallel while you work on Oracle Applications.

Once having learnt the above tools, you will then be ready to begin Oracle Apps Technical Training from scratch.

Saturday, October 07, 2006

Confusion: Functional or Technical Apps Consultant

Parvin raised a very valid and important question.
Should he work towards becoming a Functional Apps Consultant or a Technical Apps Consultant? I guess, this is a very common confusion for those who decide to switch their career into becoming an Oracle Apps Consultant. It becomes important to find an answer to this question specially if you are about to commit huge amount of money into an Oracle Applications Training Course. Finding the right answer to this question is very important, as it can possibly change the course of your life.

First some thumb rules, that will hold true in most cases:-

1. You can work towards becoming a Functional Consultant if :-
a. You are from an Accounting Background
b. You were a Super User for Financials/HRMS Manufacturing Modules for many years. You may even consider taking up a Support Analyst role.
c. You have never written a "Hello World" program, regardless of the programming language.
d. You are a MBA from a non-technical background
e. You don't mind spending most part of your day in meetings & writing documents.
f. You understand the overall ERP system very well, and how it all hangs together knowing the dependencies between various modules.

2. You must work towards becoming a Technical Consultant if:-
a. You are from a technical background, regardless of the stream i.e. Electrics/Comps etc. Even a Civil Engineer can make into a good Oracle Apps Technical Consultant.
b. You want to be a technical Oracle Apps consultant but you fear whether you can succeed. Remember, fear is important, as it gets the best out of you.
c. You find writing lengthy documents very boring.
d. You like to get a feeling of having achieved something each day.
e. You do not have much patience(like me), then surely you must not be a functional person. Some of the end users can really test your patience to limits.
f. You don't mind taking difficult challenges at times.
g. You can't be bothered to know how say Order Management links with General Ledger.

Pros of choosing a Technical path
1. For each Functional person, there are at an average 3 to 5 technical consultants. Hence more job opportunities for Technical Oracle Applications Role.
2. If you are an immigrant, then you face lesser comptetion from local workforce in western countries. For example, in UK I notice there are more Brits doing functional job than the number of Brits doing technical job. So much so that, I have seen some of my old techie friends to switch to functional roles latter in their career.
3. Not much emphasis on educational background. This holds very true in Europe, where you will be recruited(provided you have some experience) purely on the basis of your technical skills & technical knowledge.


Cons of choosing a Technical path
1. You have to keep up with ever changing technology and toolsets.
For example tools like Oracle Forms may be totally redundant after 5Years from now.
2. More and more work in Oracle Apps is moving to Functional domain. To give an example, prior to introduction of self service personalizations, a developer was required for any single change to the layout of the screen. However now, a functional or even a business super user can be trained within half a day to do Self Service Personalizations.
s to invest in a Oracle Apps Training course.


Pros of choosing a Functional path
1. Legislations and business rules do not change as often as does the technology changes.
Hence your knowledge can be carried forward from one version of Applicatiton to another.


Cons of choosing a Functional path
1. Boring at times, because too much time gets wasted in meetings.
2. It is almost impossible to keep away from office politics.


Another stream
One ignored stream is Support Analyst. But the reason I haven't discussed this streat here is because you rarely become Support Analyst in your first job. However, to become a good Support Analyst you must know a little bit of SQL.

Thanks,
Anil Passi

Friday, October 06, 2006

Become Apps Consultant from Oracle Consultant / Programmer

Dear friends,

This blog is dedicated to help you become an Oracle Apps Consultant.
There are many in this world who know Oracle as a database, but do not know how to become an Oracle Apps Consultant. I will take you through this journey of becoming an Oracle Apps Consultant.

There are thousands of websites for you to learn pl/sql, hence some basic knowledge of SQL, PL/SQL, Forms & Reports will be assumed.

To begin with, I will teach you the basics of Oracle Applications, its foundation & security.

When I learnt APPS, the first thing I wanted to learn :-
1. How to logon
2. How is my login validated
3. After logging into Oracle Apps, what do you see there
4. How do you access screens
5. How do you run reports
6. How do you build interfaces
7. How do you configure Oracle Applications

I will be covering such topics in this journey to help you become an Oracle Financials Consultant.

The knowledge provided here will be just enough to get you kick started.


Thanks,
Anil Passi