Skip to main content

Notifications

Finance | Project Operations, Human Resources, ...
Unanswered

HcmWorkerRecId handling

Posted on by 254
Hi,

When creating project quotation, there is a field that we can fill called WorkerSalesTaker. This field accepts workers that have a valid employment date.

So what I did, is first i looked for users email who have a person (to make sure email is unique)
Then i looked for workers in general even if they don't have a user, because project quotation allow adding a worker that doesn't have an email (i know that the system allows more than worker to have the same email, but there is nothing more to do, that's why I checked the user's person at first)

How can I simplify this or is what i did good?
    private void setWorkerSalesResponsible(LogisticsElectronicAddressLocator _email, SalesQuotationTable _salesQuotationTable)    {        HcmWorker                   hcmWorker;        LogisticsElectronicAddress  logisticsElectronicAddress;        Logisticslocation           logisticslocation;        DirPartyLocation            dirPartyLocation;        DirPerson                   dirPerson;        DirPersonUser               dirPersonUser;        userInfo                    userInfo;        select userInfo where userInfo.networkAlias == _email            join RecId from dirPersonUser where dirPersonUser.User == userInfo.id            join RecId from hcmWorker where hcmWorker.Person == dirPersonUser.PersonParty;        if(userInfo)        {            _salesQuotationTable.WorkerSalesResponsible = hcmWorker.RecId;        }        else        {            select firstonly RecId from logisticsElectronicAddress                where logisticsElectronicAddress.Locator == _email                    && logisticsElectronicAddress.Type == LogisticsElectronicAddressMethodType::Email                join RecId from logisticslocation where logisticslocation.RecId == logisticsElectronicAddress.Location                join RecId from dirPartyLocation where dirPartyLocation.Location == logisticslocation.RecId                join RecId from dirPerson where dirPerson.RecId == dirPartyLocation.Party                join RecId from hcmWorker where hcmworker.Person == dirPerson.RecId;                if(hcmWorker)                {                    _salesQuotationTable.WorkerSalesResponsible = hcmWorker.RecId;                }        }    }

Also DirPersonUserEntity has this where condition but I don't know from where it came as there are no ranges in the entity. And not sure if i should handle this in my above code

 
  • Suggested answer
    Waed Ayyad Profile Picture
    Waed Ayyad 5,955 Super User 2024 Season 2 on at
    HcmWorkerRecId handling
    Hi 
     
    Is your issue resolved?
     
    Thanks,
    Waed Ayyad
    Please mark this answer as "Verified" if it solved your issue. In order to help others who will face a similar issue in the future
     
  • Suggested answer
    Waed Ayyad Profile Picture
    Waed Ayyad 5,955 Super User 2024 Season 2 on at
    HcmWorkerRecId handling
    Hi,
     
    In order to get "workers that have a valid employment date." you should add HcmEmployment table to your query, 
     
    Select validTimestate(systemDateGet()) worker from hcmEmplyment
     join hcmWorker 
       where hcmEmplyment.Worker == hcmWorker.RecId
     join dirPersonUser
        where hcmWorker.Person == dirPersonUser.PersonParty
    join userInfo
        where  dirPersonUser.User == userInfo.id
         &&    userInfo.networkAlias == _email
     
    Give it a try and tell me the result.
     
    Thanks,
    Waed Ayyad
    Please mark this answer as "Verified" if it solved your issue. In order to help others who will face a similar issue in the future
     
     
  • Waed Ayyad Profile Picture
    Waed Ayyad 5,955 Super User 2024 Season 2 on at
    HcmWorkerRecId handling
    private void setWorkerSalesResponsible(LogisticsElectronicAddressLocator _email, SalesQuotationTable _salesQuotationTable) {
      HcmWorker hcmWorker;
      LogisticsElectronicAddress logisticsElectronicAddress;
      Logisticslocation logisticslocation;
      DirPartyLocation dirPartyLocation;
      DirPerson dirPerson;
      DirPersonUser dirPersonUser;
      userInfo userInfo;
    
      select userInfo where userInfo.networkAlias == _email
      join
      RecId from dirPersonUser where
      dirPersonUser.User == userInfo.id
      join
      RecId from hcmWorker where hcmWorker.Person == dirPersonUser.PersonParty;
    
      if (userInfo) {
        _salesQuotationTable.WorkerSalesResponsible = hcmWorker.RecId;
      } 
      else
      {
        select firstonly RecId from logisticsElectronicAddress where logisticsElectronicAddress.Locator == _email 
      && logisticsElectronicAddress.Type == LogisticsElectronicAddressMethodType::Email join RecId from logisticslocation where logisticslocation.RecId == logisticsElectronicAddress.Location join RecId from dirPartyLocation where dirPartyLocation.Location == logisticslocation.RecId join RecId from dirPerson where dirPerson.RecId == dirPartyLocation.Party join RecId from hcmWorker where hcmworker.Person == dirPerson.RecId; if (hcmWorker) { _salesQuotationTable.WorkerSalesResponsible = hcmWorker.RecId; } } }
    I reformatted the code in order to read it better.
     
     

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

November Spotlight Star - Khushbu Rajvi

Congratulations to a top community star!

Forum Structure Changes Coming on 11/8!

In our never-ending quest to help the Dynamics 365 Community members get answers faster …

Dynamics 365 Community Platform update – Oct 28

Welcome to the next edition of the Community Platform Update. This is a status …

Leaderboard

#1
André Arnaud de Calavon Profile Picture

André Arnaud de Cal... 290,900 Super User 2024 Season 2

#2
Martin Dráb Profile Picture

Martin Dráb 229,275 Most Valuable Professional

#3
nmaenpaa Profile Picture

nmaenpaa 101,156

Leaderboard

Product updates

Dynamics 365 release plans