protected void createWorker(){
DirPersonName dirPersonName;
DirPerson dirPerson;
HcmWorker newHcmWorker;
CompanyInfo companyInfo;
HcmPosition hcmPosition;
HcmPositionDuration hcmPositionDuration;
HcmPositionDetail hcmPositionDetail,
fromHcmPositionDetail;
FirstName firstName;
LastName lastName;
ValidFromDateTime startDate;
ValidToDateTime endDate;
HcmPersonnelNumberId workerId;
workerId = 'Worker-01';
firstName = 'Worker First name';
firstName = 'Worker Last name';
startDate = DateTimeUtil::utcNow();
endDate = DateTimeUtil::applyTimeZoneOffset(DateTimeUtil::maxValue(), DateTimeUtil::getUserPreferredTimeZone());
ttsBegin;
dirPersonName.FirstName = firstName;
dirPersonName.LastName = lastName;
companyInfo = CompanyInfo::find();
newHcmWorker = HcmWorker::findByPersonnelNumber(workerId, true);
//Hire new Worker if Worker not found
if(!newHcmWorker)
{
fromHcmPositionDetail = HcmPositionDetail::findByPosition(11111111);// default position details to creating a new worker
// Create a position with position details and duration
hcmPosition.clear();
hcmPosition.initValue();
hcmPosition.PositionId = NumberSeq::newGetNum(NumberSeqReference::findReference(extendedTypeNum(HcmPositionId)), true).num();
hcmPosition.insert();
buf2Buf(fromHcmPositionDetail, hcmPositionDetail);
hcmPositionDetail.Position = hcmPosition.RecId;
hcmPositionDetail.ValidFrom = startDate;
hcmPositionDetail.ValidTo = DateTimeUtil::maxValue();
hcmPositionDetail.insert();
hcmPositionDuration.initValue();
hcmPositionDuration.Position = hcmPosition.RecId;
hcmPositionDuration.ValidFrom = startDate;
hcmPositionDuration.ValidTo = DateTimeUtil::maxValue();
hcmPositionDuration.insert();
newHcmWorker = HcmWorker::find(HcmWorkerTransition::newHireHcmWorker( dirPersonName,
workerId,
hcmPosition.RecId,
startDate,
endDate,
startDate,
endDate,
companyInfo.RecId,
HcmEmploymentType::Employee));
}
// Updating an existing worker
else
{
// Updating an existing worker DirPersonName
if (newHcmWorker)
{
dirPersonName = DirPersonName::find(newHcmWorker.Person);
if(dirPersonName.FirstName != firstName || dirPersonName.LastName != lastName)
{
dirPersonName.clear();
dirPersonName.FirstName = firstName;
dirPersonName.LastName = lastName;
dirPerson.initValue();
dirPerson.updateName(dirPersonName);
if (dirPerson.validateWrite())
{
dirPerson.insert();
dirPersonName.Person = dirPerson.RecId;
dirPersonName.ValidFrom = DateTimeUtil::minValue();
dirPersonName.ValidTo = DateTimeUtil::maxValue();
if (dirPersonName.validateWrite())
{
dirPersonName.insert();
}
}
newHcmWorker.Person = dirPerson.RecId;
if (newHcmWorker.validateWrite())
{
newHcmWorker.update();
}
}
//Update worker assignment
HcmWorkerTransition::newUpdateHcmEmployment(
HcmEmployment::findByWorkerLegalEntity(newHcmWorker.RecId, companyInfo.RecId),
startDate,
endDate);
}
}
ttsCommit;
}
If you found value in what I share, I've set up a Buy Me a Coffee page as a way to show your support.
Buy Me a CoffeeNo comments. Be the first one to comment on this post.
DaxOnline.org is free platform that allows you to quickly store and reuse snippets, notes, articles related to Dynamics 365 FO.
Authors are allowed to set their own "buy me a coffee" link.
Join us.