Professional Documents
Culture Documents
Organizations and Oracle Projects - 11i
Organizations and Oracle Projects - 11i
Projects (11i)
An Oracle White Paper
June 2001
Revised January 2002
ORGANIZATIONS OVERVIEW
Before diving into the role played by organizations within Oracle Projects, we
need to set the background by viewing organizations in the applications as a
whole. We need to define the terms related to organizations, discuss their
attributes, how they are set up, and what functions they serve generally within
Oracle applications.
Definitions
Organization Classification
Business Group
Legal Entity
Operating Unit
Also an organization classification, operating units are directly tied to MultiOrg functionality within Oracle applications. This will be discussed in further
detail below. The term Multi-Org, in fact, refers to multiple operating units.
Each operating unit represents a partition of data in various subledger
applications (eg, Payables, Receivables, Projects, etc.) The data a user sees in
these applications is dependent on the operating unit he is working in. This is
controlled by the setting of the profile option MO: Operating Unit (ORG_ID)
for the responsibility the user is logged in to. Each operating unit is assigned to
a single legal entity (and thereby a set of books).
HR Organization
HR_ALL_ORGANIZATION_UNITS
Stores one record per organization, with basic organization information such as
the name, effective dates, location, and business group.
HR_ORG_INFORMATION_TYPES
This table holds pre-seeded information. Each record describes a particular type
of information that can be stored in the hr_organization_information table.
Examples are: Legal Entity Accounting information and Project Burdening
Hierarchy
HR_ORG_INFO_TYPES_BY_CLASS
This table stores both the classifications for an organization and the data for the
information types associated with those classifications. The column
ORG_INFORMATION_CONTEXT indicates what type of information is being
stored in a given record. The actual data is stored in the columns
ORG_INFORMATION1 ORG_INFORMATION20. When
ORG_INFORMATION_CONTEXT=CLASS, this indicates that the
The descriptive flexfield that maps the pieces of information stored for each
information type to the org_information columns (1-20) is called Org
Developer DF. The information type is the context field for the flexfield. So in
order to determine what columns contain what data for a given information type
you could use something like the following:
select end_user_column_name data_element,
application_column_name column_stored_in
from fnd_descr_flex_column_usages
where descriptive_flexfield_name = 'Org Developer DF'
and descriptive_flex_context_code = '&info_type';
HR_LOOKUPS
There are numerous organization classifications that are used by projects. Many
of those described above are used by projects just as they are by any other
application (e.g., Business Group, HR Organization, and Operating Unit), but
there are also some classifications that are very specific to Oracle Projects.
Project Expenditure/Event Organization (PA_EXPENDITURE_ORG)
Organizations with this classification may be charged. Usually, unless there are
organization overrides in place, the expenditure organization of a transaction in
Projects is the employees assigned organization (for time and expenses) or the
entered organization (for usages or supplier invoices). It is the organization
providing the resource to the project. For cross charging purposes, the
expenditure organization is the provider organization. To act as an expenditure
organization, an organization must have this classification and be an element of
the Expenditure/Event Organization hierarchy specified in the system
implementation options form. It must also appear in the hierarchy at or below the
Start Organization specified in the implementation options. Hierarchies will
be discussed in more depth below.
Project Task Owning Organization (PA_PROJECT_ORG)
Projects obviously uses all of the tables described in the prior section, as it
shares this information with all other applications. However, much of the most
frequently used information from those tables is stored in a denormalized
fashion in a local Projects table PA_ALL_ORGANIZATIONS.
PA_ALL_ORGANIZATIONS
This table stores a list of all expenditure and project owning organizations. The
information in this table is based on the organization classifications and
hierarchies mentioned above. Most organization LOVs in the Projects
application are based on this table. It consists of only 4 columns:
ORGANIZATION_ID Identifier for the organization
ORG_ID Identifier for the operating unit in which the organization is
being used.
PA_ORG_USE_TYPE Either PROJECTS or EXPENDITURES to
indicate which this organization is being used for.
There are numerous issues relating to this table, because in many cases the
values are not updated when they should be. For example, if I disable the
Project Expenditure/Event Organization classification for an organization, I
would expect that change to be reflected in this table; however, in many cases it
is not. One sure way to guarantee that this table has the most up to date
information is to change the Start Organization for the expenditure or project
hierarchy in the implementation options form. If you change this value, save,
and then change it back, it will result in a call to
PA_ORG_UTILS.START_ORG_CHANGED which, in turn, will result in this
table being refreshed based on the most current data in the HR tables.
See the following bugs for some of the issues relating to the data in this table:
Disabling expenditure and project classifications in HR does not
remove/disable the organization in pa_all_organizations. Existing bugs
for this issue:
11.0:
-1635760 (One off on top of PA.F)
-1740727 (Backport for 1635760 to 11.0.PA.E and, per bug 1837263
this can be applied on top 11.0.PA.D as well.
-Code fix included in 11.0.PA.H
-1278894 (datafix on top of PA.E)
11.5:
-1735681 (One off on top of 11i.PA.D)
-Codefix included in 11i.PA.E
-Data fix not provided.
How does the application display only the data that is related to your current
operating unit?
Multi-Org Views
The basis of the multi-org functionality are views which dynamically filter the
information in your base tables, only showing the portion of the data that relates
to your current operating unit. Beginning in Release 10.7, a 64-byte global
database variable CLIENT_INFO exists in the database. The first 10 bytes of
this variable are used to store the current operating unit. Base tables whose data
must be partitioned, generally contain the suffix _ALL (e.g.,
PA_PROJECTS_ALL is a base table containing project information for all
operating units). These tables all have an ORG_ID column. This column
indicates the organization_id of the operating unit to which the data relates.
A partitioned view is created based on this underlying table. This view simply
selects all the columns (except ORG_ID) from the base table, and adds in the
condition:
Where
NVL(ORG_ID,
NVL(
TO_NUMBER(
DECODE(
SUBSTR(USERENV(CLIENT_INFO),1,1),
, NULL,
SUBSTR(USERENV(CLIENT_INFO),1,10)
)
),
-99)
) =
NVL(
TO_NUMBER(
DECODE(
SUBSTR(USERENV(CLIENT_INFO),1,1),
, NULL,
SUBSTR(USERENV(CLIENT_INFO),1,10)
)
),
-99)
So what does all this mean? The first part of the equation will return the
ORG_ID from the table if this is not null. If it is null it will check the first
character of the CLIENT_INFO database variable. If that character is blank, it
will return 99, if not, it will return the first ten characters of CLIENT_INFO
(which should be storing the current operating unit id). The second half of the
equation just looks at the CLIENT_INFO variable and returns 99 if the first
character is blank (operating unit is not set), or the first 10 characters (operating
unit id) otherwise.
So basically, if the tables ORG_ID is null, meaning that Multi-Org has not been
implemented, then this will always return the row because both sides of the
How does the ORG_ID column get correctly populated in the base tables when
you save a new record to this view if the view does not have the ORG_ID
column in it?
When the base tables are defined, a default value is defined for the ORG_ID
column as follows:
to_number(decode(
substrb(userenv('CLIENT_INFO'),1,1),
' ',null,
substrb(userenv('CLIENT_INFO'),1,10)))
This will set the first characters of the variable to whatever org_id value you
supply. However, when you actually log into applications, only the first 10
characters will be used for the ORG_ID, the rest of the variable is used to store
other information. Characters 45-54 are used for currency context information.
This stores the reporting set of books id from the profile option MRC:
Reporting Set Of Books if this is set. Characters 55-64 are used to store the
HR security group id.
The procedure fnd_global.initialize can be called with the user_id,
responsibility_id, and application_id as parameters to set the CLIENT_INFO
variable as it would be set if you logged in to the specified responsibility as the
specified user. This procedure will only set the operating unit portion of
CLIENT_INFO when Multi-Org has been implemented, that is, if the value of
FND_PRODUCT_GROUPS.MULTI_ORG_FLAG is Y. If not, it will ignore
the value of the MO: Operating Unit profile option and will leave the first ten
characters of CLIENT_INFO blank.
Each hierarchy you define can have multiple revisions. The effective dates for
different revisions may not overlap. Each revision consists of a set of
parent/child organization relationships.
Basic rules for a hierarchy version include: 1) An organization may not be its
own subordinate. 2) The top organization of the hierarchy is the only one with
no parent organization.
When defining a hierarchy you should be careful that a single organization does
not appear anywhere below itself in the hierarchy. It is possible to create such a
structure; however, hierarchical queries that use a start with and connect by
clause to traverse the hierarchy will fail in this case with ORA-1436:
CONNECT BY loop in user data.
10
PER_ORGANIZATION_STRUCTURES
This table contains one record per organization hierarchy. Each record contains
the basic information about the hierarchy, including its name, unique id,
business group id, and primary flag. Only one hierarchy per business group may
have PRIMARY_STRUCTURE_FLAG = Y.
PER_ORG_STRUCTURE_VERSIONS
This table holds information about version number, start and end dates, and
whether or not the current version was copied from an existing hierarchy
version. Version effective dates cannot overlap within a single hierarchy.
PER_ORG_STRUCTURE_ELEMENTS
This table holds the actual organization structure information. Each record
indicates the parent/child relationship between two organizations in the
hierarchy. ORGANIZATION_ID_PARENT indicates the parent organization,
and ORGANIZATION_ID_CHILD indicates the child organization. The top
organization in the hierarchy is the only organization for which there is a record
in which it is the parent, but no record where it is the child.
Each time an organization is added to the hierarchy, a record is inserted into this
table.
To traverse the hierarchy, you can use a select similar to the following. This will
show the information in a hierarchical format, indenting lower levels of the
hierarchy:
select lpad(to_char(organization_id_parent), level*3) parent,
organization_id_child
from per_org_structure_elements
where org_structure_version_id = &structure_version_id
connect by prior organization_id_child = organization_id_parent
and prior org_structure_version_id = org_structure_version_id
start with organization_id_parent=&starting_org_id
and org_structure_version_id=&structure_version_id;
Oracle Projects uses organization hierarchies for various purposes. They are
used to determine valid expenditure and project owning organizations, in
decentralized invoicing, in determining burdened amounts using a burden
schedule, and for reporting purposes.
11
There are four hierarchies used by Oracle Projects. For each you must specify
both the organization hierarchy and the version you wish to use. They are:
Default Reporting Organization Hierarchy
Expenditure/Event Organization Hierarchy
Project/Task Owning Organization Hierarchy
Project Burdening Hierarchy
Default Reporting Organization Hierarchy
12
13
Unlike the other three hierarchies, the Project Burdening Hierarchy is not an
implementation option. Rather it is specified at the business group level, so it is
shared across all operating units associated with a particular business group.
Also unlike the other hierarchies, once assigned, you cannot update the value of
this hierarchy/version. Any modifications to the burdening hierarchy structure
must be made on the version originally assigned to the business group.
Projects does not have any tables specifically related to organization hierarchies;
however, we can see where the hierarchy assignments information is stored. For
the default reporting hierarchy, the expenditure /event hierarchy, and the
project/task owning hierarchy this information is stored in
14
The project burdening hierarchy is assigned to the business group. When you
assign the business group classification to an organization, one of the additional
information flexfields associated with that classification is the Project
Burdening Hierarchy. Therefore, this information is stored in
HR_ORGANIZATION_INFORMATION as additional information for your
business group. You can use the following query to view this information for
all of your operating units:
col struct_id for a5 hea STRID
col name for a25 hea NAME
col vers_id for a5 hea VERID
select pi.org_id OpUnit,
org_information1 struct_id,
s.name,
org_information2 vers_id,
v.version_number
from pa_implementations_all pi,
hr_organization_information i,
per_organization_structures s,
per_org_structure_versions v
where i.organization_id = pi.business_group_id
and i.org_information_context = 'Project Burdening Hierarchy'
15
and
and
s.organization_structure_id = to_number(org_information1)
v.org_structure_version_id = to_number(org_information2);
16
Oracle Corporation
World Headquarters
500 Oracle Parkway
Redwood Shores, CA 94065
U.S.A.
Worldwide Inquiries:
415.506.7000
Fax 415.506.7200
Copyright Oracle Corporation 1995
All Rights Reserved
17