You are on page 1of 9

ORACLE APPLICATIONS FUNCTIONALITY

ORACLE APPLICATIONS FUNCTIONALITY. /***************************************/ Oracle applications is a integrated comprehensive suite of applications which includes a complete suite of products starting from marketing, SALES, service, telesales, order management, AP, AR, GL, Contracts etc. The hierarchy in Oracle application is given by the user | responsibility / \ menu Request Groups | | \ function. Concurrent programs Request Sets Concurrent Request programs Stages | Concurrent Programs

|\

When a user enters into the oracle applications, the user is prompted to choose one of the responsibilities that are available. The typical responsibilities that are available are the system administrator, application developer and product specific responsibilities. Typically one responsibility corresponds to one product application. As an ex, a responsibility called "Marketing Intelligence Collection Manager" is created for accessing the Marketing Intelligence application product. Once the user chooses this responsibility then all the functionality corresponding to that product comes up. That means he can run all the concurrent programs corresponding to that. Similarly a general ledger responsibility will have the functionality corresponding to that. A user can be given more than one responsibility from which he can choose when he logs in. System administrator is the greatest responsibility that a user can have. It gives complete access to the system. Each responsibility is also tied to a request group. A request group is a set of concurrent programs. If a user has a responsibility which is tied to a request group, then that user can access/run all the concurrent programs that are in that request group. Optionally a request group can also be a collection of concurrent programs and request set. A request set is a convenient way of clubbing certain related concurrent programs into one unit, so that when the user runs that request set, all the concurrent programs mentioned in that request set are run at once concurrently. This is very convenient for a customer who does not need to run individually each concurrent program. There is a request set wizard to create request sets. In a request set, we can optionally specify conditionally whether to continue with the next concurrent program if the first one succeeds or fails. We can also define the request stages in the request sets.

As mentioned above in the diagram, a responsibility is tied to a single menu. A menu can have submenus. And a menu or submenu is tied to multiple functions. A function is typically a report (any kind of report like a html or oracle reports report). Hence if a user can access to a menu which has five submenu items then he can see five menus after he logs in and if he double clicks on each one of them, he sees the corresponding functions. A sysadmin can typically define a function by specifying a function name, its parameter, the way of calling that function etc. Now let us see what are the typical functions a user can do with the system administrator responsibility. Using sysadmin responsibility he can define new users, new responsibilities. He can also define profile values (site level or application level). He can create new concurrent programs which is done as follows. To define a concurrent program he first needs to create an executable. An executable is tied to a pl/sql program package (package.procedure). Once the executable is defined, the concurrent program is defined and this executable is tied to that. And when the user runs this concurrent program, the corresponding package procedure is executed on the server side. The user can also specify the parameters for this concurrent program at the time of definition. The user can define a value set. A value set is typically a lov (list of values). Once a value set is defined, when a parameter is created, the parameter can be associated with this value set, so that the user is restricted to those set of values. Now let us see the functions that a user can do using the application developer responsibility. An apps developer can define objects and regions. A region typically consists of various attributes and the corresponding values. And objects are typically queries. Using Apps Developer responsibility you can also define messages. Oracle Message dictionary provides nls compliant messages. Once defined all the developers can use the message by using the fnd_message.get_message and fnd_message.set_token api's. Typically when you can getmessage the message is fetched from the message dictionary and put on the message stack. And after that the tokens (which are defined as &) are replaced with the actual parameters. Once all these are defined, when the product needs to be shipped to the customer, the developer needs to download certain files and send them. In oracle application, each kind of file does certain function. For ex a .pls file is a package or procedure. A .ldt file can be concurrent program, request set or request group. A .jlt file is a region and a .slt file is a menu and .odf is a file downloaded from the case which constructs the schema. The typical syntax for that is FNDLOAD apps/apps@seed115 0 Y $FND_TOP/afcconfig.lct REQUEST_GROUP bimcprg.ldt FNDLOAD apps/apps@seed115 0 Y $FND_TOP/afcconfig.lct REQUEST_SET bimcprg.ldt

FNDLOAD apps/apps@seed115 0 Y $FND_TOP/afcconfig.lct PROGRAM bimcprg.ldt FNDLOAD apps/apps@seed115 0 Y $FND_TOP/afcconfig.lct PROFILE bimcprg.ldt Lookup Values : We can define lookups in Oracle Applications using the Application Developer responsibility. On the lookup screen we can define a lookup type, lookup code and its meaning. Once defined a lookup goes into the fnd_lookups base tables. Then optionally we can define a view on top of that table, which will give only our product values as, Select code,value from fnd_lookups where lookup_type ='AMS%' Which will give only the AMS related lookup codes. So while defining value sets we can also hit this view ams_lookups in that screen. Ak region items Data The Ak regions, ak_region_items is basically the metadata information about the UI components. As an ex, let us consider typical report which will have the title ,parameters, row data, labels. In this environment all these components are defined in the AK database. This will help us , in case if the product is installed in any other language then those table data is converted into that particular language and the report is displayed in that particular language. As mentioned earlier a responsibility is typically tied to a particular product functionality. Also a function is part of a product functionality that is registered under a unique name, for the purposes of assigning to a responsibility. Form function (or form) a form function is a function which invokes a form and is called from a navigator window. Subfunction does not appear in a navigator window and cannot be navigated to. As a responsibility will have a menu associated with it which in turn has certain functions or menus of functions. Exclusion rules are those which admin will use to associate certain functions or menus of functions to a particular responsibility, and hence restrict the access as needed for that responsibility. If exclusion rules are not applied then a new menu hierarchy needs to be created. Profile: A user profile is a set of changeable options which affect the way your application behaves. There are four types of profile options available and they are site level profile application level profile responsibility level user level If the "find system profile Values " is set to Application, The "find system profile Values " block gives all the system profile values pertaining to all the users corresponding to all the responsibilities

of the application. The user level profile has the highest priority. As an ex we can have ams_marketing_calendar profile option set at the site level and get hte profiel value in the code using fnd_profile.get("AMS_MARKETING_CALENDAR"); Grouping concurrent requests: we know that the concurrent request can be grouped into a request groups andrequest group can be assigned to the request set. while creating request set we can create request stages which is again a groups of request. All the requests in a request stage run simultaneously, however the stages as a whole run sequentially. Hence according to our requirement we can set certain request into stages and run them. A request stage is successful only if all the requests in it are successful. We can also conditionally run the subsequent stage if the previous stage is successful. Hence a request set consists of stages. We can end the request set after any stage by not specifying what to do in case of success, error or warning ie. if the stage is not linked to any other stage. Also we can define a particular stage in the request set to be critical in which case the status of the request set is the status of the most recent critical stage. Also an end user can create request sets which are accessible to only him and are called private request sets. After a set is defined we can assign a user to be owner of that request set. When a set is created, we can specify the owner or need not specify. if we do specify, then the owner of the set can run that request set (even if it is not included in the request group). Hence in summary if a user is assigned as owner to a concurrent program, he can either run or edit that concurrent program parameters etc. It is possible to define a concurrent program (using the concurrent program form) to be incompatible with a particular concurrent program or request set, then that concurrent program will not simultaneously run when the request set is running. You can also define a concurrent program to be incompatible with itself meaning two instances of that program should not be run simultaneously. If there is such incompatibility and if the user has requested a concurrent program to be started (and if there is already an incompatible concurrent program is running), then the user program is run immediately after the incompatible program is completed. It is possible to define shared parameters define only once for a program is a set and it is accessible for all the programs in the set. Some changes that we make are made immediately available and some changes require choosing a different user or responsibility. Hitherto we have been seeing the standard submission request form of the oracle apps. Typically wehen define the execs and concurrent programs, they go into the tables which are given below.(AOL tables) fnd_concurrent_requests,fnd_run_requests, fnd_conc_request_arguments, fnd_conc_stat_summary etc typically if a concurrent program writes to a file using the fnd_file.put_line api, then the log file is generated whose name is l.req.

We can access the concurrent manager administration screen when v log in using the sys admin responsibility. We can also start the concurrent manager from the unix command prompt as, by setting certain env, say for ex we can start the concurrent manager on saldbg database, then $ relenv code saldbg /afrz/cmrsal $ ps -ef | grep LIBR $ asu -applrt $ startmgr

Some questions: Preserving the custom menu across the upgrades. : When we are upgrading the OA menus they might get overwritten. A good idea is to reattach a custom menu to an already existent after the upgrade. Stage function parameters window. ?

Oracle Applications Concurrent program Coding standards.

When we start coding any oracle concurrent program i.e a package spec and body (s.pls and b.pls) , it is necessary we need to follow certain standards. Let us start from the package.procedure from where the user runs the concurrent program. In that concurrent program, we definitely need to have two out variables ERRBUF and ERRCODE. Depending up on the value of the ERRCODE value the concurrent manager will decide this particular concurrent program has errored out or succeeded. A value of 2 for ERRCODE indicates that the concurrent program has failed. And a value of 1 indicates that it is a warning and a value of 0 indicates that it is a success. Hence this is a very important point to consider. In turn this top level program can call a number of other package.procedures in its script. Each procedure should have certain IN and OUT parameters. The IN parameters are p_api_version_number, p_init_msg_list, p_validation_level, p_commit and the OUT parameters x_msg_count, x_msg_data and x_return_status. Now after the api is called, we need to put some code to check whether the api call was successful which is given below. IF x_return_status = FND_API.g_ret_sts_error THEN RAISE FND_API.g_exc_error; ELSIF x_return_status = FND_API.g_ret_sts_unexp_error THEN RAISE FND_API.g_exc_unexpected_error; END IF; And at the end of that particular procedure we need to put the following logic, (so that if there is any problem with the above called procedure the control jumps to one of the following exceptions) EXCEPTION WHEN FND_API.G_EXC_ERROR THEN

x_return_status := FND_API.G_RET_STS_ERROR; -- Standard call to get message count and if count=1, get the message FND_msg_PUB.Count_And_Get ( -- p_encoded => FND_API.G_FALSE, p_count => x_msg_count, p_data => x_msg_data ); errcode = 2;

WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN x_return_status := FND_API.G_RET_STS_UNEXP_ERROR; -- Standard call to get message count and if count=1, get the message FND_msg_PUB.Count_And_Get ( --p_encoded => FND_API.G_FALSE, p_count => x_msg_count, p_data => x_msg_data ); errcode = 2; WHEN OTHERS THEN x_return_status := FND_API.G_RET_STS_UNEXP_ERROR; IF FND_msg_PUB.Check_msg_Level ( FND_msg_PUB.G_msg_LVL_UNEXP_ERROR) THEN FND_msg_PUB.Add_Exc_msg( g_pkg_name,l_api_name); END IF; -- Standard call to get message count and if count=1, get the message FND_msg_PUB.Count_And_Get ( -- p_encoded => FND_API.G_FALSE, p_count => x_msg_count, p_data => x_msg_data ); errcode = sqlcode; END POPULATE; Note that in the exceptions we are setting the errcode to 2 if the api raise either expected or unexpected errors. Apart from api calls raising the exceptions , we can also raise these exceptions, when some error happens. Flexfields A flex field is made up of subfields or segments. There are two types of flex fields which are key flexfields and descriptive flexfields. A key flex field consists appears on a form just like a normal text field. But when you click on it, it will open into a window consisting of sub fields or segments. Here each segment has a name and a list of values (or value set). An ex of a key flex field is a inventory part which can segments like the color, size, shape, weight etc. Hence if there is a part number in a particular form. That is this particular part is identified by that value(combination of values).

Also consider if a part has a flexfield structure f1+f2+f3 , another org can have the same part as f2+f3+f1. Or it can have any number of segments and if the form does not have space to store this, it will provide scrollbars for accommodating this flexfields. A descriptive fields appears as a one character field with no prompt as[], but when you click on it, it will open into a window with appropriate prompts and segments making up of those fields. It just provides some customizable expansion space.[] They display context sensitive information corresponding to the entered item value. Descriptive flex fields have two different types of segments, global and context sensitive. A global segment is a segment that always appears in the descriptive flexfield popup window regardless of the context while a context sensitive segment is a segment that may or may not appear depending upon the context field (reference field) Hence the flex fields help us in customizing our application and they help us in representing the accounting codes, product codes, item codes with additional programming involved.

Flex field structure S1 S2 S3 S4 S5 Each segment is represented in the database table as a column. Hence just by jumbling the above segments we get a different structure of the flexfield. Hence we can define more than one structure at a time. Defining flex fields Define value sets for each segment in the flexfield Defining the segment structures :prompts,order,sizes) define the values for the segments define the additional features

Combination : A combination is basically a complete set of segment values or complete code.A combinations table is basically a key flexfield table which stores this kind of complete codes and unique id for each such code combination. However the other tables refer tot his unique id rather than the entire the code. Qualifier : when you define a flexfield structure, each segment in that configuration is given a particular qualifier. This is because a flexfield structure can be represented in any structure (ie S1 S4 S3 S2 S5), then we know that the second qualifier is in fourth position currently. Hence for the already existing flexfield we can define a new structure When you are capturing key info then typically you would be using a key flexfield, and if you are capturing some optional information they you would use descriptive flexfield. MULTI-ORG Concept and Business Groups etc

/***************************************/ The typical organization hierarchy in Oracle Apps is Business group => Legal Entity => Operating Unit => Inventory Org We can define each of these things using the responsibility Oracle HRMS Manager, in the work Structures => Organization => Description. However if you do not have more than one business group, then there is no need to create a business group as Oracle Applications provides already predefined business group by name "Setup Business Group". Now once again,go to the Oracle HRMS manager responsibility and create the organizations using the menu, work Structures => Organization => Description. and for each organization, mention the type of organization either as legal entity, operating unit and inventory organization. Also we can define a single organization and classify as all of them (legal entity, operating unit and inventory organization ) together. The UI is being felt as tough here. The sequence of steps that is followed here are create an organization and assign a location to that organization (that you have created before) Save this organization Classify this organization as legal entity,operating unit or inventory organization. Enable this organization , by checking the enable check box and then save it. Once enabled, if we try to quit this form, if the organization is legal entity, the system will ask for the employer information if the organization is operating unit, the system will ask for the legal entity and SET OF BOOKS information. Hence first create an hierarchy of organizations create as many operating units and inventory orgs as has been designed and assigned them to correct legal entities and set of books.

MULTIORG SUPPORT : --------------The ability to divide a complex organization into a hierarchical structure of organization is the idea behind the multiorg structure. Using oracle apps, we can define the following levels Define accounting set of books A set of books is a functional currency, chart of accounts (account structure to record the transactions) and a accounting calendar. Define business groups. Business group is the highest level in the hierarchy of the multi org. Employee data is maintained in this group or the business group secures the HR information. Legal entities You prepare tax information for this kind of entity. Operating units : or a business unit like Accounting, purchasing etc.

Inventory orgs : These are the inventory units. The above hierarchical structure needs to be done after we have decided upon which org entities in our org are participating in multi-org structure. First create a set of books account. Once that is done create a business group. And then associate this particular business group with a responsibility. And then enter the system using that particular responsibility. After entering thru this responsibility, create the legal entity, when you create the legal entity this entity is automatically attached to that set of books. And then create operating units (business units). When you set the profile value MO:Operating unit to this particular value , then we you login again thru a responsibility, this profile value is read and you will see the info corresponding to that operating unit. And then run adadmin. Typically let us see why a business organization decides to go with the multi org concept. This is because if there are multiple groups in an org, the people in one org should not be able to see the data in other groups which means that every table or data structure should be striped by the org_id or every table should have org_id as a column. How that is implemented is as follows. Initially let us say we have a table by name ams_abc. 1. Then we create a table with the name having (_all) i.e ams_abc_all which will have the data corresponding to all the operating units or all organizations. 2. Then we create a view on top of this table using the query given below. select * from

You might also like