Introduction
Data Migration is one of the most important yet most challenging task which needs to be accomplished in any ERP Implementation project. Different ERP system provide different tools for loading data into the system. Oracle HCM Cloud also provides multiple ways via which we can load data into the system. The available ones till date being (as of Application Release 13):
Manual Data Entry via UI
HDL (HCM Data Loader)
HSDL (HCM Spreadsheet Data Loader)
Web-Service
Out of all the above options HDL is the recommended way of loading huge volume of data and is used for inbound integration. Also HDL Load supports data load using Web Service ( One Webservice Loads the HDL Files into UCM Server and the second one loads the data using HCM Data Loader Service).
In this article I will try to explain how to load some worker records into the HCM System. We would need to perform certain steps in order to achieve the same. They are:
Configure Source System Owner
Identify a pre-existing Legal Employer and Business Unit to which all the worker records would be associated.
Load specific workforce structure components (namely Location, Organization, Job, Grade and Position) which would be associated with Worker’s Assignment Details
Load Worker Records without Assignment Supervisor Details
Load Assignment Supervisor Details.
Let-us get started then:
1. Configure Source System Owner
For this example, we would add a Source System Owner (HA for this example) which will be active from 01-Jan-2018 to 31-Dec-4712.We need to login to the application with user having appropriate privileges and then follow below navigation:
Navigator -> Setup and Maintenance -> (Click on Task List and click on “Search”)
![]()
Once you click on the “Search” link you need to search for “Manage Common Lookups” and then search for Lookup Type as “HRC_SOURCE_SYSTEM_OWNER” and add new entry as shown:
![]()
Once added we can save the record.
2.Identifying Pre-Existing Legal Employer and Business Unit
We assume that the basic configuration is already been done in the HCM System and at least one Legal Employer and Business Unit has been configured (if the same is not done one may configure the same via UI).In this example we have checked and found that there exists a Legal Employer with name “US1 Legal Entity” and also a Business Unit with name “US1 Business Unit”.We can verify the existence of Legal Employer by searching for the same (US1 Legal Entity) using Manage Legal Entity HCM Information task under Setup and Maintenance
![]()
In order to verify the existence of Business Unit we need to do search for the same (US1 Business Unit) using Manage Business Units task under Setup and Maintenance
![]()
And with this we have successfully verified the existence of Legal Employer and Business Unit details which would be used in the subsequent steps.
3. Loading Basic Work-Structure Components (Location, Organization, Job, Grade and Position)
In this step we would try to manually create HDL Templates and try to load the same into the application.
We would be having five different files namely:
Location.dat
![]()
Organization.dat
![]()
Job.dat
![]()
Grade.dat
![]()
Position.dat
![]()
We will zip all these files (WorkstructureComponents.zip ) , One point to note here is that the files needs to be zipped directly ( one should not keep the files in folder if you do so you will encounter error during file load)![]()
Next we need to click on “Data Exchange” and click on “Import and Load Data”
![]()
Verification
We could clearly see that the load has been successful, but still it makes sense to search for these records for verification ( One should navigate to Navigator -> My Workforce-> Workforce Structures)
![]()
We can clearly see that all the work-structure components have been successfully uploaded into the application and we could view the same from the UI too.
4. Load Worker Records without Assignment Supervisor Details
Now we would continue with the next step where we will try to load the worker records. The file we are trying to load has many Metadata Contents
a)Metadata (Worker)
Details about important fields:
SourceSystemOwner | HA |
SourceSystemId | HA_PER<SEQ> (example HA_PER1, HA_PER2) |
PersonNumber | HA<SEQ> (example HA1, HA2...) |
ActionCode | HIRE |
![]()
b)Metadata (PersonName)
Details about important fields:
SourceSystemOwner | HA |
SourceSystemId | HA_PERNAME<SEQ> (example HA_PERNAME1, HA_PERNAME2) |
PersonId(SourceSystemId) | HA_PER<SEQ> (example HA_PER1, HA_PER2...) |
NameType | GLOBAL |
![]()
c)Metadata (PersonNationalIdentifier)
Details about important fields:
SourceSystemOwner | HA |
SourceSystemId | HA_NID<SEQ> (example HA_NID1, HA_NID2) |
PersonId(SourceSystemId) | HA_PER<SEQ> (example HA_PER1, HA_PER2...) |
NationalIdentifierType | SSN |
![]()
d) Metadata (PersonEmail)
Details about important fields:
SourceSystemOwner | HA |
SourceSystemId | HA_EMAIL<SEQ> (example HA_EMAIL1, HA_EMAIL2) |
PersonId(SourceSystemId) | HA_PER<SEQ> (example HA_PER1, HA_PER2...) |
EmailType | W1 |
![]()
e)Metadata (PersonPhone)
Details about important fields:
SourceSystemOwner | HA |
SourceSystemId | HA_WPH<SEQ> / HA_HPH<SEQ> (example HA_WPH1, HA_HPH1) |
PhoneType | W1 / H1 ( W1 for WorkPhone and H1 for HomePhone) |
PersonId(SourceSystemId) | HA_PER<SEQ> (example HA_PER1, HA_PER2...) |
![]()
f)Metadata (PersonAddress)
Details about important fields:
SourceSystemOwner | HA |
SourceSystemId | HA_ADDR<SEQ> (example HA_ADDR1, HA_ADDR2) |
PersonId(SourceSystemId) | HA_PER<SEQ> (example HA_PER1, HA_PER2...) |
AddressType | HOME |
![]()
g)Metadata (PersonCitizenship)
Details about important fields:
SourceSystemOwner | HA |
SourceSystemId | HA_CTZSHIP<SEQ> (example HA_CTZSHIP1, HA_CTZSHIP2) |
PersonId(SourceSystemId) | HA_PER<SEQ> (example HA_PER1, HA_PER2...) |
![]()
h)Metadata (PersonEthnicity)
Details about important fields:
SourceSystemOwner | HA |
SourceSystemId | HA_ETHNIC<SEQ> (example HA_ETHNIC1, HA_ETHNIC2) |
PersonId(SourceSystemId) | HA_PER<SEQ> (example HA_PER1, HA_PER2...) |
Ethnicity | 1 , 2, 8 , 6 , 7 (Check for valid codes in application) |
![]()
i)Metadata (PersonLegislativeData)
Details about important fields:
SourceSystemOwner | HA |
SourceSystemId | HA_LEG<SEQ> (example HA_LEG1, HA_LEG2) |
PersonId(SourceSystemId) | HA_PER<SEQ> (example HA_PER1, HA_PER2...) |
LegislationCode | US |
![]()
j)Metadata ( WorkRelationship)
Details about important fields:
SourceSystemOwner | HA |
SourceSystemId | HA_PDSERVICE<SEQ>(example HA_PDSERVICE1) |
PersonId(SourceSystemId) | HA_PER<SEQ> (example HA_PER1, HA_PER2...) |
LegalEmployerName | US1 Legal Entity |
WorkerNumber | HA<SEQ> (example HA1, HA2 …) |
![]()
k)Metadata (WorkTerms)
Details about important fields:
SourceSystemOwner | HA |
SourceSystemId | HA_WRKTERM<SEQ>(example HA_WRKTERM1) |
PersonId(SourceSystemId) | HA_PER<SEQ> (example HA_PER1, HA_PER2...) |
PeriodOfServiceId(SourceSystemId) | HA_PDSERVICE<SEQ> (example HA_PDSERVICE1) |
ActionCode | HIRE |
AssignmentNumber | HA_WRKTERM<SEQ>(example HA_WRKTERM1) |
AssignmentType | ET / CT ( ET for Employee , CT for Contingent Worker) |
BusinessUnitShortCode | US1 Business Unit |
LegalEmployerName | US1 Legal Entity |
SystemPersonType | EMP / CWK ( EMP for Employee , CWK for Contingent Worker) |
![]()
l)Metadata (Assignment)
Details about important fields:
SourceSystemOwner | HA |
SourceSystemId | HA_ASSIGN<SEQ>(example HA_ASSIGN1) |
PersonId(SourceSystemId) | HA_PER<SEQ> (example HA_PER1, HA_PER2...) |
ActionCode | HIRE |
AssignmentName | E-HA<SEQ> (example E-HA1 , E-HA2 ) |
AssignmentNumber | HA_ASSIGN<SEQ>(example HA_ASSIGN1) |
AssignmentType | E / C ( E for Employee , C for Contingent Worker) |
BusinessUnitShortCode | US1 Business Unit |
LegalEmployerName | US1 Legal Entity |
SystemPersonType | EMP / CWK ( EMP for Employee , CWK for Contingent Worker) |
JobId(SourceSystemId) | HA_JOB<SEQ> (example HA_JOB1) |
LocationId(SourceSystemId) | HA_LOC<SEQ> (example HA_LOC1) |
OrganizationId(SourceSystemId) | HA_DEPT<SEQ> (example HA_DEPT1) |
PositionId(SourceSystemId) | HA_POS<SEQ> (example HA_POS1) |
GradeId(SourceSystemId) | HA_GRADE<SEQ> (example HA_GRADE1) |
PeriodOfServiceId(SourceSystemId) | HA_PDSERVICE<SEQ> (example HA_PDSERVICE1) |
WorkTermsAssignmentId(SourceSystemId) | HA_WRKTERM<SEQ> (example HA_WRKTERM1) |
![]()
m)Metadata (Assignment Supervisor)
We would not load the Assignment Supervisor at the first instance of worker load (as already mentioned in the beginning). Details about important attributes of this metadata would be discussed later when we load the assignment supervisor details.
![]()
n)Metadata (AssignmentWorkMeasure)
Details about important fields:
SourceSystemOwner | HA |
SourceSystemId | HA_WRKFTE<SEQ> / HA_WRKHEAD<SEQ> (example HA_WRKFTE1 / HA_WRKHEAD1) |
AssignmentId(SourceSystemId) | HA_ASSIGN<SEQ> (example HA_ASSIGN1, HA_ASSIGN2...) |
ActionCode | HIRE / ADD_CWK ( HIRE for Employee and ADD_CWK for Contingent Worker) |
Unit | FTE / HEAD ( FTE for Full Time Equivalent and HEAD for Headcount) |
![]()
o)Metadata (PersonUserInformation)
Details about important fields:
PersonNumber | HA<SEQ> ( example HA1 , HA2 ,….) |
UserName | <FirstName>.<LastName>@<sourcesystemowner>.com Example ( Adam.Baro@ha.com) |
![]()
Now that we have got an idea of the various Business Entity and their key data fields ( along with the mapping logic used for them) we may proceed with creating a zip file (InitialWorkerLoad.zip) and try to upload the same to the application
![]()
We could see that we have tried to upload the files twice ( this is because during the first run we encountered some error and in the first run only 7 user records got created) . In the second run the balance 3 user records along with the entities which failed during first run were loaded.
Verification
In this case we had to run the process multiple times and none of them were 100% successful. We will hence try to verify the load results by searching for person records using person management.
![]()
Now we could see that all the 10 records are present along with the National ID, Business Unit, Country, Department , Location details. Also at this point it makes sense to check that the Assignment Supervisor records should not be populated. We would check for Becky Camelo’s Employment Page to verify the same.
![]()
Also as per the data we have loaded Adam Baro is the topmost manager of all the employee records loaded. But as we have not loaded the Supervisor Details yet we would not be able to view any employee reporting to Adam in the Organization Chart (Navigation is Navigator-> Directory->Directory and then search for Adam Baro. Once the name appears click on it and the click on “View in Organization Chart”)
![]()
5. Load Assignment Supervisor Details
Now in this step we would try to load the Assignment Supervisor Details. This Business Entity gets loaded using the Worker.dat object and the Metadata is AssignmentSupervisor
Metadata (AssignmentSupervisor)
Details about important fields:
SourceSystemOwner | HA |
SourceSystemId | HA_MANAGER<SEQ> (example HA_MANAGER1) |
AssignmentId(SourceSystemId) | Unique Assignment Record for which Supervisor is being assigned. HA_ASSIGN2 means that the assignment record with AssignmentId value as HA_ASSIGN2 is getting a supervisor associated. |
ManagerAssignmentId(SourceSystemId) | AssignmentId of the Employee who is been assigned as Supervisor. |
ManagerId(SourceSystemId) | PersonId of the Employee who is been assigned as Supervisor |
ManagerType | Type of Supervisor (Line Manager, HR Manager etc) . LINE_MANAGER for this example |
PersonId(SourceSystemId) | PersonId of the Employee who is getting a supervisor assigned. |
![]()
Now we will try to load this file and check the load status.
![]()
From the screenshot we can infer that the load has been successful. We would try to verify the results now.
Verification
We can verify the results in two ways:
Verify Manager Details from Manage Employment
We can navigate to the Manage Employment for Person Number HA2 and now we should see the Manager Details populated (HA1 should be visible as the manager)
![]()
Alternatively one may even check the Organization Chart for (Adam Baro) and all the Reportees would be visible there too.
2. Verify Manager Details Using Organization Chart
We may navigate to Navigator->Directory->Directory-> (Select Adam Baro as the Person Name) and then click on “View in Organization Chart”. Next click on the Print Button and then choose the appropriate configurations ( like levels to display, Orientation, and Fields to display). For this example I chose Levels to Display as 3, Orientation as Vertical and Fields to Display as All and then the following organization chart appears:
![]()
From this it is clear that while we didn’t have any individuals reporting to Adam prior to Supervisor assignment being uploaded the same isn’t the case once we load the SupervisorAssignment file which hereby confirms that the supervisor details have been successfully associated with the worker records.
Inference / Summary
With this we have come to the end of the article and I hope I was able to explain the basic steps required to load worker records in the system and even associate supervisor details to those assignments.
I hope this was a good learning and you guys had a great time during the session.
Thank You all for your time and have a nice day ahead!