Create new HCMWorker (Worker)

Example of an x++ method for creating new Worker in AX2012 based on parameters as first name, last name, start date and we need preconfigured default position for hiring a new worker. This piece of code also updates existing worker.
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;
}

Support The Author

 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 Coffee

Post a Comment


All Comments


No comments. Be the first one to comment on this post.

Search

About

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.

Blog Tags