There are many legislative required attributes defined against location object in HCM. These attributes are setup as EFF in Oracle fusion. These EFF attributes are protected against any updates.
One of the requirements is to bulk upload data against these EFF attributes and HDL can be used for this.
Below is a sample HDL to load “HR Reporting Location” attribute under “United States EEO and Veteran Reporting Information”:
LleInformationCategory – Should be same as EFF Context – HRX_US_LOC_EEO_VETS_INF
In case any of these attributes are not passed correctly, you will get an error:
An error occurred. To review details of the error run the HCM Data Loader Error Analysis Report diagnostic test.
Message details: JBO-26037: Cannot find matching EO from discriminator columns for view object LocationLegislativeHRX_5FUS_5FLOC_5FEEO_5FVETS_5FINFprivateVOLogical, entity base LocationLegislativeHRX_5FUS_5FLOC_5FEEO_5FVETS_5FINFprivateEO, discr value Discr values: HCM_LOC_LEG..
There is a common requirement to send encrypted output files to UCM server as part of outbound integrations in Fusion HCM. By default, FA_UCM_PROVISIONED is delivered as ‘Content Server’. But the delivered content server, doesn’t have the encryption enabled and there is no option to enable encryption on the delivered content server.
So, the solution here is to create a copy of delivered content server with same parameters with encryption enabled.
Choose the PGP key and click on ‘Test Connection’ button. Your new content server is now ready to use. If you have multiple vendors, needing to pick files from content server and each of them is having their own PGP key, you will need to create an individual content server for each vendor.
SELECT pjf.job_id
, pjf.job_code
, pjft.name
, pjffv.job_family_name
, pjf.effective_start_date
, pjf.job_function_code
, hikm.source_system_id
, hikm.source_system_owner
FROM per_jobs_f pjf
, per_jobs_f_tl pjft
, per_job_family_f_vl pjffv
, hrc_integration_key_map hikm
WHERE pjf.job_id = hikm.surrogate_id
AND pjft.job_id = pjf.job_id
AND trunc(sysdate) between pjf.effective_start_date and pjf.effective_end_date
AND trunc(sysdate) between pjft.effective_start_date and pjft.effective_end_date
AND trunc(sysdate) between pjffv.effective_start_date and pjffv.effective_end_date
AND pjft.language = 'US'
AND pjffv.job_family_id = pjf.job_family_id
List of all job families not associated with a Job:
SELECT *
FROM per_job_family_f_vl pjffv
WHERE 1=1
AND NOT EXISTS (SELECT 1
FROM per_jobs_f pjf
WHERE pjffv.job_family_id = pjf.job_family_id)
With the security concerns regarding access to Oracle HCM applications, I have seen many customers asking for a way to restrict access to a particular DEV/TEST environment having unmasked data. One option in such scenario’s is to keep only the admin user accounts active in the particular environment and deactivate all other user accounts. This way, the user roles data is kept intact and access is restricted to only a set of limited users.
Let us now understand, the kind of users which can exist in Fusion HCM environment. There can be system users (seeded), service accounts, worker accounts (users tied to a person), standalone user accounts (for vendors/ SI partners). So, it is really important to filter the right set of user accounts which should be deactivated. Also, the method of deactivation can vary depending upon the type of user.
Bulk deactivation of users can be performed using either HDL or by using SCIM REST API. While HDL is bulk data upload tool but it has its own set of limitations. HDL can’t be used to deactivate standalone users i.e. the users which don’t have an associated person record. To deactivate standalone users, REST API should be used.
I will discuss both the approaches in details. Let us first find a way to store the admin user accounts which should remain active. My preferred way of doing this is to create a Common Lookup and add the details (user names) in this lookup. This is because lookup values can be updated easily using a spreadsheet loader.
Below is the sample lookup (XX_ACTIVE_USER_ACCOUNTS) which I created to store the admin user names:
Next step is to add the user accounts in the meaning attribute:
Two user accounts – [email protected] and [email protected] have been added. The next steps will be to filter these record from the deactivation steps.
Let us now discuss the first approach which is to deactive user accounts using HDL. Below SQL query can be used to get a list of all required active user accounts in User.dat HDL format:
SELECT 'METADATA|User|UserId|Suspended' datarow
,1 seq
FROM DUAl
UNION
SELECT 'MERGE|User|'
|| pu.user_id
|| '|Y' datarow
,2 seq
FROM per_users pu
WHERE pu.person_id IS NOT NULL
AND pu.created_by NOT IN ('anonymous')
AND pu.username NOT LIKE 'FUSION%APPS%'
AND pu.username NOT IN ('AIACS_AIAPPS_LHR_STAGE_APPID','FAAdmin','FAWService','FAWService_APPID','FIISUSER','HCMSI-98f0f163a79a46c58fa4572e41fac8ed_scim_client_APPID','IDROUser','IDRWUser', 'OCLOUD9_osn_APPID','PSCR_PROXY_USER','PUBLIC','app_monitor1','app_monitor', 'em_monitoring2','fa_monitor','faoperator','oamAdminUser','puds.pscr.anonymous.user','weblogic_idm','anonymous'
)
AND pu.suspended = 'N'
AND lower(pu.username) NOT IN (SELECT lower(flv.meaning)
FROM fnd_lookup_values flv
WHERE flv.lookup_type = 'XX_ACTIVE_USER_ACCOUNTS'
AND flv.language = 'US'
AND flv.enabled_flag = 'Y'
)
ORDER BY seq
So, the above query will return only those active user accounts which are attached to a person record and don’t exist in the custom lookup XX_ACTIVE_USER_ACCOUNTS.
**Suspended Flag in PER_USERS table indicate if the user is active (N) or inactive (Y).
Next step is to create a BIP data model and a report and save the output data in excel format. From excel, copy the data in a Notepad and save the file as User.dat.
Sample Output in excel format:
Copy the data except for “DATAROW” and paste it in a Notepad. Save the file as User.dat:
zip the User.dat file and upload it in HCM using Data Exchange -> Import and Load.
Once the load is successful, please run – ‘Send Pending LDAP Requests’ ESS job. This should deactivate all the extracted users.
You can run quick queries on per_users to make sure that the user accounts have been deactivated.
Second approach is to use SCIM REST API to bulk deactivate user accounts. I recommend to use this approach only for those users where no person record is attached to the user account.
Please check below MOS note for details on the step by step instructions on SCIM REST API:
Fusion Security: Using SCIM REST API (Doc ID 2346455.1)
Please note that in order to run this REST API, the user should have – IT Security Manager role.
{
"Operations":[
{
"method":"PATCH",
"path":"/Users/0453A72EE08D419BE0631078680AA831",
"bulkId":"100000001",
"data":{
"schemas":[
"urn:scim:schemas:core:2.0:User"
],
"active":false
}
},
{
"method":"PATCH",
"path":"/Users/0453A72EE08D419BE0631078612AA832",
"bulkId":"100000001",
"data":{
"schemas":[
"urn:scim:schemas:core:2.0:User"
],
"active":false
}
}
]
}
Please note (taken from above Oracle note):
The bulkId attribute value should be set to UNIQUE value, while creating user accounts in BULK. This is required as per IETF SCIM Specifications while creating new resources using POST method. You may use a common value for the bulkId attribute while using PATCH, DELETE, PUT methods in a Bulk operation.
The main challenge with this approach is to get the correct JSON Payload for multiple users from system. I have created a BIP report for this which will generate the output data in required JSON format. Below is the sample code:
SELECT '{
"Operations":['
data_row, 1 seq
FROM DUAL
UNION
SELECT
'{
"method":"PATCH",
"path":"/Users/'
||pu.user_guid||
'",
"bulkId":"1000000000001",
"data":{
"schemas":[
"urn:scim:schemas:core:2.0:User"
],
"active":false
}
},' data_row, 2 seq
FROM per_users pu
WHERE pu.person_id IS NOT NULL
AND pu.created_by NOT IN ('anonymous')
AND pu.username NOT LIKE 'FUSION%APPS%'
AND pu.username NOT IN ('AIACS_AIAPPS_LHR_STAGE_APPID','FAAdmin','FAWService','FAWService_APPID','FIISUSER',
'HCMSI-98f0f163a79a46c58fa4572e41fac8ed_scim_client_APPID','IDROUser','IDRWUser',
'OCLOUD9_osn_APPID','PSCR_PROXY_USER','PUBLIC','app_monitor1','app_monitor',
'em_monitoring2','fa_monitor','faoperator','oamAdminUser','puds.pscr.anonymous.user',
'weblogic_idm','anonymous'
)
AND pu.suspended = 'N'
AND lower(pu.username) NOT IN (SELECT lower(flv.meaning)
FROM fnd_lookup_values flv
WHERE flv.lookup_type = 'XX_ACTIVE_USER_ACCOUNTS'
AND flv.language = 'US'
AND flv.enabled_flag = 'Y'
)
UNION
SELECT '
]
}' data_row, 3 seq
FROM dual
ORDER BY seq
You can create a BIP data model and report to get data from this query. Extract the data in excel format and copy it to a notepad. Then you need to remove the highlighted comma in order for this JSON payload to work.
You can use SOAP UI/Postman to run the REST API and provide the output from Notepad as JSON input. Once the API runs successfully, the suspended flag will get changed to Y in per_users table.
Use below SQL to get benefits relationship name and status for a worker:
SELECT papf.person_number
,paam.assignment_number
,houft.name legal_entity_name
,bbrf.benefit_relation_name
,bbrf.status
,TO_CHAR(bbrf.effective_start_date,'YYYY/MM/DD') effective_start_date
,TO_CHAR(bbrf.effective_end_date,'YYYY/MM/DD') effective_end_date
FROM per_all_people_f papf
,per_all_assignments_m paam
,ben_benefit_relations_f bbrf
,hr_organization_units_f_tl houft
WHERE 1 =1
AND bbrf.person_id = papf.person_id
AND paam.person_id = papf.person_id
AND bbrf.rel_prmry_asg_id = paam.assignment_id
AND bbrf.legal_entity_id = houft.organization_id
AND houft.LANGUAGE = 'US'
AND paam.assignment_type NOT LIKE '%T'
AND paam.effective_latest_change = 'Y'
AND TRUNC(SYSDATE) BETWEEN papf.effective_start_date AND papf.effective_end_date
AND TRUNC(SYSDATE) BETWEEN paam.effective_start_date AND paam.effective_end_date
ORDER BY papf.person_number,paam.assignment_number,bbrf.effective_start_date
In order to load person profile items, a person should have a profile code. There are two ways to create the profile code for a person record.
From UI :- When any business user clicks on Talent Profile for a worker, a profile code is automatically generated in the backend. Profile code is not visible in UI and is always stored in the backend.
Using HDL :- Profile codes can be loaded in bulk using TalentProfile.dat business object of HCM Data Loader (HDL).
It is advisable to load profile codes in bulk as part of data migration using HDL. But there are cases where a user will click on Talent Profile of a worker just after migrating the Core data for the worker. In this case, a profile code is generated in HRT_PROFILES_B table. So, when TalentProfile.dat is used, the profile record will fail for this particular worker.
Below SQL can be used to get list of all active workers who don’t have a talent profile code yet:
select *
from per_all_people_f papf
, per_periods_of_service ppos
where papf.person_id = ppos.person_id
and trunc(sysdate) between papf.effective_start_date and papf.effective_end_date
and ppos.actual_termination_date is NULL
and not exists (select 1 from HRT_PROFILES_B hpb where papf.person_id = hpb.person_id )
All recurring element entires are loaded/ created with an effective end date of 31-Dec-4712. But I have seen scenarios, where the business have requirements to end date an element entry as of a certain date. To achieve this in Bulk, one can use ElementEntry.dat HDL business object.
Let us take an example, where an employee has an element entry with an effective end date of 31-Dec-4712:
The effective end date is set to blank which is equivalent to 31-Dec-4712 in the backend table.
So, let us assume the business has requested to end date this particular element as of 31-Jan-2024 for all employees. To achieve, this we need to pull the existing data from element entries table for this particular element. Below SQL can be used to get the ID values and to verify the results before and after HDL load:
SELECT DISTINCT peevf.element_entry_value_id
,peef.element_entry_id
,petf.base_element_name
,peef.effective_start_date ele_sd
,peef.effective_end_date ele_ed
,peevf.effective_start_date
,peevf.effective_end_date
,paam.assignment_number
FROM per_all_assignments_m paam
,pay_element_types_f petf
,pay_element_entries_f peef
,pay_element_entry_values_f peevf
WHERE 1=1
AND paam.person_id = peef.person_id
AND peef.element_type_id = petf.element_type_id
AND peef.element_entry_id = peevf.element_entry_id
AND paam.ASSIGNMENT_TYPE in ('E')
AND paam.primary_assignment_flag = 'Y'
AND petf.base_element_name = 'Test XYZ Bonus'
AND paam.assignment_number = 'E2121212'
AND trunc(sysdate) between petf.effective_start_date and petf.effective_end_date
AND trunc(sysdate) between paam.effective_start_date and paam.effective_end_date
A normal HDL file with new effective end date will just create a date split in the data. To avoid this a new attribute called ReplaceLastEffectiveEndDate should be added in the HDL file which will updated the effective end date from 31-Dec-4712 to 31-Jan-2024.
METADATA|ElementEntry|AssignmentNumber|ElementName|EffectiveStartDate|EffectiveEndDate|LegislativeDataGroupName|MultipleEntryCount|EntryType|ReplaceLastEffectiveEndDate
MERGE|ElementEntry|E2121212|Test XYZ Bonus|2012/01/31|2024/01/31|GB Legislative Data Group|1|E|Y
Once this HDL is run successfully, the effective end date will get updted.
You use “Manage Address Formats” task from Setup and Maintenance to define the address style for a particular country. Oracle provides a lot of address format for various countries out of the box. You have the capaibility to customize the address formats as per customer requirement.
For example, you can search for all available address style for United Kingdom using country filter:
You can see below details:
You can edit the address format to customize the address style. You can make a seeded attribute mandatory/ non-mandatory or can add a new address element and many more properties can be set:
You can save the changes. And the address format become active.
One of the main challenges, the data migration team and the integration teams face is the mapping of layout fields to actual backend table attribute in per_addresses_f table.
There is no direct way to find the UI attribute name and its corresponding attribute name in backend table. Below query has been developed to find the UI prompt with actual table attribute name:
SELECT ftt.TERRITORY_SHORT_NAME
,hsfl.TERRITORY_CODE
,hsflb.STYLE_FORMAT_CODE
,hsflb.VARIATION_NUMBER
,hsflt.PROMPT
,hsflb.ATTRIBUTE_CODE
,hsflb.LINE_NUMBER
,hsflb.MANDATORY_FLAG
,hsflb.USE_INITIAL_FLAG
,hsflb.UPPERCASE_FLAG
,hsflb.STATUS_FLAG
,hsflb.TRANSFORM_FUNCTION
,hsflb.DELIMITER_BEFORE
,hsflb.DELIMITER_AFTER
,hsflb.BLANK_LINES_BEFORE
,hsflb.BLANK_LINES_AFTER
,hsflb.START_DATE_ACTIVE
,hsflb.END_DATE_ACTIVE
,hsflb.DISPLAY_SIZE
FROM HZ_STYLE_FMT_LAYOUTS_B hsflb
,HZ_STYLE_FMT_LAYOUTS_TL hsflt
,HZ_STYLE_FMT_LOCALES hsfl
,FND_TERRITORIES_TL ftt
WHERE hsflb.STYLE_FORMAT_CODE = hsfl.STYLE_FORMAT_CODE
AND hsflb.STYLE_FMT_LAYOUT_ID = hsflt.STYLE_FMT_LAYOUT_ID
AND ftt.TERRITORY_CODE = hsfl.TERRITORY_CODE
AND ftt.LANGUAGE = 'US'
AND ftt.LANGUAGE = hsflt.LANGUAGE
AND ftt.TERRITORY_CODE = 'MX'
ORDER BY hsflb.STYLE_FORMAT_CODE, hsflb.LINE_NUMBER
There can multiple grades assigned as Valid grade at Position level or Job level. However, there is no direct way to end date the valid grades in bulk.
You can end date a valid grade from responsive UI. But it will be a lot of manual effort. You can search for Position and then navigate to Grades section. Then update the position and click on small delete icon next to Grade name (which you want to end date). This will end date the valid grade with an effective end date = date of position update – 1.
To do this in bulk using HDL, you can’t use DELETE command. If you use DELETE command, it will completely Purge the valid grade record from Position. To end date the valid grade, use “ReplaceLastEffectiveEndDate” attribute in the file.
Below is the sample file:
METADATA|PositionGrade|BusinessUnitName|PositionCode|EffectiveStartDate|EffectiveEndDate|GradeCode|GradeSetCode|ReplaceLastEffectiveEndDate
MERGE|PositionGrade|Progress US Business Unit|PRGUSPOS032|2018/12/31|2023/12/31|Hourly01|PRGUSGRADESET|Y
EffectiveStartDate – Earliest Grade Start Date
EffectiveEndDate – Date on which you want to end date the grade.
Once the file is loaded successfully, below is how the data will look in the backend:
Below SQL query can be used to extract valid grades data:
SELECT DISTINCT
TO_CHAR (pvgf.effective_start_date, 'DD/MON/YYYY') effective_start_date,
TO_CHAR (pvgf.effective_end_date, 'DD/MON/YYYY') effective_end_date,
pjfv.POSITION_CODE,
pjfv.name job_name,
pgfv.grade_code,
pgfv.name grade_name,
pvgf.valid_grade_id,
pgfv.grade_id,
pjfv.job_id
FROM per_valid_grades_f pvgf,
HR_ALL_POSITIONS_F_VL pjfv,
per_grades_f_vl pgfv
WHERE 1=1
AND pvgf.position_id = pjfv.position_id
AND pvgf.grade_id = pgfv.grade_id
AND pjfv.POSITION_CODE = 'PRGUSPOS032'
AND pvgf.effective_start_date BETWEEN pjfv.effective_start_date AND pjfv.effective_end_date
AND pvgf.effective_start_date BETWEEN pgfv.effective_start_date AND pgfv.effective_end_date
ORDER BY POSITION_CODE,grade_code
To bulk upload items catalogs in HCM profiles, you can use ContentItem.dat. Each of the template have certain mandatory attributes like Context Name, Value Set Name or Value Set Id:
S0, before you start preparing the file, you need to have below information handy:
Context Name – This is a mandatory attribute. If you don’t pass the value in your HDL file, you will get below error:
The values 3000122xxxxx aren’t valid for ContentItemValueSetId.
You can get the context name from HRT_CONTENT_TYPES_B table:
2. Content Item Value Set Name/Id: This is again a mandatory attribute. You can get the Content Value Set Name/ Id from HRT_CONTENT_TP_VALUESETS_TL table.
Once you have the details, you can prepare ContentItem.dat.
Below are the sample files for different item catalog templates:
For Establishments:
METADATA|ContentItem|Name|ContextName|ContentItemValueSetName|ContentItemValueSetId|ContentItemCode|DateFrom|DateTo|RatingModelCode|SourceSystemId|SourceSystemOwner
MERGE|ContentItem|Indian Institute of Technology, Bombay|EDUCATIONAL_ESTABLISHMENT|Establishment||IIT_B|1951/01/01|||IIT_B|HRC_SQLLOADER
MERGE|ContentItem|Indian Institute of Management, Ahemdabad|EDUCATIONAL_ESTABLISHMENT|Establishment||IIM_A|1951/01/01|||IIT_B|HRC_SQLLOADER
For Licenses and Certifications:
METADATA|ContentItem|Name|ContextName|ContentItemValueSetName|ContentItemValueSetId|ContentItemCode|DateFrom|DateTo|RatingModelCode|SourceSystemId|SourceSystemOwner
MERGE|ContentItem|Oracle Global Human Resources 2023|CERTIFICATION|Licenses and Certifications||O_GHR_2023|1951/01/01|||O_GHR_2023|HRC_SQLLOADER MERGE|ContentItem|Oracle Benefits 2023|CERTIFICATION|Licenses and Certifications||O_BEN_2023|1951/01/01|||O_BEN_2023|HRC_SQLLOADER
For Degrees:
METADATA|ContentItem|Name|ContextName|ContentItemValueSetName|ContentItemValueSetId|ContentItemCode|DateFrom|DateTo|RatingModelCode|SourceSystemId|SourceSystemOwner
MERGE|ContentItem|PhD|DEGREE|Degrees||XX_PhD|1951/01/01|||CI_XX_PhD|HRC_SQLLOADER
MERGE|ContentItem|Higher National Certificate|DEGREE|Degrees||XX_Higher National Certificate|1951/01/01|||CI_XX_Higher National Certificate|HRC_SQLLOADER
For Competencies:
METADATA|ContentItem|ContextName|ContentItemValueSetName|Name|ContentItemId|ContentItemCode|DateFrom|DateTo|ItemDescription|RatingModelId|RatingModelCode|CountryGeographyCode|CountryCountryCode|SourceSystemId|SourceSystemOwner
MERGE|ContentItem|COMPETENCY|Competencies|Accounting Standards and Principles||XX_ASAP|1951/01/01||To check knowledge on Accounting Standards and Principles.|5|PROFICIENCY|||XX_ASAP|HRC_SQLLOADER
MERGE|ContentItem|COMPETENCY|Competencies|Assessing Talent||XX_AT|1951/01/01||To check knowledge on Assessing Talent.|5|PROFICIENCY|||XX_AT|HRC_SQLLOADER
MERGE|ContentItem|COMPETENCY|Competencies|Assurance and Reporting||XX_AAR|1951/01/01||To check knowledge on Assurance and Reporting.|5|PROFICIENCY|||XX_AAR|HRC_SQLLOADER
Please note that Rating Mode Id is mandatory for loading competencies. You can find the rating model id and rating model code from hrt_rating_models_b table.
Once the data load is successful, you can run below queries to extract loaded data:
In this article, I will talk about affect of using SET PURGE_FUTURE_CHANGES in HCM Data Loader file. HCM use date tracked functionality for most of the objects in HCM, be it work structures, worker or payroll related objects.
I have seen many scenarios, where I had to go in past and make an update on the existing past date without touching the current existing record. There are numerous scenarios like these where HCM technical consultants are expected to make use of HDL to update the past dated records. Oracle has designed PURGE_FUTURE_CHANGES SET command specifically for these scenarios.
But before adding this command in your HDL (.dat) file, it is very important to understand the working of this command, otherwise it may unwantedly purge/ change data which is beyond recovery.
Let us start with an example. Below is existing employment data for a worker with Person Number – 120:
Later on, it has been found that Grade should have been changed Grade 6 from 16-Jun-2022 onwards but there is no data for this in the database currently..
So, in this case a new row with Grade update to Grade 6 should be inserted starting on 16-Jun-2022.
So, the technical consultant has created an an HDL with below format:
As you can see, EffectiveStartDate = 2022/06/16. So, the intention here is to insert a new row starting 2022/06/16.
But unfortuantely, running above HDL will replace all the existing future rows, i.e. the row with effective start date of 2023/01/01 will be purged from database. Below is how the new data will look once the above HDL load is done:
This happens because the default system setting for update mode is set to REPLACE. This can be verified using “Configure HCM Data Loader” task from Setup and Maintenance:
So, in order to preserve the future dated rows, you have to use SET command:
SET PURGE_FUTURE_CHANGES N
METADATA|WorkTerms|AssignmentId|PeriodOfServiceId|EffectiveLatestChange|EffectiveSequence|EffectiveStartDate|EffectiveEndDate|SourceSystemId|SourceSystemOwner|ActionCode
MERGE|WorkTerms|300000066966135|300000066966134|Y|1|2022/06/16|4712/12/31|300000066966135|FUSION|ASG_CHANGE
METADATA|Assignment|AssignmentId|WorkTermsAssignmentId|EffectiveLatestChange|EffectiveSequence|EffectiveStartDate|EffectiveEndDate|SourceSystemId|SourceSystemOwner|ActionCode|GradeCode
MERGE|Assignment|300000066966140|300000066966135|Y|1|2022/06/16|4712/12/31|300000066966140|FUSION|ASG_CHANGE|GRADE6
Executing this will preserve the future dated rows. But it will change the data in future rows as per current row data.
Now if the requirement is to keep the future dated rows and their data intact, you should pass #RETAIN in EffectiveEndDate attribute as shown in below example:
SET PURGE_FUTURE_CHANGES N
METADATA|WorkTerms|AssignmentId|PeriodOfServiceId|EffectiveLatestChange|EffectiveSequence|EffectiveStartDate|EffectiveEndDate|SourceSystemId|SourceSystemOwner|ActionCode
MERGE|WorkTerms|300000066966135|300000066966134|Y|1|2022/06/16|#RETAIN|300000066966135|FUSION|ASG_CHANGE
METADATA|Assignment|AssignmentId|WorkTermsAssignmentId|EffectiveLatestChange|EffectiveSequence|EffectiveStartDate|EffectiveEndDate|SourceSystemId|SourceSystemOwner|ActionCode|GradeCode
MERGE|Assignment|300000066966140|300000066966135|Y|1|2022/06/16|#RETAIN|300000066966140|FUSION|ASG_CHANGE|GRADE6
With #RETAIN value of Asg Attribute 1 is retained on 01-Jan-2023 row.
HCM Data Loader supports bulk uploading for Agents for Oracle recruiting cloud. Currently, there is no HDL support for loading Agencies. And idea is already submitted for same:
For requirements to add List of values to a DFF segments, one can create independent value set or a table based value set. For example, if you want LOV as your existing departments, then you can use a table based value set.
But sometimes, you need to display one hard coded value “All” along with list of departments. This is in order to specify that all departments are applicable for a DFF segement value.
In, this case you need to use UNION.
Below is how the query will look like:
SELECT substr(pd.name,1,125) dep_name
FROM per_departments pd
UNION
SELECT 'All Departments' dep_name
FROM DUAL
Value Set setup:
From Clause:
(SELECT substr(pd.name,1,125) dep_name FROM per_departments pd UNION SELECT ‘All Departments’ dep_name FROM DUAL) a
Once a worker record is terminated, it is expected that the associated user account will get inactive. However, it depends upon the configuration on Enterprise Level and auto provisioning rules setup. If there is even on role assigned to user name, the user account will not get terminated in HCM.
To help the business to get a list of active user accounts even if the associated worker record is terminated, below query is created:
SELECT DISTINCT papf.person_number
,ppos.actual_termination_date
FROM PER_ALL_PEOPLE_F papf
,PER_PERIODS_OF_SERVICE ppos
,PER_USERS pu
,PER_USER_ROLES pur
WHERE papf.person_id = ppos.person_id
AND TRUNC(SYSDATE) BETWEEN papf.effective_start_date AND papf.effective_end_date
AND papf.person_id = pu.person_id
AND pu.user_id = pur.user_id
AND ppos.actual_termination_date IS NOT NULL
AND ppos.actual_termination_date < TRUNC(SYSDATE) /*Check only for past dated terminations*/
AND NOT EXISTS (SELECT 1 FROM PER_PERIODS_OF_SERVICE ppos2
WHERE ppos2.person_id = ppos.person_id
AND ppos2.actual_termination_date IS NULL)
ORDER BY 1,2
There are scenarios when we want to delete a future dated row from an object. Please note that for objects like Positions/Locations etc which are date tracked, one can make use of HDL with SET command to delete the future dated row.
Let us take an example, where we have below data on Position:
Position Name – Test Position
Effective Start Date – 01- Jan-2023 – Record creation
Effective Start Date – 01-Oct-2023 – Record updated (let us say Standard working hours).
Now the requirement is to delete the row with effective start date – 01-Oct-2023.
In such cases, below HDL can be used:
SET PURGE_FUTURE_CHANGES Y
METADATA|Position|BusinessUnitName|PositionCode|EffectiveStartDate|EffectiveEndDate
MERGE|Position|BU Name|Pos Code|2023/01/01|4712/12/31
Any locations for which the value of the field will be selected as “Yes”, will be only available to be used in Manage Employment screen. This is a great feature to segregate locations which can be used on employee assignments vs locations which are used as training centers/ supplier locations etc.
By default, this field is hidden on Location Details quick action.
One needs to enable a sandbox and then from transaction design studio, make it visible.
From Quick actions under My Client Groups, choose Location Details:
If you still don’t see the attribute, create a new sandbox, add Experience Design Tool in it:
Choose Location Details as Action:
Click on Add,
under Page attributes, you see Employee Location is hidden OOTB:
P.S. – Please note this field can’t be used in classic locations page. Also, the default value is set to No.
In HCM, you can define approval rules for different HCM tasks from Tools -> Transaction Console -> Approval Rules
For example, you want to define an approval rule for Promote action. You can search Promo% in Find box and it will give you all matching approval rules:
You can then click on ‘Configure Rules’ to define the rules.
However, Transaction console has many limitations. You can’t define complex approval rules. You can’t make use of functions etc (Day between) in transaction console. In order to define more complex rules, you need to do it from BPM.
First step is that you need to search for a task from “Task Configuration”:
The issue here is sometimes the Approval Rule names in Transaction Console doesn’t match with Task names in BPM.
In such case, you can make sure of below Query:
SELECT HAPT.NAME "Approval Rule Name"
,HAPT.DESCRIPTION
,HRPB.TASK_FILE_NAME TaskName
,HRPB.TXN_MODULE_IDENTIFIER
,HAPT.CATEGORY_NAME
,HRPB.CATEGORY_CODE
,HAPT.SUBCATEGORY_NAME
,HRPB.SUBCATEGORY_CODE
,HRPB.FAMILY
,DECODE(HAAO.APPROVAL_DISABLED,'true','Bypassed','false','Enabled') "Enabled Status"
FROM FUSION.HRC_ARM_PROCESS_B HRPB
,FUSION.HRC_ARM_PROCESS_TL HAPT
,FUSION.HRC_ARM_APPROVAL_OPTIONS HAAO
WHERE HRPB.PROCESS_ID=HAAO.PROCESS_ID
AND HRPB.PROCESS_ID=HAPT.PROCESS_ID
AND HAPT.LANGUAGE = 'US'
AND HRPB.FAMILY = 'HCM'
ORDER BY 1
Oracle HCM provides a functionality to store different kinds of worker documents in Document Records. Over a period of time, a large number of documents get accumulated for different workers. In such cases, there are requirements to know size of attachments in DORs. For, this I have developed a simple query which can be modified as needed:
select fdv.file_name
,fdv.title
,dm_document_id
,TRUNC(SUM(wcc_documents.dFileSize)/1024,2) as "Size in KB"
,TRUNC(SUM(wcc_documents.dFileSize)/1024/1024,2) as "Size in MB"
,TRUNC(SUM(wcc_documents.dFileSize)/1024/1024/1024,2) as "Size in GB"
from hr_documents_of_record hdr,
fnd_attached_documents fad,
fnd_documents_vl fdv,
fusion_ocserver11g.revisions wcc_revisions,
fusion_ocserver11g.documents wcc_documents
where to_char(hdr.documents_of_record_id) = fad.pk1_value(+)
and fad.entity_name(+) = 'HR_DOCUMENTS_OF_RECORD'
and fad.document_id = fdv.document_id(+)
and fdv.dm_version_number = wcc_revisions.did
and wcc_revisions.did = wcc_documents.did
and wcc_documents.disprimary = 1
group by fdv.file_name
,fdv.title
,dm_document_id
order by 1