Monday, 1 November 2021
Process to be run to enable DFF fields for BI Reporting
Thursday, 7 October 2021
When is Absence Plan required
An absence plan is required if you need the absence to be integrated to payroll, there are some adjustments, or it needs to be sent across to third party.
An absence plan is not required if absence type just needs an approval from Manager and there is no further processing of the absence anywhere in the system.
Tuesday, 28 September 2021
Sample HDL for Assignment Data Load
MERGE|WorkTerms|ET5087851|ASG_CHANGE|DATAMIGRATION|2021/10/01|4712/12/31|Y|2|300000619781821
METADATA|Assignment|AssignmentNumber|ActionCode|ReasonCode|WorkTermsAssignmentId|EffectiveStartDate|EffectiveEndDate|EffectiveLatestChange|EffectiveSequence|PeriodOfServiceId|FLEX:PER_ASG_DF|pensionPlanCode(PER_ASG_DF=CA)|payrollDivision(PER_ASG_DF=CA)
MERGE|Assignment|E5087851|ASG_CHANGE|DATAMIGRATION|300000619847597|2021/10/01|4712/12/31|Y|2|300000619781821|CA|08|REG
SELECT
PAPF.PERSON_NUMBER,PAAF.assignment_type,
paaf.effective_start_date,
'MERGE' METADATA,
'WorkTerms' WorkTerms,
PAAF.assignment_number,
'ASG_CHANGE' ActionCode,
'DATAMIGRATION' ReasonCode,
'2021/10/01' EffectiveStartDate,
'4712/12/31' EffectiveEndDate,
'Y' EffectiveLatestChange,
decode(paaf.effective_start_date,to_date('10/01/2021','mm/dd/rrrr'),PAAF.EFFECTIVE_SEQUENCE+1,1) EffectiveSequence,
PAAF.PERIOD_OF_SERVICE_ID PeriodOfServiceId
FROM per_all_people_f PAPF
, per_person_names_f PPNF
, per_all_assignments_f PAAF
, PER_PERIODS_OF_SERVICE PPOS_MAIN
WHERE PAPF.person_id = PPNF.person_id
AND to_date('10/01/2021','mm/dd/rrrr') BETWEEN PAPF.effective_start_date AND PAPF.effective_end_date
AND to_date('10/01/2021','mm/dd/rrrr') BETWEEN PPNF.effective_start_date AND PPNF.effective_end_date
AND to_date('10/01/2021','mm/dd/rrrr') BETWEEN PAAF.effective_start_date AND PAAF.effective_end_date
AND PPNF.name_type = 'GLOBAL'
AND PPOS_MAIN.date_start = (SELECT max(date_start) FROM PER_PERIODS_OF_SERVICE PPOS WHERE PPOS.person_id = PAPF.person_id)
AND PPOS_MAIN.person_id = PAPF.person_id
AND PAAF.person_id = PAPF.person_id
AND PAAF.assignment_type ='ET'--IN ('E','C','P','N')
AND PPOS_MAIN.period_of_service_id = PAAF.period_of_service_id
and paaf.legislation_code='CA'
AND PAPF.person_number IN ('5087851')
ORDER BY to_number( PAPF.person_number )
Thursday, 9 September 2021
Triggering HCM Extract Using OIC
Thursday, 26 August 2021
HCM Data Loader Transformation formula
Query to Fetch Business Unit in Cloud
paam.person_id
from hr_org_unit_classifications_f houcf
, hr_all_organization_units haou
,per_all_assignments_m paam
,per_periods_of_service ppos
where
1=1
and houcf.organization_id = haou.organization_id
and paam.organization_id= haou.organization_id
and PPOS.PERIOD_OF_SERVICE_ID= PAAM.PERIOD_OF_SERVICE_ID
and houcf.classification_code= 'DEPARTMENT'
and houcf.status = 'A'
AND paam.assignment_type IN ('E','C')
AND paam.effective_latest_change = 'Y'
and paam.assignment_status_type IN ('ACTIVE','SUSPENDED')
and ppos.ACTUAL_TERMINATION_DATE is null
and :EFFECTIVE_DATE BETWEEN Paam.EFFECTIVE_START_DATE AND Paam.EFFECTIVE_END_DATE
and :EFFECTIVE_DATE BETWEEN haou.EFFECTIVE_START_DATE AND haou.EFFECTIVE_END_DATE
and :EFFECTIVE_DATE BETWEEN houcf.EFFECTIVE_START_DATE AND houcf.EFFECTIVE_END_DATE
Tuesday, 17 August 2021
Font Mapping in BI Publisher
We were facing an issue where a particular font(Kunstler Regular) which was added in the RTF template. Though the font was visible in the RTF template, it was not visible in the final PDF report generated. To resolve this issue, the below steps need to be done.
- Pull out the font's .TTF file from C:/Windows/Fonts into a separate folder. If the font family has multiple fonts, then many files will be copied into your destination folder. In my case it was just font(KUNSTLER.ttf file)
- In BIP navigate to Administration-Manage BI Publisher-Font Mappings
- Choose the above file under Manage Custom Fonts and click on upload
- Then under RTF templates click on Add Font Mapping
- Give Base Font as the name of the font, it should be same as the name which is visible in MS word(else it didn't work for me)
- Select target font, which will the above uploaded file name and click on Apply
- Once this is done, in BIP navigate to Administration-Manage BI Publisher-Manage Cache and click on Clear Object Cache.
Tuesday, 22 June 2021
Sample Formula to calculate absence duration in Oracle Cloud HCM
DEFAULT FOR IV_END_DATE IS '4712/12/31 00:00:00' (date)
DEFAULT FOR IV_START_TIME IS '00:00'
DEFAULT FOR IV_END_TIME IS '23:59'
DEFAULT FOR IV_START_DURATION IS 1
DEFAULT FOR IV_END_DURATION IS 1
DEFAULT FOR PER_ASG_FTE_VALUE IS 1
DEFAULT FOR PER_ASG_EMPLOYMENT_CATEGORY IS 'UNKNOWN'
INPUTS ARE IV_START_DATE (date), IV_END_DATE (date), IV_START_TIME(text),IV_END_TIME(text), IV_START_DURATION(number), IV_END_DURATION(number)
ln_duration = 0
ln_unrounded_duration_d = 0
lc_asg_resource_type = 'ASSIGN'
ld_period_start_date = to_date(to_char(IV_START_DATE,'DD/MM/RRRR')||' '||IV_START_TIME,'DD/MM/RRRR HH24:MI:SS')
ld_period_end_date = to_date(to_char(IV_END_DATE,'DD/MM/RRRR')||' '||IV_END_TIME,'DD/MM/RRRR HH24:MI:SS')
lc_use_sch_asg_y = 'Y'
lc_use_sch_inh_y = 'Y'
lc_include_noshift_y = 'Y'
lc_include_calevents_y = 'Y'
lc_calc_units_d = 'D'
/* Retrieve the absence duration based on the work schedule */
ln_unrounded_duration_d = GET_PAY_AVAILABILITY (lc_asg_resource_type,
ld_period_start_date,
ld_period_end_date,
lc_use_sch_asg_y,
lc_use_sch_inh_y,
lc_include_noshift_y,
lc_include_calevents_y,
lc_calc_units_d)
/* test if (vertical) Part time apply the FTE */
IF PER_ASG_EMPLOYMENT_CATEGORY ='FR_20' THEN
ln_duration = ln_unrounded_duration_d * (1/PER_ASG_FTE_VALUE)
ELSE ln_duration = ln_unrounded_duration_d
/*duration = ROUND(ln_duration,2)*/
duration = ln_duration
RETURN duration
Friday, 18 June 2021
Getting Sysdate in a particular Date format in OIC
Sysdate can be got in a particular Date format using the below code in OIC.
string( xp20:format-dateTime( string ( fn:current-dateTime() ) ,'[Y0001]-[M01]-[D01][H01]:[m01]:[s01] ' ) )
Reading a lookup value in OIC
The below code can be used to read lookup value in OIC.
dvm:lookupValue('oramds:/apps/ICS/DVM/Test1.dvm','Column1','Path','Column2','Default Value for Column2')
dvm:lookupValue('oramds:/apps/ICS/DVM/Test1.dvm','Column1','Size','Column2','Default Value for Column2')
Wednesday, 9 June 2021
Sample Fast Formula - Eligibility Profile Fast Formula based on US LDG
********************************************************************************************
* NAME : US Legislation
* TYPE : Participation and Rate Eligiblity
* Requirement: Formula to get the eligible employees for US
********************************************************************************************
------------------------------------------------------------------------------------------------------------------------*/
DEFAULT FOR PER_ASG_LEGISLATION_CODE IS 'ABC'
ELIGIBLE = 'N'
IF (PER_ASG_LEGISLATION_CODE = 'US') THEN
(
ELIGIBLE = 'Y'
)
RETURN ELIGIBLE
Thursday, 27 May 2021
Customizing HCM seeded notifications
If you want to change a notification format in Cloud Oracle HCM, go to the BIP path using the admin login(use xmlpserver in URL), Shared folders/Human Capital Management/ Workflow Notifications and click customize, so that the copy gets created in Shared folders/Custom/Human Capital Management/ Workflow Notifications. But before doing this, there doesnt exist a copy of the report being customized.
/Shared folders/Human Capital Management/ Workflow Notifications
Wednesday, 26 May 2021
OIC iCal scheduling syntax
source: rfc5545 (ietf.org)
recur = recur-rule-part *( ";" recur-rule-part )
;
; The rule parts are not ordered in any
; particular sequence.
;
; The FREQ rule part is REQUIRED,
; but MUST NOT occur more than once.
;
; The UNTIL or COUNT rule parts are OPTIONAL,
; but they MUST NOT occur in the same 'recur'.
;
Desruisseaux Standards Track [Page 38]
RFC 5545 iCalendar September 2009 ; The other rule parts are OPTIONAL, ; but MUST NOT occur more than once. recur-rule-part = ( "FREQ" "=" freq ) / ( "UNTIL" "=" enddate ) / ( "COUNT" "=" 1*DIGIT ) / ( "INTERVAL" "=" 1*DIGIT ) / ( "BYSECOND" "=" byseclist ) / ( "BYMINUTE" "=" byminlist ) / ( "BYHOUR" "=" byhrlist ) / ( "BYDAY" "=" bywdaylist ) / ( "BYMONTHDAY" "=" bymodaylist ) / ( "BYYEARDAY" "=" byyrdaylist ) / ( "BYWEEKNO" "=" bywknolist ) / ( "BYMONTH" "=" bymolist ) / ( "BYSETPOS" "=" bysplist ) / ( "WKST" "=" weekday ) freq = "SECONDLY" / "MINUTELY" / "HOURLY" / "DAILY" / "WEEKLY" / "MONTHLY" / "YEARLY" enddate = date / date-time byseclist = ( seconds *("," seconds) ) seconds = 1*2DIGIT ;0 to 60 byminlist = ( minutes *("," minutes) ) minutes = 1*2DIGIT ;0 to 59 byhrlist = ( hour *("," hour) ) hour = 1*2DIGIT ;0 to 23 bywdaylist = ( weekdaynum *("," weekdaynum) ) weekdaynum = [[plus / minus] ordwk] weekday plus = "+" minus = "-" ordwk = 1*2DIGIT ;1 to 53 weekday = "SU" / "MO" / "TU" / "WE" / "TH" / "FR" / "SA" ;Corresponding to SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, ;FRIDAY, and SATURDAY days of the week. Desruisseaux Standards Track [Page 39]
RFC 5545 iCalendar September 2009
bymodaylist = ( monthdaynum *("," monthdaynum) )
monthdaynum = [plus / minus] ordmoday
ordmoday = 1*2DIGIT ;1 to 31
byyrdaylist = ( yeardaynum *("," yeardaynum) )
yeardaynum = [plus / minus] ordyrday
ordyrday = 1*3DIGIT ;1 to 366
bywknolist = ( weeknum *("," weeknum) )
weeknum = [plus / minus] ordwk
bymolist = ( monthnum *("," monthnum) )
monthnum = 1*2DIGIT ;1 to 12
bysplist = ( setposday *("," setposday) )
setposday = yeardaynum
FREQ=MONTHLY;BYMONTH=1,3,5,7,8,10,12;BYMONTHDAY=15,31;
&FREQ=MONTHLY;BYMONTH=4,6,9,11;BYMONTHDAY=15,30;
&FREQ=MONTHLY;BYMONTH=2;BYMONTHDAY=15,28,29;
OIC iCal scheduling example
Schedule an integration from sunday to thursday 8 AM to 8PM for every 30 minutes
Use iCal expression as below.
FREQ=WEEKLY;BYDAY=SU,MO,TU,WE,TH;BYHOUR=8,9,10,11,12,13,14,15,16,17,18,19,20;BYMINUTE=0,30;
Wednesday, 19 May 2021
Query to get contexts for a DBI
(select CONTEXT_ID from FF_CONTEXTS_B where CONTEXT_ID in
(select CONTEXT_ID from ff_route_context_usages where route_id in
(select route_id from ff_user_entities_b where user_entity_id in
(select user_entity_id from ff_database_items_b where base_user_name like 'ANC_ABS_ENTRS_ATTRIBUTE1')
)
)
)
Tuesday, 11 May 2021
EBS Bank accounts query
ppr.payroll_relationship_id payrollrelationshipid,
ppr.person_id personid,
h.party_id partyid,
eba.bank_account_id bankaccountid,
eba.bank_account_num bankaccountnumber,
eba.bank_id bankid,
eba.bank_name bankname,
eba.bank_number banknumber,
eba.branch_number branchnumber,
eba.branch_id branchid,
eba.bank_branch_name branchname,
eba.eft_swift_code eftswiftcode,
eba.bank_home_country homecountry,
eba.bank_account_type bankaccounttype
FROM
pay_bank_accounts eba,
iby_account_owners ebao,
hz_parties h,
pay_pay_relationships_dn ppr,
per_persons p,
hz_orig_sys_references hosp
WHERE
eba.bank_account_id = ebao.ext_bank_account_id
AND ebao.account_owner_party_id = h.party_id
AND hosp.owner_table_id = h.party_id
AND hosp.orig_system_reference = TO_CHAR(ppr.person_id)
AND hosp.owner_table_name = 'HZ_PARTIES'
AND hosp.orig_system = 'FUSION_HCM'
AND ppr.person_id = p.person_id
AND h.status = 'A'
--and eba.bank_account_id= fill_value
and ppr.payroll_relationship_number='123'
EBS Run Results Query
papf.full_name,
ppa.effective_date,
pp.payroll_name,
pet.element_name,
piv.name input_value,
prrv.result_value
FROM pay_payroll_actions ppa,
pay_assignment_actions paa,
pay_payrolls_f pp,
pay_run_results prr,
pay_run_result_values prrv,
pay_input_values_f piv,
pay_element_types_f pet,
per_all_assignments_f paaf,
per_all_people_f papf
WHERE 1=1 and ppa.payroll_action_id = :payroll_action_id
AND ppa.payroll_action_id = paa.payroll_action_id
AND ppa.payroll_id = pp.payroll_id
AND paa.assignment_action_id = prr.assignment_action_id
AND prr.run_result_id= prrv.run_result_id
AND prrv.input_value_id = piv.input_value_id
AND piv.element_type_id = pet.element_type_id
AND paaf.assignment_id = paa.assignment_id
AND paaf.person_id = papf.person_id
and paaf.business_group_id=3444
and pet.element_name='Regular Salary'
AND trunc(sysdate) BETWEEN pp.effective_start_date AND pp.effective_end_date
AND trunc(sysdate) BETWEEN pet.effective_start_date AND pet.effective_end_date
AND trunc(sysdate) BETWEEN piv.effective_start_date AND piv.effective_end_date
AND trunc(sysdate) BETWEEN paaf.effective_start_date AND paaf.effective_end_date
AND trunc(sysdate) BETWEEN papf.effective_start_date AND papf.effective_end_date
--and ppa.effective_date=trunc(sysdate-11)
and piv.name='Pay Value'
ORDER BY employee_number;
Friday, 7 May 2021
Personal Payment Method and Bank account details Query in EBS
papf.employee_number,
acc.segment1,
acc.segment2,
acc.segment3,
acc.segment4,
acc.segment5,
pppmf.last_update_date
FROM
pay_personal_payment_methods_f pppmf,
per_all_assignments_f paaf,
per_all_people_f papf,
pay_external_accounts acc
WHERE
1 = 1
AND pppmf.assignment_id = paaf.assignment_id
AND paaf.person_id = papf.person_id
AND acc.external_account_id = pppmf.external_account_id
AND paaf.assignment_type = 'E'
AND paaf.primary_flag = 'Y'
AND paaf.business_group_id = 3444
AND trunc(sysdate) BETWEEN paaf.effective_start_date AND paaf.effective_end_date
AND trunc(sysdate) BETWEEN pppmf.effective_start_date AND pppmf.effective_end_date
AND trunc(sysdate) BETWEEN papf.effective_start_date AND papf.effective_end_date
AND papf.employee_number IN ( '')
Tuesday, 4 May 2021
Query to fetch Absence Plan Accrual balance
papf.person_number,
aapft.name,
(
SELECT
a.end_bal
FROM
anc_per_accrual_entries a,
anc_per_plan_enrollment b
WHERE
a.per_plan_enrt_id = b.per_plan_enrt_id
AND a.accrual_period = b.last_accrual_run
AND b.work_term_asg_id = paaf.work_terms_assignment_id
AND b.plan_id = appe.plan_id
AND b.person_id = paaf.person_id
AND trunc(sysdate) BETWEEN b.enrt_st_dt AND b.enrt_end_dt
) accrual_balance
FROM
per_all_assignments_m paaf,
per_all_people_f papf,
anc_per_plan_enrollment appe,
anc_absence_plans_f_tl aapft
WHERE
paaf.person_id = papf.person_id
AND appe.person_id = papf.person_id
AND aapft.absence_plan_id = appe.plan_id
AND aapft.language = 'US'
AND aapft.name = 'Holiday - Days'
AND trunc(sysdate) BETWEEN paaf.effective_start_date AND paaf.effective_end_date
AND trunc(sysdate) BETWEEN paaf.effective_start_date AND paaf.effective_end_date
AND trunc(sysdate) BETWEEN aapft.effective_start_date AND aapft.effective_end_date
AND papf.person_number = '11111'
AND paaf.primary_flag = 'Y'
AND paaf.assignment_type = 'E'
Friday, 30 April 2021
Tuesday, 27 April 2021
Retry Payroll Example
Let us say, we have run the payroll and later make some changes to an employee and retry the payroll. The process is as follows.
First Mark the process for retry.
Then run the process Retry Payroll or Retroactive Calculation
Select the correct process name and Submit it.
Once this process is complete the process which was marked for Retry earlier will now show it is completed.
Monday, 5 April 2021
HDL to delete payroll relationship number from Payroll Relationship type Object Group
File Name: ObjectGroupAmend.dat
METADATA|ObjectGroupAmend|LegislativeDataGroupName|ObjectCode|ObjectGroupCode|ObjectGroupLevelName
DELETE|ObjectGroupAmend|US Legislative Data Group|12345|Test_PRO_Group|Payroll Relationship
Friday, 2 April 2021
Padding Negative numbers in SQL and Etext Templates
I had a requirement to display a negative number left padded with 0's in etext template. This is how you do it.
FORMAT_NUMBER(-25,'00000000') will give -00002500
In SQL this can be achieved using to_char('-25','000000000')
Wednesday, 24 March 2021
Sample HDL for Closing Payroll
METADATA|AssignedPayroll|AssignmentNumber|LegislativeDataGroupName|PayrollDefinitionCode|StartDate|CloseDate|EffectiveStartDate|EffectiveEndDate
MERGE|AssignedPayroll|E1001|US Legislative Data Group|Semi Monthly|2021/01/05|2021/03/31 00:00:00|2021/01/05|2021/03/31
MERGE|AssignedPayroll|E1002|US Legislative Data Group|Semi Monthly|2021/01/05|2021/03/31 00:00:00|2021/01/05|
Close Date should be passed in the format - yyyy/mm/dd hh24:mi:ss. Otherwise error will be thrown.
Effective End Date if left blank also works the same way in above case as I did for the second employee above.
Tuesday, 16 March 2021
Query to fetch Payroll Relationship and Person Numbers from Object Group
Query to fetch Payroll Relationship and Person Numbers from Object Group which are added as static.
papf.person_number,ppnf.full_name,pprd.PAYROLL_RELATIONSHIP_NUMBER,poga.*
from
per_all_people_f papf,
per_person_names_f ppnf,
pay_payroll_assignments ppasg,
pay_pay_relationships_dn pprd,
pay_object_group_amends poga,
pay_object_groups pog
where 1=1
and papf.person_id = paaf.person_id
and papf.person_id = ppnf.person_id
and paaf.assignment_id = ppasg.hr_assignment_id
--and paaf.person_id = ppasg.person_id
and ppasg.payroll_relationship_id = pprd.payroll_relationship_id
and pog.OBJECT_GROUP_ID=poga.OBJECT_GROUP_ID
and poga.object_id=pprd.payroll_relationship_id
and paaf.PRIMARY_FLAG ='Y'
--and paaf.ASSIGNMENT_TYPE = 'E'
and trunc(sysdate) between papf.effective_start_date and papf.effective_end_date
and trunc(sysdate) between ppnf.effective_start_date and ppnf.effective_end_date
and trunc(sysdate) between paaf.effective_start_date and paaf.effective_end_date
and trunc(sysdate) between ppasg.start_date and ppasg.end_date
and ppnf.name_type='GLOBAL'
and base_object_group_name like 'Object_Group_Name'
Thursday, 4 February 2021
Query to check USER level Profile Option Value in Oracle Cloud HCM
I needed a query to fetch the profile option values at USER level for Language Preference set by the employee. So here is what I had written, let me know if any change is required.
fnd.language_code
FROM
fnd_profile_options_b b,
fnd_profile_option_values v,
per_users per,
fnd_languages_vl fnd
WHERE
v.level_value = per.user_guid
AND b.profile_option_id = v.profile_option_id
AND per.person_id IS NOT NULL
AND b.profile_option_name = 'FND_LANGUAGE'
AND v.level_name = 'USER'
AND v.profile_option_value = fnd.language_tag
AND fnd.activation_status = 'ACTIVE'
AND per.person_id = (select distinct person_id from per_all_people_f where person_number='123456')