Professional Documents
Culture Documents
OK, the Date Selected by user for date-track is stored in fnd_sessions with their sessionid. But how about application data?
When you attempt to modify a date-track sensitive data such as Person Surname, Oracle HRMS prompts you for either a Correct Mode or
Update Mode.
Lets say the record, before making the change the record was
Person First Name: Aish
Person First Name: Rai
effective_start_date : 10-JAN-2003 --when the person joined organization
effective_end_date : 31-12-4712 -- From Hr_Api.g_eot [end of time, well not literally]
If the record is modified in Correction mode, then this record will be modified as
Person First Name: Aish
Person First Name: Bachan
effective_start_date : 10-JAN-2003 --when the person joined organization
effective_end_date : 31-12-4712 -- From Hr_Api.g_eot [end of time, well not literally]
If the record is modified in UPDATE mode, then this record will be modified as
The existing record will be end dated
Person First Name: Aish
Person First Name: Rai
effective_start_date : 10-JAN-2003 --when the person joined organization
effective_end_date : 23-Dec-2006 -- a day prior to date-track date
Does this mean, when modifying in UPDATE mode existing record is end-dated and a new record is created?
Yes, indeed.
PAY_ELEMENT_LINKS_F - Payroll To make payroll elements eligible to a group of people, you create
Element Links Element Links.
See Elements Basics article that explains why Element Links are
necessary.
The Primary key is ELEMENT_LINK_ID with date-track columns.
When will you commonly use element_link_Id ?
1. When querying on Element Entry[PAY_ELEMENT_ENTRIES_F],
a join can be made using ELEMENT_LINK_ID
2. The reason Oracle uses ELEMENT_LINK_ID in Element Entry to
work out Costing Segments based on Payroll Costing Hierarchy.
PER_ALL_PEOPLE_F - Employee PER_ALL_PEOPLE_F - Employee record
record It is well known that Employee records are stored in
PER_ALL_PEOPLE_F. Its a date track table with primary key being
person_Id. This table also has party_Id, because Oracle creates a party
in TCA as soon as a record in per_all_people_f gets created.
Main usage of per_all_people_f:-
1. To get the name of the person
2. To get the date of birth or tax Id of the person
Note:- The application uses PER_PEOPLE_F, as that is a secured view
layer on top of PER_ALL_PEOPLE_F
PER_ALL_ASSIGNMENTS_F - This is the most central table in Oracle Payroll. Payroll engine uses
Assignment table this table as the main driver.
Why so: Because Element Entries are stored against Assignment
record.
This table is date-tracked, with primary key being assignment_Id
Usage of per_all_assignments_f?
1. Find position_Id, hence position, or grade, the organization for the
persons assignment.
2. It has foreign key to person_id. Each person Id can have no more
than one primary assignment at any given point in time.
3. Pay run results and also the pay_assignment actions refers to this
table.
PER_PERSON_TYPES - Person type This is the master table for Person Types. Some examples of Person
Types are Employees, Casuals, Applicants etc.
The primary key is person_type_id.
But please do not try joining this with person_type_id in
per_all_people_f.
Instead join that to per_person_type_usages_f
_x will give you person_type usage as of SYSDATE.
For any other date, use the classic p_date between effective_start_date
and effective_end_date.
PAY_ELEMENT_ENTRIES_F These two tables are inserted into when fresh Element Entries are
created.
PAY_ELEMENT_ENTRIES_F
Each Element that gets attached to an Assignment will have an entry in
PAY_ELEMENT_ENTRIES_F.
For each assignment you will have one or more records in
PAY_ELEMENT_ENTRIES_F table.
It is logical that PAY_ELEMENT_ENTRIES_F has following
columns
Assignment_id
Element_link_id
ELEMENT_TYPE_ID
This table is date-tracked too. Please do not ask my where there was a
need to store both ELEMENT_TYPE_ID and also
ELEMENT_LINK_ID in this table.
Just storing the ELEMENT_LINK_ID could suffice. However, i guess
Oracle did so for Performance reasons.
PAY_ELEMENT_ENTRY_VALUES_F This table stores a reference to PAY_ELEMENT_ENTRIES_F. In
plain English, this table captures the entry value for the elements.
The Input Value is stored in SCREEN_ENTRY_VALUE. The name
suggests that it stores the Formatted Screen value. However, I can
assure you that SCREEN_ENTRY_VALUE stores the non formatted
value. For example screen might showHH:MM as 03:30, but
SCREEN_ENTRY_VALUE will have 3.5
This table is date-tracked, and its primary key is INPUT_VALUE_ID.
Where can I commonly join INPUT_VALUE_ID to ?
To the payroll run results value table, i.e.
PAY_RUN_RESULT_VALUES
You can also join to PAY_COSTS, if you wish to work out which
input value contributed to a specific Payroll Costed Amount.
PAY_PAYROLL_ACTIONS Well, just about anything you make the Oracle Payroll engine do, it
records an entry in PAY_PAYROLL_ACTIONS.
Before I jump to give the script for migration of SIT, let me first explain the background so that you are able to troubleshoot the errors
yourself during the data migration into oracle's special information types.
Question: I find the special information type tables confusing. Please can you explain?
Answer : The combination of Segments is stored in table per_analysis_criteria.
This combination is identified by analysis_criteria_id.
Next in table per_person_analyses, analysis_criteria_id is linked to the Person Id.
Effectively, this means that a given combination of segments can be assigned to various Person Records. This is fundamental to the nature
of Key Flex Fields. This will get clearer at the very end of this article.
Question: Give me the example of the SIT, to which we will migrate values.
Answer: For this training exercise, we will assume following SIT exists in Oracle Apps.
SIT Name : XX Medical History Of Person
SIT Fields:
Medical Condition(Segment1)
Year of illness (Segment2)
Cured Now Flag [Yes/No] (Segment3)
Note: We configured & created this SIT in article as linked here .
Let’s migrate this data against the PERSON_ID which we migrated in Article(link here for Person Migration Article ).
Person Id = 134593 was created as a result of that migration.
BEGIN
SELECT fi.id_flex_num
INTO n_id_flex_num
FROM fnd_id_flex_structures_vl fi
WHERE (fi.id_flex_structure_code = 'XX Medical History of Person')
AND (application_id = 800)
AND (id_flex_code = 'PEA');
LOOP
BEGIN
---reset the variables here
n_object_version_number := NULL;
n_analysis_criteria_id := NULL;
n_person_analysis_id := NULL;
n_pea_object_version_number := NULL;
v_count := v_count + 1;
IF MOD(v_count
,50) = 0
THEN
--do a commit for each 50 records during migration
COMMIT;
END IF;
EXCEPTION
WHEN OTHERS THEN
--need to log error here
dbms_output.put_line('Exception ' || SQLERRM);
/* xx_error(p_migration_type => 'MIGRATION TYPE'
,p_error_message => SQLERRM
,p_resolution => 'Enter details manually'
,p_person_id => 134593);
*/
END;
EXIT; --in this case just one record
END LOOP;
COMMIT;
END;
Note that the combination of Medical Condition, Illness Year & Cured Flag is not directly attached to the PERSON_ID. Hence, if another
of your employee was to have exactly the same medical illness, on the same date, and is also cured....then oracle will not create a new
record in table per_analysis_criteria, as Oracle Flexfield Engine will reuse this combination of codes for other employee. Effectively the
same principles apply to gl_code_combinations & code_combination_id.
| Print |
Differences between EIT and SIT in HRMS
Written by Anil Passi
Thursday, 22 February 2007
The main difference between Special Information Types and Extra Information Types is that SIT is KeyFlexfield whereas EIT is
Descriptive Flexfield.
In case of SIT, assuming there are two non-smokers and neither of those are colour blind, then there will be just one record in
table PER_ANALYSIS_CRITERIA
Segment1 = N
Segment2 = N
ANALYSIS_CRITERIA_ID=1000
For both these people, their respective SIT records in PER_PERSON_ANALYSES will reference
"ANALYSIS_CRITERIA_ID=1000"
Think of this like CODE_COMBINATION_ID in GL_CODE_COMBINATIONS, and compare that to
PER_ANALYSIS_CRITERIA
However in case of EIT, assuming same example as above, two physical records will be created in table
PER_PEOPLE_EXTRA_INFO
Should my decision be based upon saving space in the database, so that records can be reused in case of SIT?
Not really, space is hardly an issue these days in ERP systems, few bytes here or there make no difference at all to database sizing.
However there are other differences that can be considered in making this decision.
During implementation, when deciding between EIT and SIT, should I ask myself a question that- how often will Extra
Information be modified?
Indeed, given that columns segment1, segment2.....segment30 in PER_ANALYSIS_CRITERIA are not usually indexed [unlike in
gl_code_combinations]
Documents of Record
HR_DOCUMENT_EXTRA_INFO Information
However in case of SIT's, those are usually defined at Person Level [although these SIT can be enabled at Job/Position level too].
PER_PERSON_ANALYSES table has date_from and date_to. Does this mean a SIT Combination for a person can be end-dated?
Correct, you can implement a date-track kind-of model with SIT [not true date-tracking though, as inactive record are displayed in screen
too]
However in case of EIT, in order to implement a similar logic for date ranges, you will have to use PEI_INFORMATION1 to capture
DATE_FROM, and use PEI_INFORMATION2 to capture DATE_TO
exec register_type ('PER_ASSIGNMENT_INFO_TYPES', 'XX Smoker Etc Details[as defined in DFF Context]', 'Y', 'Y', 'Description of
your EIT', 'GB [your legislation code]');
commit;
E-
HRMS Setups - NOT BR100 | Print |
mail
Written by Anil Passi
Thursday, 30 November 2006
Please find the common setup steps that are required during almost all the Oracle HRMS Implementations. Please note that this is not a
BR100 document.
HRMS Key FlexFields
In any HRMS Implementation, you will be required to design your flexfields. Some of the important Key Flexfields are listed below.
Job Flexfield
Usually couple of segments max
Grade Flexfield
Normally used to work out Payscales
Position Flexfield
Note on all HRMS KFF :- Usually you will have Dynamic insertion set to True for these flexfields.
Define Value sets and Lookup Codes to Support the KFF & DFF’s & Std Process
Some examples for Lookup Codes that you will define are:-
Employment category
Absence Reason
Common Notifications
Confirmation notification to an employee when their grade or salary details change
Notifications related to Stock / Share Options allocation etc
Define jobs
We defined the Job Flexfield in the beginning. Here we assign values to jobs.
Define grades
We defined the Grades Flexfield in the beginning. Here we assign values to grade
Define the responsibilities and Security Profiles [Also link the two]
You will not only be defining responsibilities, but you will also be securing the list of Employees that can be visible from those
responsibilities. For this security, you define something known as Security Profile
To give you an example of that, lets say that you want a Departmental head to be able to see list of Employees that work within his
Organization/sub-Organization. To achieve this you will define a security profile and will attach the Organization hierarchy to this
security profile[starting from his Organization node in hierarchy]
Security profiles can also filter employees on Grade etc. For example, for a responsibility named “HRMS CEO”, you only wish to display
employees that are Manager grades. Security profiles can also be created by attaching a filtering SQL to them.
Effectively, following items can help you build a security profile:-
Organisations / Organization Hierarchy
Positions
Payroll ( e.g. to restrict the viewable list of Employees by Monthly payroll)
argh ! this reminds me that we haven’t defined Payroll as yet.
Define Payroll
You will specify the periodic cycles of Payroll, i.e. Monthly, Weekly etc.
Not only that, some statutory information like Employers Tax Reference etc will be captured against the Payroll definition.
Optionally specify the suspense account, default costing account against the Payroll Definition.
Define Elements
This setup will be driven by your Payroll Requirement
E-
Special Information Types -SIT in HRMS | Print |
mail
Written by Anil Passi
Wednesday, 15 November 2006
In this article, I will explain in steps :- How to create special information types in Oracle HRMS.
Once you have learnt the fundamentals of SIT, you can then also reference the article on migrating special information types into Oracle.
Before we dive into the special information type creation example, let’s first do some questions and answers.
Question : Why use an SIT when we can enable descriptive flexfields against the person record.
Answer : Various reasons, as listed below:-
A. Data in Descriptive Flexfield against an employee record will be visible to all the users that have access to the Employee
creation/query screen.
On the contrary, using HR Workflow security, we can make SIT to become visible for the responsibility that we desire.
B. There is limited number of descriptive flex field columns available.
C. SIT let you logically group similar information together. For example, you may wish to capture "Medical illness history/details" and
also Citizenship/Country Residency History" of your employees. In this case, you will create two different SIT.
Question : Give me the example of the SIT, to which we will migrate values.
Answer : For this training exercise, we will assume following SIT exists in Oracle Apps.
Sit name : "XX Medical History Of Person"
Sit Fields:
Medical Condition
Year of illness
Cured Flag (Yes/No)
First, go to Key Flexfield register screen and query to find the title of KFF. No changes are done in this screen,
Go to application developer responsibility, and click on menu key flexfield segment.
Now go to person record, by finding for the person that we migrated in earlier article .
Click on button labeled special Info
See the SIT in action here, finally
E-
Audit Changes in Oracle HRMS | Print |
mail
Written by Anil Passi
Monday, 05 November 2007
To enable auditing in Oracle Human Resources is merely a 15minutes job.
Please find below, a step by step example that enables Auditing in Oracle HRMS.
This article is a proof of concept for auditing in Oracle HRMS, as it ends with showing the data from HR_AUDITS and
HR_AUDIT_COLUMNS.
Note that all the audit screens in System Administrator responsibility are located in Menu Path /Security/AuditTrail/Groups
Step 1. From system administrator, Enable Auditing for Oracle HRMS Application.
To do this, navigate to AuditTrail Install in System Administrator.
Next, query on Oracle Username HR and then enable the Audit Enabled check-box.
Step 2. From system administrator, Create a audit group that contains PER_ALL_PEOPLE_F
In this proof of concept, we will see how changes to First Name and Last name of a person are being audited.
Navigate to Audit Group screen in System Administrator, and create an "Audit Group" as show below.
Step 3. From System Administrator responsibility, add the desired columns that you wish to audit upon on table PER_ALL_PEOPLE_F
Step 4. Again in System Administrator, Run Concurrent program “AuditTrail Update Tables” as shown below.
Step 5. Next, login to HRMS Superuser and run concurrent program “Audit Trail Update Datetracked Tables”
This again is a one off step that must be implemented when you have made changes to Audit Groups/Tables/Column lists.
Step 6. Change the name of a person from Aneel to Anil, from person entry screen.
Step 7. Schedule the concurrent program “Audit Report” Oracle HRMS Superuser
In this example, I am passing it parameter PER_ALL_PEOPLE_F
By running the process “Audit Report”, data from shadow Audit tables [ <table_name>_A ] will be moved into HRMS Audit Tables.